From 3ce00de710ed659277c25d337c9eac6aca024a76 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Wed, 5 Sep 2018 05:57:38 +0000 Subject: [PATCH] Move aports into own repository (pmaports) --- .gitignore | 5 + .gitlab-ci.yml | 46 - .gitlab/shared-runner_test-aports.sh | 37 - .gitlab/shared-runner_test-upstream-compat.sh | 37 - README.md | 2 + aports/cross/arch-bin-masquerade/APKBUILD | 43 - aports/cross/binutils-aarch64/APKBUILD | 65 - .../binutils-ld-fix-static-linking.patch | 46 - ...x-powerpc64-out-ot-line-save-restore.patch | 93 - aports/cross/binutils-armhf/gold-mips.patch | 39 - aports/cross/binutils-x86_64/APKBUILD | 65 - .../binutils-ld-fix-static-linking.patch | 46 - ...x-powerpc64-out-ot-line-save-restore.patch | 93 - aports/cross/binutils-x86_64/gold-mips.patch | 39 - aports/cross/busybox-static-aarch64/APKBUILD | 29 - aports/cross/busybox-static-armhf/APKBUILD | 29 - aports/cross/ccache-cross-symlinks/APKBUILD | 27 - ...truct-ix86_frame-to-machine_function.patch | 241 - ...ce-of-struct-ix86_frame-to-avoid-cop.patch | 69 - ...eference-of-struct-ix86_frame-to-avo.patch | 126 - .../0004-x86-Add-mindirect-branch.patch | 2149 ----- .../0005-x86-Add-mfunction-return.patch | 1565 --- ...06-x86-Add-mindirect-branch-register.patch | 941 -- ...-x86-Add-V-register-operand-modifier.patch | 134 - ...direct-branch-mfunction-return-with-.patch | 299 - ..._REGNUM-in-indirect-thunk-processing.patch | 121 - ...ID_REGNUM-as-invalid-register-number.patch | 41 - ...mfunction-return-for-return-with-pop.patch | 456 - ...-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch | 1003 -- ...rate-alias-for-function-return-thunk.patch | 225 - .../001_all_default-ssp-strong.patch | 215 - .../gcc-aarch64/002_all_default-relro.patch | 33 - .../003_all_default-fortify-source.patch | 40 - .../005_all_default-as-needed.patch | 241 - ...011_all_default-warn-format-security.patch | 43 - .../012_all_default-warn-trampolines.patch | 25 - .../020_all_msgfmt-libstdc++-link.patch | 39 - .../050_all_libiberty-asprintf.patch | 18 - .../gcc-aarch64/051_all_libiberty-pic.patch | 10 - .../053_all_libitm-no-fortify-source.patch | 27 - ...67_all_gcc-poison-system-directories.patch | 194 - .../090_all_pr55930-dependency-tracking.patch | 18 - aports/cross/gcc-aarch64/201-cilkrts.patch | 59 - aports/cross/gcc-aarch64/203-libgcc_s.patch | 56 - .../204-linux_libc_has_function.patch | 25 - aports/cross/gcc-aarch64/205-nopie.patch | 75 - aports/cross/gcc-aarch64/207-static-pie.patch | 40 - ...in-gcc-add-musl-s390x-dynamic-linker.patch | 32 - .../gcc-aarch64/310-build-gcj-s390x.patch | 28 - .../gcc-aarch64/320-libffi-gnulinux.patch | 13 - aports/cross/gcc-aarch64/APKBUILD | 717 -- .../gcc-aarch64/ada-aarch64-multiarch.patch | 16 - aports/cross/gcc-aarch64/ada-fixes.patch | 35 - aports/cross/gcc-aarch64/ada-mips64.patch | 224 - aports/cross/gcc-aarch64/ada-musl.patch | 137 - aports/cross/gcc-aarch64/ada-shared.patch | 30 - aports/cross/gcc-aarch64/boehm-gc-musl.patch | 62 - .../gcc-aarch64/fix-cxxflags-passing.patch | 10 - .../gcc-aarch64/fix-gcj-iconv-musl.patch | 120 - aports/cross/gcc-aarch64/fix-gcj-musl.patch | 49 - .../gcc-aarch64/fix-gcj-stdgnu14-link.patch | 35 - .../fix-linux-header-use-in-libgcc.patch | 44 - aports/cross/gcc-aarch64/fix-rs6000-pie.patch | 59 - .../gcc-aarch64/gcc-4.8-build-args.patch | 41 - .../gcc-aarch64/gcc-4.9-musl-fortify.patch | 11 - .../gcc-aarch64/gcc-6.1-musl-libssp.patch | 20 - .../cross/gcc-aarch64/gcc-pure64-mips.patch | 47 - aports/cross/gcc-aarch64/gcc-pure64.patch | 89 - .../libgcc-always-build-gcceh.a.patch | 39 - ...truct-ix86_frame-to-machine_function.patch | 241 - ...ce-of-struct-ix86_frame-to-avoid-cop.patch | 69 - ...eference-of-struct-ix86_frame-to-avo.patch | 126 - .../0004-x86-Add-mindirect-branch.patch | 2149 ----- .../0005-x86-Add-mfunction-return.patch | 1565 --- ...06-x86-Add-mindirect-branch-register.patch | 941 -- ...-x86-Add-V-register-operand-modifier.patch | 134 - ...direct-branch-mfunction-return-with-.patch | 299 - ..._REGNUM-in-indirect-thunk-processing.patch | 121 - ...ID_REGNUM-as-invalid-register-number.patch | 41 - ...mfunction-return-for-return-with-pop.patch | 456 - ...-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch | 1003 -- ...rate-alias-for-function-return-thunk.patch | 225 - .../001_all_default-ssp-strong.patch | 215 - .../gcc-armhf/002_all_default-relro.patch | 33 - .../003_all_default-fortify-source.patch | 40 - .../gcc-armhf/005_all_default-as-needed.patch | 241 - ...011_all_default-warn-format-security.patch | 43 - .../012_all_default-warn-trampolines.patch | 25 - .../020_all_msgfmt-libstdc++-link.patch | 39 - .../050_all_libiberty-asprintf.patch | 18 - .../gcc-armhf/051_all_libiberty-pic.patch | 10 - .../053_all_libitm-no-fortify-source.patch | 27 - ...67_all_gcc-poison-system-directories.patch | 194 - .../090_all_pr55930-dependency-tracking.patch | 18 - aports/cross/gcc-armhf/201-cilkrts.patch | 59 - aports/cross/gcc-armhf/203-libgcc_s.patch | 56 - .../204-linux_libc_has_function.patch | 25 - aports/cross/gcc-armhf/205-nopie.patch | 75 - aports/cross/gcc-armhf/207-static-pie.patch | 40 - ...in-gcc-add-musl-s390x-dynamic-linker.patch | 32 - .../cross/gcc-armhf/310-build-gcj-s390x.patch | 28 - .../cross/gcc-armhf/320-libffi-gnulinux.patch | 13 - .../gcc-armhf/ada-aarch64-multiarch.patch | 16 - aports/cross/gcc-armhf/ada-fixes.patch | 35 - aports/cross/gcc-armhf/ada-mips64.patch | 224 - aports/cross/gcc-armhf/ada-musl.patch | 137 - aports/cross/gcc-armhf/ada-shared.patch | 30 - aports/cross/gcc-armhf/boehm-gc-musl.patch | 62 - .../gcc-armhf/fix-cxxflags-passing.patch | 10 - .../cross/gcc-armhf/fix-gcj-iconv-musl.patch | 120 - aports/cross/gcc-armhf/fix-gcj-musl.patch | 49 - .../gcc-armhf/fix-gcj-stdgnu14-link.patch | 35 - .../fix-linux-header-use-in-libgcc.patch | 44 - aports/cross/gcc-armhf/fix-rs6000-pie.patch | 59 - .../cross/gcc-armhf/gcc-4.8-build-args.patch | 41 - .../gcc-armhf/gcc-4.9-musl-fortify.patch | 11 - .../cross/gcc-armhf/gcc-6.1-musl-libssp.patch | 20 - aports/cross/gcc-armhf/gcc-pure64-mips.patch | 47 - aports/cross/gcc-armhf/gcc-pure64.patch | 89 - .../libgcc-always-build-gcceh.a.patch | 39 - ...truct-ix86_frame-to-machine_function.patch | 241 - ...ce-of-struct-ix86_frame-to-avoid-cop.patch | 69 - ...eference-of-struct-ix86_frame-to-avo.patch | 126 - .../0004-x86-Add-mindirect-branch.patch | 2149 ----- .../0005-x86-Add-mfunction-return.patch | 1565 --- ...06-x86-Add-mindirect-branch-register.patch | 941 -- ...-x86-Add-V-register-operand-modifier.patch | 134 - ...direct-branch-mfunction-return-with-.patch | 299 - ..._REGNUM-in-indirect-thunk-processing.patch | 121 - ...ID_REGNUM-as-invalid-register-number.patch | 41 - ...mfunction-return-for-return-with-pop.patch | 456 - ...-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch | 1003 -- ...rate-alias-for-function-return-thunk.patch | 225 - .../001_all_default-ssp-strong.patch | 215 - .../gcc-x86_64/002_all_default-relro.patch | 33 - .../003_all_default-fortify-source.patch | 40 - .../005_all_default-as-needed.patch | 241 - ...011_all_default-warn-format-security.patch | 43 - .../012_all_default-warn-trampolines.patch | 25 - .../020_all_msgfmt-libstdc++-link.patch | 39 - .../050_all_libiberty-asprintf.patch | 18 - .../gcc-x86_64/051_all_libiberty-pic.patch | 10 - .../053_all_libitm-no-fortify-source.patch | 27 - ...67_all_gcc-poison-system-directories.patch | 194 - .../090_all_pr55930-dependency-tracking.patch | 18 - aports/cross/gcc-x86_64/201-cilkrts.patch | 59 - aports/cross/gcc-x86_64/203-libgcc_s.patch | 56 - .../204-linux_libc_has_function.patch | 25 - aports/cross/gcc-x86_64/205-nopie.patch | 75 - aports/cross/gcc-x86_64/207-static-pie.patch | 40 - ...in-gcc-add-musl-s390x-dynamic-linker.patch | 32 - .../gcc-x86_64/310-build-gcj-s390x.patch | 28 - .../gcc-x86_64/320-libffi-gnulinux.patch | 13 - aports/cross/gcc-x86_64/APKBUILD | 717 -- .../gcc-x86_64/ada-aarch64-multiarch.patch | 16 - aports/cross/gcc-x86_64/ada-fixes.patch | 35 - aports/cross/gcc-x86_64/ada-mips64.patch | 224 - aports/cross/gcc-x86_64/ada-musl.patch | 137 - aports/cross/gcc-x86_64/ada-shared.patch | 30 - aports/cross/gcc-x86_64/boehm-gc-musl.patch | 62 - .../gcc-x86_64/fix-cxxflags-passing.patch | 10 - .../cross/gcc-x86_64/fix-gcj-iconv-musl.patch | 120 - aports/cross/gcc-x86_64/fix-gcj-musl.patch | 49 - .../gcc-x86_64/fix-gcj-stdgnu14-link.patch | 35 - .../fix-linux-header-use-in-libgcc.patch | 44 - aports/cross/gcc-x86_64/fix-rs6000-pie.patch | 59 - .../cross/gcc-x86_64/gcc-4.8-build-args.patch | 41 - .../gcc-x86_64/gcc-4.9-musl-fortify.patch | 11 - .../gcc-x86_64/gcc-6.1-musl-libssp.patch | 20 - aports/cross/gcc-x86_64/gcc-pure64-mips.patch | 47 - aports/cross/gcc-x86_64/gcc-pure64.patch | 89 - .../libgcc-always-build-gcceh.a.patch | 39 - aports/cross/musl-aarch64/APKBUILD | 50 - aports/cross/musl-armhf/APKBUILD | 50 - aports/cross/musl-x86_64/APKBUILD | 50 - .../50-bluetooth-hci-auto-poweron.rules | 2 - aports/device/bluetooth-raspberry-pi/APKBUILD | 22 - .../bluetooth-raspberry-pi.post-install | 4 - .../pi-bluetooth.openrc | 12 - aports/device/device-amazon-thor/APKBUILD | 27 - aports/device/device-amazon-thor/deviceinfo | 35 - aports/device/device-amazon-thor/fb.modes | 7 - aports/device/device-asus-duma/APKBUILD | 29 - aports/device/device-asus-duma/deviceinfo | 34 - .../90-android-touch-dev.rules | 14 - aports/device/device-asus-flo/APKBUILD | 43 - aports/device/device-asus-flo/deviceinfo | 31 - aports/device/device-asus-flo/pointercal | 1 - aports/device/device-asus-flo/weston.ini | 5 - .../device-asus-flo/wpa_supplicant.conf | 8 - .../90-android-touch-dev.rules | 3 - aports/device/device-asus-grouper/APKBUILD | 28 - aports/device/device-asus-grouper/deviceinfo | 29 - aports/device/device-asus-grouper/pointercal | 1 - aports/device/device-asus-t00f/APKBUILD | 38 - aports/device/device-asus-t00f/deviceinfo | 31 - aports/device/device-asus-t00f/xorg.conf | 4 - aports/device/device-asus-tf101/APKBUILD | 22 - aports/device/device-asus-tf101/deviceinfo | 33 - .../device-asus-z00t/90-touchscreen.rules | 2 - aports/device/device-asus-z00t/APKBUILD | 34 - aports/device/device-asus-z00t/deviceinfo | 32 - aports/device/device-bq-chaozu/APKBUILD | 22 - aports/device/device-bq-chaozu/deviceinfo | 32 - aports/device/device-fairphone-fp2/APKBUILD | 29 - aports/device/device-fairphone-fp2/deviceinfo | 35 - aports/device/device-google-glass/APKBUILD | 17 - aports/device/device-google-glass/deviceinfo | 31 - aports/device/device-gp-peak/APKBUILD | 31 - .../device-gp-peak/device-gp-peak.start | 6 - aports/device/device-gp-peak/deviceinfo | 34 - aports/device/device-gp-peak/fb.modes | 6 - aports/device/device-htc-a5ul/APKBUILD | 25 - aports/device/device-htc-a5ul/deviceinfo | 31 - aports/device/device-htc-a5ul/initfs-hook.sh | 4 - .../device-htc-ace/90-android-touch-dev.rules | 6 - aports/device/device-htc-ace/APKBUILD | 36 - aports/device/device-htc-ace/deviceinfo | 30 - aports/device/device-htc-ace/initfs-hook.sh | 8 - .../90-android-touch-dev.rules | 3 - aports/device/device-htc-bravo/APKBUILD | 34 - aports/device/device-htc-bravo/deviceinfo | 30 - aports/device/device-htc-bravo/initfs-hook.sh | 8 - aports/device/device-htc-bravo/pointercal | 1 - aports/device/device-htc-flounder/APKBUILD | 27 - aports/device/device-htc-flounder/deviceinfo | 32 - .../device-htc-m8/90-android-touch-dev.rules | 3 - aports/device/device-htc-m8/APKBUILD | 31 - aports/device/device-htc-m8/deviceinfo | 36 - aports/device/device-htc-m8/initfs-hook.sh | 4 - aports/device/device-htc-vivo/APKBUILD | 25 - aports/device/device-htc-vivo/deviceinfo | 31 - aports/device/device-htc-vivo/initfs-hook.sh | 4 - .../90-android-touch-dev.rules | 7 - aports/device/device-huawei-angler/APKBUILD | 40 - aports/device/device-huawei-angler/bcmdhd.cal | 227 - aports/device/device-huawei-angler/deviceinfo | 29 - aports/device/device-huawei-y530/APKBUILD | 29 - aports/device/device-huawei-y530/deviceinfo | 32 - .../device/device-infocus-flatfish/APKBUILD | 28 - .../device/device-infocus-flatfish/deviceinfo | 31 - .../device/device-infocus-flatfish/fb.modes | 6 - aports/device/device-jolla-sbj/APKBUILD | 22 - aports/device/device-jolla-sbj/deviceinfo | 32 - aports/device/device-leeco-s2/APKBUILD | 22 - aports/device/device-leeco-s2/deviceinfo | 32 - .../90-android-touch-dev.rules | 4 - aports/device/device-lenovo-karate/APKBUILD | 27 - aports/device/device-lenovo-karate/deviceinfo | 31 - aports/device/device-lg-bullhead/APKBUILD | 22 - aports/device/device-lg-bullhead/deviceinfo | 32 - .../device-lg-d285/90-android-touch-dev.rules | 5 - aports/device/device-lg-d285/APKBUILD | 30 - aports/device/device-lg-d285/deviceinfo | 29 - aports/device/device-lg-d285/initfs-hook.sh | 4 - .../device-lg-d855/90-android-touch-dev.rules | 5 - aports/device/device-lg-d855/APKBUILD | 23 - aports/device/device-lg-d855/deviceinfo | 29 - .../device-lg-dory/90-touchscreen-dev.rules | 7 - aports/device/device-lg-dory/APKBUILD | 23 - aports/device/device-lg-dory/deviceinfo | 27 - aports/device/device-lg-h815/APKBUILD | 22 - aports/device/device-lg-h815/deviceinfo | 32 - aports/device/device-lg-hammerhead/APKBUILD | 56 - .../brcmfmac4339-sdio.txt | 129 - .../device-lg-hammerhead.post-install | 4 - aports/device/device-lg-hammerhead/deviceinfo | 29 - .../device-lg-hammerhead/modules-load.conf | 5 - aports/device/device-lg-hammerhead/weston.ini | 11 - aports/device/device-lg-hammerhead/xorg.conf | 24 - .../90-android-touch-dev.rules | 4 - aports/device/device-lg-lenok/APKBUILD | 29 - aports/device/device-lg-lenok/deviceinfo | 26 - aports/device/device-lg-lenok/fb_fix.sh | 15 - aports/device/device-lg-lenok/initfs-hook.sh | 4 - .../device-lg-mako/90-android-touch-dev.rules | 5 - aports/device/device-lg-mako/APKBUILD | 43 - aports/device/device-lg-mako/deviceinfo | 30 - aports/device/device-lg-mako/fb.modes | 7 - aports/device/device-lg-mako/pointercal | 1 - aports/device/device-lg-mako/profile.sh | 16 - aports/device/device-lg-mako/weston.ini | 11 - aports/device/device-motorola-athene/APKBUILD | 22 - .../device/device-motorola-athene/deviceinfo | 32 - aports/device/device-motorola-falcon/APKBUILD | 22 - .../device/device-motorola-falcon/deviceinfo | 36 - aports/device/device-motorola-ghost/APKBUILD | 21 - .../device/device-motorola-ghost/deviceinfo | 32 - aports/device/device-motorola-harpia/APKBUILD | 29 - .../device/device-motorola-harpia/deviceinfo | 32 - .../device-motorola-harpia/initfs-hook.sh | 5 - .../10-safestrap-maserati.sh | 30 - .../device/device-motorola-maserati/APKBUILD | 21 - .../device-motorola-maserati/deviceinfo | 24 - .../90-android-touch-dev.rules | 6 - aports/device/device-motorola-osprey/APKBUILD | 29 - .../device/device-motorola-osprey/deviceinfo | 27 - .../device-motorola-osprey/fb-workaround.sh | 12 - .../device-motorola-osprey/initfs-hook.sh | 4 - .../device/device-motorola-peregrine/APKBUILD | 40 - .../device-motorola-peregrine/deviceinfo | 34 - .../device-motorola-peregrine/xorg.conf | 24 - aports/device/device-motorola-potter/APKBUILD | 22 - .../device/device-motorola-potter/deviceinfo | 32 - aports/device/device-motorola-shamu/APKBUILD | 25 - .../device/device-motorola-shamu/deviceinfo | 32 - .../device-motorola-shamu/initfs-hook.sh | 9 - .../90-android-touch-dev.rules | 8 - aports/device/device-motorola-titan/APKBUILD | 43 - .../device-motorola-titan.post-install | 16 - .../device/device-motorola-titan/deviceinfo | 31 - .../device/device-motorola-titan/profile.sh | 16 - .../device/device-motorola-titan/weston.ini | 11 - aports/device/device-nextbit-robin/APKBUILD | 22 - aports/device/device-nextbit-robin/deviceinfo | 34 - aports/device/device-nokia-n9/APKBUILD | 41 - aports/device/device-nokia-n9/deviceinfo | 17 - aports/device/device-nokia-n9/initfs-hook.sh | 18 - aports/device/device-nokia-n9/weston.ini | 5 - aports/device/device-nokia-n900/APKBUILD | 126 - aports/device/device-nokia-n900/acpi.map | 30 - .../device/device-nokia-n900/acpi_handler.sh | 84 - aports/device/device-nokia-n900/asound.state | 2788 ------ .../device-nokia-n900/backlight-enable.sh | 4 - .../device-nokia-n900.post-install | 26 - aports/device/device-nokia-n900/deviceinfo | 23 - .../device-nokia-n900/i3wm/bq27200_status.sh | 39 - .../device-nokia-n900/i3wm/i3status.conf | 38 - .../device/device-nokia-n900/i3wm/i3wm.conf | 63 - .../device-nokia-n900/keymaps/40-xkb.conf | 8 - .../device-nokia-n900/keymaps/rx51_ch-de.map | 116 - .../device-nokia-n900/keymaps/rx51_us.map | 110 - aports/device/device-nokia-n900/pointercal | 1 - .../device/device-nokia-n900/uboot-script.cmd | 14 - .../udev/10-nokia-modem.rules | 6 - .../udev/90-touchscreen-dev.rules | 2 - aports/device/device-nokia-n900/weston.ini | 8 - aports/device/device-nokia-n900/xorg.conf | 6 - aports/device/device-nokia-rm885/APKBUILD | 22 - aports/device/device-nokia-rm885/deviceinfo | 34 - .../90-android-touch-dev.rules | 4 - aports/device/device-oneplus-bacon/APKBUILD | 30 - aports/device/device-oneplus-bacon/deviceinfo | 32 - aports/device/device-oneplus-bacon/weston.ini | 11 - .../device/device-oneplus-oneplus2/APKBUILD | 28 - .../device/device-oneplus-oneplus2/deviceinfo | 30 - .../device-oneplus-oneplus2/initfs-hook.sh | 6 - .../90-android-touch-dev.rules | 3 - aports/device/device-oneplus-onyx/APKBUILD | 26 - aports/device/device-oneplus-onyx/deviceinfo | 35 - aports/device/device-oneplus-onyx/fb.modes | 7 - aports/device/device-qemu-aarch64/APKBUILD | 28 - aports/device/device-qemu-aarch64/deviceinfo | 20 - aports/device/device-qemu-aarch64/weston.ini | 5 - aports/device/device-qemu-amd64/APKBUILD | 51 - aports/device/device-qemu-amd64/deviceinfo | 20 - aports/device/device-qemu-amd64/weston.ini | 5 - aports/device/device-qemu-vexpress/APKBUILD | 20 - aports/device/device-qemu-vexpress/deviceinfo | 20 - .../95-vchiq-permissions.rules | 1 - aports/device/device-raspberry-pi/APKBUILD | 49 - aports/device/device-raspberry-pi/cmdline.txt | 1 - aports/device/device-raspberry-pi/config.txt | 18 - ...evice-raspberry-pi-kernel-rpi.post-install | 5 - ...vice-raspberry-pi-kernel-rpi2.post-install | 5 - aports/device/device-raspberry-pi/deviceinfo | 24 - aports/device/device-raspberry-pi/usercfg.txt | 1 - .../95-vchiq-permissions.rules | 1 - aports/device/device-raspberry-pi3/APKBUILD | 50 - .../device/device-raspberry-pi3/cmdline.txt | 1 - aports/device/device-raspberry-pi3/config.txt | 8 - ...vice-raspberry-pi3-kernel-rpi.post-install | 6 - aports/device/device-raspberry-pi3/deviceinfo | 24 - .../device/device-raspberry-pi3/usercfg.txt | 21 - aports/device/device-raspberry-pi3/weston.ini | 6 - .../device/device-samsung-espresso10/APKBUILD | 29 - .../device-samsung-espresso10/deviceinfo | 32 - .../90-sec_touchscreen.rules | 18 - .../device-samsung-gts210vewifi/APKBUILD | 26 - .../device-samsung-gts210vewifi/deviceinfo | 34 - .../90-android-touch-dev.rules | 3 - aports/device/device-samsung-i747m/APKBUILD | 30 - aports/device/device-samsung-i747m/deviceinfo | 33 - aports/device/device-samsung-i747m/fb.modes | 8 - aports/device/device-samsung-i8190/APKBUILD | 45 - aports/device/device-samsung-i8190/deviceinfo | 34 - .../device-samsung-i8190/init-usb-hook.sh | 7 - .../device-samsung-i8190/module-config.conf | 3 - .../device-samsung-i8190/modules-load.conf | 6 - aports/device/device-samsung-i8200/APKBUILD | 29 - aports/device/device-samsung-i8200/deviceinfo | 34 - .../90-android-touch-dev.rules | 8 - aports/device/device-samsung-i9003/APKBUILD | 27 - aports/device/device-samsung-i9003/deviceinfo | 33 - aports/device/device-samsung-i9070/APKBUILD | 41 - aports/device/device-samsung-i9070/deviceinfo | 23 - .../device-samsung-i9070/initfs-hook.sh | 11 - .../device-samsung-i9070/modules-load.conf | 6 - .../90-android-touch-dev.rules | 8 - aports/device/device-samsung-i9100/APKBUILD | 34 - .../device-samsung-i9100.post-install | 7 - aports/device/device-samsung-i9100/deviceinfo | 24 - aports/device/device-samsung-i9195/APKBUILD | 30 - aports/device/device-samsung-i9195/deviceinfo | 36 - .../90-android-touch-dev.rules | 6 - aports/device/device-samsung-i9305/APKBUILD | 34 - .../device-samsung-i9305.post-install | 7 - aports/device/device-samsung-i9305/deviceinfo | 31 - .../90-android-sec_touchscreen.rules | 3 - aports/device/device-samsung-jflte/APKBUILD | 27 - aports/device/device-samsung-jflte/deviceinfo | 35 - aports/device/device-samsung-klte/APKBUILD | 38 - aports/device/device-samsung-klte/deviceinfo | 34 - .../device/device-samsung-kminilte/APKBUILD | 28 - .../device/device-samsung-kminilte/deviceinfo | 34 - .../device/device-samsung-kminilte/fb.modes | 7 - aports/device/device-samsung-kylepro/APKBUILD | 29 - .../device/device-samsung-kylepro/deviceinfo | 34 - .../device/device-samsung-kylessopen/APKBUILD | 22 - .../device-samsung-kylessopen/deviceinfo | 36 - .../device/device-samsung-kylevess/APKBUILD | 22 - .../device/device-samsung-kylevess/deviceinfo | 33 - aports/device/device-samsung-lt023g/APKBUILD | 22 - .../device/device-samsung-lt023g/deviceinfo | 34 - aports/device/device-samsung-maguro/APKBUILD | 30 - .../device/device-samsung-maguro/deviceinfo | 28 - aports/device/device-samsung-manta/APKBUILD | 22 - aports/device/device-samsung-manta/deviceinfo | 34 - .../90-device-samsung-n5110.rules | 21 - aports/device/device-samsung-n5110/APKBUILD | 39 - .../Kona_WM1811/Kona_WM1811.conf | 17 - .../Kona_WM1811/hifi.conf | 172 - .../device-samsung-n5110/Kona_WM1811/lp.conf | 164 - .../device/device-samsung-n5110/asound.state | 3067 ------ aports/device/device-samsung-n5110/deviceinfo | 34 - aports/device/device-samsung-n5110/pointercal | 1 - .../90-android-touch-dev.rules | 8 - aports/device/device-samsung-n7100/APKBUILD | 23 - aports/device/device-samsung-n7100/deviceinfo | 25 - .../90-device-samsung-p4wifi-audio.rules | 1 - .../90-device-samsung-p4wifi-jack.rules | 2 - aports/device/device-samsung-p4wifi/APKBUILD | 55 - aports/device/device-samsung-p4wifi/HiFi | 98 - .../device/device-samsung-p4wifi/deviceinfo | 34 - .../device-samsung-p4wifi/modprobe.conf | 1 - .../device-samsung-p4wifi/modules-load.conf | 5 - .../device-samsung-p4wifi/wm8994aif1.conf | 37 - aports/device/device-samsung-s6500d/APKBUILD | 22 - .../device/device-samsung-s6500d/deviceinfo | 35 - aports/device/device-semc-anzu/APKBUILD | 35 - aports/device/device-semc-anzu/deviceinfo | 33 - .../device/device-semc-anzu/modules-load.conf | 5 - aports/device/device-semc-smultron/APKBUILD | 28 - aports/device/device-semc-smultron/deviceinfo | 33 - aports/device/device-semc-smultron/directfbrc | 1 - aports/device/device-semc-smultron/fb.modes | 7 - .../90-android-touch-dev.rules | 8 - aports/device/device-sony-amami/APKBUILD | 45 - aports/device/device-sony-amami/deviceinfo | 26 - .../90-android-touch-dev.rules | 8 - aports/device/device-sony-aries/APKBUILD | 26 - aports/device/device-sony-aries/deviceinfo | 26 - .../device/device-sony-aries/fb-workaround.sh | 15 - .../90-android-touch-dev.rules | 8 - .../device/device-sony-castor-windy/APKBUILD | 35 - .../brcmfmac4335-sdio.txt | 119 - .../device-sony-castor-windy/deviceinfo | 24 - .../modules-load.conf | 5 - aports/device/device-sony-coconut/APKBUILD | 22 - aports/device/device-sony-coconut/deviceinfo | 35 - .../90-android-touch-dev.rules | 6 - aports/device/device-sony-honami/APKBUILD | 27 - aports/device/device-sony-honami/deviceinfo | 26 - .../90-android-touch-dev.rules | 8 - aports/device/device-sony-nicki/APKBUILD | 38 - aports/device/device-sony-nicki/deviceinfo | 34 - aports/device/device-sony-nicki/fb.modes | 7 - aports/device/device-sony-nicki/pointercal | 1 - .../device-sony-nicki/screen-workaround.sh | 10 - aports/device/device-sony-scorpion/APKBUILD | 22 - aports/device/device-sony-scorpion/deviceinfo | 33 - aports/device/device-sony-seagull/APKBUILD | 22 - aports/device/device-sony-seagull/deviceinfo | 34 - .../device/device-sony-sirius/99-touch.rules | 1 - aports/device/device-sony-sirius/APKBUILD | 58 - .../device-sony-sirius/brcmfmac4339-sdio.txt | 119 - aports/device/device-sony-sirius/deviceinfo | 29 - .../device-sony-sirius/modules-load.conf | 4 - aports/device/device-sony-sirius/weston.ini | 5 - .../90-android-touch-dev.rules | 8 - aports/device/device-sony-yuga/APKBUILD | 27 - aports/device/device-sony-yuga/deviceinfo | 31 - .../90-android-touch-dev.rules | 3 - aports/device/device-t2m-flame/APKBUILD | 30 - .../device-t2m-flame.post-install | 21 - aports/device/device-t2m-flame/deviceinfo | 29 - aports/device/device-teclast-x80pro/APKBUILD | 31 - .../device/device-teclast-x80pro/deviceinfo | 23 - aports/device/device-wiko-lenny3/APKBUILD | 17 - aports/device/device-wiko-lenny3/deviceinfo | 30 - .../device-xiaomi-armani/100-charging.rules | 5 - .../device-xiaomi-armani/90-touchscreen.rules | 3 - aports/device/device-xiaomi-armani/APKBUILD | 54 - .../armani_battery_charging.sh | 4 - .../armani_battery_discharging.sh | 4 - .../device-xiaomi-armani.post-install | 3 - .../device-xiaomi-armani.post-upgrade | 5 - .../device-xiaomi-armani.pre-deinstall | 3 - aports/device/device-xiaomi-armani/deviceinfo | 34 - aports/device/device-xiaomi-armani/fb.modes | 7 - aports/device/device-xiaomi-armani/wlanarmani | 22 - aports/device/device-xiaomi-cancro/APKBUILD | 22 - aports/device/device-xiaomi-cancro/deviceinfo | 33 - aports/device/device-xiaomi-ido/APKBUILD | 29 - aports/device/device-xiaomi-ido/deviceinfo | 32 - aports/device/device-xiaomi-ido/fb.modes | 9 - .../device/device-xiaomi-ido/initfs-hook.sh | 20 - aports/device/device-xiaomi-mido/APKBUILD | 29 - aports/device/device-xiaomi-mido/deviceinfo | 32 - aports/device/device-xiaomi-santoni/APKBUILD | 22 - .../device/device-xiaomi-santoni/deviceinfo | 33 - aports/device/device-zte-kis3/APKBUILD | 22 - aports/device/device-zte-kis3/deviceinfo | 32 - aports/device/gps-nokia-n900/APKBUILD | 26 - ...se-static-inline-instead-of-inline-i.patch | 46 - ...-use-static-inline-instead-of-inline.patch | 36 - .../linux-amazon-thor/00_fix_qaudio.patch | 13 - .../00_fix_return_address.patch | 49 - .../00_fix_smd_private.patch | 13 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../linux-amazon-thor/03_msm_fix_trace.patch | 13 - .../06_fix_mdss_fb_rgb_mode.patch | 13 - aports/device/linux-amazon-thor/APKBUILD | 97 - .../device/linux-amazon-thor/compiler-gcc6.h | 69 - .../config-amazon-thor.armhf | 3786 -------- .../00_fix_return_address.patch | 49 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-asus-duma/APKBUILD | 80 - aports/device/linux-asus-duma/compiler-gcc6.h | 69 - .../linux-asus-duma/config-asus-duma.armhf | 4064 -------- ...0_Collapse_usb_support_into_one_node.patch | 491 - ...eaks_and_wcnss_entry_to_support_wifi.patch | 136 - ...to_downstream_clocks_during_set_rate.patch | 109 - .../03_Support_devicetree_binding.patch | 311 - .../04_Summit_SMB345_charger_IC.patch | 291 - .../05_Add_smb345_charger_node.patch | 43 - ...er_to_not_immediately_fail_on_Nexus7.patch | 41 - .../07_Get_touchpanel_working_on_flo.patch | 60 - .../linux-asus-flo/08_Add_mac_address.patch | 26 - .../09_Make_of_dma_deconfigure()_public.patch | 81 - ...ma()_into_mask_and_ops_configuration.patch | 183 - ...nfigure_dma_operations_at_probe_time.patch | 82 - ...ilure_with_deferred_probing_or_error.patch | 93 - aports/device/linux-asus-flo/APKBUILD | 108 - .../linux-asus-flo/config-asus-flo.armhf | 4233 --------- aports/device/linux-asus-grouper/APKBUILD | 99 - .../device/linux-asus-grouper/compiler-gcc6.h | 69 - .../config-asus-grouper.armhf | 3369 ------- .../duplicate-return-address-definition.patch | 50 - ...shm-fix-redefinition-of-shm_rcu_free.patch | 32 - ...rnal_drivers-remove-unused-constants.patch | 111 - .../03_ipc-fix-undefined-references.patch | 96 - aports/device/linux-asus-t00f/APKBUILD | 79 - aports/device/linux-asus-t00f/compiler-gcc6.h | 69 - .../linux-asus-t00f/config-asus-t00f.x86 | 4197 -------- .../00_fix_return_address.patch | 49 - .../linux-asus-tf101/01-fix-alignment.patch | 21 - .../02_fix_static_vma_address.patch | 13 - .../03_remove_deprecated_perl.patch | 13 - aports/device/linux-asus-tf101/APKBUILD | 92 - .../device/linux-asus-tf101/compiler-gcc6.h | 69 - .../linux-asus-tf101/config-asus-tf101.armhf | 3038 ------ .../linux-asus-z00t/01_fix_gcc6_errors.patch | 68 - .../02_mdss_fb_refresh_rate.patch | 13 - .../device/linux-asus-z00t/05_dtb-fix.patch | 52 - aports/device/linux-asus-z00t/APKBUILD | 95 - aports/device/linux-asus-z00t/compiler-gcc6.h | 69 - .../linux-asus-z00t/config-asus-z00t.aarch64 | 4223 --------- ...fix_rndis_ipa_trace_header_not_found.patch | 22 - .../linux-bq-chaozu/01_prima_gcc6.patch | 16 - .../02_prima_misleading_indentation.patch | 11 - .../linux-bq-chaozu/03_fix_u_f_header.patch | 58 - .../04_fix_usb_gadget_function.patch | 590 -- aports/device/linux-bq-chaozu/APKBUILD | 86 - .../linux-bq-chaozu/config-bq-chaozu.armhf | 4183 -------- ...inux-use-static-inline-in-ARM-ftrace.patch | 52 - .../0002-gpu-msm-Fix-compilation.patch | 43 - .../0003-Fix-includes.patch | 39 - .../0004-msm-fix-trace.patch | 25 - ...se-static-inline-instead-of-inline-i.patch | 46 - ...-use-static-inline-instead-of-inline.patch | 36 - aports/device/linux-fairphone-fp2/APKBUILD | 80 - .../linux-fairphone-fp2/compiler-gcc6.h | 69 - .../config-fairphone-fp2.armhf | 3893 -------- aports/device/linux-google-glass/APKBUILD | 73 - .../device/linux-google-glass/compiler-gcc6.h | 69 - .../config-google-glass.armhf | 3398 ------- .../linux-gp-peak/00_fix_return_address.patch | 49 - .../linux-gp-peak/01_timeconst_fix.patch | 45 - aports/device/linux-gp-peak/APKBUILD | 87 - aports/device/linux-gp-peak/compiler-gcc6.h | 69 - .../device/linux-gp-peak/config-gp-peak.armhf | 2808 ------ .../linux-htc-a5ul/0003-Fix-CC-error.patch | 25 - aports/device/linux-htc-a5ul/APKBUILD | 85 - aports/device/linux-htc-a5ul/compiler-gcc6.h | 69 - .../linux-htc-a5ul/config-htc-a5ul.armhf | 3700 -------- .../02_gpu-msm-fix-gcc5-compile.patch | 34 - aports/device/linux-htc-ace/APKBUILD | 100 - aports/device/linux-htc-ace/compiler-gcc6.h | 69 - .../device/linux-htc-ace/config-htc-ace.armhf | 3160 ------ aports/device/linux-htc-bravo/APKBUILD | 54 - aports/device/linux-htc-bravo/compiler-gcc6.h | 69 - .../linux-htc-bravo/config-htc-bravo.armhf | 2436 ----- aports/device/linux-htc-flounder/APKBUILD | 76 - .../device/linux-htc-flounder/compiler-gcc6.h | 69 - .../config-htc-flounder.aarch64 | 4364 --------- .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-htc-m8/APKBUILD | 87 - aports/device/linux-htc-m8/compiler-gcc6.h | 69 - .../device/linux-htc-m8/config-htc-m8.armhf | 3746 -------- aports/device/linux-htc-m8/psmouse_base.patch | 106 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../03_use-static-inline-in-ftrace.h.patch | 49 - ...edefinition-of-unregister_con_driver.patch | 76 - aports/device/linux-htc-vivo/APKBUILD | 82 - aports/device/linux-htc-vivo/compiler-gcc6.h | 69 - .../linux-htc-vivo/config-htc-vivo.armhf | 2903 ------ aports/device/linux-huawei-angler/APKBUILD | 99 - .../linux-huawei-angler/compiler-gcc6.h | 69 - .../config-huawei-angler.aarch64 | 4001 -------- ...el-use-the-gnu89-standard-explicitly.patch | 67 - .../00_fix_return_address.patch | 49 - .../linux-huawei-y530/01_timeconst_fix.patch | 45 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../03_avoid_rpmb_read_during_boot.patch | 47 - .../04_add_missing_dtb.patch | 38 - .../05_fix_mdp3_ctrl_off.patch | 13 - .../06_fix_mdss_fb_rgb_mode.patch | 13 - .../07_fix_mdss_fb_refresh_rate.patch | 13 - .../08_fix_touchscreen.patch | 74 - .../09_fix_various_include_directives.patch | 126 - aports/device/linux-huawei-y530/APKBUILD | 117 - .../device/linux-huawei-y530/compiler-gcc6.h | 69 - .../config-huawei-y530.armhf | 3674 ------- .../01_timeconst_fix.patch | 45 - .../02_fix_paranoid_network_disabled.patch | 51 - .../03_fix_pm_build.patch | 21 - aports/device/linux-infocus-flatfish/APKBUILD | 96 - .../linux-infocus-flatfish/compiler-gcc6.h | 69 - .../config-infocus-flatfish.armhf | 2757 ------ .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-jolla-sbj/APKBUILD | 85 - aports/device/linux-jolla-sbj/compiler-gcc6.h | 69 - .../linux-jolla-sbj/config-jolla-sbj.armhf | 3844 -------- .../duplicate-return-address-definition.patch | 50 - .../linux-leeco-s2/01_fix_gcc6_errors.patch | 68 - aports/device/linux-leeco-s2/03_psci.patch | 40 - aports/device/linux-leeco-s2/05_dtb-fix.patch | 52 - aports/device/linux-leeco-s2/APKBUILD | 78 - aports/device/linux-leeco-s2/compiler-gcc6.h | 69 - .../linux-leeco-s2/config-leeco-s2.aarch64 | 4102 -------- .../linux-lenovo-karate/01_prima_gcc6.patch | 68 - aports/device/linux-lenovo-karate/APKBUILD | 75 - .../linux-lenovo-karate/compiler-gcc6.h | 69 - .../config-lenovo-karate.aarch64 | 4560 --------- aports/device/linux-lg-bullhead/APKBUILD | 82 - .../device/linux-lg-bullhead/compiler-gcc6.h | 69 - .../config-lg-bullhead.aarch64 | 4177 -------- .../device/linux-lg-bullhead/driver-fix.patch | 13 - .../linux-lg-bullhead/static-inline.patch | 46 - .../undefined-screen_info.patch | 27 - .../linux-lg-d285/00_fix_return_address.patch | 49 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../03_mdss_fb_refresh_rate.patch | 13 - aports/device/linux-lg-d285/APKBUILD | 110 - aports/device/linux-lg-d285/compiler-gcc6.h | 69 - .../device/linux-lg-d285/config-lg-d285.armhf | 3819 -------- .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-lg-d855/APKBUILD | 98 - aports/device/linux-lg-d855/compiler-gcc6.h | 69 - .../device/linux-lg-d855/config-lg-d855.armhf | 3750 -------- .../linux-lg-dory/00_fix_return_address.patch | 49 - .../01_avoid_rpmb_read_during_boot.patch | 47 - .../02_fix_mdss_fb_refresh_rate.patch | 13 - .../03_fix_mdss_fb_memory_allocation.patch | 28 - aports/device/linux-lg-dory/APKBUILD | 81 - aports/device/linux-lg-dory/compiler-gcc6.h | 69 - .../device/linux-lg-dory/config-lg-dory.armhf | 3509 ------- aports/device/linux-lg-h815/APKBUILD | 75 - aports/device/linux-lg-h815/compiler-gcc6.h | 69 - .../linux-lg-h815/config-lg-h815.aarch64 | 4413 --------- .../device/linux-lg-h815/fix-powerlevel.patch | 16 - .../02_mdss_fb_refresh_rate.patch | 13 - aports/device/linux-lg-lenok/APKBUILD | 100 - aports/device/linux-lg-lenok/compiler-gcc6.h | 69 - .../linux-lg-lenok/config-lg-lenok.armhf | 3355 ------- .../01_msm-fix-perf_trace_counters.patch | 34 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-lg-mako/APKBUILD | 58 - aports/device/linux-lg-mako/compiler-gcc6.h | 69 - .../device/linux-lg-mako/config-lg-mako.armhf | 3442 ------- .../01_fix_gcc6_errors.patch | 68 - aports/device/linux-motorola-athene/APKBUILD | 85 - .../linux-motorola-athene/compiler-gcc6.h | 69 - .../config-motorola-athene.aarch64 | 4182 -------- .../00_fix_return_address.patch | 49 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../03_mdss_fb_refresh_rate.patch | 13 - aports/device/linux-motorola-falcon/APKBUILD | 87 - .../linux-motorola-falcon/compiler-gcc6.h | 69 - .../config-motorola-falcon.armhf | 3716 -------- .../00_fix_return_address.patch | 49 - .../01_gpu-msm-fix-gcc5-compile.patch | 33 - ...se-static-inline-instead-of-inline-i.patch | 46 - ...-use-static-inline-instead-of-inline.patch | 36 - .../04_fix-video-argb-setting.patch | 91 - aports/device/linux-motorola-ghost/APKBUILD | 71 - .../linux-motorola-ghost/compiler-gcc6.h | 69 - .../config-motorola-ghost.armhf | 3698 -------- aports/device/linux-motorola-harpia/APKBUILD | 83 - .../linux-motorola-harpia/compiler-gcc6.h | 69 - .../config-motorola-harpia.armhf | 3887 -------- .../01_maserati-fix-gcc6-compile.patch | 93 - .../device/linux-motorola-maserati/APKBUILD | 132 - .../linux-motorola-maserati/compiler-gcc6.h | 69 - .../config-motorola-maserati.armhf | 3247 ------- .../02_mdss_fb_refresh_rate.patch | 13 - aports/device/linux-motorola-osprey/APKBUILD | 100 - .../linux-motorola-osprey/Wno-error.patch | 12 - .../linux-motorola-osprey/compiler-gcc6.h | 69 - .../config-motorola-osprey.armhf | 3876 -------- .../00_fix_return_address.patch | 49 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../03_mdss_fb_refresh_rate.patch | 13 - .../06_fix_mdss_fb_rgb_mode.patch | 13 - .../device/linux-motorola-peregrine/APKBUILD | 89 - .../linux-motorola-peregrine/compiler-gcc6.h | 69 - .../config-motorola-peregrine.armhf | 3716 -------- .../linux-motorola-potter/01_prima_gcc6.patch | 16 - .../02_fix_msm_dba.patch | 13 - ...fix_rndis_ipa_trace_header_not_found.patch | 22 - .../04_fix_stmvl53l0_headers.patch | 331 - .../05_fix_u_f_header.patch | 58 - .../06_fix_usb_gadget_function.patch | 590 -- aports/device/linux-motorola-potter/APKBUILD | 91 - .../linux-motorola-potter/compiler-gcc6.h | 69 - .../config-motorola-potter.aarch64 | 5060 ---------- .../00_fix_return_address.patch | 49 - aports/device/linux-motorola-shamu/APKBUILD | 75 - .../linux-motorola-shamu/compiler-gcc6.h | 69 - .../config-motorola-shamu.armhf | 3829 -------- .../00_fix_return_address.patch | 49 - .../02_mdss_fb_refresh_rate.patch | 13 - aports/device/linux-motorola-titan/APKBUILD | 109 - .../linux-motorola-titan/Wno-error.patch | 13 - .../linux-motorola-titan/compiler-gcc6.h | 69 - .../config-motorola-titan.armhf | 3713 -------- .../multiple-fixes-gcc-5.patch | 217 - .../linux-nextbit-robin/01_psci_err.patch | 38 - aports/device/linux-nextbit-robin/APKBUILD | 77 - .../linux-nextbit-robin/compiler-gcc6.h | 69 - .../config-nextbit-robin.aarch64 | 4162 -------- aports/device/linux-nokia-n9/0001-SREv2.patch | 648 -- ...-add-rename-MIPI_DCS_SET_PARTIAL_XXX.patch | 33 - ...si-cm-use-defines-from-mipi_display..patch | 63 - .../0004-ARM-dts-n9-add-display-support.patch | 124 - ...work-around-for-omap3-display-enable.patch | 71 - ...nel-dsi-cm-force-0xff-for-brigthness.patch | 29 - ...-dts-N9-N950-Add-touchscreen-support.patch | 70 - ...isc-apds990x-Add-device-tree-support.patch | 193 - .../0009-misc-apds990x-convert-to-iio.patch | 1285 --- ...s-N9-Add-support-for-apds990x-ALS-PS.patch | 81 - ...access-functions-needed-by-PVR-drive.patch | 27 - aports/device/linux-nokia-n9/APKBUILD | 124 - .../RM-696_Pyrenees_SMD_V1_6.raw | 19 - .../linux-nokia-n9/config-nokia-n9.armhf | 4802 ---------- .../00_fix_return_address.patch | 49 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-nokia-rm885/APKBUILD | 67 - .../device/linux-nokia-rm885/compiler-gcc6.h | 69 - .../config-nokia-rm885.armhf | 4025 -------- .../linux-nokia-rm885/psmouse_base.patch | 106 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-oneplus-bacon/APKBUILD | 120 - .../linux-oneplus-bacon/compiler-gcc6.h | 69 - .../config-oneplus-bacon.armhf | 3679 ------- .../00_mt_width_major_params.patch | 12 - aports/device/linux-oneplus-oneplus2/APKBUILD | 77 - .../linux-oneplus-oneplus2/compiler-gcc6.h | 69 - .../config-oneplus-oneplus2.aarch64 | 4108 -------- ...se-static-inline-instead-of-inline-i.patch | 46 - ...-use-static-inline-instead-of-inline.patch | 36 - .../linux-oneplus-onyx/00_dontpanic.patch | 74 - .../00_fix_return_address.patch | 49 - .../00_mt_width_major_params.patch | 12 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-oneplus-onyx/APKBUILD | 125 - .../device/linux-oneplus-onyx/compiler-gcc6.h | 69 - .../config-oneplus-onyx.armhf | 3672 ------- .../01_fix_aid_net_on_apn_disable.patch | 27 - .../device/linux-samsung-espresso10/APKBUILD | 76 - .../linux-samsung-espresso10/compiler-gcc6.h | 69 - .../config-samsung-espresso10.armhf | 2741 ------ .../01_fix_msm_dba.patch | 13 - .../linux-samsung-gts210vewifi/APKBUILD | 88 - .../compiler-gcc6.h | 69 - .../config-samsung-gts210vewifi.aarch64 | 4754 ---------- ...se-static-inline-instead-of-inline-i.patch | 46 - ...-use-static-inline-instead-of-inline.patch | 36 - .../00_fix_return_address.patch | 49 - .../01_msm-fix-perf_trace_counters.patch | 34 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-samsung-i747m/APKBUILD | 87 - .../linux-samsung-i747m/compiler-gcc6.h | 69 - .../config-samsung-i747m.armhf | 3699 -------- .../linux-samsung-i8190/00_fix_makefile.patch | 14 - .../01_fix_return_address.patch | 49 - .../02_timeconst_fix.patch | 45 - .../linux-samsung-i8190/03_fix_rndis.patch | 12 - .../linux-samsung-i8190/04_fix_bcma.patch | 50 - .../05_change_dhd_firmware_path.patch | 15 - aports/device/linux-samsung-i8190/APKBUILD | 96 - .../linux-samsung-i8190/compiler-gcc6.h | 69 - .../config-samsung-i8190.armhf | 2964 ------ aports/device/linux-samsung-i8200/APKBUILD | 63 - .../linux-samsung-i8200/compiler-gcc6.h | 69 - .../config-samsung-i8200.armhf | 3060 ------ .../linux-samsung-i8200/timeconst_fix.patch | 17 - .../00_return_address.patch | 29 - .../01_twl_power_init.patch | 12 - .../02_mfd_driver_fix.patch | 13 - .../03_fix_paranoid_network_disabled.patch | 51 - aports/device/linux-samsung-i9003/APKBUILD | 128 - .../linux-samsung-i9003/compiler-gcc6.h | 69 - .../config-samsung-i9003.armhf | 2660 ------ aports/device/linux-samsung-i9003/init | 29 - .../00_fix_return_address.patch | 49 - .../01_remove_ramdisks_from_initramfs.patch | 17 - .../02_reduce_lzo_compression.patch | 26 - .../03_change_modules_install_dir.patch | 16 - .../04_change_dhd_firmware_dir.patch | 15 - .../05_fix_fb_rgb_mode.patch | 36 - aports/device/linux-samsung-i9070/APKBUILD | 107 - .../linux-samsung-i9070/compiler-gcc6.h | 69 - .../config-samsung-i9070.armhf | 2916 ------ aports/device/linux-samsung-i9070/init | 29 - aports/device/linux-samsung-i9100/APKBUILD | 118 - .../linux-samsung-i9100/compiler-gcc6.h | 69 - .../config-samsung-i9100.armhf | 3243 ------- aports/device/linux-samsung-i9100/init | 29 - .../01_msm-fix-perf_trace_counters.patch | 34 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-samsung-i9195/APKBUILD | 77 - .../linux-samsung-i9195/compiler-gcc6.h | 69 - .../config-samsung-i9195.armhf | 3844 -------- aports/device/linux-samsung-i9305/APKBUILD | 117 - .../linux-samsung-i9305/compiler-gcc6.h | 69 - .../config-samsung-i9305.armhf | 3409 ------- .../00_fix_return_address.patch | 49 - .../01_msm-fix-perf_trace_counters.patch | 34 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../03-fix-video-argb-setting.patch | 91 - aports/device/linux-samsung-jflte/APKBUILD | 85 - .../linux-samsung-jflte/compiler-gcc6.h | 69 - .../config-samsung-jflte.armhf | 3750 -------- .../gpu_msm2_fix_compile.patch | 23 - .../patch_fsp_detect.patch | 14 - .../patch_lifebook_detect.patch | 14 - .../00_fix_return_address.patch | 49 - .../linux-samsung-klte/01_timeconst_fix.patch | 45 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../linux-samsung-klte/03_msm_fix_trace.patch | 13 - aports/device/linux-samsung-klte/APKBUILD | 89 - .../device/linux-samsung-klte/compiler-gcc6.h | 69 - .../config-samsung-klte.armhf | 4666 --------- aports/device/linux-samsung-kminilte/APKBUILD | 76 - .../linux-samsung-kminilte/compiler-gcc6.h | 69 - .../config-samsung-kminilte.armhf | 3699 -------- .../00_return_address.patch | 29 - .../02_screen_reset.patch | 22 - aports/device/linux-samsung-kylepro/APKBUILD | 80 - .../linux-samsung-kylepro/compiler-gcc6.h | 69 - .../config-samsung-kylepro.armhf | 3229 ------- .../0001-fix-video-argb-setting.patch | 91 - .../01_msm-fix-perf_trace_counters.patch | 34 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../device/linux-samsung-kylessopen/APKBUILD | 84 - .../linux-samsung-kylessopen/compiler-gcc6.h | 69 - .../config-samsung-kylessopen.armhf | 3072 ------ .../linux-samsung-kylessopen/gcc5.patch | 114 - .../00_return_address.patch | 29 - .../01_patch_lifebook_detect.patch | 14 - .../02_patch_fsp_detect.patch | 14 - .../03_fix_to_state.patch | 32 - aports/device/linux-samsung-kylevess/APKBUILD | 83 - .../linux-samsung-kylevess/compiler-gcc6.h | 69 - .../config-samsung-kylevess.armhf | 3505 ------- ...f63adac56841ef6b0f1fcf435bc64d4ed177.patch | 80 - ...d4c430b0c0a361f38e8658a0d6cb469942b5.patch | 252 - aports/device/linux-samsung-lt023g/APKBUILD | 82 - .../linux-samsung-lt023g/compiler-gcc6.h | 69 - .../config-samsung-lt023g.armhf | 2784 ------ .../linux-samsung-lt023g/timeconst_fix.patch | 17 - aports/device/linux-samsung-maguro/APKBUILD | 58 - .../android_paranoid_network.patch | 15 - .../linux-samsung-maguro/compiler-gcc6.h | 69 - .../config-samsung-maguro.armhf | 2765 ------ .../fix_old_perl_code.patch | 11 - aports/device/linux-samsung-manta/APKBUILD | 73 - .../linux-samsung-manta/compiler-gcc6.h | 69 - .../config-samsung-manta.armhf | 3357 ------- aports/device/linux-samsung-n5110/APKBUILD | 73 - .../linux-samsung-n5110/compiler-gcc6.h | 69 - .../config-samsung-n5110.armhf | 3416 ------- aports/device/linux-samsung-n7100/APKBUILD | 106 - .../linux-samsung-n7100/compiler-gcc6.h | 69 - .../config-samsung-n7100.armhf | 3379 ------- .../linux-samsung-n7100/extdsp_inline.patch | 26 - .../linux-samsung-n7100/fimc_lite.patch | 13 - .../linux-samsung-n7100/timeconst_fix.patch | 17 - aports/device/linux-samsung-p4wifi/APKBUILD | 96 - .../linux-samsung-p4wifi/compiler-gcc6.h | 69 - .../config-samsung-p4wifi.armhf | 5314 ----------- .../00_return_address.patch | 29 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-samsung-s6500d/APKBUILD | 77 - .../linux-samsung-s6500d/compiler-gcc6.h | 69 - .../config-samsung-s6500d.armhf | 3410 ------- .../01_msm-fix-perf_trace_counters.patch | 34 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-semc-anzu/APKBUILD | 94 - aports/device/linux-semc-anzu/compiler-gcc6.h | 69 - .../linux-semc-anzu/config-semc-anzu.armhf | 3678 ------- .../01_msm-fix-perf_trace_counters.patch | 34 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-semc-smultron/APKBUILD | 65 - .../linux-semc-smultron/compiler-gcc6.h | 69 - .../config-semc-smultron.armhf | 3691 ------- .../02_mdss_fb_refresh_rate.patch | 13 - aports/device/linux-sony-amami/APKBUILD | 101 - .../device/linux-sony-amami/compiler-gcc6.h | 69 - .../linux-sony-amami/config-sony-amami.armhf | 3901 -------- .../02_mdss_fb_refresh_rate.patch | 13 - aports/device/linux-sony-aries/APKBUILD | 56 - .../device/linux-sony-aries/compiler-gcc6.h | 69 - .../linux-sony-aries/config-sony-aries.armhf | 3888 -------- .../device/linux-sony-castor-windy/APKBUILD | 110 - .../linux-sony-castor-windy/compiler-gcc6.h | 69 - .../config-sony-castor-windy.armhf | 3906 -------- .../mmc-wifi-fix.patch | 50 - .../01_msm-fix-perf_trace_counters.patch | 34 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-sony-coconut/APKBUILD | 80 - .../device/linux-sony-coconut/compiler-gcc6.h | 69 - .../config-sony-coconut.armhf | 3688 ------- aports/device/linux-sony-honami/APKBUILD | 73 - .../device/linux-sony-honami/compiler-gcc6.h | 69 - .../config-sony-honami.armhf | 3905 -------- .../00_fix_return_address.patch | 49 - .../01_fix_video_argb_setting.patch | 91 - .../02_mdss_fb_refresh_rate.patch | 13 - .../03_kgsl_iommu_sync_lock.patch | 40 - .../linux-sony-nicki/04_psmouse_base.patch | 106 - .../05_try_to_make_kgsl_work.patch | 25 - aports/device/linux-sony-nicki/APKBUILD | 89 - .../device/linux-sony-nicki/compiler-gcc6.h | 69 - .../linux-sony-nicki/config-sony-nicki.armhf | 4084 -------- ...se-static-inline-instead-of-inline-i.patch | 46 - ...-use-static-inline-instead-of-inline.patch | 36 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../02_reduce_lzo_compression.patch | 26 - aports/device/linux-sony-scorpion/APKBUILD | 82 - .../linux-sony-scorpion/compiler-gcc6.h | 69 - .../config-sony-scorpion.armhf | 3894 -------- .../01_fix_return_address.patch | 49 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../03_fix_various_include_directives.patch | 66 - .../linux-sony-seagull/04_timeconst_fix.patch | 45 - .../linux-sony-seagull/05_psmouse_base.patch | 106 - aports/device/linux-sony-seagull/APKBUILD | 97 - .../device/linux-sony-seagull/compiler-gcc6.h | 69 - .../config-sony-seagull.armhf | 3724 -------- .../00_fix_return_address.patch | 49 - .../02_reduce_lzo_compression.patch | 26 - aports/device/linux-sony-yuga/APKBUILD | 105 - aports/device/linux-sony-yuga/compiler-gcc6.h | 69 - .../linux-sony-yuga/config-sony-yuga.armhf | 4220 --------- .../kgsl_iommu_sync_lock.patch | 40 - .../device/linux-sony-yuga/psmouse_base.patch | 106 - .../00_fix_return_address.patch | 49 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../linux-t2m-flame/03_add-missing-dtbs.patch | 27 - .../linux-t2m-flame/04_fix-fb-imgtype.patch | 25 - .../05_fix-mdp3-ctrl-off.patch | 25 - .../device/linux-t2m-flame/06_fix-clock.patch | 25 - aports/device/linux-t2m-flame/APKBUILD | 128 - aports/device/linux-t2m-flame/compiler-gcc6.h | 69 - .../linux-t2m-flame/config-t2m-flame.armhf | 3567 ------- aports/device/linux-teclast-x80pro/APKBUILD | 174 - .../config-teclast-x80pro.x86_64 | 8437 ----------------- .../linux-wiko-lenny3/00_disable_drvgen.patch | 37 - .../01_add_generated_cust_dtsi.patch | 306 - .../02_fix_various_include_directives.patch | 467 - aports/device/linux-wiko-lenny3/APKBUILD | 79 - .../device/linux-wiko-lenny3/compiler-gcc6.h | 69 - .../config-wiko-lenny3.armhf | 3629 ------- .../00_fix_return_address.patch | 49 - .../01_msm-fix-perf_trace_counters.patch | 34 - .../linux-xiaomi-armani/01_smd_private.patch | 11 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../linux-xiaomi-armani/03_qdsp6v2.patch | 11 - .../04_mdss_mdp_trace.patch | 1026 -- .../linux-xiaomi-armani/05_q6voice.patch | 11 - aports/device/linux-xiaomi-armani/APKBUILD | 103 - .../linux-xiaomi-armani/compiler-gcc6.h | 69 - .../config-xiaomi-armani.armhf | 3599 ------- .../linux-xiaomi-cancro/01_smd_private.patch | 11 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - .../linux-xiaomi-cancro/03t_spdrv.patch | 12 - .../linux-xiaomi-cancro/05_q6voice.patch | 11 - aports/device/linux-xiaomi-cancro/APKBUILD | 99 - .../linux-xiaomi-cancro/compiler-gcc6.h | 69 - .../config-xiaomi-cancro.armhf | 3842 -------- .../device/linux-xiaomi-cancro/tspdrv_2.patch | 13 - .../device/linux-xiaomi-cancro/tspdrv_3.patch | 19 - .../device/linux-xiaomi-cancro/tspdrv_4.patch | 12 - .../device/linux-xiaomi-cancro/tspdrv_5.patch | 54 - .../linux-xiaomi-ido/01_fix_gcc6_errors.patch | 68 - aports/device/linux-xiaomi-ido/APKBUILD | 77 - .../device/linux-xiaomi-ido/compiler-gcc6.h | 69 - .../config-xiaomi-ido.aarch64 | 4011 -------- .../01_fix_gcc6_errors.patch | 68 - .../linux-xiaomi-mido/02_fix_msm_dba.patch | 13 - ...fix_rndis_ipa_trace_header_not_found.patch | 22 - .../05_fix_mdp3_ctrl_off.patch | 13 - .../linux-xiaomi-mido/05_fix_u_f_header.patch | 58 - .../06_fix_usb_gadget_function.patch | 590 -- aports/device/linux-xiaomi-mido/APKBUILD | 96 - .../device/linux-xiaomi-mido/compiler-gcc6.h | 69 - .../config-xiaomi-mido.aarch64 | 4576 --------- .../linux-xiaomi-mido/fix_recordmcount.patch | 61 - .../linux-xiaomi-santoni/02_fix_msm_dba.patch | 13 - ...fix_rndis_ipa_trace_header_not_found.patch | 22 - aports/device/linux-xiaomi-santoni/APKBUILD | 80 - .../linux-xiaomi-santoni/compiler-gcc6.h | 69 - .../config-xiaomi-santoni.aarch64 | 4549 --------- .../00_fix_return_address.patch | 49 - .../02_gpu-msm-fix-gcc5-compile.patch | 33 - aports/device/linux-zte-kis3/APKBUILD | 88 - aports/device/linux-zte-kis3/compiler-gcc6.h | 69 - .../linux-zte-kis3/config-zte-kis3.armhf | 3228 ------- aports/firmware/firmware-adreno/APKBUILD | 37 - .../firmware-aosp-broadcom-wlan/APKBUILD | 23 - aports/firmware/firmware-asus-duma/APKBUILD | 26 - aports/firmware/firmware-asus-flo/APKBUILD | 81 - aports/firmware/firmware-asus-z00t/APKBUILD | 123 - .../firmware/firmware-fairphone-fp2/APKBUILD | 34 - .../firmware/firmware-htc-flounder/APKBUILD | 78 - aports/firmware/firmware-huawei-y530/APKBUILD | 35 - .../firmware/firmware-lenovo-karate/APKBUILD | 35 - .../firmware/firmware-lg-hammerhead/APKBUILD | 37 - .../firmware/firmware-motorola-titan/APKBUILD | 35 - .../firmware-samsung-espresso10/APKBUILD | 33 - .../firmware/firmware-samsung-i747m/APKBUILD | 24 - .../firmware/firmware-samsung-i8190/APKBUILD | 23 - .../firmware/firmware-samsung-i9070/APKBUILD | 24 - .../firmware/firmware-samsung-i9100/APKBUILD | 41 - .../firmware/firmware-samsung-i9195/APKBUILD | 71 - .../firmware/firmware-samsung-i9305/APKBUILD | 24 - .../firmware/firmware-samsung-jflte/APKBUILD | 23 - .../firmware-samsung-kylepro/APKBUILD | 23 - .../firmware/firmware-samsung-maguro/APKBUILD | 24 - .../firmware/firmware-samsung-p4wifi/APKBUILD | 34 - aports/firmware/firmware-sony-amami/APKBUILD | 52 - aports/firmware/firmware-t2m-flame/APKBUILD | 21 - .../firmware/firmware-xiaomi-armani/APKBUILD | 54 - aports/firmware/firmware-xiaomi-mido/APKBUILD | 33 - aports/hybris/android-headers-4.4/APKBUILD | 29 - .../android-headers-4.4/android-headers.pc | 9 - aports/hybris/android-headers-7.1/APKBUILD | 39 - ...001-Make-libhybris-compile-with-musl.patch | 592 -- ...sion-test-for-EGL-glibc-TLS-conflict.patch | 75 - ...1-EGL-platform-based-on-wayland-code.patch | 1672 ---- aports/hybris/libhybris/APKBUILD | 151 - aports/kde/attica-qt/APKBUILD | 35 - aports/kde/baloo/APKBUILD | 36 - aports/kde/breeze-icons/APKBUILD | 32 - aports/kde/breeze/APKBUILD | 36 - aports/kde/elisa/APKBUILD | 36 - aports/kde/extra-cmake-modules/APKBUILD | 30 - aports/kde/falkon/APKBUILD | 34 - aports/kde/falkon/disable-backtraces.patch | 35 - .../falkon/disable-ld-fatal-warnings.patch | 29 - aports/kde/kactivities-stats/APKBUILD | 43 - aports/kde/kactivities/APKBUILD | 40 - aports/kde/kactivitymanagerd/APKBUILD | 42 - aports/kde/karchive/APKBUILD | 33 - aports/kde/kauth/APKBUILD | 35 - aports/kde/kbookmarks/APKBUILD | 36 - aports/kde/kcmutils/APKBUILD | 36 - aports/kde/kcodecs/APKBUILD | 33 - aports/kde/kcompletion/APKBUILD | 35 - aports/kde/kconfig/APKBUILD | 36 - aports/kde/kconfigwidgets/APKBUILD | 36 - aports/kde/kcoreaddons/APKBUILD | 34 - aports/kde/kcrash/APKBUILD | 36 - aports/kde/kdbusaddons/APKBUILD | 34 - aports/kde/kdeclarative/APKBUILD | 38 - aports/kde/kdecoration/APKBUILD | 35 - aports/kde/kded/APKBUILD | 35 - aports/kde/kdelibs4support/APKBUILD | 45 - aports/kde/kdesignerplugin/APKBUILD | 37 - aports/kde/kdesu/APKBUILD | 36 - aports/kde/kdoctools/APKBUILD | 35 - aports/kde/kemoticons/APKBUILD | 36 - aports/kde/kfilemetadata/APKBUILD | 38 - aports/kde/kglobalaccel/APKBUILD | 35 - aports/kde/kguiaddons/APKBUILD | 36 - aports/kde/khtml/APKBUILD | 38 - aports/kde/ki18n/APKBUILD | 37 - aports/kde/kiconthemes/APKBUILD | 38 - aports/kde/kidletime/APKBUILD | 34 - aports/kde/kimageformats/APKBUILD | 33 - aports/kde/kinit/APKBUILD | 39 - aports/kde/kio/APKBUILD | 39 - aports/kde/kirigami2/APKBUILD | 42 - aports/kde/kitemmodels/APKBUILD | 35 - aports/kde/kitemviews/APKBUILD | 35 - aports/kde/kjobwidgets/APKBUILD | 34 - aports/kde/kjs/APKBUILD | 33 - aports/kde/kjsembed/APKBUILD | 33 - aports/kde/knewstuff/APKBUILD | 38 - aports/kde/knotifications/APKBUILD | 35 - aports/kde/knotifyconfig/APKBUILD | 36 - aports/kde/konsole/APKBUILD | 38 - aports/kde/kpackage/APKBUILD | 37 - aports/kde/kparts/APKBUILD | 37 - aports/kde/kpeople/APKBUILD | 36 - aports/kde/kplotting/APKBUILD | 36 - aports/kde/kpty/APKBUILD | 35 - aports/kde/krunner/APKBUILD | 38 - aports/kde/kscreen/APKBUILD | 38 - aports/kde/kscreenlocker/APKBUILD | 48 - aports/kde/kscreenlocker/kde-np.pam | 10 - aports/kde/kscreenlocker/kde.pam | 11 - aports/kde/kservice/APKBUILD | 42 - aports/kde/ksysguard/APKBUILD | 38 - aports/kde/ktexteditor/APKBUILD | 39 - aports/kde/ktextwidgets/APKBUILD | 36 - aports/kde/kunitconversion/APKBUILD | 36 - aports/kde/kwallet/APKBUILD | 35 - aports/kde/kwayland-integration/APKBUILD | 30 - aports/kde/kwayland/APKBUILD | 37 - aports/kde/kwidgetsaddons/APKBUILD | 36 - ...-handle-devices-from-the-current-sea.patch | 55 - ...connection-Don-t-hardcode-seat0-anym.patch | 30 - aports/kde/kwin/APKBUILD | 48 - aports/kde/kwindowsystem/APKBUILD | 36 - aports/kde/kxmlgui/APKBUILD | 38 - aports/kde/kxmlrpcclient/APKBUILD | 36 - aports/kde/libdmtx/APKBUILD | 29 - aports/kde/libkscreen/APKBUILD | 35 - aports/kde/libksysguard/APKBUILD | 37 - aports/kde/milou/APKBUILD | 35 - aports/kde/modemmanager-qt/APKBUILD | 35 - aports/kde/networkmanager-qt/APKBUILD | 35 - aports/kde/phonon-qt5/APKBUILD | 32 - aports/kde/plasma-angelfish/APKBUILD | 40 - aports/kde/plasma-camera/APKBUILD | 37 - aports/kde/plasma-framework/APKBUILD | 40 - aports/kde/plasma-nm/APKBUILD | 38 - aports/kde/plasma-pa/APKBUILD | 35 - aports/kde/plasma-phone-components/APKBUILD | 45 - .../plasma-phone-components.post-deinstall | 3 - .../plasma-phone-components.post-install | 3 - .../plasma-phone-components.post-upgrade | 3 - aports/kde/plasma-settings/APKBUILD | 42 - aports/kde/plasma-workspace/APKBUILD | 50 - aports/kde/polkit-kde-agent/APKBUILD | 37 - aports/kde/polkit-qt/APKBUILD | 35 - aports/kde/powerdevil/APKBUILD | 43 - aports/kde/prison/APKBUILD | 34 - aports/kde/qca-qt5/APKBUILD | 37 - aports/kde/qmltermwidget/APKBUILD | 29 - aports/kde/solid/APKBUILD | 35 - aports/kde/sonnet/APKBUILD | 35 - aports/kde/syntax-highlighting/APKBUILD | 35 - aports/kde/threadweaver/APKBUILD | 35 - aports/luna/activitymanager/APKBUILD | 30 - aports/luna/activitymanager/compile.patch | 44 - aports/luna/cmake-modules-webos/APKBUILD | 28 - aports/luna/configurator/APKBUILD | 29 - aports/luna/db8/APKBUILD | 34 - aports/luna/db8/remove-np-pthread.patch | 140 - aports/luna/enyo/APKBUILD | 22 - aports/luna/lemon/APKBUILD | 33 - ...as-prefix-in-order-to-make-this-a-co.patch | 50 - aports/luna/libconnman-qt/APKBUILD | 27 - aports/luna/libpbnjson/APKBUILD | 36 - .../libpbnjson/replace-bash-with-sh.patch | 24 - aports/luna/librolegen/APKBUILD | 40 - aports/luna/librolegen/compile.patch | 13 - aports/luna/librolegen/fix-fexists.patch | 13 - aports/luna/libwebos-application/APKBUILD | 30 - aports/luna/luna-app-browser/APKBUILD | 35 - .../fix-qtwebengine-private-includes.patch | 14 - aports/luna/luna-app-services/APKBUILD | 78 - aports/luna/luna-applauncher/APKBUILD | 20 - aports/luna/luna-appmanager/APKBUILD | 49 - aports/luna/luna-appmanager/compile.patch | 128 - aports/luna/luna-core-apps/APKBUILD | 41 - aports/luna/luna-firstuse/APKBUILD | 30 - aports/luna/luna-firstuse/locale.patch | 17 - aports/luna/luna-init/APKBUILD | 41 - aports/luna/luna-next-cardshell/APKBUILD | 32 - aports/luna/luna-next/APKBUILD | 38 - aports/luna/luna-next/compile.patch | 46 - .../luna-next/remove-systemd-harddep.patch | 33 - aports/luna/luna-prefs/APKBUILD | 35 - aports/luna/luna-qml-launcher/APKBUILD | 30 - aports/luna/luna-service2/APKBUILD | 43 - aports/luna/luna-service2/ls-private.conf | 46 - aports/luna/luna-service2/ls-public.conf | 46 - .../luna-service2/remove-malloc-debug.patch | 80 - .../remove-systemd-harddep.patch | 64 - aports/luna/luna-sysmgr-common/APKBUILD | 36 - aports/luna/luna-sysmgr-common/compile.patch | 13 - aports/luna/luna-sysmgr-ipc-messages/APKBUILD | 36 - .../mkpkgconfig.patch | 50 - aports/luna/luna-sysmgr-ipc/APKBUILD | 36 - .../luna-sysmgr-ipc/remove-np-pthread.patch | 62 - aports/luna/luna-sysmgr/APKBUILD | 75 - aports/luna/luna-sysmgr/compile.patch | 27 - aports/luna/luna-sysservice/APKBUILD | 34 - aports/luna/luna-sysservice/compile.patch | 25 - aports/luna/luna-systemui/APKBUILD | 20 - .../luna/luna-temp-ofono-bluetooth/APKBUILD | 20 - aports/luna/luna-webappmanager/APKBUILD | 34 - .../fix-qtwebengine-private-includes.patch | 15 - .../luna-webappmanager/remove-systemd.patch | 35 - aports/luna/luna-webappmanager/tryFix.patch | 12 - aports/luna/luneos-components/APKBUILD | 30 - aports/luna/mojoloader/APKBUILD | 21 - aports/luna/mojoservice-frameworks/APKBUILD | 27 - aports/luna/mojoservicelauncher/APKBUILD | 29 - .../nodejs-module-webos-dynaload/APKBUILD | 30 - .../luna/nodejs-module-webos-pmlog/APKBUILD | 44 - .../luna/nodejs-module-webos-sysbus/APKBUILD | 34 - aports/luna/nyx-lib/APKBUILD | 37 - aports/luna/nyx-lib/addstdint.patch | 12 - aports/luna/nyx-lib/compile.patch | 12 - aports/luna/pmloglib/APKBUILD | 31 - aports/luna/postmarketos-ui-luna/APKBUILD | 42 - .../luna/postmarketos-ui-luna/start_luna.sh | 36 - aports/luna/qt5-qtwebengine/APKBUILD | 149 - ...1-Add-PalmServiceBridge-to-WebEngine.patch | 1054 -- ...ridge-adapt-to-Chromium-53-code-base.patch | 316 - ...ovide-additionnal-features-from-wind.patch | 221 - ...ide-additional-features-from-window..patch | 114 - ...Request-provide-the-requested-URL-as.patch | 54 - ...PC-messaging-through-qt.webChannelTr.patch | 152 - ...onal-window-features-related-to-Lune.patch | 71 - ...for-some-settings-for-PalmBridgeServ.patch | 202 - ...Chrome-lower-the-minimum-height-to-5.patch | 43 - .../0006-Enable-password-echo.patch | 25 - ...s-Add-a-standardFontFamily-property-.patch | 82 - ...s-add-also-Serif-Fixed-and-Cursive-f.patch | 147 - ...quota-workaround-for-crash-on-cache-.patch | 47 - ...onal-window-features-required-by-the.patch | 36 - ...n.css-Add-Prelude-as-default-font-in.patch | 59 - ...ewViewRequest-use-initialTargetUrl-f.patch | 97 - ...dditional-params-from-Chromium-53-56.patch | 141 - ...Request-add-possibility-to-get-reque.patch | 81 - .../0011-Fix-WebGL2-Textures.patch | 23 - ...e-default-screen-when-no-window-is-a.patch | 34 - .../0012-Enable-password-echo.patch | 25 - ...013-Implement-RequestQuotePermission.patch | 35 - ...-introduce-devicePixelRatio-property.patch | 74 - ...d-extraContextMenuEntriesComponent-p.patch | 72 - .../0016-Fix-build-for-Qt5.9.patch | 47 - .../0017-gn_generator-fix-debug-build.patch | 30 - .../0018-Add-LuneOS-specific-switches.patch | 38 - ...false-to-FALSE-and-1-to-TRUE-FIX-qtw.patch | 63 - ...-allow-build-for-linux-oe-g-platform.patch | 30 - ...webengineview_p_p.h-add-include-QCol.patch | 23 - ...m-Force-host-toolchain-configuration.patch | 40 - ...ndency-to-QCoreApplication-translate.patch | 23 - ...rkaround-for-too-long-.rps-file-name.patch | 42 - ...ndbox-Define-TEMP_FAILURE_RETRY-if-n.patch | 33 - ...oid-mallinfo-APIs-on-non-glibc-linux.patch | 45 - ...mium-musl-include-fcntl.h-for-loff_t.patch | 22 - ...e-off64_t-instead-of-the-internal-__.patch | 62 - ...usl-linux-glibc-make-the-distinction.patch | 23 - ...locator-Do-not-include-glibc_weak_sy.patch | 24 - ...e-correct-member-name-__si_fields-fr.patch | 24 - ...um-musl-Match-syscalls-to-match-musl.patch | 44 - ...fine-res_ninit-and-res_nclose-for-no.patch | 79 - ...um-musl-Do-not-define-__sbrk-on-musl.patch | 26 - ...sl-Adjust-default-pthread-stack-size.patch | 47 - ...clude-asm-generic-ioctl.h-for-TCGETS.patch | 22 - ...malloc-Use-off64_t-insread-of-__off6.patch | 23 - .../patches-musl/gn_bootstrap.patch | 62 - .../patches-musl/no-pvalloc.patch | 13 - .../patches-musl/no_execinfo.patch | 193 - .../patches-musl/renderthread-mallinfo.patch | 64 - .../patches-musl/yasm_intl.patch | 13 - aports/luna/qt5-qtwebengine/use-ozone.patch | 18 - aports/luna/serviceinstaller/APKBUILD | 32 - aports/luna/webos-foundation/APKBUILD | 27 - .../luna/webos-loadable-frameworks/APKBUILD | 27 - aports/luna/webos-underscore/APKBUILD | 21 - aports/maemo/gnome-menus/APKBUILD | 27 - aports/maemo/gtk+2.0-maemo/APKBUILD | 160 - aports/maemo/gtk+2.0-maemo/automake.patch | 19 - .../gtk+2.0-maemo.post-deinstall | 7 - .../gtk+2.0-maemo/gtk+2.0-maemo.post-install | 5 - .../gtk+2.0-maemo/gtk+2.0-maemo.post-upgrade | 1 - .../gtk-update-icon-cache.trigger | 9 - aports/maemo/gtk+2.0-maemo/gtk2-fixdso.patch | 15 - .../gtk+2.0-maemo/hildonize-gtk-treeview.diff | 3595 ------- .../gtk+2.0-maemo/xid-collision-debug.patch | 15 - aports/maemo/hildon-desktop/APKBUILD | 38 - aports/maemo/hildon-home/APKBUILD | 26 - aports/maemo/hildon-theme-alpha/APKBUILD | 20 - ...o_set-for-aarch64-to-fix-compilation.patch | 29 - aports/maemo/hildon-thumbnail/APKBUILD | 29 - aports/maemo/iphbd/APKBUILD | 26 - aports/maemo/libdsme/APKBUILD | 30 - aports/maemo/libhildon/APKBUILD | 30 - aports/maemo/libhildon/hildon-non-glibc.patch | 66 - aports/maemo/libhildondesktop/APKBUILD | 33 - aports/maemo/libhildonfm/APKBUILD | 27 - aports/maemo/libhildonmime/APKBUILD | 25 - aports/maemo/libmatchbox2/APKBUILD | 34 - aports/maemo/libosso/APKBUILD | 28 - aports/maemo/libosso/libosso-mem-musl.patch | 52 - aports/maemo/maemo-l10n/APKBUILD | 294 - aports/maemo/maemo-launcher/APKBUILD | 26 - aports/maemo/mce-headers/APKBUILD | 25 - aports/maemo/osso-bookmark-engine/APKBUILD | 24 - aports/maemo/osso-xterm/APKBUILD | 27 - aports/maemo/profiled/APKBUILD | 26 - aports/maemo/profiled/profiled-fix-musl.patch | 21 - aports/maemo/sapwood/APKBUILD | 24 - aports/main/0xffff/APKBUILD | 25 - aports/main/abootimg/APKBUILD | 42 - .../abuild-aarch64-qemu-workaround/APKBUILD | 25 - ...build-aarch64-qemu-workaround.post-install | 2 - .../write-check-count.patch | 13 - aports/main/apk-file/APKBUILD | 31 - aports/main/blobtools/APKBUILD | 28 - aports/main/charging-sdl/APKBUILD | 24 - aports/main/chocolate-doom/APKBUILD | 28 - aports/main/devicepkg-dev/APKBUILD | 24 - aports/main/devicepkg-dev/devicepkg_build.sh | 83 - .../main/devicepkg-dev/devicepkg_package.sh | 27 - .../devicepkg-dev/downstreamkernel_prepare.sh | 29 - .../dtbtool/00_fix_version_detection.patch | 13 - .../dtbtool/01_find_dtb_in_subfolders.patch | 33 - aports/main/dtbtool/APKBUILD | 29 - aports/main/extract-dtb/APKBUILD | 17 - aports/main/fbdebug/APKBUILD | 25 - aports/main/fbdebug/fbdebug.c | 191 - aports/main/heimdall/APKBUILD | 30 - aports/main/heimdall/heimdall_flash_kernel.sh | 31 - .../main/heimdall/heimdall_wait_for_device.sh | 7 - aports/main/hello-world-wrapper/APKBUILD | 25 - .../hello-world-wrapper.sh | 5 - aports/main/hello-world/APKBUILD | 31 - aports/main/hello-world/Makefile | 5 - aports/main/hello-world/main.c | 7 - aports/main/kernel-scripts/APKBUILD | 62 - aports/main/kmscube/APKBUILD | 32 - aports/main/libfakekey/APKBUILD | 31 - aports/main/libphonenumber/APKBUILD | 47 - aports/main/libqofono/APKBUILD | 35 - aports/main/libsparse/APKBUILD | 29 - .../main/linux-postmarketos-mainline/APKBUILD | 189 - .../config-postmarketos-mainline.aarch64 | 6109 ------------ .../config-postmarketos-mainline.armhf | 4968 ---------- .../config-postmarketos-mainline.x86_64 | 5616 ----------- aports/main/linux-postmarketos-qcom/APKBUILD | 185 - .../config-postmarketos-qcom.armhf | 4010 -------- .../main/linux-postmarketos-stable/APKBUILD | 197 - .../config-postmarketos-stable.aarch64 | 6111 ------------ .../config-postmarketos-stable.armhf | 5369 ----------- .../config-postmarketos-stable.x86_64 | 5616 ----------- aports/main/mdss-fb-init-hack/APKBUILD | 21 - .../mdss-fb-init-hack/mdss-fb-init-hack.initd | 26 - .../mdss-fb-init-hack.post-install | 4 - .../mdss-fb-init-hack/mdss-fb-init-hack.sh | 18 - aports/main/mkbootimg-osm0sis/APKBUILD | 26 - .../00-msm-fb-refresher.files | 1 - .../msm-fb-refresher/00-msm-fb-refresher.sh | 2 - aports/main/msm-fb-refresher/APKBUILD | 41 - .../msm-fb-refresher/msm-fb-refresher.init | 27 - .../msm-fb-refresher.post-install | 3 - .../01-update_code_compatible_qt5.patch | 516 - .../02-change_signals_Q_SIGNALS_Q_SLOTS.patch | 614 -- ...allManager_to_match_latest_ofono_api.patch | 154 - ...4-set_errors_on_dial_and_sendMessage.patch | 121 - ..._connman_interface_to_the_new_layout.patch | 54 - aports/main/ofono-qt/06-fix_unit_tests.patch | 353 - .../ofono-qt/07-simplify_code_logic.patch | 93 - .../ofono-qt/08-add-delivery-report.patch | 43 - .../09-createMultiparty-synchronous.patch | 51 - .../ofono-qt/10-use_right_modem_objpath.patch | 28 - aports/main/ofono-qt/11_use_libdir.patch | 22 - aports/main/ofono-qt/APKBUILD | 52 - aports/main/osk-sdl/APKBUILD | 26 - .../APKBUILD | 34 - .../build_zip.sh | 51 - .../pmos_chroot | 54 - .../pmos_install | 148 - .../pmos_install_functions | 113 - .../pmos_setpw | 32 - .../update-binary | 36 - .../postmarketos-artwork-wallpapers/APKBUILD | 28 - aports/main/postmarketos-artwork/APKBUILD | 15 - .../main/postmarketos-base/50-firmware.rules | 2 - aports/main/postmarketos-base/APKBUILD | 73 - aports/main/postmarketos-base/firmwareload.sh | 24 - .../postmarketos-base/networkmanager.conf | 13 - .../postmarketos-base.post-install | 82 - .../main/postmarketos-base/swapfile/swapfile | 95 - .../postmarketos-base/swapfile/swapfile.conf | 3 - .../postmarketos-base/swapfile/swapfile.init | 27 - aports/main/postmarketos-demos/APKBUILD | 24 - aports/main/postmarketos-demos/Makefile | 3 - aports/main/postmarketos-demos/main.c | 59 - .../20-debug-shell.files | 3 - .../20-debug-shell.sh | 56 - .../APKBUILD | 21 - .../00-maximum-attention.sh | 56 - .../APKBUILD | 16 - aports/main/postmarketos-mkinitfs/APKBUILD | 28 - aports/main/postmarketos-mkinitfs/init.sh.in | 58 - .../postmarketos-mkinitfs/init_functions.sh | 342 - aports/main/postmarketos-mkinitfs/mkinitfs.sh | 433 - .../postmarketos-mkinitfs.trigger | 55 - aports/main/postmarketos-splash/APKBUILD | 25 - aports/main/postmarketos-splash/config.ini | 17 - .../main/postmarketos-splash/make-splash.py | 115 - aports/main/postmarketos-ui-hildon/APKBUILD | 35 - .../postmarketos-ui-hildon.post-install | 12 - .../postmarketos-ui-hildon/start_hildon.sh | 15 - .../postmarketos-ui-hildon/xinitrc_hildon.sh | 16 - aports/main/postmarketos-ui-i3wm/APKBUILD | 23 - aports/main/postmarketos-ui-i3wm/lock.sh | 14 - .../postmarketos-ui-i3wm.post-install | 4 - aports/main/postmarketos-ui-matchbox/APKBUILD | 19 - .../postmarketos-ui-matchbox.post-install | 12 - .../start_matchbox.sh | 15 - .../000-system-background.gschema.override | 2 - aports/main/postmarketos-ui-mate/APKBUILD | 24 - .../postmarketos-ui-mate.post-install | 13 - .../main/postmarketos-ui-mate/start_mate.sh | 15 - .../postmarketos-ui-plasma-mobile/APKBUILD | 40 - .../postmarketos-ui-plasma-mobile/kdeglobals | 21 - .../main/postmarketos-ui-plasma-mobile/kwinrc | 12 - .../org.kde.phone.homescreen.js | 5 - ...postmarketos-ui-plasma-mobile.post-install | 12 - .../qtlogging.ini | 70 - .../start_plasma.sh | 31 - aports/main/postmarketos-ui-weston/APKBUILD | 26 - .../postmarketos-ui-weston.post-install | 17 - .../postmarketos-ui-weston/start_weston.sh | 44 - .../postmarketos-ui-weston/weston.ini.default | 9 - aports/main/postmarketos-ui-xfce4/APKBUILD | 26 - .../postmarketos-ui-xfce4.post-install | 13 - .../main/postmarketos-ui-xfce4/start_xfce4.sh | 15 - .../main/postmarketos-update-kernel/APKBUILD | 15 - .../update-kernel.sh | 41 - .../0001-include-sys-time.h-for-timeval.patch | 12 - aports/main/qt5-qtvirtualkeyboard/APKBUILD | 36 - ...0003-QtKeyExtensionGlobal-fix-export.patch | 14 - aports/main/qt5-qtwayland/APKBUILD | 36 - aports/main/sdl_net/APKBUILD | 33 - aports/main/telepathy-farstream/APKBUILD | 32 - aports/main/telepathy-glib/APKBUILD | 26 - .../main/telepathy-mission-control/APKBUILD | 29 - aports/main/telepathy-ofono/APKBUILD | 38 - aports/main/telepathy-qt5/APKBUILD | 36 - aports/main/triggerhappy/APKBUILD | 30 - aports/main/triggerhappy/triggerhappy.openrc | 23 - aports/main/unicsy-demo/APKBUILD | 26 - aports/main/watchdog-kick/APKBUILD | 22 - aports/main/watchdog-kick/watchdog-kick | 20 - aports/main/watchdog-kick/watchdog-kick.init | 27 - .../watchdog-kick/watchdog-kick.post-install | 3 - aports/main/wcnss-wlan/APKBUILD | 19 - aports/main/wcnss-wlan/wcnss-wlan.initd | 18 - .../main/wcnss-wlan/wcnss-wlan.post-install | 4 - .../wireguard-postmarketos-stable/APKBUILD | 46 - aports/matchbox/libmatchbox/APKBUILD | 49 - .../libmatchbox/external-xsettings.patch | 1084 --- aports/matchbox/libmatchbox/libmb.pc.in.patch | 14 - .../01-ignore-xsettings-common-h.patch | 25 - aports/matchbox/libxsettings-client/APKBUILD | 42 - aports/matchbox/libxsettings/APKBUILD | 33 - aports/matchbox/matchbox-common/APKBUILD | 37 - .../matchbox-common/matchbox-v2-utils.patch | 44 - aports/matchbox/matchbox-desktop/APKBUILD | 36 - aports/matchbox/matchbox-keyboard/APKBUILD | 32 - aports/matchbox/matchbox-panel/APKBUILD | 41 - .../matchbox-panel/allow-smaller-icons.patch | 34 - .../matchbox/matchbox-window-manager/APKBUILD | 40 - .../matchbox-window-manager/libpng.pc.patch | 12 - aports/modem/libqipcrtr4msmipc/APKBUILD | 23 - ...001-i9100-modem-firmware-device-path.patch | 13 - aports/modem/libsamsung-ipc/APKBUILD | 33 - aports/modem/libsmdpkt_wrapper/APKBUILD | 26 - .../modem-qcom-msm-downstream-common/APKBUILD | 18 - .../udev.rules | 1 - .../modem-qcom-msm-mainline-common/APKBUILD | 18 - .../modem-qcom-msm-mainline-common/udev.rules | 12 - aports/modem/msmipc-dev/APKBUILD | 30 - .../0001-doc-ofonod.8-escape-minus-sign.patch | 25 - ...eate-GList-helper-ofono_call_compare.patch | 205 - ...-promote-call_status_to_string-publi.patch | 54 - ...st-helper-to-manage-voice-call-lists.patch | 467 - ...ename-move-at_util_call_compare_by_s.patch | 313 - ...ename-move-at_util_call_compare_by_i.patch | 156 - ...11-qmimodem-sync-the-modem-on-enable.patch | 123 - ...treg_status_notify-debug-output-lac-.patch | 26 - ...g-output-the-network-time-if-updated.patch | 25 - ...-release_specific-over-hang_up_activ.patch | 53 - ...7-RFC-qmimodem-implement-voice-calls.patch | 976 -- aports/modem/ofono/APKBUILD | 71 - aports/modem/ofono/ofono.initd | 21 - aports/modem/ofono/support-smdpkt.patch | 84 - aports/modem/ofono/udev.rules | 2 - aports/modem/qcom_rmtfs/APKBUILD | 40 - aports/modem/qcom_rmtfs/qcom_rmtfs.initd | 14 - .../modem/qcom_rmtfs/qcom_rmtfs.post-install | 3 - aports/modem/qcom_rmtfs/support-uio.patch | 186 - aports/modem/qcom_rmtfs/udev.rules | 8 - .../qcom_rmtfs/update-storage-paths.patch | 32 - aports/modem/qrtr/APKBUILD | 34 - aports/modem/qrtr/fix-cfg-include.patch | 13 - aports/modem/qrtr/qrtr.initd | 11 - aports/modem/qrtr/qrtr.post-install | 3 - aports/modem/rpmsgexport/APKBUILD | 28 - ...oad-PIE-executables-to-right-address.patch | 89 - ...-user-fix-build-with-musl-on-aarch64.patch | 31 - ...-user-fix-build-with-musl-on-ppc64le.patch | 67 - ...se-QEMU_MODULE_PATH-as-a-search-path.patch | 85 - .../0001-ui-add-x_keymap.o-to-modules.patch | 65 - ...l.c-define-__SIGRTMIN-MAX-for-non-GN.patch | 37 - aports/temp/qemu/80-kvm.rules | 1 - aports/temp/qemu/APKBUILD | 406 - aports/temp/qemu/bridge.conf | 9 - .../temp/qemu/fix-sigevent-and-sigval_t.patch | 24 - aports/temp/qemu/fix-sockios-header.patch | 13 - ...-33-and-64-to-allow-golang-emulation.patch | 56 - .../temp/qemu/musl-F_SHLCK-and-F_EXLCK.patch | 19 - aports/temp/qemu/ncurses.patch | 13 - aports/temp/qemu/qemu-guest-agent.confd | 7 - aports/temp/qemu/qemu-guest-agent.initd | 6 - aports/temp/qemu/qemu.post-install | 10 - aports/temp/qemu/qemu.pre-install | 6 - .../qemu/test-crypto-ivgen-skip-essiv.patch | 54 - aports/temp/qemu/xattr_size_max.patch | 15 - aports/temp/qt5-qtbase/APKBUILD | 208 - .../temp/qt5-qtbase/hack-openssl_test.patch | 11 - aports/temp/qt5-qtbase/libressl-compat.patch | 23 - .../qt5-qtbase/qt-musl-iconv-no-bom.patch | 11 - aports/temp/qt5-qtdeclarative/APKBUILD | 61 - aports/temp/virglrenderer/APKBUILD | 30 - aports/temp/virglrenderer/musl-fixes.patch | 20 - ...or-fbdev-Added-parameter-pixman-type.patch | 156 - ...ompositor-fbdev-Add-support-for-ABGR.patch | 39 - ...-print-the-pixman-type-guessed-in-ca.patch | 26 - .../weston/0004-musl-weston-launcher.patch | 40 - aports/temp/weston/0005-timespec.patch | 10 - ...positor-fbdev-fix-start-up-assertion.patch | 78 - ...dp-compilation-with-freerdp-2.0.0-rc.patch | 121 - aports/temp/weston/APKBUILD | 145 - pmb/__init__.py | 22 +- pmb/config/__init__.py | 9 +- pmb/config/init.py | 40 +- pmb/config/pmaports.py | 136 + pmb/helpers/args.py | 169 + pmb/helpers/git.py | 39 +- pmb/parse/arguments.py | 48 +- test/static_code_analysis.sh | 24 - test/test_aportgen.py | 37 +- test/test_aports.py | 150 - test/test_aports_kde.py | 123 - test/test_build_package.py | 3 + test/test_config_user.py | 14 +- test/test_pkgrel_bump.py | 4 + test/test_questions.py | 9 +- test/test_soname_bump.py | 58 - test/test_upstream_compatibility.py | 117 - test/testcases_fast.sh | 3 +- .../pmaports}/cross/binutils-armhf/APKBUILD | 0 .../binutils-ld-fix-static-linking.patch | 0 ...x-powerpc64-out-ot-line-save-restore.patch | 0 .../cross/binutils-armhf}/gold-mips.patch | 0 .../pmaports}/cross/gcc-armhf/APKBUILD | 0 1601 files changed, 457 insertions(+), 484492 deletions(-) delete mode 100755 .gitlab/shared-runner_test-aports.sh delete mode 100755 .gitlab/shared-runner_test-upstream-compat.sh delete mode 100644 aports/cross/arch-bin-masquerade/APKBUILD delete mode 100644 aports/cross/binutils-aarch64/APKBUILD delete mode 100644 aports/cross/binutils-armhf/binutils-ld-fix-static-linking.patch delete mode 100644 aports/cross/binutils-armhf/fix-powerpc64-out-ot-line-save-restore.patch delete mode 100644 aports/cross/binutils-armhf/gold-mips.patch delete mode 100644 aports/cross/binutils-x86_64/APKBUILD delete mode 100644 aports/cross/binutils-x86_64/binutils-ld-fix-static-linking.patch delete mode 100644 aports/cross/binutils-x86_64/fix-powerpc64-out-ot-line-save-restore.patch delete mode 100644 aports/cross/binutils-x86_64/gold-mips.patch delete mode 100644 aports/cross/busybox-static-aarch64/APKBUILD delete mode 100644 aports/cross/busybox-static-armhf/APKBUILD delete mode 100644 aports/cross/ccache-cross-symlinks/APKBUILD delete mode 100644 aports/cross/gcc-aarch64/0001-i386-Move-struct-ix86_frame-to-machine_function.patch delete mode 100644 aports/cross/gcc-aarch64/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch delete mode 100644 aports/cross/gcc-aarch64/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch delete mode 100644 aports/cross/gcc-aarch64/0004-x86-Add-mindirect-branch.patch delete mode 100644 aports/cross/gcc-aarch64/0005-x86-Add-mfunction-return.patch delete mode 100644 aports/cross/gcc-aarch64/0006-x86-Add-mindirect-branch-register.patch delete mode 100644 aports/cross/gcc-aarch64/0007-x86-Add-V-register-operand-modifier.patch delete mode 100644 aports/cross/gcc-aarch64/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch delete mode 100644 aports/cross/gcc-aarch64/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch delete mode 100644 aports/cross/gcc-aarch64/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch delete mode 100644 aports/cross/gcc-aarch64/0011-i386-Update-mfunction-return-for-return-with-pop.patch delete mode 100644 aports/cross/gcc-aarch64/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch delete mode 100644 aports/cross/gcc-aarch64/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch delete mode 100644 aports/cross/gcc-aarch64/001_all_default-ssp-strong.patch delete mode 100644 aports/cross/gcc-aarch64/002_all_default-relro.patch delete mode 100644 aports/cross/gcc-aarch64/003_all_default-fortify-source.patch delete mode 100644 aports/cross/gcc-aarch64/005_all_default-as-needed.patch delete mode 100644 aports/cross/gcc-aarch64/011_all_default-warn-format-security.patch delete mode 100644 aports/cross/gcc-aarch64/012_all_default-warn-trampolines.patch delete mode 100644 aports/cross/gcc-aarch64/020_all_msgfmt-libstdc++-link.patch delete mode 100644 aports/cross/gcc-aarch64/050_all_libiberty-asprintf.patch delete mode 100644 aports/cross/gcc-aarch64/051_all_libiberty-pic.patch delete mode 100644 aports/cross/gcc-aarch64/053_all_libitm-no-fortify-source.patch delete mode 100644 aports/cross/gcc-aarch64/067_all_gcc-poison-system-directories.patch delete mode 100644 aports/cross/gcc-aarch64/090_all_pr55930-dependency-tracking.patch delete mode 100644 aports/cross/gcc-aarch64/201-cilkrts.patch delete mode 100644 aports/cross/gcc-aarch64/203-libgcc_s.patch delete mode 100644 aports/cross/gcc-aarch64/204-linux_libc_has_function.patch delete mode 100644 aports/cross/gcc-aarch64/205-nopie.patch delete mode 100644 aports/cross/gcc-aarch64/207-static-pie.patch delete mode 100644 aports/cross/gcc-aarch64/300-main-gcc-add-musl-s390x-dynamic-linker.patch delete mode 100644 aports/cross/gcc-aarch64/310-build-gcj-s390x.patch delete mode 100644 aports/cross/gcc-aarch64/320-libffi-gnulinux.patch delete mode 100644 aports/cross/gcc-aarch64/APKBUILD delete mode 100644 aports/cross/gcc-aarch64/ada-aarch64-multiarch.patch delete mode 100644 aports/cross/gcc-aarch64/ada-fixes.patch delete mode 100644 aports/cross/gcc-aarch64/ada-mips64.patch delete mode 100644 aports/cross/gcc-aarch64/ada-musl.patch delete mode 100644 aports/cross/gcc-aarch64/ada-shared.patch delete mode 100644 aports/cross/gcc-aarch64/boehm-gc-musl.patch delete mode 100644 aports/cross/gcc-aarch64/fix-cxxflags-passing.patch delete mode 100644 aports/cross/gcc-aarch64/fix-gcj-iconv-musl.patch delete mode 100644 aports/cross/gcc-aarch64/fix-gcj-musl.patch delete mode 100644 aports/cross/gcc-aarch64/fix-gcj-stdgnu14-link.patch delete mode 100644 aports/cross/gcc-aarch64/fix-linux-header-use-in-libgcc.patch delete mode 100644 aports/cross/gcc-aarch64/fix-rs6000-pie.patch delete mode 100644 aports/cross/gcc-aarch64/gcc-4.8-build-args.patch delete mode 100644 aports/cross/gcc-aarch64/gcc-4.9-musl-fortify.patch delete mode 100644 aports/cross/gcc-aarch64/gcc-6.1-musl-libssp.patch delete mode 100644 aports/cross/gcc-aarch64/gcc-pure64-mips.patch delete mode 100644 aports/cross/gcc-aarch64/gcc-pure64.patch delete mode 100644 aports/cross/gcc-aarch64/libgcc-always-build-gcceh.a.patch delete mode 100644 aports/cross/gcc-armhf/0001-i386-Move-struct-ix86_frame-to-machine_function.patch delete mode 100644 aports/cross/gcc-armhf/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch delete mode 100644 aports/cross/gcc-armhf/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch delete mode 100644 aports/cross/gcc-armhf/0004-x86-Add-mindirect-branch.patch delete mode 100644 aports/cross/gcc-armhf/0005-x86-Add-mfunction-return.patch delete mode 100644 aports/cross/gcc-armhf/0006-x86-Add-mindirect-branch-register.patch delete mode 100644 aports/cross/gcc-armhf/0007-x86-Add-V-register-operand-modifier.patch delete mode 100644 aports/cross/gcc-armhf/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch delete mode 100644 aports/cross/gcc-armhf/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch delete mode 100644 aports/cross/gcc-armhf/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch delete mode 100644 aports/cross/gcc-armhf/0011-i386-Update-mfunction-return-for-return-with-pop.patch delete mode 100644 aports/cross/gcc-armhf/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch delete mode 100644 aports/cross/gcc-armhf/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch delete mode 100644 aports/cross/gcc-armhf/001_all_default-ssp-strong.patch delete mode 100644 aports/cross/gcc-armhf/002_all_default-relro.patch delete mode 100644 aports/cross/gcc-armhf/003_all_default-fortify-source.patch delete mode 100644 aports/cross/gcc-armhf/005_all_default-as-needed.patch delete mode 100644 aports/cross/gcc-armhf/011_all_default-warn-format-security.patch delete mode 100644 aports/cross/gcc-armhf/012_all_default-warn-trampolines.patch delete mode 100644 aports/cross/gcc-armhf/020_all_msgfmt-libstdc++-link.patch delete mode 100644 aports/cross/gcc-armhf/050_all_libiberty-asprintf.patch delete mode 100644 aports/cross/gcc-armhf/051_all_libiberty-pic.patch delete mode 100644 aports/cross/gcc-armhf/053_all_libitm-no-fortify-source.patch delete mode 100644 aports/cross/gcc-armhf/067_all_gcc-poison-system-directories.patch delete mode 100644 aports/cross/gcc-armhf/090_all_pr55930-dependency-tracking.patch delete mode 100644 aports/cross/gcc-armhf/201-cilkrts.patch delete mode 100644 aports/cross/gcc-armhf/203-libgcc_s.patch delete mode 100644 aports/cross/gcc-armhf/204-linux_libc_has_function.patch delete mode 100644 aports/cross/gcc-armhf/205-nopie.patch delete mode 100644 aports/cross/gcc-armhf/207-static-pie.patch delete mode 100644 aports/cross/gcc-armhf/300-main-gcc-add-musl-s390x-dynamic-linker.patch delete mode 100644 aports/cross/gcc-armhf/310-build-gcj-s390x.patch delete mode 100644 aports/cross/gcc-armhf/320-libffi-gnulinux.patch delete mode 100644 aports/cross/gcc-armhf/ada-aarch64-multiarch.patch delete mode 100644 aports/cross/gcc-armhf/ada-fixes.patch delete mode 100644 aports/cross/gcc-armhf/ada-mips64.patch delete mode 100644 aports/cross/gcc-armhf/ada-musl.patch delete mode 100644 aports/cross/gcc-armhf/ada-shared.patch delete mode 100644 aports/cross/gcc-armhf/boehm-gc-musl.patch delete mode 100644 aports/cross/gcc-armhf/fix-cxxflags-passing.patch delete mode 100644 aports/cross/gcc-armhf/fix-gcj-iconv-musl.patch delete mode 100644 aports/cross/gcc-armhf/fix-gcj-musl.patch delete mode 100644 aports/cross/gcc-armhf/fix-gcj-stdgnu14-link.patch delete mode 100644 aports/cross/gcc-armhf/fix-linux-header-use-in-libgcc.patch delete mode 100644 aports/cross/gcc-armhf/fix-rs6000-pie.patch delete mode 100644 aports/cross/gcc-armhf/gcc-4.8-build-args.patch delete mode 100644 aports/cross/gcc-armhf/gcc-4.9-musl-fortify.patch delete mode 100644 aports/cross/gcc-armhf/gcc-6.1-musl-libssp.patch delete mode 100644 aports/cross/gcc-armhf/gcc-pure64-mips.patch delete mode 100644 aports/cross/gcc-armhf/gcc-pure64.patch delete mode 100644 aports/cross/gcc-armhf/libgcc-always-build-gcceh.a.patch delete mode 100644 aports/cross/gcc-x86_64/0001-i386-Move-struct-ix86_frame-to-machine_function.patch delete mode 100644 aports/cross/gcc-x86_64/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch delete mode 100644 aports/cross/gcc-x86_64/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch delete mode 100644 aports/cross/gcc-x86_64/0004-x86-Add-mindirect-branch.patch delete mode 100644 aports/cross/gcc-x86_64/0005-x86-Add-mfunction-return.patch delete mode 100644 aports/cross/gcc-x86_64/0006-x86-Add-mindirect-branch-register.patch delete mode 100644 aports/cross/gcc-x86_64/0007-x86-Add-V-register-operand-modifier.patch delete mode 100644 aports/cross/gcc-x86_64/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch delete mode 100644 aports/cross/gcc-x86_64/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch delete mode 100644 aports/cross/gcc-x86_64/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch delete mode 100644 aports/cross/gcc-x86_64/0011-i386-Update-mfunction-return-for-return-with-pop.patch delete mode 100644 aports/cross/gcc-x86_64/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch delete mode 100644 aports/cross/gcc-x86_64/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch delete mode 100644 aports/cross/gcc-x86_64/001_all_default-ssp-strong.patch delete mode 100644 aports/cross/gcc-x86_64/002_all_default-relro.patch delete mode 100644 aports/cross/gcc-x86_64/003_all_default-fortify-source.patch delete mode 100644 aports/cross/gcc-x86_64/005_all_default-as-needed.patch delete mode 100644 aports/cross/gcc-x86_64/011_all_default-warn-format-security.patch delete mode 100644 aports/cross/gcc-x86_64/012_all_default-warn-trampolines.patch delete mode 100644 aports/cross/gcc-x86_64/020_all_msgfmt-libstdc++-link.patch delete mode 100644 aports/cross/gcc-x86_64/050_all_libiberty-asprintf.patch delete mode 100644 aports/cross/gcc-x86_64/051_all_libiberty-pic.patch delete mode 100644 aports/cross/gcc-x86_64/053_all_libitm-no-fortify-source.patch delete mode 100644 aports/cross/gcc-x86_64/067_all_gcc-poison-system-directories.patch delete mode 100644 aports/cross/gcc-x86_64/090_all_pr55930-dependency-tracking.patch delete mode 100644 aports/cross/gcc-x86_64/201-cilkrts.patch delete mode 100644 aports/cross/gcc-x86_64/203-libgcc_s.patch delete mode 100644 aports/cross/gcc-x86_64/204-linux_libc_has_function.patch delete mode 100644 aports/cross/gcc-x86_64/205-nopie.patch delete mode 100644 aports/cross/gcc-x86_64/207-static-pie.patch delete mode 100644 aports/cross/gcc-x86_64/300-main-gcc-add-musl-s390x-dynamic-linker.patch delete mode 100644 aports/cross/gcc-x86_64/310-build-gcj-s390x.patch delete mode 100644 aports/cross/gcc-x86_64/320-libffi-gnulinux.patch delete mode 100644 aports/cross/gcc-x86_64/APKBUILD delete mode 100644 aports/cross/gcc-x86_64/ada-aarch64-multiarch.patch delete mode 100644 aports/cross/gcc-x86_64/ada-fixes.patch delete mode 100644 aports/cross/gcc-x86_64/ada-mips64.patch delete mode 100644 aports/cross/gcc-x86_64/ada-musl.patch delete mode 100644 aports/cross/gcc-x86_64/ada-shared.patch delete mode 100644 aports/cross/gcc-x86_64/boehm-gc-musl.patch delete mode 100644 aports/cross/gcc-x86_64/fix-cxxflags-passing.patch delete mode 100644 aports/cross/gcc-x86_64/fix-gcj-iconv-musl.patch delete mode 100644 aports/cross/gcc-x86_64/fix-gcj-musl.patch delete mode 100644 aports/cross/gcc-x86_64/fix-gcj-stdgnu14-link.patch delete mode 100644 aports/cross/gcc-x86_64/fix-linux-header-use-in-libgcc.patch delete mode 100644 aports/cross/gcc-x86_64/fix-rs6000-pie.patch delete mode 100644 aports/cross/gcc-x86_64/gcc-4.8-build-args.patch delete mode 100644 aports/cross/gcc-x86_64/gcc-4.9-musl-fortify.patch delete mode 100644 aports/cross/gcc-x86_64/gcc-6.1-musl-libssp.patch delete mode 100644 aports/cross/gcc-x86_64/gcc-pure64-mips.patch delete mode 100644 aports/cross/gcc-x86_64/gcc-pure64.patch delete mode 100644 aports/cross/gcc-x86_64/libgcc-always-build-gcceh.a.patch delete mode 100644 aports/cross/musl-aarch64/APKBUILD delete mode 100644 aports/cross/musl-armhf/APKBUILD delete mode 100644 aports/cross/musl-x86_64/APKBUILD delete mode 100644 aports/device/bluetooth-raspberry-pi/50-bluetooth-hci-auto-poweron.rules delete mode 100644 aports/device/bluetooth-raspberry-pi/APKBUILD delete mode 100755 aports/device/bluetooth-raspberry-pi/bluetooth-raspberry-pi.post-install delete mode 100755 aports/device/bluetooth-raspberry-pi/pi-bluetooth.openrc delete mode 100755 aports/device/device-amazon-thor/APKBUILD delete mode 100755 aports/device/device-amazon-thor/deviceinfo delete mode 100755 aports/device/device-amazon-thor/fb.modes delete mode 100644 aports/device/device-asus-duma/APKBUILD delete mode 100644 aports/device/device-asus-duma/deviceinfo delete mode 100644 aports/device/device-asus-flo/90-android-touch-dev.rules delete mode 100644 aports/device/device-asus-flo/APKBUILD delete mode 100644 aports/device/device-asus-flo/deviceinfo delete mode 100644 aports/device/device-asus-flo/pointercal delete mode 100644 aports/device/device-asus-flo/weston.ini delete mode 100644 aports/device/device-asus-flo/wpa_supplicant.conf delete mode 100644 aports/device/device-asus-grouper/90-android-touch-dev.rules delete mode 100644 aports/device/device-asus-grouper/APKBUILD delete mode 100644 aports/device/device-asus-grouper/deviceinfo delete mode 100644 aports/device/device-asus-grouper/pointercal delete mode 100644 aports/device/device-asus-t00f/APKBUILD delete mode 100644 aports/device/device-asus-t00f/deviceinfo delete mode 100644 aports/device/device-asus-t00f/xorg.conf delete mode 100644 aports/device/device-asus-tf101/APKBUILD delete mode 100644 aports/device/device-asus-tf101/deviceinfo delete mode 100644 aports/device/device-asus-z00t/90-touchscreen.rules delete mode 100644 aports/device/device-asus-z00t/APKBUILD delete mode 100644 aports/device/device-asus-z00t/deviceinfo delete mode 100644 aports/device/device-bq-chaozu/APKBUILD delete mode 100644 aports/device/device-bq-chaozu/deviceinfo delete mode 100644 aports/device/device-fairphone-fp2/APKBUILD delete mode 100644 aports/device/device-fairphone-fp2/deviceinfo delete mode 100644 aports/device/device-google-glass/APKBUILD delete mode 100644 aports/device/device-google-glass/deviceinfo delete mode 100644 aports/device/device-gp-peak/APKBUILD delete mode 100644 aports/device/device-gp-peak/device-gp-peak.start delete mode 100644 aports/device/device-gp-peak/deviceinfo delete mode 100644 aports/device/device-gp-peak/fb.modes delete mode 100644 aports/device/device-htc-a5ul/APKBUILD delete mode 100644 aports/device/device-htc-a5ul/deviceinfo delete mode 100644 aports/device/device-htc-a5ul/initfs-hook.sh delete mode 100644 aports/device/device-htc-ace/90-android-touch-dev.rules delete mode 100644 aports/device/device-htc-ace/APKBUILD delete mode 100644 aports/device/device-htc-ace/deviceinfo delete mode 100644 aports/device/device-htc-ace/initfs-hook.sh delete mode 100644 aports/device/device-htc-bravo/90-android-touch-dev.rules delete mode 100644 aports/device/device-htc-bravo/APKBUILD delete mode 100644 aports/device/device-htc-bravo/deviceinfo delete mode 100644 aports/device/device-htc-bravo/initfs-hook.sh delete mode 100644 aports/device/device-htc-bravo/pointercal delete mode 100644 aports/device/device-htc-flounder/APKBUILD delete mode 100644 aports/device/device-htc-flounder/deviceinfo delete mode 100644 aports/device/device-htc-m8/90-android-touch-dev.rules delete mode 100644 aports/device/device-htc-m8/APKBUILD delete mode 100644 aports/device/device-htc-m8/deviceinfo delete mode 100644 aports/device/device-htc-m8/initfs-hook.sh delete mode 100644 aports/device/device-htc-vivo/APKBUILD delete mode 100644 aports/device/device-htc-vivo/deviceinfo delete mode 100644 aports/device/device-htc-vivo/initfs-hook.sh delete mode 100644 aports/device/device-huawei-angler/90-android-touch-dev.rules delete mode 100644 aports/device/device-huawei-angler/APKBUILD delete mode 100644 aports/device/device-huawei-angler/bcmdhd.cal delete mode 100644 aports/device/device-huawei-angler/deviceinfo delete mode 100644 aports/device/device-huawei-y530/APKBUILD delete mode 100644 aports/device/device-huawei-y530/deviceinfo delete mode 100644 aports/device/device-infocus-flatfish/APKBUILD delete mode 100644 aports/device/device-infocus-flatfish/deviceinfo delete mode 100644 aports/device/device-infocus-flatfish/fb.modes delete mode 100644 aports/device/device-jolla-sbj/APKBUILD delete mode 100644 aports/device/device-jolla-sbj/deviceinfo delete mode 100644 aports/device/device-leeco-s2/APKBUILD delete mode 100644 aports/device/device-leeco-s2/deviceinfo delete mode 100644 aports/device/device-lenovo-karate/90-android-touch-dev.rules delete mode 100644 aports/device/device-lenovo-karate/APKBUILD delete mode 100644 aports/device/device-lenovo-karate/deviceinfo delete mode 100644 aports/device/device-lg-bullhead/APKBUILD delete mode 100644 aports/device/device-lg-bullhead/deviceinfo delete mode 100644 aports/device/device-lg-d285/90-android-touch-dev.rules delete mode 100644 aports/device/device-lg-d285/APKBUILD delete mode 100644 aports/device/device-lg-d285/deviceinfo delete mode 100644 aports/device/device-lg-d285/initfs-hook.sh delete mode 100644 aports/device/device-lg-d855/90-android-touch-dev.rules delete mode 100644 aports/device/device-lg-d855/APKBUILD delete mode 100644 aports/device/device-lg-d855/deviceinfo delete mode 100644 aports/device/device-lg-dory/90-touchscreen-dev.rules delete mode 100644 aports/device/device-lg-dory/APKBUILD delete mode 100644 aports/device/device-lg-dory/deviceinfo delete mode 100644 aports/device/device-lg-h815/APKBUILD delete mode 100644 aports/device/device-lg-h815/deviceinfo delete mode 100644 aports/device/device-lg-hammerhead/APKBUILD delete mode 100644 aports/device/device-lg-hammerhead/brcmfmac4339-sdio.txt delete mode 100644 aports/device/device-lg-hammerhead/device-lg-hammerhead.post-install delete mode 100644 aports/device/device-lg-hammerhead/deviceinfo delete mode 100644 aports/device/device-lg-hammerhead/modules-load.conf delete mode 100644 aports/device/device-lg-hammerhead/weston.ini delete mode 100644 aports/device/device-lg-hammerhead/xorg.conf delete mode 100644 aports/device/device-lg-lenok/90-android-touch-dev.rules delete mode 100644 aports/device/device-lg-lenok/APKBUILD delete mode 100644 aports/device/device-lg-lenok/deviceinfo delete mode 100644 aports/device/device-lg-lenok/fb_fix.sh delete mode 100644 aports/device/device-lg-lenok/initfs-hook.sh delete mode 100644 aports/device/device-lg-mako/90-android-touch-dev.rules delete mode 100644 aports/device/device-lg-mako/APKBUILD delete mode 100644 aports/device/device-lg-mako/deviceinfo delete mode 100644 aports/device/device-lg-mako/fb.modes delete mode 100644 aports/device/device-lg-mako/pointercal delete mode 100644 aports/device/device-lg-mako/profile.sh delete mode 100644 aports/device/device-lg-mako/weston.ini delete mode 100644 aports/device/device-motorola-athene/APKBUILD delete mode 100644 aports/device/device-motorola-athene/deviceinfo delete mode 100644 aports/device/device-motorola-falcon/APKBUILD delete mode 100644 aports/device/device-motorola-falcon/deviceinfo delete mode 100644 aports/device/device-motorola-ghost/APKBUILD delete mode 100644 aports/device/device-motorola-ghost/deviceinfo delete mode 100644 aports/device/device-motorola-harpia/APKBUILD delete mode 100644 aports/device/device-motorola-harpia/deviceinfo delete mode 100644 aports/device/device-motorola-harpia/initfs-hook.sh delete mode 100644 aports/device/device-motorola-maserati/10-safestrap-maserati.sh delete mode 100644 aports/device/device-motorola-maserati/APKBUILD delete mode 100644 aports/device/device-motorola-maserati/deviceinfo delete mode 100644 aports/device/device-motorola-osprey/90-android-touch-dev.rules delete mode 100644 aports/device/device-motorola-osprey/APKBUILD delete mode 100644 aports/device/device-motorola-osprey/deviceinfo delete mode 100644 aports/device/device-motorola-osprey/fb-workaround.sh delete mode 100644 aports/device/device-motorola-osprey/initfs-hook.sh delete mode 100644 aports/device/device-motorola-peregrine/APKBUILD delete mode 100644 aports/device/device-motorola-peregrine/deviceinfo delete mode 100644 aports/device/device-motorola-peregrine/xorg.conf delete mode 100644 aports/device/device-motorola-potter/APKBUILD delete mode 100644 aports/device/device-motorola-potter/deviceinfo delete mode 100644 aports/device/device-motorola-shamu/APKBUILD delete mode 100644 aports/device/device-motorola-shamu/deviceinfo delete mode 100644 aports/device/device-motorola-shamu/initfs-hook.sh delete mode 100644 aports/device/device-motorola-titan/90-android-touch-dev.rules delete mode 100644 aports/device/device-motorola-titan/APKBUILD delete mode 100644 aports/device/device-motorola-titan/device-motorola-titan.post-install delete mode 100644 aports/device/device-motorola-titan/deviceinfo delete mode 100644 aports/device/device-motorola-titan/profile.sh delete mode 100644 aports/device/device-motorola-titan/weston.ini delete mode 100644 aports/device/device-nextbit-robin/APKBUILD delete mode 100644 aports/device/device-nextbit-robin/deviceinfo delete mode 100644 aports/device/device-nokia-n9/APKBUILD delete mode 100644 aports/device/device-nokia-n9/deviceinfo delete mode 100644 aports/device/device-nokia-n9/initfs-hook.sh delete mode 100644 aports/device/device-nokia-n9/weston.ini delete mode 100644 aports/device/device-nokia-n900/APKBUILD delete mode 100644 aports/device/device-nokia-n900/acpi.map delete mode 100755 aports/device/device-nokia-n900/acpi_handler.sh delete mode 100644 aports/device/device-nokia-n900/asound.state delete mode 100644 aports/device/device-nokia-n900/backlight-enable.sh delete mode 100644 aports/device/device-nokia-n900/device-nokia-n900.post-install delete mode 100644 aports/device/device-nokia-n900/deviceinfo delete mode 100755 aports/device/device-nokia-n900/i3wm/bq27200_status.sh delete mode 100644 aports/device/device-nokia-n900/i3wm/i3status.conf delete mode 100644 aports/device/device-nokia-n900/i3wm/i3wm.conf delete mode 100644 aports/device/device-nokia-n900/keymaps/40-xkb.conf delete mode 100644 aports/device/device-nokia-n900/keymaps/rx51_ch-de.map delete mode 100644 aports/device/device-nokia-n900/keymaps/rx51_us.map delete mode 100644 aports/device/device-nokia-n900/pointercal delete mode 100644 aports/device/device-nokia-n900/uboot-script.cmd delete mode 100644 aports/device/device-nokia-n900/udev/10-nokia-modem.rules delete mode 100644 aports/device/device-nokia-n900/udev/90-touchscreen-dev.rules delete mode 100644 aports/device/device-nokia-n900/weston.ini delete mode 100644 aports/device/device-nokia-n900/xorg.conf delete mode 100644 aports/device/device-nokia-rm885/APKBUILD delete mode 100644 aports/device/device-nokia-rm885/deviceinfo delete mode 100644 aports/device/device-oneplus-bacon/90-android-touch-dev.rules delete mode 100644 aports/device/device-oneplus-bacon/APKBUILD delete mode 100644 aports/device/device-oneplus-bacon/deviceinfo delete mode 100644 aports/device/device-oneplus-bacon/weston.ini delete mode 100644 aports/device/device-oneplus-oneplus2/APKBUILD delete mode 100644 aports/device/device-oneplus-oneplus2/deviceinfo delete mode 100644 aports/device/device-oneplus-oneplus2/initfs-hook.sh delete mode 100644 aports/device/device-oneplus-onyx/90-android-touch-dev.rules delete mode 100644 aports/device/device-oneplus-onyx/APKBUILD delete mode 100644 aports/device/device-oneplus-onyx/deviceinfo delete mode 100644 aports/device/device-oneplus-onyx/fb.modes delete mode 100644 aports/device/device-qemu-aarch64/APKBUILD delete mode 100644 aports/device/device-qemu-aarch64/deviceinfo delete mode 100644 aports/device/device-qemu-aarch64/weston.ini delete mode 100644 aports/device/device-qemu-amd64/APKBUILD delete mode 100644 aports/device/device-qemu-amd64/deviceinfo delete mode 100644 aports/device/device-qemu-amd64/weston.ini delete mode 100644 aports/device/device-qemu-vexpress/APKBUILD delete mode 100644 aports/device/device-qemu-vexpress/deviceinfo delete mode 100644 aports/device/device-raspberry-pi/95-vchiq-permissions.rules delete mode 100644 aports/device/device-raspberry-pi/APKBUILD delete mode 100644 aports/device/device-raspberry-pi/cmdline.txt delete mode 100644 aports/device/device-raspberry-pi/config.txt delete mode 100644 aports/device/device-raspberry-pi/device-raspberry-pi-kernel-rpi.post-install delete mode 100644 aports/device/device-raspberry-pi/device-raspberry-pi-kernel-rpi2.post-install delete mode 100644 aports/device/device-raspberry-pi/deviceinfo delete mode 100644 aports/device/device-raspberry-pi/usercfg.txt delete mode 100644 aports/device/device-raspberry-pi3/95-vchiq-permissions.rules delete mode 100644 aports/device/device-raspberry-pi3/APKBUILD delete mode 100644 aports/device/device-raspberry-pi3/cmdline.txt delete mode 100644 aports/device/device-raspberry-pi3/config.txt delete mode 100644 aports/device/device-raspberry-pi3/device-raspberry-pi3-kernel-rpi.post-install delete mode 100644 aports/device/device-raspberry-pi3/deviceinfo delete mode 100644 aports/device/device-raspberry-pi3/usercfg.txt delete mode 100644 aports/device/device-raspberry-pi3/weston.ini delete mode 100644 aports/device/device-samsung-espresso10/APKBUILD delete mode 100644 aports/device/device-samsung-espresso10/deviceinfo delete mode 100644 aports/device/device-samsung-gts210vewifi/90-sec_touchscreen.rules delete mode 100644 aports/device/device-samsung-gts210vewifi/APKBUILD delete mode 100644 aports/device/device-samsung-gts210vewifi/deviceinfo delete mode 100644 aports/device/device-samsung-i747m/90-android-touch-dev.rules delete mode 100644 aports/device/device-samsung-i747m/APKBUILD delete mode 100644 aports/device/device-samsung-i747m/deviceinfo delete mode 100644 aports/device/device-samsung-i747m/fb.modes delete mode 100644 aports/device/device-samsung-i8190/APKBUILD delete mode 100644 aports/device/device-samsung-i8190/deviceinfo delete mode 100644 aports/device/device-samsung-i8190/init-usb-hook.sh delete mode 100644 aports/device/device-samsung-i8190/module-config.conf delete mode 100644 aports/device/device-samsung-i8190/modules-load.conf delete mode 100644 aports/device/device-samsung-i8200/APKBUILD delete mode 100644 aports/device/device-samsung-i8200/deviceinfo delete mode 100644 aports/device/device-samsung-i9003/90-android-touch-dev.rules delete mode 100644 aports/device/device-samsung-i9003/APKBUILD delete mode 100644 aports/device/device-samsung-i9003/deviceinfo delete mode 100644 aports/device/device-samsung-i9070/APKBUILD delete mode 100644 aports/device/device-samsung-i9070/deviceinfo delete mode 100644 aports/device/device-samsung-i9070/initfs-hook.sh delete mode 100644 aports/device/device-samsung-i9070/modules-load.conf delete mode 100644 aports/device/device-samsung-i9100/90-android-touch-dev.rules delete mode 100644 aports/device/device-samsung-i9100/APKBUILD delete mode 100644 aports/device/device-samsung-i9100/device-samsung-i9100.post-install delete mode 100644 aports/device/device-samsung-i9100/deviceinfo delete mode 100644 aports/device/device-samsung-i9195/APKBUILD delete mode 100644 aports/device/device-samsung-i9195/deviceinfo delete mode 100644 aports/device/device-samsung-i9305/90-android-touch-dev.rules delete mode 100644 aports/device/device-samsung-i9305/APKBUILD delete mode 100644 aports/device/device-samsung-i9305/device-samsung-i9305.post-install delete mode 100644 aports/device/device-samsung-i9305/deviceinfo delete mode 100644 aports/device/device-samsung-jflte/90-android-sec_touchscreen.rules delete mode 100644 aports/device/device-samsung-jflte/APKBUILD delete mode 100644 aports/device/device-samsung-jflte/deviceinfo delete mode 100644 aports/device/device-samsung-klte/APKBUILD delete mode 100644 aports/device/device-samsung-klte/deviceinfo delete mode 100644 aports/device/device-samsung-kminilte/APKBUILD delete mode 100644 aports/device/device-samsung-kminilte/deviceinfo delete mode 100644 aports/device/device-samsung-kminilte/fb.modes delete mode 100644 aports/device/device-samsung-kylepro/APKBUILD delete mode 100644 aports/device/device-samsung-kylepro/deviceinfo delete mode 100644 aports/device/device-samsung-kylessopen/APKBUILD delete mode 100644 aports/device/device-samsung-kylessopen/deviceinfo delete mode 100644 aports/device/device-samsung-kylevess/APKBUILD delete mode 100644 aports/device/device-samsung-kylevess/deviceinfo delete mode 100644 aports/device/device-samsung-lt023g/APKBUILD delete mode 100644 aports/device/device-samsung-lt023g/deviceinfo delete mode 100644 aports/device/device-samsung-maguro/APKBUILD delete mode 100644 aports/device/device-samsung-maguro/deviceinfo delete mode 100644 aports/device/device-samsung-manta/APKBUILD delete mode 100644 aports/device/device-samsung-manta/deviceinfo delete mode 100644 aports/device/device-samsung-n5110/90-device-samsung-n5110.rules delete mode 100644 aports/device/device-samsung-n5110/APKBUILD delete mode 100644 aports/device/device-samsung-n5110/Kona_WM1811/Kona_WM1811.conf delete mode 100644 aports/device/device-samsung-n5110/Kona_WM1811/hifi.conf delete mode 100644 aports/device/device-samsung-n5110/Kona_WM1811/lp.conf delete mode 100644 aports/device/device-samsung-n5110/asound.state delete mode 100644 aports/device/device-samsung-n5110/deviceinfo delete mode 100644 aports/device/device-samsung-n5110/pointercal delete mode 100644 aports/device/device-samsung-n7100/90-android-touch-dev.rules delete mode 100644 aports/device/device-samsung-n7100/APKBUILD delete mode 100644 aports/device/device-samsung-n7100/deviceinfo delete mode 100644 aports/device/device-samsung-p4wifi/90-device-samsung-p4wifi-audio.rules delete mode 100644 aports/device/device-samsung-p4wifi/90-device-samsung-p4wifi-jack.rules delete mode 100644 aports/device/device-samsung-p4wifi/APKBUILD delete mode 100644 aports/device/device-samsung-p4wifi/HiFi delete mode 100644 aports/device/device-samsung-p4wifi/deviceinfo delete mode 100644 aports/device/device-samsung-p4wifi/modprobe.conf delete mode 100644 aports/device/device-samsung-p4wifi/modules-load.conf delete mode 100644 aports/device/device-samsung-p4wifi/wm8994aif1.conf delete mode 100644 aports/device/device-samsung-s6500d/APKBUILD delete mode 100644 aports/device/device-samsung-s6500d/deviceinfo delete mode 100644 aports/device/device-semc-anzu/APKBUILD delete mode 100644 aports/device/device-semc-anzu/deviceinfo delete mode 100644 aports/device/device-semc-anzu/modules-load.conf delete mode 100644 aports/device/device-semc-smultron/APKBUILD delete mode 100644 aports/device/device-semc-smultron/deviceinfo delete mode 100644 aports/device/device-semc-smultron/directfbrc delete mode 100644 aports/device/device-semc-smultron/fb.modes delete mode 100644 aports/device/device-sony-amami/90-android-touch-dev.rules delete mode 100644 aports/device/device-sony-amami/APKBUILD delete mode 100644 aports/device/device-sony-amami/deviceinfo delete mode 100644 aports/device/device-sony-aries/90-android-touch-dev.rules delete mode 100644 aports/device/device-sony-aries/APKBUILD delete mode 100644 aports/device/device-sony-aries/deviceinfo delete mode 100644 aports/device/device-sony-aries/fb-workaround.sh delete mode 100644 aports/device/device-sony-castor-windy/90-android-touch-dev.rules delete mode 100644 aports/device/device-sony-castor-windy/APKBUILD delete mode 100644 aports/device/device-sony-castor-windy/brcmfmac4335-sdio.txt delete mode 100644 aports/device/device-sony-castor-windy/deviceinfo delete mode 100644 aports/device/device-sony-castor-windy/modules-load.conf delete mode 100644 aports/device/device-sony-coconut/APKBUILD delete mode 100644 aports/device/device-sony-coconut/deviceinfo delete mode 100644 aports/device/device-sony-honami/90-android-touch-dev.rules delete mode 100644 aports/device/device-sony-honami/APKBUILD delete mode 100644 aports/device/device-sony-honami/deviceinfo delete mode 100644 aports/device/device-sony-nicki/90-android-touch-dev.rules delete mode 100755 aports/device/device-sony-nicki/APKBUILD delete mode 100755 aports/device/device-sony-nicki/deviceinfo delete mode 100644 aports/device/device-sony-nicki/fb.modes delete mode 100644 aports/device/device-sony-nicki/pointercal delete mode 100644 aports/device/device-sony-nicki/screen-workaround.sh delete mode 100644 aports/device/device-sony-scorpion/APKBUILD delete mode 100644 aports/device/device-sony-scorpion/deviceinfo delete mode 100644 aports/device/device-sony-seagull/APKBUILD delete mode 100644 aports/device/device-sony-seagull/deviceinfo delete mode 100644 aports/device/device-sony-sirius/99-touch.rules delete mode 100644 aports/device/device-sony-sirius/APKBUILD delete mode 100644 aports/device/device-sony-sirius/brcmfmac4339-sdio.txt delete mode 100644 aports/device/device-sony-sirius/deviceinfo delete mode 100644 aports/device/device-sony-sirius/modules-load.conf delete mode 100644 aports/device/device-sony-sirius/weston.ini delete mode 100644 aports/device/device-sony-yuga/90-android-touch-dev.rules delete mode 100644 aports/device/device-sony-yuga/APKBUILD delete mode 100644 aports/device/device-sony-yuga/deviceinfo delete mode 100644 aports/device/device-t2m-flame/90-android-touch-dev.rules delete mode 100644 aports/device/device-t2m-flame/APKBUILD delete mode 100644 aports/device/device-t2m-flame/device-t2m-flame.post-install delete mode 100644 aports/device/device-t2m-flame/deviceinfo delete mode 100644 aports/device/device-teclast-x80pro/APKBUILD delete mode 100644 aports/device/device-teclast-x80pro/deviceinfo delete mode 100644 aports/device/device-wiko-lenny3/APKBUILD delete mode 100644 aports/device/device-wiko-lenny3/deviceinfo delete mode 100644 aports/device/device-xiaomi-armani/100-charging.rules delete mode 100644 aports/device/device-xiaomi-armani/90-touchscreen.rules delete mode 100644 aports/device/device-xiaomi-armani/APKBUILD delete mode 100644 aports/device/device-xiaomi-armani/armani_battery_charging.sh delete mode 100644 aports/device/device-xiaomi-armani/armani_battery_discharging.sh delete mode 100644 aports/device/device-xiaomi-armani/device-xiaomi-armani.post-install delete mode 100644 aports/device/device-xiaomi-armani/device-xiaomi-armani.post-upgrade delete mode 100644 aports/device/device-xiaomi-armani/device-xiaomi-armani.pre-deinstall delete mode 100644 aports/device/device-xiaomi-armani/deviceinfo delete mode 100644 aports/device/device-xiaomi-armani/fb.modes delete mode 100644 aports/device/device-xiaomi-armani/wlanarmani delete mode 100644 aports/device/device-xiaomi-cancro/APKBUILD delete mode 100644 aports/device/device-xiaomi-cancro/deviceinfo delete mode 100644 aports/device/device-xiaomi-ido/APKBUILD delete mode 100644 aports/device/device-xiaomi-ido/deviceinfo delete mode 100644 aports/device/device-xiaomi-ido/fb.modes delete mode 100644 aports/device/device-xiaomi-ido/initfs-hook.sh delete mode 100644 aports/device/device-xiaomi-mido/APKBUILD delete mode 100644 aports/device/device-xiaomi-mido/deviceinfo delete mode 100644 aports/device/device-xiaomi-santoni/APKBUILD delete mode 100644 aports/device/device-xiaomi-santoni/deviceinfo delete mode 100644 aports/device/device-zte-kis3/APKBUILD delete mode 100644 aports/device/device-zte-kis3/deviceinfo delete mode 100644 aports/device/gps-nokia-n900/APKBUILD delete mode 100755 aports/device/linux-amazon-thor/00_Input-lifebook-use-static-inline-instead-of-inline-i.patch delete mode 100755 aports/device/linux-amazon-thor/00_Input-sentelic-use-static-inline-instead-of-inline.patch delete mode 100644 aports/device/linux-amazon-thor/00_fix_qaudio.patch delete mode 100755 aports/device/linux-amazon-thor/00_fix_return_address.patch delete mode 100644 aports/device/linux-amazon-thor/00_fix_smd_private.patch delete mode 100755 aports/device/linux-amazon-thor/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-amazon-thor/03_msm_fix_trace.patch delete mode 100644 aports/device/linux-amazon-thor/06_fix_mdss_fb_rgb_mode.patch delete mode 100755 aports/device/linux-amazon-thor/APKBUILD delete mode 100644 aports/device/linux-amazon-thor/compiler-gcc6.h delete mode 100755 aports/device/linux-amazon-thor/config-amazon-thor.armhf delete mode 100644 aports/device/linux-asus-duma/00_fix_return_address.patch delete mode 100644 aports/device/linux-asus-duma/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-asus-duma/APKBUILD delete mode 100644 aports/device/linux-asus-duma/compiler-gcc6.h delete mode 100644 aports/device/linux-asus-duma/config-asus-duma.armhf delete mode 100644 aports/device/linux-asus-flo/00_Collapse_usb_support_into_one_node.patch delete mode 100644 aports/device/linux-asus-flo/01_Add_regulator_tweaks_and_wcnss_entry_to_support_wifi.patch delete mode 100644 aports/device/linux-asus-flo/02_Avoid_sending_high_rates_to_downstream_clocks_during_set_rate.patch delete mode 100644 aports/device/linux-asus-flo/03_Support_devicetree_binding.patch delete mode 100644 aports/device/linux-asus-flo/04_Summit_SMB345_charger_IC.patch delete mode 100644 aports/device/linux-asus-flo/05_Add_smb345_charger_node.patch delete mode 100644 aports/device/linux-asus-flo/06_Modify_the_elants_i2c_driver_to_not_immediately_fail_on_Nexus7.patch delete mode 100644 aports/device/linux-asus-flo/07_Get_touchpanel_working_on_flo.patch delete mode 100644 aports/device/linux-asus-flo/08_Add_mac_address.patch delete mode 100644 aports/device/linux-asus-flo/09_Make_of_dma_deconfigure()_public.patch delete mode 100644 aports/device/linux-asus-flo/10_Split_of_configure_dma()_into_mask_and_ops_configuration.patch delete mode 100644 aports/device/linux-asus-flo/11_Configure_dma_operations_at_probe_time.patch delete mode 100644 aports/device/linux-asus-flo/12_Handle_IOMMU_lookup_failure_with_deferred_probing_or_error.patch delete mode 100644 aports/device/linux-asus-flo/APKBUILD delete mode 100644 aports/device/linux-asus-flo/config-asus-flo.armhf delete mode 100644 aports/device/linux-asus-grouper/APKBUILD delete mode 100644 aports/device/linux-asus-grouper/compiler-gcc6.h delete mode 100644 aports/device/linux-asus-grouper/config-asus-grouper.armhf delete mode 100644 aports/device/linux-asus-grouper/duplicate-return-address-definition.patch delete mode 100644 aports/device/linux-asus-t00f/01_ipc-shm-fix-redefinition-of-shm_rcu_free.patch delete mode 100644 aports/device/linux-asus-t00f/02_drivers-external_drivers-remove-unused-constants.patch delete mode 100644 aports/device/linux-asus-t00f/03_ipc-fix-undefined-references.patch delete mode 100644 aports/device/linux-asus-t00f/APKBUILD delete mode 100644 aports/device/linux-asus-t00f/compiler-gcc6.h delete mode 100644 aports/device/linux-asus-t00f/config-asus-t00f.x86 delete mode 100644 aports/device/linux-asus-tf101/00_fix_return_address.patch delete mode 100644 aports/device/linux-asus-tf101/01-fix-alignment.patch delete mode 100644 aports/device/linux-asus-tf101/02_fix_static_vma_address.patch delete mode 100644 aports/device/linux-asus-tf101/03_remove_deprecated_perl.patch delete mode 100644 aports/device/linux-asus-tf101/APKBUILD delete mode 100644 aports/device/linux-asus-tf101/compiler-gcc6.h delete mode 100644 aports/device/linux-asus-tf101/config-asus-tf101.armhf delete mode 100644 aports/device/linux-asus-z00t/01_fix_gcc6_errors.patch delete mode 100644 aports/device/linux-asus-z00t/02_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-asus-z00t/05_dtb-fix.patch delete mode 100644 aports/device/linux-asus-z00t/APKBUILD delete mode 100644 aports/device/linux-asus-z00t/compiler-gcc6.h delete mode 100644 aports/device/linux-asus-z00t/config-asus-z00t.aarch64 delete mode 100644 aports/device/linux-bq-chaozu/00_fix_rndis_ipa_trace_header_not_found.patch delete mode 100644 aports/device/linux-bq-chaozu/01_prima_gcc6.patch delete mode 100644 aports/device/linux-bq-chaozu/02_prima_misleading_indentation.patch delete mode 100644 aports/device/linux-bq-chaozu/03_fix_u_f_header.patch delete mode 100644 aports/device/linux-bq-chaozu/04_fix_usb_gadget_function.patch delete mode 100644 aports/device/linux-bq-chaozu/APKBUILD delete mode 100644 aports/device/linux-bq-chaozu/config-bq-chaozu.armhf delete mode 100644 aports/device/linux-fairphone-fp2/0001-ARM-8158-1-LLVMLinux-use-static-inline-in-ARM-ftrace.patch delete mode 100644 aports/device/linux-fairphone-fp2/0002-gpu-msm-Fix-compilation.patch delete mode 100644 aports/device/linux-fairphone-fp2/0003-Fix-includes.patch delete mode 100644 aports/device/linux-fairphone-fp2/0004-msm-fix-trace.patch delete mode 100644 aports/device/linux-fairphone-fp2/0005-Input-lifebook-use-static-inline-instead-of-inline-i.patch delete mode 100644 aports/device/linux-fairphone-fp2/0006-Input-sentelic-use-static-inline-instead-of-inline.patch delete mode 100644 aports/device/linux-fairphone-fp2/APKBUILD delete mode 100644 aports/device/linux-fairphone-fp2/compiler-gcc6.h delete mode 100644 aports/device/linux-fairphone-fp2/config-fairphone-fp2.armhf delete mode 100644 aports/device/linux-google-glass/APKBUILD delete mode 100644 aports/device/linux-google-glass/compiler-gcc6.h delete mode 100644 aports/device/linux-google-glass/config-google-glass.armhf delete mode 100644 aports/device/linux-gp-peak/00_fix_return_address.patch delete mode 100644 aports/device/linux-gp-peak/01_timeconst_fix.patch delete mode 100644 aports/device/linux-gp-peak/APKBUILD delete mode 100644 aports/device/linux-gp-peak/compiler-gcc6.h delete mode 100644 aports/device/linux-gp-peak/config-gp-peak.armhf delete mode 100644 aports/device/linux-htc-a5ul/0003-Fix-CC-error.patch delete mode 100644 aports/device/linux-htc-a5ul/APKBUILD delete mode 100644 aports/device/linux-htc-a5ul/compiler-gcc6.h delete mode 100644 aports/device/linux-htc-a5ul/config-htc-a5ul.armhf delete mode 100644 aports/device/linux-htc-ace/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-htc-ace/APKBUILD delete mode 100644 aports/device/linux-htc-ace/compiler-gcc6.h delete mode 100644 aports/device/linux-htc-ace/config-htc-ace.armhf delete mode 100644 aports/device/linux-htc-bravo/APKBUILD delete mode 100644 aports/device/linux-htc-bravo/compiler-gcc6.h delete mode 100644 aports/device/linux-htc-bravo/config-htc-bravo.armhf delete mode 100644 aports/device/linux-htc-flounder/APKBUILD delete mode 100644 aports/device/linux-htc-flounder/compiler-gcc6.h delete mode 100644 aports/device/linux-htc-flounder/config-htc-flounder.aarch64 delete mode 100644 aports/device/linux-htc-m8/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-htc-m8/APKBUILD delete mode 100644 aports/device/linux-htc-m8/compiler-gcc6.h delete mode 100644 aports/device/linux-htc-m8/config-htc-m8.armhf delete mode 100644 aports/device/linux-htc-m8/psmouse_base.patch delete mode 100644 aports/device/linux-htc-vivo/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-htc-vivo/03_use-static-inline-in-ftrace.h.patch delete mode 100644 aports/device/linux-htc-vivo/04-fix-redefinition-of-unregister_con_driver.patch delete mode 100644 aports/device/linux-htc-vivo/APKBUILD delete mode 100644 aports/device/linux-htc-vivo/compiler-gcc6.h delete mode 100644 aports/device/linux-htc-vivo/config-htc-vivo.armhf delete mode 100644 aports/device/linux-huawei-angler/APKBUILD delete mode 100644 aports/device/linux-huawei-angler/compiler-gcc6.h delete mode 100644 aports/device/linux-huawei-angler/config-huawei-angler.aarch64 delete mode 100644 aports/device/linux-huawei-angler/kernel-use-the-gnu89-standard-explicitly.patch delete mode 100644 aports/device/linux-huawei-y530/00_fix_return_address.patch delete mode 100644 aports/device/linux-huawei-y530/01_timeconst_fix.patch delete mode 100644 aports/device/linux-huawei-y530/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-huawei-y530/03_avoid_rpmb_read_during_boot.patch delete mode 100644 aports/device/linux-huawei-y530/04_add_missing_dtb.patch delete mode 100644 aports/device/linux-huawei-y530/05_fix_mdp3_ctrl_off.patch delete mode 100644 aports/device/linux-huawei-y530/06_fix_mdss_fb_rgb_mode.patch delete mode 100644 aports/device/linux-huawei-y530/07_fix_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-huawei-y530/08_fix_touchscreen.patch delete mode 100644 aports/device/linux-huawei-y530/09_fix_various_include_directives.patch delete mode 100644 aports/device/linux-huawei-y530/APKBUILD delete mode 100644 aports/device/linux-huawei-y530/compiler-gcc6.h delete mode 100644 aports/device/linux-huawei-y530/config-huawei-y530.armhf delete mode 100644 aports/device/linux-infocus-flatfish/01_timeconst_fix.patch delete mode 100644 aports/device/linux-infocus-flatfish/02_fix_paranoid_network_disabled.patch delete mode 100644 aports/device/linux-infocus-flatfish/03_fix_pm_build.patch delete mode 100644 aports/device/linux-infocus-flatfish/APKBUILD delete mode 100644 aports/device/linux-infocus-flatfish/compiler-gcc6.h delete mode 100644 aports/device/linux-infocus-flatfish/config-infocus-flatfish.armhf delete mode 100644 aports/device/linux-jolla-sbj/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-jolla-sbj/APKBUILD delete mode 100644 aports/device/linux-jolla-sbj/compiler-gcc6.h delete mode 100644 aports/device/linux-jolla-sbj/config-jolla-sbj.armhf delete mode 100644 aports/device/linux-jolla-sbj/duplicate-return-address-definition.patch delete mode 100644 aports/device/linux-leeco-s2/01_fix_gcc6_errors.patch delete mode 100644 aports/device/linux-leeco-s2/03_psci.patch delete mode 100644 aports/device/linux-leeco-s2/05_dtb-fix.patch delete mode 100644 aports/device/linux-leeco-s2/APKBUILD delete mode 100644 aports/device/linux-leeco-s2/compiler-gcc6.h delete mode 100644 aports/device/linux-leeco-s2/config-leeco-s2.aarch64 delete mode 100644 aports/device/linux-lenovo-karate/01_prima_gcc6.patch delete mode 100644 aports/device/linux-lenovo-karate/APKBUILD delete mode 100644 aports/device/linux-lenovo-karate/compiler-gcc6.h delete mode 100644 aports/device/linux-lenovo-karate/config-lenovo-karate.aarch64 delete mode 100644 aports/device/linux-lg-bullhead/APKBUILD delete mode 100644 aports/device/linux-lg-bullhead/compiler-gcc6.h delete mode 100644 aports/device/linux-lg-bullhead/config-lg-bullhead.aarch64 delete mode 100644 aports/device/linux-lg-bullhead/driver-fix.patch delete mode 100644 aports/device/linux-lg-bullhead/static-inline.patch delete mode 100644 aports/device/linux-lg-bullhead/undefined-screen_info.patch delete mode 100644 aports/device/linux-lg-d285/00_fix_return_address.patch delete mode 100644 aports/device/linux-lg-d285/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-lg-d285/03_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-lg-d285/APKBUILD delete mode 100644 aports/device/linux-lg-d285/compiler-gcc6.h delete mode 100644 aports/device/linux-lg-d285/config-lg-d285.armhf delete mode 100644 aports/device/linux-lg-d855/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-lg-d855/APKBUILD delete mode 100644 aports/device/linux-lg-d855/compiler-gcc6.h delete mode 100644 aports/device/linux-lg-d855/config-lg-d855.armhf delete mode 100644 aports/device/linux-lg-dory/00_fix_return_address.patch delete mode 100644 aports/device/linux-lg-dory/01_avoid_rpmb_read_during_boot.patch delete mode 100644 aports/device/linux-lg-dory/02_fix_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-lg-dory/03_fix_mdss_fb_memory_allocation.patch delete mode 100644 aports/device/linux-lg-dory/APKBUILD delete mode 100644 aports/device/linux-lg-dory/compiler-gcc6.h delete mode 100644 aports/device/linux-lg-dory/config-lg-dory.armhf delete mode 100644 aports/device/linux-lg-h815/APKBUILD delete mode 100644 aports/device/linux-lg-h815/compiler-gcc6.h delete mode 100644 aports/device/linux-lg-h815/config-lg-h815.aarch64 delete mode 100644 aports/device/linux-lg-h815/fix-powerlevel.patch delete mode 100644 aports/device/linux-lg-lenok/02_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-lg-lenok/APKBUILD delete mode 100644 aports/device/linux-lg-lenok/compiler-gcc6.h delete mode 100644 aports/device/linux-lg-lenok/config-lg-lenok.armhf delete mode 100644 aports/device/linux-lg-mako/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-lg-mako/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-lg-mako/APKBUILD delete mode 100644 aports/device/linux-lg-mako/compiler-gcc6.h delete mode 100644 aports/device/linux-lg-mako/config-lg-mako.armhf delete mode 100644 aports/device/linux-motorola-athene/01_fix_gcc6_errors.patch delete mode 100644 aports/device/linux-motorola-athene/APKBUILD delete mode 100644 aports/device/linux-motorola-athene/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-athene/config-motorola-athene.aarch64 delete mode 100644 aports/device/linux-motorola-falcon/00_fix_return_address.patch delete mode 100644 aports/device/linux-motorola-falcon/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-motorola-falcon/03_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-motorola-falcon/APKBUILD delete mode 100644 aports/device/linux-motorola-falcon/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-falcon/config-motorola-falcon.armhf delete mode 100644 aports/device/linux-motorola-ghost/00_fix_return_address.patch delete mode 100644 aports/device/linux-motorola-ghost/01_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-motorola-ghost/02_Input-lifebook-use-static-inline-instead-of-inline-i.patch delete mode 100644 aports/device/linux-motorola-ghost/03_Input-sentelic-use-static-inline-instead-of-inline.patch delete mode 100644 aports/device/linux-motorola-ghost/04_fix-video-argb-setting.patch delete mode 100644 aports/device/linux-motorola-ghost/APKBUILD delete mode 100644 aports/device/linux-motorola-ghost/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-ghost/config-motorola-ghost.armhf delete mode 100644 aports/device/linux-motorola-harpia/APKBUILD delete mode 100644 aports/device/linux-motorola-harpia/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-harpia/config-motorola-harpia.armhf delete mode 100644 aports/device/linux-motorola-maserati/01_maserati-fix-gcc6-compile.patch delete mode 100644 aports/device/linux-motorola-maserati/APKBUILD delete mode 100644 aports/device/linux-motorola-maserati/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-maserati/config-motorola-maserati.armhf delete mode 100644 aports/device/linux-motorola-osprey/02_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-motorola-osprey/APKBUILD delete mode 100644 aports/device/linux-motorola-osprey/Wno-error.patch delete mode 100644 aports/device/linux-motorola-osprey/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-osprey/config-motorola-osprey.armhf delete mode 100644 aports/device/linux-motorola-peregrine/00_fix_return_address.patch delete mode 100644 aports/device/linux-motorola-peregrine/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-motorola-peregrine/03_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-motorola-peregrine/06_fix_mdss_fb_rgb_mode.patch delete mode 100644 aports/device/linux-motorola-peregrine/APKBUILD delete mode 100644 aports/device/linux-motorola-peregrine/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-peregrine/config-motorola-peregrine.armhf delete mode 100644 aports/device/linux-motorola-potter/01_prima_gcc6.patch delete mode 100644 aports/device/linux-motorola-potter/02_fix_msm_dba.patch delete mode 100644 aports/device/linux-motorola-potter/03_fix_rndis_ipa_trace_header_not_found.patch delete mode 100644 aports/device/linux-motorola-potter/04_fix_stmvl53l0_headers.patch delete mode 100644 aports/device/linux-motorola-potter/05_fix_u_f_header.patch delete mode 100644 aports/device/linux-motorola-potter/06_fix_usb_gadget_function.patch delete mode 100644 aports/device/linux-motorola-potter/APKBUILD delete mode 100644 aports/device/linux-motorola-potter/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-potter/config-motorola-potter.aarch64 delete mode 100644 aports/device/linux-motorola-shamu/00_fix_return_address.patch delete mode 100644 aports/device/linux-motorola-shamu/APKBUILD delete mode 100644 aports/device/linux-motorola-shamu/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-shamu/config-motorola-shamu.armhf delete mode 100644 aports/device/linux-motorola-titan/00_fix_return_address.patch delete mode 100644 aports/device/linux-motorola-titan/02_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-motorola-titan/APKBUILD delete mode 100644 aports/device/linux-motorola-titan/Wno-error.patch delete mode 100644 aports/device/linux-motorola-titan/compiler-gcc6.h delete mode 100644 aports/device/linux-motorola-titan/config-motorola-titan.armhf delete mode 100644 aports/device/linux-motorola-titan/multiple-fixes-gcc-5.patch delete mode 100644 aports/device/linux-nextbit-robin/01_psci_err.patch delete mode 100644 aports/device/linux-nextbit-robin/APKBUILD delete mode 100644 aports/device/linux-nextbit-robin/compiler-gcc6.h delete mode 100644 aports/device/linux-nextbit-robin/config-nextbit-robin.aarch64 delete mode 100644 aports/device/linux-nokia-n9/0001-SREv2.patch delete mode 100644 aports/device/linux-nokia-n9/0002-drm-add-rename-MIPI_DCS_SET_PARTIAL_XXX.patch delete mode 100644 aports/device/linux-nokia-n9/0003-drm-omap-panel-dsi-cm-use-defines-from-mipi_display..patch delete mode 100644 aports/device/linux-nokia-n9/0004-ARM-dts-n9-add-display-support.patch delete mode 100644 aports/device/linux-nokia-n9/0005-Revert-drm-omap-work-around-for-omap3-display-enable.patch delete mode 100644 aports/device/linux-nokia-n9/0006-HACK-drm-omap-panel-dsi-cm-force-0xff-for-brigthness.patch delete mode 100644 aports/device/linux-nokia-n9/0007-ARM-dts-N9-N950-Add-touchscreen-support.patch delete mode 100644 aports/device/linux-nokia-n9/0008-misc-apds990x-Add-device-tree-support.patch delete mode 100644 aports/device/linux-nokia-n9/0009-misc-apds990x-convert-to-iio.patch delete mode 100644 aports/device/linux-nokia-n9/0010-ARM-dts-N9-Add-support-for-apds990x-ALS-PS.patch delete mode 100644 aports/device/linux-nokia-n9/0011-HACK-export-dma-access-functions-needed-by-PVR-drive.patch delete mode 100644 aports/device/linux-nokia-n9/APKBUILD delete mode 100644 aports/device/linux-nokia-n9/RM-696_Pyrenees_SMD_V1_6.raw delete mode 100644 aports/device/linux-nokia-n9/config-nokia-n9.armhf delete mode 100644 aports/device/linux-nokia-rm885/00_fix_return_address.patch delete mode 100644 aports/device/linux-nokia-rm885/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-nokia-rm885/APKBUILD delete mode 100644 aports/device/linux-nokia-rm885/compiler-gcc6.h delete mode 100644 aports/device/linux-nokia-rm885/config-nokia-rm885.armhf delete mode 100644 aports/device/linux-nokia-rm885/psmouse_base.patch delete mode 100644 aports/device/linux-oneplus-bacon/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-oneplus-bacon/APKBUILD delete mode 100644 aports/device/linux-oneplus-bacon/compiler-gcc6.h delete mode 100644 aports/device/linux-oneplus-bacon/config-oneplus-bacon.armhf delete mode 100644 aports/device/linux-oneplus-oneplus2/00_mt_width_major_params.patch delete mode 100644 aports/device/linux-oneplus-oneplus2/APKBUILD delete mode 100644 aports/device/linux-oneplus-oneplus2/compiler-gcc6.h delete mode 100644 aports/device/linux-oneplus-oneplus2/config-oneplus-oneplus2.aarch64 delete mode 100644 aports/device/linux-oneplus-onyx/00_Input-lifebook-use-static-inline-instead-of-inline-i.patch delete mode 100644 aports/device/linux-oneplus-onyx/00_Input-sentelic-use-static-inline-instead-of-inline.patch delete mode 100644 aports/device/linux-oneplus-onyx/00_dontpanic.patch delete mode 100644 aports/device/linux-oneplus-onyx/00_fix_return_address.patch delete mode 100644 aports/device/linux-oneplus-onyx/00_mt_width_major_params.patch delete mode 100644 aports/device/linux-oneplus-onyx/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-oneplus-onyx/APKBUILD delete mode 100644 aports/device/linux-oneplus-onyx/compiler-gcc6.h delete mode 100644 aports/device/linux-oneplus-onyx/config-oneplus-onyx.armhf delete mode 100644 aports/device/linux-samsung-espresso10/01_fix_aid_net_on_apn_disable.patch delete mode 100644 aports/device/linux-samsung-espresso10/APKBUILD delete mode 100644 aports/device/linux-samsung-espresso10/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-espresso10/config-samsung-espresso10.armhf delete mode 100644 aports/device/linux-samsung-gts210vewifi/01_fix_msm_dba.patch delete mode 100644 aports/device/linux-samsung-gts210vewifi/APKBUILD delete mode 100644 aports/device/linux-samsung-gts210vewifi/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-gts210vewifi/config-samsung-gts210vewifi.aarch64 delete mode 100644 aports/device/linux-samsung-i747m/00_Input-lifebook-use-static-inline-instead-of-inline-i.patch delete mode 100644 aports/device/linux-samsung-i747m/00_Input-sentelic-use-static-inline-instead-of-inline.patch delete mode 100644 aports/device/linux-samsung-i747m/00_fix_return_address.patch delete mode 100644 aports/device/linux-samsung-i747m/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-samsung-i747m/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-samsung-i747m/APKBUILD delete mode 100644 aports/device/linux-samsung-i747m/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-i747m/config-samsung-i747m.armhf delete mode 100644 aports/device/linux-samsung-i8190/00_fix_makefile.patch delete mode 100644 aports/device/linux-samsung-i8190/01_fix_return_address.patch delete mode 100644 aports/device/linux-samsung-i8190/02_timeconst_fix.patch delete mode 100644 aports/device/linux-samsung-i8190/03_fix_rndis.patch delete mode 100644 aports/device/linux-samsung-i8190/04_fix_bcma.patch delete mode 100644 aports/device/linux-samsung-i8190/05_change_dhd_firmware_path.patch delete mode 100644 aports/device/linux-samsung-i8190/APKBUILD delete mode 100644 aports/device/linux-samsung-i8190/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-i8190/config-samsung-i8190.armhf delete mode 100644 aports/device/linux-samsung-i8200/APKBUILD delete mode 100644 aports/device/linux-samsung-i8200/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-i8200/config-samsung-i8200.armhf delete mode 100644 aports/device/linux-samsung-i8200/timeconst_fix.patch delete mode 100644 aports/device/linux-samsung-i9003/00_return_address.patch delete mode 100644 aports/device/linux-samsung-i9003/01_twl_power_init.patch delete mode 100644 aports/device/linux-samsung-i9003/02_mfd_driver_fix.patch delete mode 100644 aports/device/linux-samsung-i9003/03_fix_paranoid_network_disabled.patch delete mode 100644 aports/device/linux-samsung-i9003/APKBUILD delete mode 100644 aports/device/linux-samsung-i9003/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-i9003/config-samsung-i9003.armhf delete mode 100644 aports/device/linux-samsung-i9003/init delete mode 100644 aports/device/linux-samsung-i9070/00_fix_return_address.patch delete mode 100644 aports/device/linux-samsung-i9070/01_remove_ramdisks_from_initramfs.patch delete mode 100644 aports/device/linux-samsung-i9070/02_reduce_lzo_compression.patch delete mode 100644 aports/device/linux-samsung-i9070/03_change_modules_install_dir.patch delete mode 100644 aports/device/linux-samsung-i9070/04_change_dhd_firmware_dir.patch delete mode 100644 aports/device/linux-samsung-i9070/05_fix_fb_rgb_mode.patch delete mode 100644 aports/device/linux-samsung-i9070/APKBUILD delete mode 100644 aports/device/linux-samsung-i9070/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-i9070/config-samsung-i9070.armhf delete mode 100644 aports/device/linux-samsung-i9070/init delete mode 100644 aports/device/linux-samsung-i9100/APKBUILD delete mode 100644 aports/device/linux-samsung-i9100/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-i9100/config-samsung-i9100.armhf delete mode 100644 aports/device/linux-samsung-i9100/init delete mode 100644 aports/device/linux-samsung-i9195/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-samsung-i9195/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-samsung-i9195/APKBUILD delete mode 100644 aports/device/linux-samsung-i9195/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-i9195/config-samsung-i9195.armhf delete mode 100644 aports/device/linux-samsung-i9305/APKBUILD delete mode 100644 aports/device/linux-samsung-i9305/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-i9305/config-samsung-i9305.armhf delete mode 100644 aports/device/linux-samsung-jflte/00_fix_return_address.patch delete mode 100644 aports/device/linux-samsung-jflte/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-samsung-jflte/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-samsung-jflte/03-fix-video-argb-setting.patch delete mode 100644 aports/device/linux-samsung-jflte/APKBUILD delete mode 100644 aports/device/linux-samsung-jflte/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-jflte/config-samsung-jflte.armhf delete mode 100644 aports/device/linux-samsung-jflte/gpu_msm2_fix_compile.patch delete mode 100644 aports/device/linux-samsung-jflte/patch_fsp_detect.patch delete mode 100644 aports/device/linux-samsung-jflte/patch_lifebook_detect.patch delete mode 100644 aports/device/linux-samsung-klte/00_fix_return_address.patch delete mode 100644 aports/device/linux-samsung-klte/01_timeconst_fix.patch delete mode 100644 aports/device/linux-samsung-klte/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-samsung-klte/03_msm_fix_trace.patch delete mode 100644 aports/device/linux-samsung-klte/APKBUILD delete mode 100644 aports/device/linux-samsung-klte/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-klte/config-samsung-klte.armhf delete mode 100644 aports/device/linux-samsung-kminilte/APKBUILD delete mode 100644 aports/device/linux-samsung-kminilte/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-kminilte/config-samsung-kminilte.armhf delete mode 100644 aports/device/linux-samsung-kylepro/00_return_address.patch delete mode 100644 aports/device/linux-samsung-kylepro/02_screen_reset.patch delete mode 100644 aports/device/linux-samsung-kylepro/APKBUILD delete mode 100644 aports/device/linux-samsung-kylepro/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-kylepro/config-samsung-kylepro.armhf delete mode 100644 aports/device/linux-samsung-kylessopen/0001-fix-video-argb-setting.patch delete mode 100644 aports/device/linux-samsung-kylessopen/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-samsung-kylessopen/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-samsung-kylessopen/APKBUILD delete mode 100644 aports/device/linux-samsung-kylessopen/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-kylessopen/config-samsung-kylessopen.armhf delete mode 100644 aports/device/linux-samsung-kylessopen/gcc5.patch delete mode 100644 aports/device/linux-samsung-kylevess/00_return_address.patch delete mode 100644 aports/device/linux-samsung-kylevess/01_patch_lifebook_detect.patch delete mode 100644 aports/device/linux-samsung-kylevess/02_patch_fsp_detect.patch delete mode 100644 aports/device/linux-samsung-kylevess/03_fix_to_state.patch delete mode 100644 aports/device/linux-samsung-kylevess/APKBUILD delete mode 100644 aports/device/linux-samsung-kylevess/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-kylevess/config-samsung-kylevess.armhf delete mode 100644 aports/device/linux-samsung-lt023g/418df63adac56841ef6b0f1fcf435bc64d4ed177.patch delete mode 100644 aports/device/linux-samsung-lt023g/455bd4c430b0c0a361f38e8658a0d6cb469942b5.patch delete mode 100644 aports/device/linux-samsung-lt023g/APKBUILD delete mode 100644 aports/device/linux-samsung-lt023g/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-lt023g/config-samsung-lt023g.armhf delete mode 100644 aports/device/linux-samsung-lt023g/timeconst_fix.patch delete mode 100644 aports/device/linux-samsung-maguro/APKBUILD delete mode 100644 aports/device/linux-samsung-maguro/android_paranoid_network.patch delete mode 100644 aports/device/linux-samsung-maguro/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-maguro/config-samsung-maguro.armhf delete mode 100644 aports/device/linux-samsung-maguro/fix_old_perl_code.patch delete mode 100644 aports/device/linux-samsung-manta/APKBUILD delete mode 100644 aports/device/linux-samsung-manta/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-manta/config-samsung-manta.armhf delete mode 100644 aports/device/linux-samsung-n5110/APKBUILD delete mode 100644 aports/device/linux-samsung-n5110/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-n5110/config-samsung-n5110.armhf delete mode 100644 aports/device/linux-samsung-n7100/APKBUILD delete mode 100644 aports/device/linux-samsung-n7100/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-n7100/config-samsung-n7100.armhf delete mode 100644 aports/device/linux-samsung-n7100/extdsp_inline.patch delete mode 100644 aports/device/linux-samsung-n7100/fimc_lite.patch delete mode 100644 aports/device/linux-samsung-n7100/timeconst_fix.patch delete mode 100644 aports/device/linux-samsung-p4wifi/APKBUILD delete mode 100644 aports/device/linux-samsung-p4wifi/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-p4wifi/config-samsung-p4wifi.armhf delete mode 100644 aports/device/linux-samsung-s6500d/00_return_address.patch delete mode 100644 aports/device/linux-samsung-s6500d/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-samsung-s6500d/APKBUILD delete mode 100644 aports/device/linux-samsung-s6500d/compiler-gcc6.h delete mode 100644 aports/device/linux-samsung-s6500d/config-samsung-s6500d.armhf delete mode 100644 aports/device/linux-semc-anzu/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-semc-anzu/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-semc-anzu/APKBUILD delete mode 100644 aports/device/linux-semc-anzu/compiler-gcc6.h delete mode 100644 aports/device/linux-semc-anzu/config-semc-anzu.armhf delete mode 100644 aports/device/linux-semc-smultron/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-semc-smultron/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-semc-smultron/APKBUILD delete mode 100644 aports/device/linux-semc-smultron/compiler-gcc6.h delete mode 100644 aports/device/linux-semc-smultron/config-semc-smultron.armhf delete mode 100644 aports/device/linux-sony-amami/02_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-sony-amami/APKBUILD delete mode 100644 aports/device/linux-sony-amami/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-amami/config-sony-amami.armhf delete mode 100644 aports/device/linux-sony-aries/02_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-sony-aries/APKBUILD delete mode 100644 aports/device/linux-sony-aries/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-aries/config-sony-aries.armhf delete mode 100644 aports/device/linux-sony-castor-windy/APKBUILD delete mode 100644 aports/device/linux-sony-castor-windy/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-castor-windy/config-sony-castor-windy.armhf delete mode 100644 aports/device/linux-sony-castor-windy/mmc-wifi-fix.patch delete mode 100644 aports/device/linux-sony-coconut/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-sony-coconut/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-sony-coconut/APKBUILD delete mode 100644 aports/device/linux-sony-coconut/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-coconut/config-sony-coconut.armhf delete mode 100644 aports/device/linux-sony-honami/APKBUILD delete mode 100644 aports/device/linux-sony-honami/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-honami/config-sony-honami.armhf delete mode 100644 aports/device/linux-sony-nicki/00_fix_return_address.patch delete mode 100644 aports/device/linux-sony-nicki/01_fix_video_argb_setting.patch delete mode 100644 aports/device/linux-sony-nicki/02_mdss_fb_refresh_rate.patch delete mode 100644 aports/device/linux-sony-nicki/03_kgsl_iommu_sync_lock.patch delete mode 100644 aports/device/linux-sony-nicki/04_psmouse_base.patch delete mode 100644 aports/device/linux-sony-nicki/05_try_to_make_kgsl_work.patch delete mode 100644 aports/device/linux-sony-nicki/APKBUILD delete mode 100644 aports/device/linux-sony-nicki/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-nicki/config-sony-nicki.armhf delete mode 100644 aports/device/linux-sony-scorpion/00_Input-lifebook-use-static-inline-instead-of-inline-i.patch delete mode 100644 aports/device/linux-sony-scorpion/00_Input-sentelic-use-static-inline-instead-of-inline.patch delete mode 100644 aports/device/linux-sony-scorpion/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-sony-scorpion/02_reduce_lzo_compression.patch delete mode 100644 aports/device/linux-sony-scorpion/APKBUILD delete mode 100644 aports/device/linux-sony-scorpion/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-scorpion/config-sony-scorpion.armhf delete mode 100644 aports/device/linux-sony-seagull/01_fix_return_address.patch delete mode 100644 aports/device/linux-sony-seagull/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-sony-seagull/03_fix_various_include_directives.patch delete mode 100644 aports/device/linux-sony-seagull/04_timeconst_fix.patch delete mode 100644 aports/device/linux-sony-seagull/05_psmouse_base.patch delete mode 100644 aports/device/linux-sony-seagull/APKBUILD delete mode 100644 aports/device/linux-sony-seagull/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-seagull/config-sony-seagull.armhf delete mode 100644 aports/device/linux-sony-yuga/00_fix_return_address.patch delete mode 100644 aports/device/linux-sony-yuga/02_reduce_lzo_compression.patch delete mode 100644 aports/device/linux-sony-yuga/APKBUILD delete mode 100644 aports/device/linux-sony-yuga/compiler-gcc6.h delete mode 100644 aports/device/linux-sony-yuga/config-sony-yuga.armhf delete mode 100644 aports/device/linux-sony-yuga/kgsl_iommu_sync_lock.patch delete mode 100644 aports/device/linux-sony-yuga/psmouse_base.patch delete mode 100644 aports/device/linux-t2m-flame/00_fix_return_address.patch delete mode 100644 aports/device/linux-t2m-flame/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-t2m-flame/03_add-missing-dtbs.patch delete mode 100644 aports/device/linux-t2m-flame/04_fix-fb-imgtype.patch delete mode 100644 aports/device/linux-t2m-flame/05_fix-mdp3-ctrl-off.patch delete mode 100644 aports/device/linux-t2m-flame/06_fix-clock.patch delete mode 100644 aports/device/linux-t2m-flame/APKBUILD delete mode 100644 aports/device/linux-t2m-flame/compiler-gcc6.h delete mode 100644 aports/device/linux-t2m-flame/config-t2m-flame.armhf delete mode 100644 aports/device/linux-teclast-x80pro/APKBUILD delete mode 100644 aports/device/linux-teclast-x80pro/config-teclast-x80pro.x86_64 delete mode 100644 aports/device/linux-wiko-lenny3/00_disable_drvgen.patch delete mode 100644 aports/device/linux-wiko-lenny3/01_add_generated_cust_dtsi.patch delete mode 100644 aports/device/linux-wiko-lenny3/02_fix_various_include_directives.patch delete mode 100644 aports/device/linux-wiko-lenny3/APKBUILD delete mode 100644 aports/device/linux-wiko-lenny3/compiler-gcc6.h delete mode 100644 aports/device/linux-wiko-lenny3/config-wiko-lenny3.armhf delete mode 100644 aports/device/linux-xiaomi-armani/00_fix_return_address.patch delete mode 100644 aports/device/linux-xiaomi-armani/01_msm-fix-perf_trace_counters.patch delete mode 100644 aports/device/linux-xiaomi-armani/01_smd_private.patch delete mode 100644 aports/device/linux-xiaomi-armani/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-xiaomi-armani/03_qdsp6v2.patch delete mode 100644 aports/device/linux-xiaomi-armani/04_mdss_mdp_trace.patch delete mode 100644 aports/device/linux-xiaomi-armani/05_q6voice.patch delete mode 100644 aports/device/linux-xiaomi-armani/APKBUILD delete mode 100644 aports/device/linux-xiaomi-armani/compiler-gcc6.h delete mode 100644 aports/device/linux-xiaomi-armani/config-xiaomi-armani.armhf delete mode 100644 aports/device/linux-xiaomi-cancro/01_smd_private.patch delete mode 100644 aports/device/linux-xiaomi-cancro/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-xiaomi-cancro/03t_spdrv.patch delete mode 100644 aports/device/linux-xiaomi-cancro/05_q6voice.patch delete mode 100644 aports/device/linux-xiaomi-cancro/APKBUILD delete mode 100644 aports/device/linux-xiaomi-cancro/compiler-gcc6.h delete mode 100644 aports/device/linux-xiaomi-cancro/config-xiaomi-cancro.armhf delete mode 100644 aports/device/linux-xiaomi-cancro/tspdrv_2.patch delete mode 100644 aports/device/linux-xiaomi-cancro/tspdrv_3.patch delete mode 100644 aports/device/linux-xiaomi-cancro/tspdrv_4.patch delete mode 100644 aports/device/linux-xiaomi-cancro/tspdrv_5.patch delete mode 100644 aports/device/linux-xiaomi-ido/01_fix_gcc6_errors.patch delete mode 100644 aports/device/linux-xiaomi-ido/APKBUILD delete mode 100644 aports/device/linux-xiaomi-ido/compiler-gcc6.h delete mode 100644 aports/device/linux-xiaomi-ido/config-xiaomi-ido.aarch64 delete mode 100644 aports/device/linux-xiaomi-mido/01_fix_gcc6_errors.patch delete mode 100644 aports/device/linux-xiaomi-mido/02_fix_msm_dba.patch delete mode 100644 aports/device/linux-xiaomi-mido/03_fix_rndis_ipa_trace_header_not_found.patch delete mode 100644 aports/device/linux-xiaomi-mido/05_fix_mdp3_ctrl_off.patch delete mode 100644 aports/device/linux-xiaomi-mido/05_fix_u_f_header.patch delete mode 100644 aports/device/linux-xiaomi-mido/06_fix_usb_gadget_function.patch delete mode 100644 aports/device/linux-xiaomi-mido/APKBUILD delete mode 100644 aports/device/linux-xiaomi-mido/compiler-gcc6.h delete mode 100644 aports/device/linux-xiaomi-mido/config-xiaomi-mido.aarch64 delete mode 100644 aports/device/linux-xiaomi-mido/fix_recordmcount.patch delete mode 100644 aports/device/linux-xiaomi-santoni/02_fix_msm_dba.patch delete mode 100644 aports/device/linux-xiaomi-santoni/03_fix_rndis_ipa_trace_header_not_found.patch delete mode 100644 aports/device/linux-xiaomi-santoni/APKBUILD delete mode 100644 aports/device/linux-xiaomi-santoni/compiler-gcc6.h delete mode 100644 aports/device/linux-xiaomi-santoni/config-xiaomi-santoni.aarch64 delete mode 100644 aports/device/linux-zte-kis3/00_fix_return_address.patch delete mode 100644 aports/device/linux-zte-kis3/02_gpu-msm-fix-gcc5-compile.patch delete mode 100644 aports/device/linux-zte-kis3/APKBUILD delete mode 100644 aports/device/linux-zte-kis3/compiler-gcc6.h delete mode 100644 aports/device/linux-zte-kis3/config-zte-kis3.armhf delete mode 100644 aports/firmware/firmware-adreno/APKBUILD delete mode 100644 aports/firmware/firmware-aosp-broadcom-wlan/APKBUILD delete mode 100644 aports/firmware/firmware-asus-duma/APKBUILD delete mode 100644 aports/firmware/firmware-asus-flo/APKBUILD delete mode 100644 aports/firmware/firmware-asus-z00t/APKBUILD delete mode 100644 aports/firmware/firmware-fairphone-fp2/APKBUILD delete mode 100644 aports/firmware/firmware-htc-flounder/APKBUILD delete mode 100644 aports/firmware/firmware-huawei-y530/APKBUILD delete mode 100644 aports/firmware/firmware-lenovo-karate/APKBUILD delete mode 100644 aports/firmware/firmware-lg-hammerhead/APKBUILD delete mode 100644 aports/firmware/firmware-motorola-titan/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-espresso10/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-i747m/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-i8190/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-i9070/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-i9100/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-i9195/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-i9305/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-jflte/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-kylepro/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-maguro/APKBUILD delete mode 100644 aports/firmware/firmware-samsung-p4wifi/APKBUILD delete mode 100644 aports/firmware/firmware-sony-amami/APKBUILD delete mode 100644 aports/firmware/firmware-t2m-flame/APKBUILD delete mode 100644 aports/firmware/firmware-xiaomi-armani/APKBUILD delete mode 100644 aports/firmware/firmware-xiaomi-mido/APKBUILD delete mode 100644 aports/hybris/android-headers-4.4/APKBUILD delete mode 100644 aports/hybris/android-headers-4.4/android-headers.pc delete mode 100644 aports/hybris/android-headers-7.1/APKBUILD delete mode 100644 aports/hybris/libhybris/0001-Make-libhybris-compile-with-musl.patch delete mode 100644 aports/hybris/libhybris/0002-tests-Regression-test-for-EGL-glibc-TLS-conflict.patch delete mode 100644 aports/hybris/libhybris/0003-Implement-X11-EGL-platform-based-on-wayland-code.patch delete mode 100644 aports/hybris/libhybris/APKBUILD delete mode 100644 aports/kde/attica-qt/APKBUILD delete mode 100644 aports/kde/baloo/APKBUILD delete mode 100644 aports/kde/breeze-icons/APKBUILD delete mode 100644 aports/kde/breeze/APKBUILD delete mode 100644 aports/kde/elisa/APKBUILD delete mode 100644 aports/kde/extra-cmake-modules/APKBUILD delete mode 100644 aports/kde/falkon/APKBUILD delete mode 100644 aports/kde/falkon/disable-backtraces.patch delete mode 100644 aports/kde/falkon/disable-ld-fatal-warnings.patch delete mode 100644 aports/kde/kactivities-stats/APKBUILD delete mode 100644 aports/kde/kactivities/APKBUILD delete mode 100644 aports/kde/kactivitymanagerd/APKBUILD delete mode 100644 aports/kde/karchive/APKBUILD delete mode 100644 aports/kde/kauth/APKBUILD delete mode 100644 aports/kde/kbookmarks/APKBUILD delete mode 100644 aports/kde/kcmutils/APKBUILD delete mode 100644 aports/kde/kcodecs/APKBUILD delete mode 100644 aports/kde/kcompletion/APKBUILD delete mode 100644 aports/kde/kconfig/APKBUILD delete mode 100644 aports/kde/kconfigwidgets/APKBUILD delete mode 100644 aports/kde/kcoreaddons/APKBUILD delete mode 100644 aports/kde/kcrash/APKBUILD delete mode 100644 aports/kde/kdbusaddons/APKBUILD delete mode 100644 aports/kde/kdeclarative/APKBUILD delete mode 100644 aports/kde/kdecoration/APKBUILD delete mode 100644 aports/kde/kded/APKBUILD delete mode 100644 aports/kde/kdelibs4support/APKBUILD delete mode 100644 aports/kde/kdesignerplugin/APKBUILD delete mode 100644 aports/kde/kdesu/APKBUILD delete mode 100644 aports/kde/kdoctools/APKBUILD delete mode 100644 aports/kde/kemoticons/APKBUILD delete mode 100644 aports/kde/kfilemetadata/APKBUILD delete mode 100644 aports/kde/kglobalaccel/APKBUILD delete mode 100644 aports/kde/kguiaddons/APKBUILD delete mode 100644 aports/kde/khtml/APKBUILD delete mode 100644 aports/kde/ki18n/APKBUILD delete mode 100644 aports/kde/kiconthemes/APKBUILD delete mode 100644 aports/kde/kidletime/APKBUILD delete mode 100644 aports/kde/kimageformats/APKBUILD delete mode 100644 aports/kde/kinit/APKBUILD delete mode 100644 aports/kde/kio/APKBUILD delete mode 100644 aports/kde/kirigami2/APKBUILD delete mode 100644 aports/kde/kitemmodels/APKBUILD delete mode 100644 aports/kde/kitemviews/APKBUILD delete mode 100644 aports/kde/kjobwidgets/APKBUILD delete mode 100644 aports/kde/kjs/APKBUILD delete mode 100644 aports/kde/kjsembed/APKBUILD delete mode 100644 aports/kde/knewstuff/APKBUILD delete mode 100644 aports/kde/knotifications/APKBUILD delete mode 100644 aports/kde/knotifyconfig/APKBUILD delete mode 100644 aports/kde/konsole/APKBUILD delete mode 100644 aports/kde/kpackage/APKBUILD delete mode 100644 aports/kde/kparts/APKBUILD delete mode 100644 aports/kde/kpeople/APKBUILD delete mode 100644 aports/kde/kplotting/APKBUILD delete mode 100644 aports/kde/kpty/APKBUILD delete mode 100644 aports/kde/krunner/APKBUILD delete mode 100644 aports/kde/kscreen/APKBUILD delete mode 100644 aports/kde/kscreenlocker/APKBUILD delete mode 100644 aports/kde/kscreenlocker/kde-np.pam delete mode 100644 aports/kde/kscreenlocker/kde.pam delete mode 100644 aports/kde/kservice/APKBUILD delete mode 100644 aports/kde/ksysguard/APKBUILD delete mode 100644 aports/kde/ktexteditor/APKBUILD delete mode 100644 aports/kde/ktextwidgets/APKBUILD delete mode 100644 aports/kde/kunitconversion/APKBUILD delete mode 100644 aports/kde/kwallet/APKBUILD delete mode 100644 aports/kde/kwayland-integration/APKBUILD delete mode 100644 aports/kde/kwayland/APKBUILD delete mode 100644 aports/kde/kwidgetsaddons/APKBUILD delete mode 100644 aports/kde/kwin/0001-Revert-udev-Only-handle-devices-from-the-current-sea.patch delete mode 100644 aports/kde/kwin/0002-Revert-libinput-connection-Don-t-hardcode-seat0-anym.patch delete mode 100644 aports/kde/kwin/APKBUILD delete mode 100644 aports/kde/kwindowsystem/APKBUILD delete mode 100644 aports/kde/kxmlgui/APKBUILD delete mode 100644 aports/kde/kxmlrpcclient/APKBUILD delete mode 100644 aports/kde/libdmtx/APKBUILD delete mode 100644 aports/kde/libkscreen/APKBUILD delete mode 100644 aports/kde/libksysguard/APKBUILD delete mode 100644 aports/kde/milou/APKBUILD delete mode 100644 aports/kde/modemmanager-qt/APKBUILD delete mode 100644 aports/kde/networkmanager-qt/APKBUILD delete mode 100644 aports/kde/phonon-qt5/APKBUILD delete mode 100644 aports/kde/plasma-angelfish/APKBUILD delete mode 100644 aports/kde/plasma-camera/APKBUILD delete mode 100644 aports/kde/plasma-framework/APKBUILD delete mode 100644 aports/kde/plasma-nm/APKBUILD delete mode 100644 aports/kde/plasma-pa/APKBUILD delete mode 100644 aports/kde/plasma-phone-components/APKBUILD delete mode 100644 aports/kde/plasma-phone-components/plasma-phone-components.post-deinstall delete mode 100644 aports/kde/plasma-phone-components/plasma-phone-components.post-install delete mode 100644 aports/kde/plasma-phone-components/plasma-phone-components.post-upgrade delete mode 100644 aports/kde/plasma-settings/APKBUILD delete mode 100644 aports/kde/plasma-workspace/APKBUILD delete mode 100644 aports/kde/polkit-kde-agent/APKBUILD delete mode 100644 aports/kde/polkit-qt/APKBUILD delete mode 100644 aports/kde/powerdevil/APKBUILD delete mode 100644 aports/kde/prison/APKBUILD delete mode 100644 aports/kde/qca-qt5/APKBUILD delete mode 100644 aports/kde/qmltermwidget/APKBUILD delete mode 100644 aports/kde/solid/APKBUILD delete mode 100644 aports/kde/sonnet/APKBUILD delete mode 100644 aports/kde/syntax-highlighting/APKBUILD delete mode 100644 aports/kde/threadweaver/APKBUILD delete mode 100644 aports/luna/activitymanager/APKBUILD delete mode 100644 aports/luna/activitymanager/compile.patch delete mode 100644 aports/luna/cmake-modules-webos/APKBUILD delete mode 100644 aports/luna/configurator/APKBUILD delete mode 100644 aports/luna/db8/APKBUILD delete mode 100644 aports/luna/db8/remove-np-pthread.patch delete mode 100644 aports/luna/enyo/APKBUILD delete mode 100644 aports/luna/lemon/APKBUILD delete mode 100644 aports/luna/libconnman-qt/0001-Don-t-use-MeeGo-as-prefix-in-order-to-make-this-a-co.patch delete mode 100644 aports/luna/libconnman-qt/APKBUILD delete mode 100644 aports/luna/libpbnjson/APKBUILD delete mode 100644 aports/luna/libpbnjson/replace-bash-with-sh.patch delete mode 100644 aports/luna/librolegen/APKBUILD delete mode 100644 aports/luna/librolegen/compile.patch delete mode 100644 aports/luna/librolegen/fix-fexists.patch delete mode 100644 aports/luna/libwebos-application/APKBUILD delete mode 100644 aports/luna/luna-app-browser/APKBUILD delete mode 100644 aports/luna/luna-app-browser/fix-qtwebengine-private-includes.patch delete mode 100644 aports/luna/luna-app-services/APKBUILD delete mode 100644 aports/luna/luna-applauncher/APKBUILD delete mode 100644 aports/luna/luna-appmanager/APKBUILD delete mode 100644 aports/luna/luna-appmanager/compile.patch delete mode 100644 aports/luna/luna-core-apps/APKBUILD delete mode 100644 aports/luna/luna-firstuse/APKBUILD delete mode 100644 aports/luna/luna-firstuse/locale.patch delete mode 100644 aports/luna/luna-init/APKBUILD delete mode 100644 aports/luna/luna-next-cardshell/APKBUILD delete mode 100644 aports/luna/luna-next/APKBUILD delete mode 100644 aports/luna/luna-next/compile.patch delete mode 100644 aports/luna/luna-next/remove-systemd-harddep.patch delete mode 100644 aports/luna/luna-prefs/APKBUILD delete mode 100644 aports/luna/luna-qml-launcher/APKBUILD delete mode 100644 aports/luna/luna-service2/APKBUILD delete mode 100644 aports/luna/luna-service2/ls-private.conf delete mode 100644 aports/luna/luna-service2/ls-public.conf delete mode 100644 aports/luna/luna-service2/remove-malloc-debug.patch delete mode 100644 aports/luna/luna-service2/remove-systemd-harddep.patch delete mode 100644 aports/luna/luna-sysmgr-common/APKBUILD delete mode 100644 aports/luna/luna-sysmgr-common/compile.patch delete mode 100644 aports/luna/luna-sysmgr-ipc-messages/APKBUILD delete mode 100644 aports/luna/luna-sysmgr-ipc-messages/mkpkgconfig.patch delete mode 100644 aports/luna/luna-sysmgr-ipc/APKBUILD delete mode 100644 aports/luna/luna-sysmgr-ipc/remove-np-pthread.patch delete mode 100644 aports/luna/luna-sysmgr/APKBUILD delete mode 100644 aports/luna/luna-sysmgr/compile.patch delete mode 100644 aports/luna/luna-sysservice/APKBUILD delete mode 100644 aports/luna/luna-sysservice/compile.patch delete mode 100644 aports/luna/luna-systemui/APKBUILD delete mode 100644 aports/luna/luna-temp-ofono-bluetooth/APKBUILD delete mode 100644 aports/luna/luna-webappmanager/APKBUILD delete mode 100644 aports/luna/luna-webappmanager/fix-qtwebengine-private-includes.patch delete mode 100644 aports/luna/luna-webappmanager/remove-systemd.patch delete mode 100644 aports/luna/luna-webappmanager/tryFix.patch delete mode 100644 aports/luna/luneos-components/APKBUILD delete mode 100644 aports/luna/mojoloader/APKBUILD delete mode 100644 aports/luna/mojoservice-frameworks/APKBUILD delete mode 100644 aports/luna/mojoservicelauncher/APKBUILD delete mode 100644 aports/luna/nodejs-module-webos-dynaload/APKBUILD delete mode 100644 aports/luna/nodejs-module-webos-pmlog/APKBUILD delete mode 100644 aports/luna/nodejs-module-webos-sysbus/APKBUILD delete mode 100644 aports/luna/nyx-lib/APKBUILD delete mode 100644 aports/luna/nyx-lib/addstdint.patch delete mode 100644 aports/luna/nyx-lib/compile.patch delete mode 100644 aports/luna/pmloglib/APKBUILD delete mode 100644 aports/luna/postmarketos-ui-luna/APKBUILD delete mode 100644 aports/luna/postmarketos-ui-luna/start_luna.sh delete mode 100644 aports/luna/qt5-qtwebengine/APKBUILD delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0001-Add-PalmServiceBridge-to-WebEngine.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0002-PalmServiceBridge-adapt-to-Chromium-53-code-base.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0002-WebEngineView-provide-additionnal-features-from-wind.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0003-WebContents-provide-additional-features-from-window..patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0003-WebEngineNewViewRequest-provide-the-requested-URL-as.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0004-Implement-Sync-IPC-messaging-through-qt.webChannelTr.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0004-Store-the-additional-window-features-related-to-Lune.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0005-Make-properties-for-some-settings-for-PalmBridgeServ.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0005-WindowFeatures-Chrome-lower-the-minimum-height-to-5.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0006-Enable-password-echo.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0006-WebEngineSettings-Add-a-standardFontFamily-property-.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0007-WebEngineSettings-add-also-Serif-Fixed-and-Cursive-f.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0007-storage-browser-quota-workaround-for-crash-on-cache-.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0008-Store-the-additional-window-features-required-by-the.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0008-html.css-themeWin.css-Add-Prelude-as-default-font-in.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0009-QQuickWebEngineNewViewRequest-use-initialTargetUrl-f.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0010-Update-additional-params-from-Chromium-53-56.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0010-WebEngineNewViewRequest-add-possibility-to-get-reque.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0011-Fix-WebGL2-Textures.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0011-GetScreenInfo-use-default-screen-when-no-window-is-a.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0012-Enable-password-echo.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0013-Implement-RequestQuotePermission.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0014-WebEngineView-re-introduce-devicePixelRatio-property.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0015-WebEngineView-add-extraContextMenuEntriesComponent-p.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0016-Fix-build-for-Qt5.9.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0017-gn_generator-fix-debug-build.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-luna/0018-Add-LuneOS-specific-switches.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0001-chromium-Change-false-to-FALSE-and-1-to-TRUE-FIX-qtw.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0001-functions.prf-allow-build-for-linux-oe-g-platform.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0002-WebEngine-qquickwebengineview_p_p.h-add-include-QCol.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0002-chromium-Force-host-toolchain-configuration.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0003-Include-dependency-to-QCoreApplication-translate.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0003-chromium-workaround-for-too-long-.rps-file-name.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0004-chromium-musl-sandbox-Define-TEMP_FAILURE_RETRY-if-n.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0005-chromium-musl-Avoid-mallinfo-APIs-on-non-glibc-linux.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0006-chromium-musl-include-fcntl.h-for-loff_t.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0007-chromium-musl-use-off64_t-instead-of-the-internal-__.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0008-chromium-musl-linux-glibc-make-the-distinction.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0009-chromium-musl-allocator-Do-not-include-glibc_weak_sy.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0010-chromium-musl-Use-correct-member-name-__si_fields-fr.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0011-chromium-musl-Match-syscalls-to-match-musl.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0012-chromium-musl-Define-res_ninit-and-res_nclose-for-no.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0013-chromium-musl-Do-not-define-__sbrk-on-musl.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0014-chromium-musl-Adjust-default-pthread-stack-size.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0015-chromium-musl-include-asm-generic-ioctl.h-for-TCGETS.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/0016-chromium-musl-tcmalloc-Use-off64_t-insread-of-__off6.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/gn_bootstrap.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/no-pvalloc.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/no_execinfo.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/renderthread-mallinfo.patch delete mode 100644 aports/luna/qt5-qtwebengine/patches-musl/yasm_intl.patch delete mode 100644 aports/luna/qt5-qtwebengine/use-ozone.patch delete mode 100644 aports/luna/serviceinstaller/APKBUILD delete mode 100644 aports/luna/webos-foundation/APKBUILD delete mode 100644 aports/luna/webos-loadable-frameworks/APKBUILD delete mode 100644 aports/luna/webos-underscore/APKBUILD delete mode 100644 aports/maemo/gnome-menus/APKBUILD delete mode 100644 aports/maemo/gtk+2.0-maemo/APKBUILD delete mode 100644 aports/maemo/gtk+2.0-maemo/automake.patch delete mode 100644 aports/maemo/gtk+2.0-maemo/gtk+2.0-maemo.post-deinstall delete mode 100644 aports/maemo/gtk+2.0-maemo/gtk+2.0-maemo.post-install delete mode 120000 aports/maemo/gtk+2.0-maemo/gtk+2.0-maemo.post-upgrade delete mode 100644 aports/maemo/gtk+2.0-maemo/gtk-update-icon-cache.trigger delete mode 100644 aports/maemo/gtk+2.0-maemo/gtk2-fixdso.patch delete mode 100644 aports/maemo/gtk+2.0-maemo/hildonize-gtk-treeview.diff delete mode 100644 aports/maemo/gtk+2.0-maemo/xid-collision-debug.patch delete mode 100644 aports/maemo/hildon-desktop/APKBUILD delete mode 100644 aports/maemo/hildon-home/APKBUILD delete mode 100644 aports/maemo/hildon-theme-alpha/APKBUILD delete mode 100644 aports/maemo/hildon-thumbnail/0001-add-__NR_ioprio_set-for-aarch64-to-fix-compilation.patch delete mode 100644 aports/maemo/hildon-thumbnail/APKBUILD delete mode 100644 aports/maemo/iphbd/APKBUILD delete mode 100644 aports/maemo/libdsme/APKBUILD delete mode 100644 aports/maemo/libhildon/APKBUILD delete mode 100644 aports/maemo/libhildon/hildon-non-glibc.patch delete mode 100644 aports/maemo/libhildondesktop/APKBUILD delete mode 100644 aports/maemo/libhildonfm/APKBUILD delete mode 100644 aports/maemo/libhildonmime/APKBUILD delete mode 100644 aports/maemo/libmatchbox2/APKBUILD delete mode 100644 aports/maemo/libosso/APKBUILD delete mode 100644 aports/maemo/libosso/libosso-mem-musl.patch delete mode 100644 aports/maemo/maemo-l10n/APKBUILD delete mode 100644 aports/maemo/maemo-launcher/APKBUILD delete mode 100644 aports/maemo/mce-headers/APKBUILD delete mode 100644 aports/maemo/osso-bookmark-engine/APKBUILD delete mode 100644 aports/maemo/osso-xterm/APKBUILD delete mode 100644 aports/maemo/profiled/APKBUILD delete mode 100644 aports/maemo/profiled/profiled-fix-musl.patch delete mode 100644 aports/maemo/sapwood/APKBUILD delete mode 100644 aports/main/0xffff/APKBUILD delete mode 100644 aports/main/abootimg/APKBUILD delete mode 100644 aports/main/abuild-aarch64-qemu-workaround/APKBUILD delete mode 100644 aports/main/abuild-aarch64-qemu-workaround/abuild-aarch64-qemu-workaround.post-install delete mode 100644 aports/main/abuild-aarch64-qemu-workaround/write-check-count.patch delete mode 100644 aports/main/apk-file/APKBUILD delete mode 100644 aports/main/blobtools/APKBUILD delete mode 100644 aports/main/charging-sdl/APKBUILD delete mode 100644 aports/main/chocolate-doom/APKBUILD delete mode 100644 aports/main/devicepkg-dev/APKBUILD delete mode 100644 aports/main/devicepkg-dev/devicepkg_build.sh delete mode 100644 aports/main/devicepkg-dev/devicepkg_package.sh delete mode 100644 aports/main/devicepkg-dev/downstreamkernel_prepare.sh delete mode 100644 aports/main/dtbtool/00_fix_version_detection.patch delete mode 100644 aports/main/dtbtool/01_find_dtb_in_subfolders.patch delete mode 100644 aports/main/dtbtool/APKBUILD delete mode 100644 aports/main/extract-dtb/APKBUILD delete mode 100644 aports/main/fbdebug/APKBUILD delete mode 100644 aports/main/fbdebug/fbdebug.c delete mode 100644 aports/main/heimdall/APKBUILD delete mode 100644 aports/main/heimdall/heimdall_flash_kernel.sh delete mode 100644 aports/main/heimdall/heimdall_wait_for_device.sh delete mode 100644 aports/main/hello-world-wrapper/APKBUILD delete mode 100644 aports/main/hello-world-wrapper/hello-world-wrapper.sh delete mode 100644 aports/main/hello-world/APKBUILD delete mode 100755 aports/main/hello-world/Makefile delete mode 100644 aports/main/hello-world/main.c delete mode 100644 aports/main/kernel-scripts/APKBUILD delete mode 100644 aports/main/kmscube/APKBUILD delete mode 100644 aports/main/libfakekey/APKBUILD delete mode 100644 aports/main/libphonenumber/APKBUILD delete mode 100644 aports/main/libqofono/APKBUILD delete mode 100644 aports/main/libsparse/APKBUILD delete mode 100644 aports/main/linux-postmarketos-mainline/APKBUILD delete mode 100644 aports/main/linux-postmarketos-mainline/config-postmarketos-mainline.aarch64 delete mode 100644 aports/main/linux-postmarketos-mainline/config-postmarketos-mainline.armhf delete mode 100644 aports/main/linux-postmarketos-mainline/config-postmarketos-mainline.x86_64 delete mode 100644 aports/main/linux-postmarketos-qcom/APKBUILD delete mode 100644 aports/main/linux-postmarketos-qcom/config-postmarketos-qcom.armhf delete mode 100644 aports/main/linux-postmarketos-stable/APKBUILD delete mode 100644 aports/main/linux-postmarketos-stable/config-postmarketos-stable.aarch64 delete mode 100644 aports/main/linux-postmarketos-stable/config-postmarketos-stable.armhf delete mode 100644 aports/main/linux-postmarketos-stable/config-postmarketos-stable.x86_64 delete mode 100644 aports/main/mdss-fb-init-hack/APKBUILD delete mode 100644 aports/main/mdss-fb-init-hack/mdss-fb-init-hack.initd delete mode 100644 aports/main/mdss-fb-init-hack/mdss-fb-init-hack.post-install delete mode 100644 aports/main/mdss-fb-init-hack/mdss-fb-init-hack.sh delete mode 100644 aports/main/mkbootimg-osm0sis/APKBUILD delete mode 100755 aports/main/msm-fb-refresher/00-msm-fb-refresher.files delete mode 100755 aports/main/msm-fb-refresher/00-msm-fb-refresher.sh delete mode 100644 aports/main/msm-fb-refresher/APKBUILD delete mode 100644 aports/main/msm-fb-refresher/msm-fb-refresher.init delete mode 100644 aports/main/msm-fb-refresher/msm-fb-refresher.post-install delete mode 100644 aports/main/ofono-qt/01-update_code_compatible_qt5.patch delete mode 100644 aports/main/ofono-qt/02-change_signals_Q_SIGNALS_Q_SLOTS.patch delete mode 100644 aports/main/ofono-qt/03-update_MessageManager_VoiceCallManager_to_match_latest_ofono_api.patch delete mode 100644 aports/main/ofono-qt/04-set_errors_on_dial_and_sendMessage.patch delete mode 100644 aports/main/ofono-qt/05-update_connman_interface_to_the_new_layout.patch delete mode 100644 aports/main/ofono-qt/06-fix_unit_tests.patch delete mode 100644 aports/main/ofono-qt/07-simplify_code_logic.patch delete mode 100644 aports/main/ofono-qt/08-add-delivery-report.patch delete mode 100644 aports/main/ofono-qt/09-createMultiparty-synchronous.patch delete mode 100644 aports/main/ofono-qt/10-use_right_modem_objpath.patch delete mode 100644 aports/main/ofono-qt/11_use_libdir.patch delete mode 100644 aports/main/ofono-qt/APKBUILD delete mode 100644 aports/main/osk-sdl/APKBUILD delete mode 100644 aports/main/postmarketos-android-recovery-installer/APKBUILD delete mode 100644 aports/main/postmarketos-android-recovery-installer/build_zip.sh delete mode 100644 aports/main/postmarketos-android-recovery-installer/pmos_chroot delete mode 100755 aports/main/postmarketos-android-recovery-installer/pmos_install delete mode 100755 aports/main/postmarketos-android-recovery-installer/pmos_install_functions delete mode 100755 aports/main/postmarketos-android-recovery-installer/pmos_setpw delete mode 100644 aports/main/postmarketos-android-recovery-installer/update-binary delete mode 100644 aports/main/postmarketos-artwork-wallpapers/APKBUILD delete mode 100644 aports/main/postmarketos-artwork/APKBUILD delete mode 100644 aports/main/postmarketos-base/50-firmware.rules delete mode 100644 aports/main/postmarketos-base/APKBUILD delete mode 100644 aports/main/postmarketos-base/firmwareload.sh delete mode 100644 aports/main/postmarketos-base/networkmanager.conf delete mode 100644 aports/main/postmarketos-base/postmarketos-base.post-install delete mode 100755 aports/main/postmarketos-base/swapfile/swapfile delete mode 100644 aports/main/postmarketos-base/swapfile/swapfile.conf delete mode 100755 aports/main/postmarketos-base/swapfile/swapfile.init delete mode 100644 aports/main/postmarketos-demos/APKBUILD delete mode 100755 aports/main/postmarketos-demos/Makefile delete mode 100644 aports/main/postmarketos-demos/main.c delete mode 100644 aports/main/postmarketos-mkinitfs-hook-debug-shell/20-debug-shell.files delete mode 100644 aports/main/postmarketos-mkinitfs-hook-debug-shell/20-debug-shell.sh delete mode 100644 aports/main/postmarketos-mkinitfs-hook-debug-shell/APKBUILD delete mode 100644 aports/main/postmarketos-mkinitfs-hook-maximum-attention/00-maximum-attention.sh delete mode 100644 aports/main/postmarketos-mkinitfs-hook-maximum-attention/APKBUILD delete mode 100644 aports/main/postmarketos-mkinitfs/APKBUILD delete mode 100644 aports/main/postmarketos-mkinitfs/init.sh.in delete mode 100644 aports/main/postmarketos-mkinitfs/init_functions.sh delete mode 100644 aports/main/postmarketos-mkinitfs/mkinitfs.sh delete mode 100644 aports/main/postmarketos-mkinitfs/postmarketos-mkinitfs.trigger delete mode 100644 aports/main/postmarketos-splash/APKBUILD delete mode 100644 aports/main/postmarketos-splash/config.ini delete mode 100644 aports/main/postmarketos-splash/make-splash.py delete mode 100644 aports/main/postmarketos-ui-hildon/APKBUILD delete mode 100644 aports/main/postmarketos-ui-hildon/postmarketos-ui-hildon.post-install delete mode 100644 aports/main/postmarketos-ui-hildon/start_hildon.sh delete mode 100644 aports/main/postmarketos-ui-hildon/xinitrc_hildon.sh delete mode 100644 aports/main/postmarketos-ui-i3wm/APKBUILD delete mode 100644 aports/main/postmarketos-ui-i3wm/lock.sh delete mode 100644 aports/main/postmarketos-ui-i3wm/postmarketos-ui-i3wm.post-install delete mode 100644 aports/main/postmarketos-ui-matchbox/APKBUILD delete mode 100644 aports/main/postmarketos-ui-matchbox/postmarketos-ui-matchbox.post-install delete mode 100644 aports/main/postmarketos-ui-matchbox/start_matchbox.sh delete mode 100644 aports/main/postmarketos-ui-mate/000-system-background.gschema.override delete mode 100644 aports/main/postmarketos-ui-mate/APKBUILD delete mode 100644 aports/main/postmarketos-ui-mate/postmarketos-ui-mate.post-install delete mode 100644 aports/main/postmarketos-ui-mate/start_mate.sh delete mode 100644 aports/main/postmarketos-ui-plasma-mobile/APKBUILD delete mode 100644 aports/main/postmarketos-ui-plasma-mobile/kdeglobals delete mode 100644 aports/main/postmarketos-ui-plasma-mobile/kwinrc delete mode 100644 aports/main/postmarketos-ui-plasma-mobile/org.kde.phone.homescreen.js delete mode 100644 aports/main/postmarketos-ui-plasma-mobile/postmarketos-ui-plasma-mobile.post-install delete mode 100644 aports/main/postmarketos-ui-plasma-mobile/qtlogging.ini delete mode 100644 aports/main/postmarketos-ui-plasma-mobile/start_plasma.sh delete mode 100644 aports/main/postmarketos-ui-weston/APKBUILD delete mode 100644 aports/main/postmarketos-ui-weston/postmarketos-ui-weston.post-install delete mode 100644 aports/main/postmarketos-ui-weston/start_weston.sh delete mode 100644 aports/main/postmarketos-ui-weston/weston.ini.default delete mode 100644 aports/main/postmarketos-ui-xfce4/APKBUILD delete mode 100644 aports/main/postmarketos-ui-xfce4/postmarketos-ui-xfce4.post-install delete mode 100644 aports/main/postmarketos-ui-xfce4/start_xfce4.sh delete mode 100644 aports/main/postmarketos-update-kernel/APKBUILD delete mode 100755 aports/main/postmarketos-update-kernel/update-kernel.sh delete mode 100644 aports/main/qt5-qtvirtualkeyboard/0001-include-sys-time.h-for-timeval.patch delete mode 100644 aports/main/qt5-qtvirtualkeyboard/APKBUILD delete mode 100644 aports/main/qt5-qtwayland/0003-QtKeyExtensionGlobal-fix-export.patch delete mode 100644 aports/main/qt5-qtwayland/APKBUILD delete mode 100644 aports/main/sdl_net/APKBUILD delete mode 100644 aports/main/telepathy-farstream/APKBUILD delete mode 100644 aports/main/telepathy-glib/APKBUILD delete mode 100644 aports/main/telepathy-mission-control/APKBUILD delete mode 100644 aports/main/telepathy-ofono/APKBUILD delete mode 100644 aports/main/telepathy-qt5/APKBUILD delete mode 100644 aports/main/triggerhappy/APKBUILD delete mode 100644 aports/main/triggerhappy/triggerhappy.openrc delete mode 100644 aports/main/unicsy-demo/APKBUILD delete mode 100644 aports/main/watchdog-kick/APKBUILD delete mode 100644 aports/main/watchdog-kick/watchdog-kick delete mode 100644 aports/main/watchdog-kick/watchdog-kick.init delete mode 100644 aports/main/watchdog-kick/watchdog-kick.post-install delete mode 100644 aports/main/wcnss-wlan/APKBUILD delete mode 100644 aports/main/wcnss-wlan/wcnss-wlan.initd delete mode 100644 aports/main/wcnss-wlan/wcnss-wlan.post-install delete mode 100644 aports/main/wireguard-postmarketos-stable/APKBUILD delete mode 100644 aports/matchbox/libmatchbox/APKBUILD delete mode 100644 aports/matchbox/libmatchbox/external-xsettings.patch delete mode 100644 aports/matchbox/libmatchbox/libmb.pc.in.patch delete mode 100644 aports/matchbox/libxsettings-client/01-ignore-xsettings-common-h.patch delete mode 100644 aports/matchbox/libxsettings-client/APKBUILD delete mode 100644 aports/matchbox/libxsettings/APKBUILD delete mode 100644 aports/matchbox/matchbox-common/APKBUILD delete mode 100644 aports/matchbox/matchbox-common/matchbox-v2-utils.patch delete mode 100644 aports/matchbox/matchbox-desktop/APKBUILD delete mode 100644 aports/matchbox/matchbox-keyboard/APKBUILD delete mode 100644 aports/matchbox/matchbox-panel/APKBUILD delete mode 100644 aports/matchbox/matchbox-panel/allow-smaller-icons.patch delete mode 100644 aports/matchbox/matchbox-window-manager/APKBUILD delete mode 100644 aports/matchbox/matchbox-window-manager/libpng.pc.patch delete mode 100644 aports/modem/libqipcrtr4msmipc/APKBUILD delete mode 100644 aports/modem/libsamsung-ipc/0001-i9100-modem-firmware-device-path.patch delete mode 100644 aports/modem/libsamsung-ipc/APKBUILD delete mode 100644 aports/modem/libsmdpkt_wrapper/APKBUILD delete mode 100644 aports/modem/modem-qcom-msm-downstream-common/APKBUILD delete mode 100644 aports/modem/modem-qcom-msm-downstream-common/udev.rules delete mode 100644 aports/modem/modem-qcom-msm-mainline-common/APKBUILD delete mode 100644 aports/modem/modem-qcom-msm-mainline-common/udev.rules delete mode 100644 aports/modem/msmipc-dev/APKBUILD delete mode 100644 aports/modem/ofono/0001-doc-ofonod.8-escape-minus-sign.patch delete mode 100644 aports/modem/ofono/0002-common-create-GList-helper-ofono_call_compare.patch delete mode 100644 aports/modem/ofono/0003-voicecall-common-promote-call_status_to_string-publi.patch delete mode 100644 aports/modem/ofono/0006-add-call-list-helper-to-manage-voice-call-lists.patch delete mode 100644 aports/modem/ofono/0007-common-atmodem-rename-move-at_util_call_compare_by_s.patch delete mode 100644 aports/modem/ofono/0008-common-atmodem-rename-move-at_util_call_compare_by_i.patch delete mode 100644 aports/modem/ofono/0011-qmimodem-sync-the-modem-on-enable.patch delete mode 100644 aports/modem/ofono/0014-network-ofono_netreg_status_notify-debug-output-lac-.patch delete mode 100644 aports/modem/ofono/0015-network-debug-output-the-network-time-if-updated.patch delete mode 100644 aports/modem/ofono/0016-voicecall-prefer-release_specific-over-hang_up_activ.patch delete mode 100644 aports/modem/ofono/0017-RFC-qmimodem-implement-voice-calls.patch delete mode 100644 aports/modem/ofono/APKBUILD delete mode 100644 aports/modem/ofono/ofono.initd delete mode 100644 aports/modem/ofono/support-smdpkt.patch delete mode 100644 aports/modem/ofono/udev.rules delete mode 100644 aports/modem/qcom_rmtfs/APKBUILD delete mode 100644 aports/modem/qcom_rmtfs/qcom_rmtfs.initd delete mode 100644 aports/modem/qcom_rmtfs/qcom_rmtfs.post-install delete mode 100644 aports/modem/qcom_rmtfs/support-uio.patch delete mode 100644 aports/modem/qcom_rmtfs/udev.rules delete mode 100644 aports/modem/qcom_rmtfs/update-storage-paths.patch delete mode 100644 aports/modem/qrtr/APKBUILD delete mode 100644 aports/modem/qrtr/fix-cfg-include.patch delete mode 100644 aports/modem/qrtr/qrtr.initd delete mode 100644 aports/modem/qrtr/qrtr.post-install delete mode 100644 aports/modem/rpmsgexport/APKBUILD delete mode 100644 aports/temp/qemu/0001-elfload-load-PIE-executables-to-right-address.patch delete mode 100644 aports/temp/qemu/0001-linux-user-fix-build-with-musl-on-aarch64.patch delete mode 100644 aports/temp/qemu/0001-linux-user-fix-build-with-musl-on-ppc64le.patch delete mode 100644 aports/temp/qemu/0001-module-Use-QEMU_MODULE_PATH-as-a-search-path.patch delete mode 100644 aports/temp/qemu/0001-ui-add-x_keymap.o-to-modules.patch delete mode 100644 aports/temp/qemu/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch delete mode 100644 aports/temp/qemu/80-kvm.rules delete mode 100644 aports/temp/qemu/APKBUILD delete mode 100644 aports/temp/qemu/bridge.conf delete mode 100644 aports/temp/qemu/fix-sigevent-and-sigval_t.patch delete mode 100644 aports/temp/qemu/fix-sockios-header.patch delete mode 100644 aports/temp/qemu/ignore-signals-33-and-64-to-allow-golang-emulation.patch delete mode 100644 aports/temp/qemu/musl-F_SHLCK-and-F_EXLCK.patch delete mode 100644 aports/temp/qemu/ncurses.patch delete mode 100644 aports/temp/qemu/qemu-guest-agent.confd delete mode 100644 aports/temp/qemu/qemu-guest-agent.initd delete mode 100644 aports/temp/qemu/qemu.post-install delete mode 100644 aports/temp/qemu/qemu.pre-install delete mode 100644 aports/temp/qemu/test-crypto-ivgen-skip-essiv.patch delete mode 100644 aports/temp/qemu/xattr_size_max.patch delete mode 100644 aports/temp/qt5-qtbase/APKBUILD delete mode 100644 aports/temp/qt5-qtbase/hack-openssl_test.patch delete mode 100644 aports/temp/qt5-qtbase/libressl-compat.patch delete mode 100644 aports/temp/qt5-qtbase/qt-musl-iconv-no-bom.patch delete mode 100644 aports/temp/qt5-qtdeclarative/APKBUILD delete mode 100644 aports/temp/virglrenderer/APKBUILD delete mode 100644 aports/temp/virglrenderer/musl-fixes.patch delete mode 100644 aports/temp/weston/0001-compositor-fbdev-Added-parameter-pixman-type.patch delete mode 100644 aports/temp/weston/0002-compositor-fbdev-Add-support-for-ABGR.patch delete mode 100644 aports/temp/weston/0003-compositor-fbdev-print-the-pixman-type-guessed-in-ca.patch delete mode 100644 aports/temp/weston/0004-musl-weston-launcher.patch delete mode 100644 aports/temp/weston/0005-timespec.patch delete mode 100644 aports/temp/weston/0006-compositor-fbdev-fix-start-up-assertion.patch delete mode 100644 aports/temp/weston/0007-Fix-compositor-rdp-compilation-with-freerdp-2.0.0-rc.patch delete mode 100644 aports/temp/weston/APKBUILD create mode 100644 pmb/config/pmaports.py create mode 100644 pmb/helpers/args.py delete mode 100644 test/test_aports.py delete mode 100644 test/test_aports_kde.py delete mode 100644 test/test_soname_bump.py delete mode 100644 test/test_upstream_compatibility.py rename {aports => test/testdata/aportgen/pmaports}/cross/binutils-armhf/APKBUILD (100%) rename {aports/cross/binutils-aarch64 => test/testdata/aportgen/pmaports/cross/binutils-armhf}/binutils-ld-fix-static-linking.patch (100%) rename {aports/cross/binutils-aarch64 => test/testdata/aportgen/pmaports/cross/binutils-armhf}/fix-powerpc64-out-ot-line-save-restore.patch (100%) rename {aports/cross/binutils-aarch64 => test/testdata/aportgen/pmaports/cross/binutils-armhf}/gold-mips.patch (100%) rename {aports => test/testdata/aportgen/pmaports}/cross/gcc-armhf/APKBUILD (100%) diff --git a/.gitignore b/.gitignore index 63025371..1ab5526b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +# pmbootstrap will clone "pmaports" and (if pmbootstrap is not installed system +# wide) create a symlink in the aports folder +aports + +# The rest below is more or less from a default Python .gitignore .*.swp # Failed patches diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eefd488c..057a8e7e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,57 +19,11 @@ stages: - checks - tests -wiki-test: - stage: checks - script: - - "./test/check_devices_in_wiki.py --booting" - static-code-analysis: stage: checks script: - "./test/static_code_analysis.sh" -test-aports: - stage: tests - script: - # Note: This script uses CI_PROJECT_DIR - - su pmos -c "CI_PROJECT_DIR=$CI_PROJECT_DIR .gitlab/shared-runner_test-aports.sh" - after_script: - # Move logs so it can be saved as artifacts - - "[[ -f /home/pmos/.local/var/pmbootstrap/log.txt ]] && mv /home/pmos/.local/var/pmbootstrap/log.txt $CI_PROJECT_DIR/log.txt" - - "[[ -f /home/pmos/.local/var/pmbootstrap/log_testsuite.txt ]] && mv /home/pmos/.local/var/pmbootstrap/log_testsuite.txt $CI_PROJECT_DIR/log_testsuite.txt" - - "[[ -f /home/pmos/.config/pmbootstrap.cfg ]] && cp /home/pmos/.config/pmbootstrap.cfg $CI_PROJECT_DIR/pmbootstrap.cfg" - - "sudo dmesg > $CI_PROJECT_DIR/dmesg.txt" - artifacts: - when: always - paths: - - "log.txt" - - "log_testsuite.txt" - - "dmesg.txt" - - "pmbootstrap.cfg" - expire_in: 1 week - -test-upstream-compat: - stage: tests - script: - # Note: This script uses CI_PROJECT_DIR - - su pmos -c "CI_PROJECT_DIR=$CI_PROJECT_DIR .gitlab/shared-runner_test-upstream-compat.sh" - after_script: - # Move logs so it can be saved as artifacts - - "[[ -f /home/pmos/.local/var/pmbootstrap/log.txt ]] && mv /home/pmos/.local/var/pmbootstrap/log.txt $CI_PROJECT_DIR/log.txt" - - "[[ -f /home/pmos/.local/var/pmbootstrap/log_testsuite.txt ]] && mv /home/pmos/.local/var/pmbootstrap/log_testsuite.txt $CI_PROJECT_DIR/log_testsuite.txt" - - "[[ -f /home/pmos/.config/pmbootstrap.cfg ]] && cp /home/pmos/.config/pmbootstrap.cfg $CI_PROJECT_DIR/pmbootstrap.cfg" - - "sudo dmesg > $CI_PROJECT_DIR/dmesg.txt" - artifacts: - when: always - paths: - - "log.txt" - - "log_testsuite.txt" - - "dmesg.txt" - - "pmbootstrap.cfg" - expire_in: 1 week - - test-pmbootstrap: stage: tests script: diff --git a/.gitlab/shared-runner_test-aports.sh b/.gitlab/shared-runner_test-aports.sh deleted file mode 100755 index 49a78a99..00000000 --- a/.gitlab/shared-runner_test-aports.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# -# This script is meant to be executed by a non-root user, since pmbootstrap -# commands will fail otherwise. This is primarily used by the gitlab CI shared -# runners. -# This script also assumes, if run outside a gitlab CI runner, that cwd is -# the root of the pmbootstrap project. For gitlab CI runners, $CI_PROJECT_DIR -# is used. -# Author: Clayton Craft - -# Return failure on any failure of commands below -set -e - -# Fail quickly if run as root, since other commands here will fail -[[ "$(id -u)" != "0" ]] - -# These are specific to the gitlab CI -[[ $CI_PROJECT_DIR ]] && cd "$CI_PROJECT_DIR" -# shellcheck disable=SC1091 -[[ -d venv ]] && source ./venv/bin/activate - -# Init test (pipefail disabled so 'yes' doesn't fail test) -set +o pipefail -yes ''| ./pmbootstrap.py init -set -o pipefail - -# kconfig_check -./pmbootstrap.py kconfig check - -# test_aports -python -m pytest -vv -x --cov=pmb --tb=native ./test/test_aports.py - -# test_aports_kde -python -m pytest -vv -x --cov=pmb --tb=native ./test/test_aports_kde.py - -# check_checksums -./test/check_checksums.py --build diff --git a/.gitlab/shared-runner_test-upstream-compat.sh b/.gitlab/shared-runner_test-upstream-compat.sh deleted file mode 100755 index 998d83c5..00000000 --- a/.gitlab/shared-runner_test-upstream-compat.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# -# This script is meant to be executed by a non-root user, since pmbootstrap -# commands will fail otherwise. This is primarily used by the gitlab CI shared -# runners. -# This script also assumes, if run outside a gitlab CI runner, that cwd is -# the root of the pmbootstrap project. For gitlab CI runners, $CI_PROJECT_DIR -# is used. -# Author: Clayton Craft - -# Return failure on any failure of commands below -set -e - -# Fail quickly if run as root, since other commands here will fail -[[ "$(id -u)" != "0" ]] - -# These are specific to the gitlab CI -[[ $CI_PROJECT_DIR ]] && cd "$CI_PROJECT_DIR" -# shellcheck disable=SC1091 -[[ -d venv ]] && source ./venv/bin/activate - -# These tests are meant to only run on the master branch -[[ $CI_COMMIT_REF_NAME != *"master"* ]] && echo "Not on master branch, so skipping tests here." && exit 0 - -# Init test (pipefail disabled so 'yes' doesn't fail test) -set +o pipefail -yes ''| ./pmbootstrap.py init -set -o pipefail - -# test_aportgen -python -m pytest -vv -x --cov=pmb --tb=native ./test/test_aportgen.py - -# test_soname_bump -python -m pytest -vv -x --cov=pmb --tb=native ./test/test_soname_bump.py - -# test_upstream_compatibility -python -m pytest -vv -x --cov=pmb --tb=native ./test/test_upstream_compatibility.py diff --git a/README.md b/README.md index df0148bd..aacbc31d 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ Sophisticated chroot/build/flash tool to develop and install [postmarketOS](https://postmarketos.org). +Package build scripts live in the [`pmaports`](https://gitlab.com/postmarketOS/pmaports) repository now. + ## Requirements * 2 GB of RAM recommended for compiling * Linux distribution (`x86`, `x86_64`, or `aarch64`) diff --git a/aports/cross/arch-bin-masquerade/APKBUILD b/aports/cross/arch-bin-masquerade/APKBUILD deleted file mode 100644 index 3655ed8c..00000000 --- a/aports/cross/arch-bin-masquerade/APKBUILD +++ /dev/null @@ -1,43 +0,0 @@ -# This package gets installed in the native and foreign arch chroots. -# It creates files like /usr/lib/arch-bin-masquerade/armhf/gcc, which -# point in the native chroot to the armhf-cross-compiler, and in the -# armhf chroot to /usr/bin/gcc. That way compilation works fine, even -# when distcc gets the absolute path to the compiler passed (ccache does -# that). - -pkgname=arch-bin-masquerade -pkgver=1 -pkgrel=0 -pkgdesc="Wrappers for ccache + distcc (native and foreign chroots)" -url="https://postmarketOS.org" -arch="all" -license="MIT" -options="!check !tracedeps" - -package() { - # Architectures and binaries - _archs="x86_64 armhf aarch64" - _bins="c++ cc cpp g++ gcc" - - # Iterate over architectures - for _arch in $_archs; do - # Create the arch-specific bin folder - _hostspec="$(arch_to_hostspec $_arch)" - _bindir="$pkgdir/usr/lib/arch-bin-masquerade/$_arch" - mkdir -p "$_bindir" - cd "$_bindir" - - # Iterate over binaries and create wrappers - for _bin in $_bins; do - { - echo "#!/bin/sh" - if [ "$_arch" == "$CARCH" ]; then - echo "exec /usr/bin/${_bin} \"\$@\"" - else - echo "exec /usr/bin/${_hostspec}-${_bin} \"\$@\"" - fi - } > "$_bin" - chmod +x "$_bin" - done - done -} diff --git a/aports/cross/binutils-aarch64/APKBUILD b/aports/cross/binutils-aarch64/APKBUILD deleted file mode 100644 index b471c16b..00000000 --- a/aports/cross/binutils-aarch64/APKBUILD +++ /dev/null @@ -1,65 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen binutils-aarch64 -# Based on: main/binutils - - -pkgname="binutils-aarch64" -pkgver=2.31.1 -pkgrel=0 -pkgdesc="Tools necessary to build programs for aarch64 targets" -url="https://www.gnu.org/software/binutils/" -depends="" -makedepends_build="" -makedepends_host="" -makedepends="gettext libtool autoconf automake bison" -arch="armhf x86_64 x86" -license="GPL-2.0 GPL-3.0-or-later LGPL-2.0 BSD" -subpackages="" -source="http://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2 - binutils-ld-fix-static-linking.patch - gold-mips.patch - " -builddir="$srcdir/binutils-$pkgver" - -if [ "$CHOST" != "$CTARGET" ]; then - pkgname="binutils-$CTARGET_ARCH" - subpackages="" - sonameprefix="binutils:" -fi - -# secfixes: -# 2.28-r1: -# - CVE-2017-7614 - -build() { - _target="$(arch_to_hostspec aarch64)" - cd "$builddir" - "$builddir"/configure \ - --build="$CBUILD" \ - --target=$_target \ - --with-lib-path=/usr/lib \ - --prefix=/usr \ - --with-sysroot=/usr/$_target \ - --enable-ld=default \ - --enable-gold=yes \ - --enable-plugins \ - --enable-deterministic-archives \ - --disable-multilib \ - --disable-werror \ - --disable-nls - make -} - -package() { - cd "$builddir" - make install DESTDIR="$pkgdir" - - # remove man, info folders - rm -rf "$pkgdir"/usr/share -} - - - -sha512sums="b42954e6f49a0adcd2676bdd77dfb59bfc25cec8184b007521d1e2b1d5d0593b58639e3d9448d5a40fe024c3cea386a37743627d6bb16d502f52a4a32b9573bd binutils-2.31.1.tar.bz2 -ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch -f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch" diff --git a/aports/cross/binutils-armhf/binutils-ld-fix-static-linking.patch b/aports/cross/binutils-armhf/binutils-ld-fix-static-linking.patch deleted file mode 100644 index bc5d7626..00000000 --- a/aports/cross/binutils-armhf/binutils-ld-fix-static-linking.patch +++ /dev/null @@ -1,46 +0,0 @@ -This fixes static linking for our hardened toolchain -diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc -index e8126cb..9532bfb 100644 ---- a/ld/scripttempl/elf.sc -+++ b/ld/scripttempl/elf.sc -@@ -235,8 +235,8 @@ test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS=" - if test "${ENABLE_INITFINI_ARRAY}" = "yes"; then - SORT_INIT_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))" - SORT_FINI_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))" -- CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors" -- DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors" -+ CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .ctors" -+ DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .dtors" - else - SORT_INIT_ARRAY="KEEP (*(SORT(.init_array.*)))" - SORT_FINI_ARRAY="KEEP (*(SORT(.fini_array.*)))" -@@ -270,15 +270,14 @@ CTOR=".ctors ${CONSTRUCTING-0} : - doesn't matter which directory crtbegin.o - is in. */ - -- KEEP (*crtbegin.o(.ctors)) -- KEEP (*crtbegin?.o(.ctors)) -+ KEEP (*crtbegin*.o(.ctors)) - - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - -- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors)) -+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - ${CONSTRUCTING+${CTOR_END}} -@@ -286,9 +285,8 @@ CTOR=".ctors ${CONSTRUCTING-0} : - DTOR=".dtors ${CONSTRUCTING-0} : - { - ${CONSTRUCTING+${DTOR_START}} -- KEEP (*crtbegin.o(.dtors)) -- KEEP (*crtbegin?.o(.dtors)) -- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors)) -+ KEEP (*crtbegin*.o(.dtors)) -+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - ${CONSTRUCTING+${DTOR_END}} diff --git a/aports/cross/binutils-armhf/fix-powerpc64-out-ot-line-save-restore.patch b/aports/cross/binutils-armhf/fix-powerpc64-out-ot-line-save-restore.patch deleted file mode 100644 index 56ec7ede..00000000 --- a/aports/cross/binutils-armhf/fix-powerpc64-out-ot-line-save-restore.patch +++ /dev/null @@ -1,93 +0,0 @@ -From d66deb71f1537e2e30dccdfda22eed5d46ec47eb Mon Sep 17 00:00:00 2001 -From: Alan Modra -Date: Wed, 14 Mar 2018 22:09:33 +1030 -Subject: [PATCH] PowerPC64 debian bug 886264, out-of-line save/restore - functions - -This calculation in relocate_section - - if (stub_entry->stub_type == ppc_stub_save_res) - relocation += (stub_sec->output_offset - + stub_sec->output_section->vma - + stub_sec->size - htab->sfpr->size - - htab->sfpr->output_offset - - htab->sfpr->output_section->vma); - -to adjust from the original out-of-line save/restore function address -in sfpr to a copy at the end of stub_sec goes wrong when stub_sec is -padded, because the copy is no longer at the end of stub_sec. The -solution is to pad before copying sfpr, so the copy is always at the -end of stub_sec. - - * elf64-ppc.c (sfpr_define): Adjust for stub_sec size having - sfpr size added before defining alias symbols. - (ppc64_elf_build_stubs): Add stub section padding before - copying sfpr contents and defining save/restore alias symbols. - -(cherry picked from commit 7dda8d3cf3b089bb7e03c4cdbec827fc6a188c88) ---- - bfd/ChangeLog | 9 +++++++++ - bfd/elf64-ppc.c | 33 ++++++++++++++++++--------------- - 2 files changed, 27 insertions(+), 15 deletions(-) - -diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c -index 6fcdff0..039294f 100644 ---- a/bfd/elf64-ppc.c -+++ b/bfd/elf64-ppc.c -@@ -6645,7 +6645,7 @@ sfpr_define (struct bfd_link_info *info, - { - s->root.type = bfd_link_hash_defined; - s->root.u.def.section = stub_sec; -- s->root.u.def.value = (stub_sec->size -+ s->root.u.def.value = (stub_sec->size - htab->sfpr->size - + h->elf.root.u.def.value); - s->ref_regular = 1; - s->def_regular = 1; -@@ -13232,20 +13232,7 @@ ppc64_elf_build_stubs (struct bfd_link_info *info, - - for (group = htab->group; group != NULL; group = group->next) - if (group->needs_save_res) -- { -- stub_sec = group->stub_sec; -- memcpy (stub_sec->contents + stub_sec->size, htab->sfpr->contents, -- htab->sfpr->size); -- if (htab->params->emit_stub_syms) -- { -- unsigned int i; -- -- for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++) -- if (!sfpr_define (info, &save_res_funcs[i], stub_sec)) -- return FALSE; -- } -- stub_sec->size += htab->sfpr->size; -- } -+ group->stub_sec->size += htab->sfpr->size; - - if (htab->relbrlt != NULL) - htab->relbrlt->reloc_count = 0; -@@ -13259,6 +13246,22 @@ ppc64_elf_build_stubs (struct bfd_link_info *info, - } - - for (group = htab->group; group != NULL; group = group->next) -+ if (group->needs_save_res) -+ { -+ stub_sec = group->stub_sec; -+ memcpy (stub_sec->contents + stub_sec->size - htab->sfpr->size, -+ htab->sfpr->contents, htab->sfpr->size); -+ if (htab->params->emit_stub_syms) -+ { -+ unsigned int i; -+ -+ for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++) -+ if (!sfpr_define (info, &save_res_funcs[i], stub_sec)) -+ return FALSE; -+ } -+ } -+ -+ for (group = htab->group; group != NULL; group = group->next) - if ((stub_sec = group->stub_sec) != NULL) - { - stub_sec_count += 1; --- -2.9.3 - diff --git a/aports/cross/binutils-armhf/gold-mips.patch b/aports/cross/binutils-armhf/gold-mips.patch deleted file mode 100644 index 291a2aae..00000000 --- a/aports/cross/binutils-armhf/gold-mips.patch +++ /dev/null @@ -1,39 +0,0 @@ -# DP: Fix gold on mips64 targets. - -gold/ - -2016-08-09 Aurelien Jarno - - * configure.tgt: Add mips64el*-*-*|mips64le*-*-* and mips64*-*-*. - - ---- a/gold/configure.tgt -+++ b/gold/configure.tgt -@@ -153,6 +153,13 @@ aarch64*-*) - targ_big_endian=false - targ_extra_big_endian=true - ;; -+mips*64*el*-*-*|mips*64*le*-*-*) -+ targ_obj=mips -+ targ_machine=EM_MIPS_RS3_LE -+ targ_size=64 -+ targ_big_endian=false -+ targ_extra_big_endian=true -+ ;; - mips*el*-*-*|mips*le*-*-*) - targ_obj=mips - targ_machine=EM_MIPS_RS3_LE -@@ -160,6 +167,13 @@ mips*el*-*-*|mips*le*-*-*) - targ_big_endian=false - targ_extra_big_endian=true - ;; -+mips*64*-*-*) -+ targ_obj=mips -+ targ_machine=EM_MIPS -+ targ_size=64 -+ targ_big_endian=true -+ targ_extra_big_endian=false -+ ;; - mips*-*-*) - targ_obj=mips - targ_machine=EM_MIPS diff --git a/aports/cross/binutils-x86_64/APKBUILD b/aports/cross/binutils-x86_64/APKBUILD deleted file mode 100644 index cd4542e1..00000000 --- a/aports/cross/binutils-x86_64/APKBUILD +++ /dev/null @@ -1,65 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen binutils-x86_64 -# Based on: main/binutils - - -pkgname="binutils-x86_64" -pkgver=2.31.1 -pkgrel=0 -pkgdesc="Tools necessary to build programs for x86_64 targets" -url="https://www.gnu.org/software/binutils/" -depends="" -makedepends_build="" -makedepends_host="" -makedepends="gettext libtool autoconf automake bison" -arch="armhf aarch64 x86" -license="GPL-2.0 GPL-3.0-or-later LGPL-2.0 BSD" -subpackages="" -source="http://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2 - binutils-ld-fix-static-linking.patch - gold-mips.patch - " -builddir="$srcdir/binutils-$pkgver" - -if [ "$CHOST" != "$CTARGET" ]; then - pkgname="binutils-$CTARGET_ARCH" - subpackages="" - sonameprefix="binutils:" -fi - -# secfixes: -# 2.28-r1: -# - CVE-2017-7614 - -build() { - _target="$(arch_to_hostspec x86_64)" - cd "$builddir" - "$builddir"/configure \ - --build="$CBUILD" \ - --target=$_target \ - --with-lib-path=/usr/lib \ - --prefix=/usr \ - --with-sysroot=/usr/$_target \ - --enable-ld=default \ - --enable-gold=yes \ - --enable-plugins \ - --enable-deterministic-archives \ - --disable-multilib \ - --disable-werror \ - --disable-nls - make -} - -package() { - cd "$builddir" - make install DESTDIR="$pkgdir" - - # remove man, info folders - rm -rf "$pkgdir"/usr/share -} - - - -sha512sums="b42954e6f49a0adcd2676bdd77dfb59bfc25cec8184b007521d1e2b1d5d0593b58639e3d9448d5a40fe024c3cea386a37743627d6bb16d502f52a4a32b9573bd binutils-2.31.1.tar.bz2 -ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch -f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch" diff --git a/aports/cross/binutils-x86_64/binutils-ld-fix-static-linking.patch b/aports/cross/binutils-x86_64/binutils-ld-fix-static-linking.patch deleted file mode 100644 index bc5d7626..00000000 --- a/aports/cross/binutils-x86_64/binutils-ld-fix-static-linking.patch +++ /dev/null @@ -1,46 +0,0 @@ -This fixes static linking for our hardened toolchain -diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc -index e8126cb..9532bfb 100644 ---- a/ld/scripttempl/elf.sc -+++ b/ld/scripttempl/elf.sc -@@ -235,8 +235,8 @@ test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS=" - if test "${ENABLE_INITFINI_ARRAY}" = "yes"; then - SORT_INIT_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))" - SORT_FINI_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))" -- CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors" -- DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors" -+ CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .ctors" -+ DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .dtors" - else - SORT_INIT_ARRAY="KEEP (*(SORT(.init_array.*)))" - SORT_FINI_ARRAY="KEEP (*(SORT(.fini_array.*)))" -@@ -270,15 +270,14 @@ CTOR=".ctors ${CONSTRUCTING-0} : - doesn't matter which directory crtbegin.o - is in. */ - -- KEEP (*crtbegin.o(.ctors)) -- KEEP (*crtbegin?.o(.ctors)) -+ KEEP (*crtbegin*.o(.ctors)) - - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - -- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors)) -+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - ${CONSTRUCTING+${CTOR_END}} -@@ -286,9 +285,8 @@ CTOR=".ctors ${CONSTRUCTING-0} : - DTOR=".dtors ${CONSTRUCTING-0} : - { - ${CONSTRUCTING+${DTOR_START}} -- KEEP (*crtbegin.o(.dtors)) -- KEEP (*crtbegin?.o(.dtors)) -- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors)) -+ KEEP (*crtbegin*.o(.dtors)) -+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - ${CONSTRUCTING+${DTOR_END}} diff --git a/aports/cross/binutils-x86_64/fix-powerpc64-out-ot-line-save-restore.patch b/aports/cross/binutils-x86_64/fix-powerpc64-out-ot-line-save-restore.patch deleted file mode 100644 index 56ec7ede..00000000 --- a/aports/cross/binutils-x86_64/fix-powerpc64-out-ot-line-save-restore.patch +++ /dev/null @@ -1,93 +0,0 @@ -From d66deb71f1537e2e30dccdfda22eed5d46ec47eb Mon Sep 17 00:00:00 2001 -From: Alan Modra -Date: Wed, 14 Mar 2018 22:09:33 +1030 -Subject: [PATCH] PowerPC64 debian bug 886264, out-of-line save/restore - functions - -This calculation in relocate_section - - if (stub_entry->stub_type == ppc_stub_save_res) - relocation += (stub_sec->output_offset - + stub_sec->output_section->vma - + stub_sec->size - htab->sfpr->size - - htab->sfpr->output_offset - - htab->sfpr->output_section->vma); - -to adjust from the original out-of-line save/restore function address -in sfpr to a copy at the end of stub_sec goes wrong when stub_sec is -padded, because the copy is no longer at the end of stub_sec. The -solution is to pad before copying sfpr, so the copy is always at the -end of stub_sec. - - * elf64-ppc.c (sfpr_define): Adjust for stub_sec size having - sfpr size added before defining alias symbols. - (ppc64_elf_build_stubs): Add stub section padding before - copying sfpr contents and defining save/restore alias symbols. - -(cherry picked from commit 7dda8d3cf3b089bb7e03c4cdbec827fc6a188c88) ---- - bfd/ChangeLog | 9 +++++++++ - bfd/elf64-ppc.c | 33 ++++++++++++++++++--------------- - 2 files changed, 27 insertions(+), 15 deletions(-) - -diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c -index 6fcdff0..039294f 100644 ---- a/bfd/elf64-ppc.c -+++ b/bfd/elf64-ppc.c -@@ -6645,7 +6645,7 @@ sfpr_define (struct bfd_link_info *info, - { - s->root.type = bfd_link_hash_defined; - s->root.u.def.section = stub_sec; -- s->root.u.def.value = (stub_sec->size -+ s->root.u.def.value = (stub_sec->size - htab->sfpr->size - + h->elf.root.u.def.value); - s->ref_regular = 1; - s->def_regular = 1; -@@ -13232,20 +13232,7 @@ ppc64_elf_build_stubs (struct bfd_link_info *info, - - for (group = htab->group; group != NULL; group = group->next) - if (group->needs_save_res) -- { -- stub_sec = group->stub_sec; -- memcpy (stub_sec->contents + stub_sec->size, htab->sfpr->contents, -- htab->sfpr->size); -- if (htab->params->emit_stub_syms) -- { -- unsigned int i; -- -- for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++) -- if (!sfpr_define (info, &save_res_funcs[i], stub_sec)) -- return FALSE; -- } -- stub_sec->size += htab->sfpr->size; -- } -+ group->stub_sec->size += htab->sfpr->size; - - if (htab->relbrlt != NULL) - htab->relbrlt->reloc_count = 0; -@@ -13259,6 +13246,22 @@ ppc64_elf_build_stubs (struct bfd_link_info *info, - } - - for (group = htab->group; group != NULL; group = group->next) -+ if (group->needs_save_res) -+ { -+ stub_sec = group->stub_sec; -+ memcpy (stub_sec->contents + stub_sec->size - htab->sfpr->size, -+ htab->sfpr->contents, htab->sfpr->size); -+ if (htab->params->emit_stub_syms) -+ { -+ unsigned int i; -+ -+ for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++) -+ if (!sfpr_define (info, &save_res_funcs[i], stub_sec)) -+ return FALSE; -+ } -+ } -+ -+ for (group = htab->group; group != NULL; group = group->next) - if ((stub_sec = group->stub_sec) != NULL) - { - stub_sec_count += 1; --- -2.9.3 - diff --git a/aports/cross/binutils-x86_64/gold-mips.patch b/aports/cross/binutils-x86_64/gold-mips.patch deleted file mode 100644 index 291a2aae..00000000 --- a/aports/cross/binutils-x86_64/gold-mips.patch +++ /dev/null @@ -1,39 +0,0 @@ -# DP: Fix gold on mips64 targets. - -gold/ - -2016-08-09 Aurelien Jarno - - * configure.tgt: Add mips64el*-*-*|mips64le*-*-* and mips64*-*-*. - - ---- a/gold/configure.tgt -+++ b/gold/configure.tgt -@@ -153,6 +153,13 @@ aarch64*-*) - targ_big_endian=false - targ_extra_big_endian=true - ;; -+mips*64*el*-*-*|mips*64*le*-*-*) -+ targ_obj=mips -+ targ_machine=EM_MIPS_RS3_LE -+ targ_size=64 -+ targ_big_endian=false -+ targ_extra_big_endian=true -+ ;; - mips*el*-*-*|mips*le*-*-*) - targ_obj=mips - targ_machine=EM_MIPS_RS3_LE -@@ -160,6 +167,13 @@ mips*el*-*-*|mips*le*-*-*) - targ_big_endian=false - targ_extra_big_endian=true - ;; -+mips*64*-*-*) -+ targ_obj=mips -+ targ_machine=EM_MIPS -+ targ_size=64 -+ targ_big_endian=true -+ targ_extra_big_endian=false -+ ;; - mips*-*-*) - targ_obj=mips - targ_machine=EM_MIPS diff --git a/aports/cross/busybox-static-aarch64/APKBUILD b/aports/cross/busybox-static-aarch64/APKBUILD deleted file mode 100644 index 55b53b3f..00000000 --- a/aports/cross/busybox-static-aarch64/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen busybox-static-aarch64 - -pkgname=busybox-static-aarch64 -pkgver=1.28.4 -pkgrel=2 - -_arch="aarch64" -_mirror="http://dl-cdn.alpinelinux.org/alpine/" - -url="http://busybox.net" -license="GPL2" -arch="all" -options="!check !strip" -pkgdesc="Statically linked Busybox for $_arch" -_target="$(arch_to_hostspec $_arch)" - -source=" - busybox-static-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/busybox-static-$pkgver-r$pkgrel.apk -" - -package() { - mkdir -p "$pkgdir/usr/$_target" - cd "$pkgdir/usr/$_target" - tar -xf $srcdir/busybox-static-$pkgver-r$pkgrel-$_arch.apk - rm .PKGINFO .SIGN.* -} - -sha512sums="363f13a3041a65ee96c984f75e46e3b0af985de3ca312b109ee2fbcfea957a69fe75655d3138ca922f8e196fa97c56c7c8a387440962150874a2cc619f07e8b6 busybox-static-1.28.4-r2-aarch64.apk" diff --git a/aports/cross/busybox-static-armhf/APKBUILD b/aports/cross/busybox-static-armhf/APKBUILD deleted file mode 100644 index ac1217e7..00000000 --- a/aports/cross/busybox-static-armhf/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen busybox-static-armhf - -pkgname=busybox-static-armhf -pkgver=1.28.4 -pkgrel=2 - -_arch="armhf" -_mirror="http://dl-cdn.alpinelinux.org/alpine/" - -url="http://busybox.net" -license="GPL2" -arch="all" -options="!check !strip" -pkgdesc="Statically linked Busybox for $_arch" -_target="$(arch_to_hostspec $_arch)" - -source=" - busybox-static-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/busybox-static-$pkgver-r$pkgrel.apk -" - -package() { - mkdir -p "$pkgdir/usr/$_target" - cd "$pkgdir/usr/$_target" - tar -xf $srcdir/busybox-static-$pkgver-r$pkgrel-$_arch.apk - rm .PKGINFO .SIGN.* -} - -sha512sums="e10a339969fee47103d567d4a24237371a13a8519c40c550e64c3129018ff0fbd3bea785391c921087631bf0857e4a2ac46862fd699052f6a0752fb6e5771024 busybox-static-1.28.4-r2-armhf.apk" diff --git a/aports/cross/ccache-cross-symlinks/APKBUILD b/aports/cross/ccache-cross-symlinks/APKBUILD deleted file mode 100644 index cc2e8c2a..00000000 --- a/aports/cross/ccache-cross-symlinks/APKBUILD +++ /dev/null @@ -1,27 +0,0 @@ -# This package gets installed in the native chroot only. When cross- -# compiling packages in the native chroot (e.g. kernel packages), the -# cross-compiler does not get called directly, but wrapped through -# ccache, which can then cache the results. - -pkgname=ccache-cross-symlinks -pkgver=1 -pkgrel=4 -pkgdesc="Enable ccache for cross-compilers with symlinks" -url="https://ccache.samba.org/" -arch="noarch" -license="MIT" -depends="ccache" -options="!check" - -package() { - local _archs="armhf aarch64" - local _bins="c++ cc cpp g++ gcc" - mkdir -p "$pkgdir/usr/lib/ccache/bin" - cd "$pkgdir/usr/lib/ccache/bin" - for _arch in $_archs; do - _hostspec="$(arch_to_hostspec $_arch)" - for _bin in $_bins; do - ln -v -s /usr/bin/ccache ${_hostspec}-${_bin} - done - done -} diff --git a/aports/cross/gcc-aarch64/0001-i386-Move-struct-ix86_frame-to-machine_function.patch b/aports/cross/gcc-aarch64/0001-i386-Move-struct-ix86_frame-to-machine_function.patch deleted file mode 100644 index ecec2bad..00000000 --- a/aports/cross/gcc-aarch64/0001-i386-Move-struct-ix86_frame-to-machine_function.patch +++ /dev/null @@ -1,241 +0,0 @@ -From b1d2df5090abc9202a7bf2d224ac90de22908d21 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 15 Jan 2018 11:27:24 +0000 -Subject: [PATCH 01/13] i386: Move struct ix86_frame to machine_function - -Make ix86_frame available to i386 code generation. This is needed to -backport the patch set of -mindirect-branch= to mitigate variant #2 of -the speculative execution vulnerabilities on x86 processors identified -by CVE-2017-5715, aka Spectre. - - Backport from mainline - 2017-06-01 Bernd Edlinger - - * config/i386/i386.c (ix86_frame): Moved to ... - * config/i386/i386.h (ix86_frame): Here. - (machine_function): Add frame. - * config/i386/i386.c (ix86_compute_frame_layout): Repace the - frame argument with &cfun->machine->frame. - (ix86_can_use_return_insn_p): Don't pass &frame to - ix86_compute_frame_layout. Copy frame from cfun->machine->frame. - (ix86_can_eliminate): Likewise. - (ix86_expand_prologue): Likewise. - (ix86_expand_epilogue): Likewise. - (ix86_expand_split_stack_prologue): Likewise. ---- - gcc/config/i386/i386.c | 68 ++++++++++---------------------------------------- - gcc/config/i386/i386.h | 53 ++++++++++++++++++++++++++++++++++++++- - 2 files changed, 65 insertions(+), 56 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 8b5faac5129..a1ff32b648b 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -2434,53 +2434,6 @@ struct GTY(()) stack_local_entry { - struct stack_local_entry *next; - }; - --/* Structure describing stack frame layout. -- Stack grows downward: -- -- [arguments] -- <- ARG_POINTER -- saved pc -- -- saved static chain if ix86_static_chain_on_stack -- -- saved frame pointer if frame_pointer_needed -- <- HARD_FRAME_POINTER -- [saved regs] -- <- regs_save_offset -- [padding0] -- -- [saved SSE regs] -- <- sse_regs_save_offset -- [padding1] | -- | <- FRAME_POINTER -- [va_arg registers] | -- | -- [frame] | -- | -- [padding2] | = to_allocate -- <- STACK_POINTER -- */ --struct ix86_frame --{ -- int nsseregs; -- int nregs; -- int va_arg_size; -- int red_zone_size; -- int outgoing_arguments_size; -- -- /* The offsets relative to ARG_POINTER. */ -- HOST_WIDE_INT frame_pointer_offset; -- HOST_WIDE_INT hard_frame_pointer_offset; -- HOST_WIDE_INT stack_pointer_offset; -- HOST_WIDE_INT hfp_save_offset; -- HOST_WIDE_INT reg_save_offset; -- HOST_WIDE_INT sse_reg_save_offset; -- -- /* When save_regs_using_mov is set, emit prologue using -- move instead of push instructions. */ -- bool save_regs_using_mov; --}; -- - /* Which cpu are we scheduling for. */ - enum attr_cpu ix86_schedule; - -@@ -2572,7 +2525,7 @@ static unsigned int ix86_function_arg_boundary (machine_mode, - const_tree); - static rtx ix86_static_chain (const_tree, bool); - static int ix86_function_regparm (const_tree, const_tree); --static void ix86_compute_frame_layout (struct ix86_frame *); -+static void ix86_compute_frame_layout (void); - static bool ix86_expand_vector_init_one_nonzero (bool, machine_mode, - rtx, rtx, int); - static void ix86_add_new_builtins (HOST_WIDE_INT); -@@ -10944,7 +10897,8 @@ ix86_can_use_return_insn_p (void) - if (crtl->args.pops_args && crtl->args.size >= 32768) - return 0; - -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = cfun->machine->frame; - return (frame.stack_pointer_offset == UNITS_PER_WORD - && (frame.nregs + frame.nsseregs) == 0); - } -@@ -11355,8 +11309,8 @@ ix86_can_eliminate (const int from, const int to) - HOST_WIDE_INT - ix86_initial_elimination_offset (int from, int to) - { -- struct ix86_frame frame; -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ struct ix86_frame frame = cfun->machine->frame; - - if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) - return frame.hard_frame_pointer_offset; -@@ -11395,8 +11349,9 @@ ix86_builtin_setjmp_frame_value (void) - /* Fill structure ix86_frame about frame of currently computed function. */ - - static void --ix86_compute_frame_layout (struct ix86_frame *frame) -+ix86_compute_frame_layout (void) - { -+ struct ix86_frame *frame = &cfun->machine->frame; - unsigned HOST_WIDE_INT stack_alignment_needed; - HOST_WIDE_INT offset; - unsigned HOST_WIDE_INT preferred_alignment; -@@ -12702,7 +12657,8 @@ ix86_expand_prologue (void) - m->fs.sp_offset = INCOMING_FRAME_SP_OFFSET; - m->fs.sp_valid = true; - -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = m->frame; - - if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) - { -@@ -13379,7 +13335,8 @@ ix86_expand_epilogue (int style) - bool using_drap; - - ix86_finalize_stack_realign_flags (); -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = m->frame; - - m->fs.sp_valid = (!frame_pointer_needed - || (crtl->sp_is_unchanging -@@ -13876,7 +13833,8 @@ ix86_expand_split_stack_prologue (void) - gcc_assert (flag_split_stack && reload_completed); - - ix86_finalize_stack_realign_flags (); -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = cfun->machine->frame; - allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; - - /* This is the label we will branch to if we have enough stack -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 8113f83c7fd..54144166172 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2427,9 +2427,56 @@ enum avx_u128_state - - #define FASTCALL_PREFIX '@' - -+#ifndef USED_FOR_TARGET -+/* Structure describing stack frame layout. -+ Stack grows downward: -+ -+ [arguments] -+ <- ARG_POINTER -+ saved pc -+ -+ saved static chain if ix86_static_chain_on_stack -+ -+ saved frame pointer if frame_pointer_needed -+ <- HARD_FRAME_POINTER -+ [saved regs] -+ <- regs_save_offset -+ [padding0] -+ -+ [saved SSE regs] -+ <- sse_regs_save_offset -+ [padding1] | -+ | <- FRAME_POINTER -+ [va_arg registers] | -+ | -+ [frame] | -+ | -+ [padding2] | = to_allocate -+ <- STACK_POINTER -+ */ -+struct GTY(()) ix86_frame -+{ -+ int nsseregs; -+ int nregs; -+ int va_arg_size; -+ int red_zone_size; -+ int outgoing_arguments_size; -+ -+ /* The offsets relative to ARG_POINTER. */ -+ HOST_WIDE_INT frame_pointer_offset; -+ HOST_WIDE_INT hard_frame_pointer_offset; -+ HOST_WIDE_INT stack_pointer_offset; -+ HOST_WIDE_INT hfp_save_offset; -+ HOST_WIDE_INT reg_save_offset; -+ HOST_WIDE_INT sse_reg_save_offset; -+ -+ /* When save_regs_using_mov is set, emit prologue using -+ move instead of push instructions. */ -+ bool save_regs_using_mov; -+}; -+ - /* Machine specific frame tracking during prologue/epilogue generation. */ - --#ifndef USED_FOR_TARGET - struct GTY(()) machine_frame_state - { - /* This pair tracks the currently active CFA as reg+offset. When reg -@@ -2475,6 +2522,9 @@ struct GTY(()) machine_function { - int varargs_fpr_size; - int optimize_mode_switching[MAX_386_ENTITIES]; - -+ /* Cached initial frame layout for the current function. */ -+ struct ix86_frame frame; -+ - /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE - has been computed for. */ - int use_fast_prologue_epilogue_nregs; -@@ -2554,6 +2604,7 @@ struct GTY(()) machine_function { - #define ix86_current_function_calls_tls_descriptor \ - (ix86_tls_descriptor_calls_expanded_in_cfun && df_regs_ever_live_p (SP_REG)) - #define ix86_static_chain_on_stack (cfun->machine->static_chain_on_stack) -+#define ix86_red_zone_size (cfun->machine->frame.red_zone_size) - - /* Control behavior of x86_file_start. */ - #define X86_FILE_START_VERSION_DIRECTIVE false --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch b/aports/cross/gcc-aarch64/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch deleted file mode 100644 index 79219e85..00000000 --- a/aports/cross/gcc-aarch64/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch +++ /dev/null @@ -1,69 +0,0 @@ -From b1fc91cda7c15264116f3dde6944ead149123653 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 15 Jan 2018 11:28:44 +0000 -Subject: [PATCH 02/13] i386: Use reference of struct ix86_frame to avoid copy - -When there is no need to make a copy of ix86_frame, we can use reference -of struct ix86_frame to avoid copy. - - Backport from mainline - 2017-11-06 H.J. Lu - - * config/i386/i386.c (ix86_can_use_return_insn_p): Use reference - of struct ix86_frame. - (ix86_initial_elimination_offset): Likewise. - (ix86_expand_split_stack_prologue): Likewise. ---- - gcc/config/i386/i386.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index a1ff32b648b..13ebf107e90 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -10887,7 +10887,6 @@ symbolic_reference_mentioned_p (rtx op) - bool - ix86_can_use_return_insn_p (void) - { -- struct ix86_frame frame; - - if (! reload_completed || frame_pointer_needed) - return 0; -@@ -10898,7 +10897,7 @@ ix86_can_use_return_insn_p (void) - return 0; - - ix86_compute_frame_layout (); -- frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - return (frame.stack_pointer_offset == UNITS_PER_WORD - && (frame.nregs + frame.nsseregs) == 0); - } -@@ -11310,7 +11309,7 @@ HOST_WIDE_INT - ix86_initial_elimination_offset (int from, int to) - { - ix86_compute_frame_layout (); -- struct ix86_frame frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - - if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) - return frame.hard_frame_pointer_offset; -@@ -13821,7 +13820,6 @@ static GTY(()) rtx split_stack_fn_large; - void - ix86_expand_split_stack_prologue (void) - { -- struct ix86_frame frame; - HOST_WIDE_INT allocate; - unsigned HOST_WIDE_INT args_size; - rtx_code_label *label; -@@ -13834,7 +13832,7 @@ ix86_expand_split_stack_prologue (void) - - ix86_finalize_stack_realign_flags (); - ix86_compute_frame_layout (); -- frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; - - /* This is the label we will branch to if we have enough stack --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch b/aports/cross/gcc-aarch64/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch deleted file mode 100644 index 2f293946..00000000 --- a/aports/cross/gcc-aarch64/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 3e39c0a8053b3e960cf4c3aea3c814e7dc97cfd6 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Sat, 27 Jan 2018 13:10:24 +0000 -Subject: [PATCH 03/13] i386: Use const reference of struct ix86_frame to avoid - copy - -We can use const reference of struct ix86_frame to avoid making a local -copy of ix86_frame. ix86_expand_epilogue makes a local copy of struct -ix86_frame and uses the reg_save_offset field as a local variable. This -patch uses a separate local variable for reg_save_offset. - -Tested on x86-64 with ada. - - Backport from mainline - PR target/83905 - * config/i386/i386.c (ix86_expand_prologue): Use cost reference - of struct ix86_frame. - (ix86_expand_epilogue): Likewise. Add a local variable for - the reg_save_offset field in struct ix86_frame. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257123 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 13ebf107e90..6c98f7581e2 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -12633,7 +12633,6 @@ ix86_expand_prologue (void) - { - struct machine_function *m = cfun->machine; - rtx insn, t; -- struct ix86_frame frame; - HOST_WIDE_INT allocate; - bool int_registers_saved; - bool sse_registers_saved; -@@ -12657,7 +12656,7 @@ ix86_expand_prologue (void) - m->fs.sp_valid = true; - - ix86_compute_frame_layout (); -- frame = m->frame; -+ const struct ix86_frame &frame = cfun->machine->frame; - - if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) - { -@@ -13329,13 +13328,12 @@ ix86_expand_epilogue (int style) - { - struct machine_function *m = cfun->machine; - struct machine_frame_state frame_state_save = m->fs; -- struct ix86_frame frame; - bool restore_regs_via_mov; - bool using_drap; - - ix86_finalize_stack_realign_flags (); - ix86_compute_frame_layout (); -- frame = m->frame; -+ const struct ix86_frame &frame = cfun->machine->frame; - - m->fs.sp_valid = (!frame_pointer_needed - || (crtl->sp_is_unchanging -@@ -13377,11 +13375,13 @@ ix86_expand_epilogue (int style) - + UNITS_PER_WORD); - } - -+ HOST_WIDE_INT reg_save_offset = frame.reg_save_offset; -+ - /* Special care must be taken for the normal return case of a function - using eh_return: the eax and edx registers are marked as saved, but - not restored along this path. Adjust the save location to match. */ - if (crtl->calls_eh_return && style != 2) -- frame.reg_save_offset -= 2 * UNITS_PER_WORD; -+ reg_save_offset -= 2 * UNITS_PER_WORD; - - /* EH_RETURN requires the use of moves to function properly. */ - if (crtl->calls_eh_return) -@@ -13397,11 +13397,11 @@ ix86_expand_epilogue (int style) - else if (TARGET_EPILOGUE_USING_MOVE - && cfun->machine->use_fast_prologue_epilogue - && (frame.nregs > 1 -- || m->fs.sp_offset != frame.reg_save_offset)) -+ || m->fs.sp_offset != reg_save_offset)) - restore_regs_via_mov = true; - else if (frame_pointer_needed - && !frame.nregs -- && m->fs.sp_offset != frame.reg_save_offset) -+ && m->fs.sp_offset != reg_save_offset) - restore_regs_via_mov = true; - else if (frame_pointer_needed - && TARGET_USE_LEAVE -@@ -13439,7 +13439,7 @@ ix86_expand_epilogue (int style) - rtx t; - - if (frame.nregs) -- ix86_emit_restore_regs_using_mov (frame.reg_save_offset, style == 2); -+ ix86_emit_restore_regs_using_mov (reg_save_offset, style == 2); - - /* eh_return epilogues need %ecx added to the stack pointer. */ - if (style == 2) -@@ -13529,19 +13529,19 @@ ix86_expand_epilogue (int style) - epilogues. */ - if (!m->fs.sp_valid - || (TARGET_SEH -- && (m->fs.sp_offset - frame.reg_save_offset -+ && (m->fs.sp_offset - reg_save_offset - >= SEH_MAX_FRAME_SIZE))) - { - pro_epilogue_adjust_stack (stack_pointer_rtx, hard_frame_pointer_rtx, - GEN_INT (m->fs.fp_offset -- - frame.reg_save_offset), -+ - reg_save_offset), - style, false); - } -- else if (m->fs.sp_offset != frame.reg_save_offset) -+ else if (m->fs.sp_offset != reg_save_offset) - { - pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, - GEN_INT (m->fs.sp_offset -- - frame.reg_save_offset), -+ - reg_save_offset), - style, - m->fs.cfa_reg == stack_pointer_rtx); - } --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0004-x86-Add-mindirect-branch.patch b/aports/cross/gcc-aarch64/0004-x86-Add-mindirect-branch.patch deleted file mode 100644 index db5fe2f4..00000000 --- a/aports/cross/gcc-aarch64/0004-x86-Add-mindirect-branch.patch +++ /dev/null @@ -1,2149 +0,0 @@ -From 64da0f4b794672ae14350b09c276422f79f78fc0 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:55 -0800 -Subject: [PATCH 04/13] x86: Add -mindirect-branch= - -Add -mindirect-branch= option to convert indirect call and jump to call -and return thunks. The default is 'keep', which keeps indirect call and -jump unmodified. 'thunk' converts indirect call and jump to call and -return thunk. 'thunk-inline' converts indirect call and jump to inlined -call and return thunk. 'thunk-extern' converts indirect call and jump to -external call and return thunk provided in a separate object file. You -can control this behavior for a specific function by using the function -attribute indirect_branch. - -2 kinds of thunks are geneated. Memory thunk where the function address -is at the top of the stack: - -__x86_indirect_thunk: - call L2 -L1: - pause - lfence - jmp L1 -L2: - lea 8(%rsp), %rsp|lea 4(%esp), %esp - ret - -Indirect jmp via memory, "jmp mem", is converted to - - push memory - jmp __x86_indirect_thunk - -Indirect call via memory, "call mem", is converted to - - jmp L2 -L1: - push [mem] - jmp __x86_indirect_thunk -L2: - call L1 - -Register thunk where the function address is in a register, reg: - -__x86_indirect_thunk_reg: - call L2 -L1: - pause - lfence - jmp L1 -L2: - movq %reg, (%rsp)|movl %reg, (%esp) - ret - -where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di, -(r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15. - -Indirect jmp via register, "jmp reg", is converted to - - jmp __x86_indirect_thunk_reg - -Indirect call via register, "call reg", is converted to - - call __x86_indirect_thunk_reg - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386-opts.h (indirect_branch): New. - * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise. - * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone - with local indirect jump when converting indirect call and jump. - (ix86_set_indirect_branch_type): New. - (ix86_set_current_function): Call ix86_set_indirect_branch_type. - (indirectlabelno): New. - (indirect_thunk_needed): Likewise. - (indirect_thunk_bnd_needed): Likewise. - (indirect_thunks_used): Likewise. - (indirect_thunks_bnd_used): Likewise. - (INDIRECT_LABEL): Likewise. - (indirect_thunk_name): Likewise. - (output_indirect_thunk): Likewise. - (output_indirect_thunk_function): Likewise. - (ix86_output_indirect_branch_via_reg): Likewise. - (ix86_output_indirect_branch_via_push): Likewise. - (ix86_output_indirect_branch): Likewise. - (ix86_output_indirect_jmp): Likewise. - (ix86_code_end): Call output_indirect_thunk_function if needed. - (ix86_output_call_insn): Call ix86_output_indirect_branch if - needed. - (ix86_handle_fndecl_attribute): Handle indirect_branch. - (ix86_attribute_table): Add indirect_branch. - * config/i386/i386.h (machine_function): Add indirect_branch_type - and has_local_indirect_jump. - * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump - to true. - (tablejump): Likewise. - (*indirect_jump): Use ix86_output_indirect_jmp. - (*tablejump_1): Likewise. - (simple_return_indirect_internal): Likewise. - * config/i386/i386.opt (mindirect-branch=): New option. - (indirect_branch): New. - (keep): Likewise. - (thunk): Likewise. - (thunk-inline): Likewise. - (thunk-extern): Likewise. - * doc/extend.texi: Document indirect_branch function attribute. - * doc/invoke.texi: Document -mindirect-branch= option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c: New test. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. ---- - gcc/config/i386/i386-opts.h | 13 + - gcc/config/i386/i386-protos.h | 1 + - gcc/config/i386/i386.c | 639 ++++++++++++++++++++- - gcc/config/i386/i386.h | 7 + - gcc/config/i386/i386.md | 26 +- - gcc/config/i386/i386.opt | 20 + - gcc/doc/extend.texi | 10 + - gcc/doc/invoke.texi | 13 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 20 + - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 20 + - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 21 + - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 21 + - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 17 + - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 18 + - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 44 ++ - .../gcc.target/i386/indirect-thunk-attr-1.c | 23 + - .../gcc.target/i386/indirect-thunk-attr-2.c | 21 + - .../gcc.target/i386/indirect-thunk-attr-3.c | 23 + - .../gcc.target/i386/indirect-thunk-attr-4.c | 22 + - .../gcc.target/i386/indirect-thunk-attr-5.c | 22 + - .../gcc.target/i386/indirect-thunk-attr-6.c | 21 + - .../gcc.target/i386/indirect-thunk-attr-7.c | 44 ++ - .../gcc.target/i386/indirect-thunk-attr-8.c | 42 ++ - .../gcc.target/i386/indirect-thunk-bnd-1.c | 20 + - .../gcc.target/i386/indirect-thunk-bnd-2.c | 21 + - .../gcc.target/i386/indirect-thunk-bnd-3.c | 19 + - .../gcc.target/i386/indirect-thunk-bnd-4.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-1.c | 19 + - .../gcc.target/i386/indirect-thunk-extern-2.c | 19 + - .../gcc.target/i386/indirect-thunk-extern-3.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-4.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-5.c | 16 + - .../gcc.target/i386/indirect-thunk-extern-6.c | 17 + - .../gcc.target/i386/indirect-thunk-extern-7.c | 43 ++ - .../gcc.target/i386/indirect-thunk-inline-1.c | 20 + - .../gcc.target/i386/indirect-thunk-inline-2.c | 20 + - .../gcc.target/i386/indirect-thunk-inline-3.c | 21 + - .../gcc.target/i386/indirect-thunk-inline-4.c | 21 + - .../gcc.target/i386/indirect-thunk-inline-5.c | 17 + - .../gcc.target/i386/indirect-thunk-inline-6.c | 18 + - .../gcc.target/i386/indirect-thunk-inline-7.c | 44 ++ - 41 files changed, 1486 insertions(+), 17 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c - -diff --git a/gcc/config/i386/i386-opts.h b/gcc/config/i386/i386-opts.h -index b7f92e3bea1..cc21152875f 100644 ---- a/gcc/config/i386/i386-opts.h -+++ b/gcc/config/i386/i386-opts.h -@@ -99,4 +99,17 @@ enum stack_protector_guard { - SSP_GLOBAL /* global canary */ - }; - -+/* This is used to mitigate variant #2 of the speculative execution -+ vulnerabilities on x86 processors identified by CVE-2017-5715, aka -+ Spectre. They convert indirect branches and function returns to -+ call and return thunks to avoid speculative execution via indirect -+ call, jmp and ret. */ -+enum indirect_branch { -+ indirect_branch_unset = 0, -+ indirect_branch_keep, -+ indirect_branch_thunk, -+ indirect_branch_thunk_inline, -+ indirect_branch_thunk_extern -+}; -+ - #endif -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index ff47bc15600..eca4cbf0776 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -311,6 +311,7 @@ extern enum attr_cpu ix86_schedule; - #endif - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); -+extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 6c98f7581e2..0b9fc4d3026 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -3662,12 +3662,23 @@ make_pass_stv (gcc::context *ctxt) - return new pass_stv (ctxt); - } - --/* Return true if a red-zone is in use. */ -+/* Return true if a red-zone is in use. We can't use red-zone when -+ there are local indirect jumps, like "indirect_jump" or "tablejump", -+ which jumps to another place in the function, since "call" in the -+ indirect thunk pushes the return address onto stack, destroying -+ red-zone. -+ -+ TODO: If we can reserve the first 2 WORDs, for PUSH and, another -+ for CALL, in red-zone, we can allow local indirect jumps with -+ indirect thunk. */ - - bool - ix86_using_red_zone (void) - { -- return TARGET_RED_ZONE && !TARGET_64BIT_MS_ABI; -+ return (TARGET_RED_ZONE -+ && !TARGET_64BIT_MS_ABI -+ && (!cfun->machine->has_local_indirect_jump -+ || cfun->machine->indirect_branch_type == indirect_branch_keep)); - } - - /* Return a string that documents the current -m options. The caller is -@@ -6350,6 +6361,37 @@ ix86_reset_previous_fndecl (void) - ix86_previous_fndecl = NULL_TREE; - } - -+/* Set the indirect_branch_type field from the function FNDECL. */ -+ -+static void -+ix86_set_indirect_branch_type (tree fndecl) -+{ -+ if (cfun->machine->indirect_branch_type == indirect_branch_unset) -+ { -+ tree attr = lookup_attribute ("indirect_branch", -+ DECL_ATTRIBUTES (fndecl)); -+ if (attr != NULL) -+ { -+ tree args = TREE_VALUE (attr); -+ if (args == NULL) -+ gcc_unreachable (); -+ tree cst = TREE_VALUE (args); -+ if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_keep; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk_inline; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk_extern; -+ else -+ gcc_unreachable (); -+ } -+ else -+ cfun->machine->indirect_branch_type = ix86_indirect_branch; -+ } -+} -+ - /* Establish appropriate back-end context for processing the function - FNDECL. The argument might be NULL to indicate processing at top - level, outside of any function scope. */ -@@ -6360,7 +6402,13 @@ ix86_set_current_function (tree fndecl) - several times in the course of compiling a function, and we don't want to - slow things down too much or call target_reinit when it isn't safe. */ - if (fndecl == ix86_previous_fndecl) -- return; -+ { -+ /* There may be 2 function bodies for the same function FNDECL, -+ one is extern inline and one isn't. */ -+ if (fndecl != NULL_TREE) -+ ix86_set_indirect_branch_type (fndecl); -+ return; -+ } - - tree old_tree; - if (ix86_previous_fndecl == NULL_TREE) -@@ -6377,6 +6425,8 @@ ix86_set_current_function (tree fndecl) - return; - } - -+ ix86_set_indirect_branch_type (fndecl); -+ - tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl); - if (new_tree == NULL_TREE) - new_tree = target_option_default_node; -@@ -10962,6 +11012,220 @@ ix86_setup_frame_addresses (void) - # endif - #endif - -+/* Label count for call and return thunks. It is used to make unique -+ labels in call and return thunks. */ -+static int indirectlabelno; -+ -+/* True if call and return thunk functions are needed. */ -+static bool indirect_thunk_needed = false; -+/* True if call and return thunk functions with the BND prefix are -+ needed. */ -+static bool indirect_thunk_bnd_needed = false; -+ -+/* Bit masks of integer registers, which contain branch target, used -+ by call and return thunks functions. */ -+static int indirect_thunks_used; -+/* Bit masks of integer registers, which contain branch target, used -+ by call and return thunks functions with the BND prefix. */ -+static int indirect_thunks_bnd_used; -+ -+#ifndef INDIRECT_LABEL -+# define INDIRECT_LABEL "LIND" -+#endif -+ -+/* Fills in the label name that should be used for the indirect thunk. */ -+ -+static void -+indirect_thunk_name (char name[32], int regno, bool need_bnd_p) -+{ -+ if (USE_HIDDEN_LINKONCE) -+ { -+ const char *bnd = need_bnd_p ? "_bnd" : ""; -+ if (regno >= 0) -+ { -+ const char *reg_prefix; -+ if (LEGACY_INT_REGNO_P (regno)) -+ reg_prefix = TARGET_64BIT ? "r" : "e"; -+ else -+ reg_prefix = ""; -+ sprintf (name, "__x86_indirect_thunk%s_%s%s", -+ bnd, reg_prefix, reg_names[regno]); -+ } -+ else -+ sprintf (name, "__x86_indirect_thunk%s", bnd); -+ } -+ else -+ { -+ if (regno >= 0) -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITR", regno); -+ } -+ else -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ } -+ } -+} -+ -+/* Output a call and return thunk for indirect branch. If BND_P is -+ true, the BND prefix is needed. If REGNO != -1, the function -+ address is in REGNO and the call and return thunk looks like: -+ -+ call L2 -+ L1: -+ pause -+ jmp L1 -+ L2: -+ mov %REG, (%sp) -+ ret -+ -+ Otherwise, the function address is on the top of stack and the -+ call and return thunk looks like: -+ -+ call L2 -+ L1: -+ pause -+ jmp L1 -+ L2: -+ lea WORD_SIZE(%sp), %sp -+ ret -+ */ -+ -+static void -+output_indirect_thunk (bool need_bnd_p, int regno) -+{ -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Call */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ /* Pause + lfence. */ -+ fprintf (asm_out_file, "\tpause\n\tlfence\n"); -+ -+ /* Jump. */ -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ if (regno >= 0) -+ { -+ /* MOV. */ -+ rtx xops[2]; -+ xops[0] = gen_rtx_MEM (word_mode, stack_pointer_rtx); -+ xops[1] = gen_rtx_REG (word_mode, regno); -+ output_asm_insn ("mov\t{%1, %0|%0, %1}", xops); -+ } -+ else -+ { -+ /* LEA. */ -+ rtx xops[2]; -+ xops[0] = stack_pointer_rtx; -+ xops[1] = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD); -+ output_asm_insn ("lea\t{%E1, %0|%0, %E1}", xops); -+ } -+ -+ if (need_bnd_p) -+ fputs ("\tbnd ret\n", asm_out_file); -+ else -+ fputs ("\tret\n", asm_out_file); -+} -+ -+/* Output a funtion with a call and return thunk for indirect branch. -+ If BND_P is true, the BND prefix is needed. If REGNO != -1, the -+ function address is in REGNO. Otherwise, the function address is -+ on the top of stack. */ -+ -+static void -+output_indirect_thunk_function (bool need_bnd_p, int regno) -+{ -+ char name[32]; -+ tree decl; -+ -+ /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -+ indirect_thunk_name (name, regno, need_bnd_p); -+ decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, -+ get_identifier (name), -+ build_function_type_list (void_type_node, NULL_TREE)); -+ DECL_RESULT (decl) = build_decl (BUILTINS_LOCATION, RESULT_DECL, -+ NULL_TREE, void_type_node); -+ TREE_PUBLIC (decl) = 1; -+ TREE_STATIC (decl) = 1; -+ DECL_IGNORED_P (decl) = 1; -+ -+#if TARGET_MACHO -+ if (TARGET_MACHO) -+ { -+ switch_to_section (darwin_sections[picbase_thunk_section]); -+ fputs ("\t.weak_definition\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ fputs ("\n\t.private_extern\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ putc ('\n', asm_out_file); -+ ASM_OUTPUT_LABEL (asm_out_file, name); -+ DECL_WEAK (decl) = 1; -+ } -+ else -+#endif -+ if (USE_HIDDEN_LINKONCE) -+ { -+ cgraph_node::create (decl)->set_comdat_group (DECL_ASSEMBLER_NAME (decl)); -+ -+ targetm.asm_out.unique_section (decl, 0); -+ switch_to_section (get_named_section (decl, NULL, 0)); -+ -+ targetm.asm_out.globalize_label (asm_out_file, name); -+ fputs ("\t.hidden\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ putc ('\n', asm_out_file); -+ ASM_DECLARE_FUNCTION_NAME (asm_out_file, name, decl); -+ } -+ else -+ { -+ switch_to_section (text_section); -+ ASM_OUTPUT_LABEL (asm_out_file, name); -+ } -+ -+ DECL_INITIAL (decl) = make_node (BLOCK); -+ current_function_decl = decl; -+ allocate_struct_function (decl, false); -+ init_function_start (decl); -+ /* We're about to hide the function body from callees of final_* by -+ emitting it directly; tell them we're a thunk, if they care. */ -+ cfun->is_thunk = true; -+ first_function_block_is_cold = false; -+ /* Make sure unwind info is emitted for the thunk if needed. */ -+ final_start_function (emit_barrier (), asm_out_file, 1); -+ -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ final_end_function (); -+ init_insn_lengths (); -+ free_after_compilation (cfun); -+ set_cfun (NULL); -+ current_function_decl = NULL; -+} -+ - static int pic_labels_used; - - /* Fills in the label name that should be used for a pc thunk for -@@ -10988,11 +11252,32 @@ ix86_code_end (void) - rtx xops[2]; - int regno; - -+ if (indirect_thunk_needed) -+ output_indirect_thunk_function (false, -1); -+ if (indirect_thunk_bnd_needed) -+ output_indirect_thunk_function (true, -1); -+ -+ for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) -+ { -+ int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; -+ if ((indirect_thunks_used & (1 << i))) -+ output_indirect_thunk_function (false, regno); -+ -+ if ((indirect_thunks_bnd_used & (1 << i))) -+ output_indirect_thunk_function (true, regno); -+ } -+ - for (regno = AX_REG; regno <= SP_REG; regno++) - { - char name[32]; - tree decl; - -+ if ((indirect_thunks_used & (1 << regno))) -+ output_indirect_thunk_function (false, regno); -+ -+ if ((indirect_thunks_bnd_used & (1 << regno))) -+ output_indirect_thunk_function (true, regno); -+ - if (!(pic_labels_used & (1 << regno))) - continue; - -@@ -27369,12 +27654,292 @@ ix86_nopic_noplt_attribute_p (rtx call_op) - return false; - } - -+/* Output indirect branch via a call and return thunk. CALL_OP is a -+ register which contains the branch target. XASM is the assembly -+ template for CALL_OP. Branch is a tail call if SIBCALL_P is true. -+ A normal call is converted to: -+ -+ call __x86_indirect_thunk_reg -+ -+ and a tail call is converted to: -+ -+ jmp __x86_indirect_thunk_reg -+ */ -+ -+static void -+ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p) -+{ -+ char thunk_name_buf[32]; -+ char *thunk_name; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ int regno = REGNO (call_op); -+ -+ if (cfun->machine->indirect_branch_type -+ != indirect_branch_thunk_inline) -+ { -+ if (cfun->machine->indirect_branch_type == indirect_branch_thunk) -+ { -+ int i = regno; -+ if (i >= FIRST_REX_INT_REG) -+ i -= (FIRST_REX_INT_REG - LAST_INT_REG - 1); -+ if (need_bnd_p) -+ indirect_thunks_bnd_used |= 1 << i; -+ else -+ indirect_thunks_used |= 1 << i; -+ } -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ thunk_name = thunk_name_buf; -+ } -+ else -+ thunk_name = NULL; -+ -+ if (sibcall_p) -+ { -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ } -+ else -+ { -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd call\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tcall\t%s\n", thunk_name); -+ return; -+ } -+ -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Jump. */ -+ if (need_bnd_p) -+ fputs ("\tbnd jmp\t", asm_out_file); -+ else -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ /* Call. */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ } -+} -+ -+/* Output indirect branch via a call and return thunk. CALL_OP is -+ the branch target. XASM is the assembly template for CALL_OP. -+ Branch is a tail call if SIBCALL_P is true. A normal call is -+ converted to: -+ -+ jmp L2 -+ L1: -+ push CALL_OP -+ jmp __x86_indirect_thunk -+ L2: -+ call L1 -+ -+ and a tail call is converted to: -+ -+ push CALL_OP -+ jmp __x86_indirect_thunk -+ */ -+ -+static void -+ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm, -+ bool sibcall_p) -+{ -+ char thunk_name_buf[32]; -+ char *thunk_name; -+ char push_buf[64]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ int regno = -1; -+ -+ if (cfun->machine->indirect_branch_type -+ != indirect_branch_thunk_inline) -+ { -+ if (cfun->machine->indirect_branch_type == indirect_branch_thunk) -+ { -+ if (need_bnd_p) -+ indirect_thunk_bnd_needed = true; -+ else -+ indirect_thunk_needed = true; -+ } -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ thunk_name = thunk_name_buf; -+ } -+ else -+ thunk_name = NULL; -+ -+ snprintf (push_buf, sizeof (push_buf), "push{%c}\t%s", -+ TARGET_64BIT ? 'q' : 'l', xasm); -+ -+ if (sibcall_p) -+ { -+ output_asm_insn (push_buf, &call_op); -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ } -+ else -+ { -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Jump. */ -+ if (need_bnd_p) -+ fputs ("\tbnd jmp\t", asm_out_file); -+ else -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ /* An external function may be called via GOT, instead of PLT. */ -+ if (MEM_P (call_op)) -+ { -+ struct ix86_address parts; -+ rtx addr = XEXP (call_op, 0); -+ if (ix86_decompose_address (addr, &parts) -+ && parts.base == stack_pointer_rtx) -+ { -+ /* Since call will adjust stack by -UNITS_PER_WORD, -+ we must convert "disp(stack, index, scale)" to -+ "disp+UNITS_PER_WORD(stack, index, scale)". */ -+ if (parts.index) -+ { -+ addr = gen_rtx_MULT (Pmode, parts.index, -+ GEN_INT (parts.scale)); -+ addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, -+ addr); -+ } -+ else -+ addr = stack_pointer_rtx; -+ -+ rtx disp; -+ if (parts.disp != NULL_RTX) -+ disp = plus_constant (Pmode, parts.disp, -+ UNITS_PER_WORD); -+ else -+ disp = GEN_INT (UNITS_PER_WORD); -+ -+ addr = gen_rtx_PLUS (Pmode, addr, disp); -+ call_op = gen_rtx_MEM (GET_MODE (call_op), addr); -+ } -+ } -+ -+ output_asm_insn (push_buf, &call_op); -+ -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ /* Call. */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ } -+} -+ -+/* Output indirect branch via a call and return thunk. CALL_OP is -+ the branch target. XASM is the assembly template for CALL_OP. -+ Branch is a tail call if SIBCALL_P is true. */ -+ -+static void -+ix86_output_indirect_branch (rtx call_op, const char *xasm, -+ bool sibcall_p) -+{ -+ if (REG_P (call_op)) -+ ix86_output_indirect_branch_via_reg (call_op, sibcall_p); -+ else -+ ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p); -+} -+/* Output indirect jump. CALL_OP is the jump target. Jump is a -+ function return if RET_P is true. */ -+ -+const char * -+ix86_output_indirect_jmp (rtx call_op, bool ret_p) -+{ -+ if (cfun->machine->indirect_branch_type != indirect_branch_keep) -+ { -+ /* We can't have red-zone if this isn't a function return since -+ "call" in the indirect thunk pushes the return address onto -+ stack, destroying red-zone. */ -+ if (!ret_p && ix86_red_zone_size != 0) -+ gcc_unreachable (); -+ -+ ix86_output_indirect_branch (call_op, "%0", true); -+ return ""; -+ } -+ else -+ return "%!jmp\t%A0"; -+} -+ - /* Output the assembly for a call instruction. */ - - const char * - ix86_output_call_insn (rtx_insn *insn, rtx call_op) - { - bool direct_p = constant_call_address_operand (call_op, VOIDmode); -+ bool output_indirect_p -+ = (!TARGET_SEH -+ && cfun->machine->indirect_branch_type != indirect_branch_keep); - bool seh_nop_p = false; - const char *xasm; - -@@ -27383,7 +27948,13 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - if (direct_p) - { - if (ix86_nopic_noplt_attribute_p (call_op)) -- xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ { -+ direct_p = false; -+ if (output_indirect_p) -+ xasm = "{%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ else -+ xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ } - else - xasm = "%!jmp\t%P0"; - } -@@ -27392,9 +27963,17 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - else if (TARGET_SEH) - xasm = "%!rex.W jmp\t%A0"; - else -- xasm = "%!jmp\t%A0"; -+ { -+ if (output_indirect_p) -+ xasm = "%0"; -+ else -+ xasm = "%!jmp\t%A0"; -+ } - -- output_asm_insn (xasm, &call_op); -+ if (output_indirect_p && !direct_p) -+ ix86_output_indirect_branch (call_op, xasm, true); -+ else -+ output_asm_insn (xasm, &call_op); - return ""; - } - -@@ -27431,14 +28010,28 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - if (direct_p) - { - if (ix86_nopic_noplt_attribute_p (call_op)) -- xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ { -+ direct_p = false; -+ if (output_indirect_p) -+ xasm = "{%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ else -+ xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ } - else - xasm = "%!call\t%P0"; - } - else -- xasm = "%!call\t%A0"; -+ { -+ if (output_indirect_p) -+ xasm = "%0"; -+ else -+ xasm = "%!call\t%A0"; -+ } - -- output_asm_insn (xasm, &call_op); -+ if (output_indirect_p && !direct_p) -+ ix86_output_indirect_branch (call_op, xasm, false); -+ else -+ output_asm_insn (xasm, &call_op); - - if (seh_nop_p) - return "nop"; -@@ -44836,7 +45429,7 @@ ix86_handle_struct_attribute (tree *node, tree name, tree, int, - } - - static tree --ix86_handle_fndecl_attribute (tree *node, tree name, tree, int, -+ix86_handle_fndecl_attribute (tree *node, tree name, tree args, int, - bool *no_add_attrs) - { - if (TREE_CODE (*node) != FUNCTION_DECL) -@@ -44845,6 +45438,29 @@ ix86_handle_fndecl_attribute (tree *node, tree name, tree, int, - name); - *no_add_attrs = true; - } -+ -+ if (is_attribute_p ("indirect_branch", name)) -+ { -+ tree cst = TREE_VALUE (args); -+ if (TREE_CODE (cst) != STRING_CST) -+ { -+ warning (OPT_Wattributes, -+ "%qE attribute requires a string constant argument", -+ name); -+ *no_add_attrs = true; -+ } -+ else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0) -+ { -+ warning (OPT_Wattributes, -+ "argument to %qE attribute is not " -+ "(keep|thunk|thunk-inline|thunk-extern)", name); -+ *no_add_attrs = true; -+ } -+ } -+ - return NULL_TREE; - } - -@@ -49072,6 +49688,9 @@ static const struct attribute_spec ix86_attribute_table[] = - false }, - { "callee_pop_aggregate_return", 1, 1, false, true, true, - ix86_handle_callee_pop_aggregate_return, true }, -+ { "indirect_branch", 1, 1, true, false, false, -+ ix86_handle_fndecl_attribute, false }, -+ - /* End element. */ - { NULL, 0, 0, false, false, false, NULL, false } - }; -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 54144166172..9dccdb0351e 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2572,6 +2572,13 @@ struct GTY(()) machine_function { - /* If true, it is safe to not save/restore DRAP register. */ - BOOL_BITFIELD no_drap_save_restore : 1; - -+ /* How to generate indirec branch. */ -+ ENUM_BITFIELD(indirect_branch) indirect_branch_type : 3; -+ -+ /* If true, the current function has local indirect jumps, like -+ "indirect_jump" or "tablejump". */ -+ BOOL_BITFIELD has_local_indirect_jump : 1; -+ - /* If true, there is register available for argument passing. This - is used only in ix86_function_ok_for_sibcall by 32-bit to determine - if there is scratch register available for indirect sibcall. In -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index d2bfe314f71..153e1622b2d 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11807,13 +11807,18 @@ - { - if (TARGET_X32) - operands[0] = convert_memory_address (word_mode, operands[0]); -+ cfun->machine->has_local_indirect_jump = true; - }) - - (define_insn "*indirect_jump" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))] - "" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], false);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -@@ -11856,14 +11861,19 @@ - - if (TARGET_X32) - operands[0] = convert_memory_address (word_mode, operands[0]); -+ cfun->machine->has_local_indirect_jump = true; - }) - - (define_insn "*tablejump_1" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw")) - (use (label_ref (match_operand 1)))] - "" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], false);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -@@ -12520,8 +12530,12 @@ - [(simple_return) - (use (match_operand:SI 0 "register_operand" "r"))] - "reload_completed" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], true);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index f304b621e6a..5ffa3349a30 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -897,3 +897,23 @@ Enum(stack_protector_guard) String(global) Value(SSP_GLOBAL) - mmitigate-rop - Target Var(flag_mitigate_rop) Init(0) - Attempt to avoid generating instruction sequences containing ret bytes. -+ -+mindirect-branch= -+Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_indirect_branch) Init(indirect_branch_keep) -+Convert indirect call and jump to call and return thunks. -+ -+Enum -+Name(indirect_branch) Type(enum indirect_branch) -+Known indirect branch choices (for use with the -mindirect-branch= option): -+ -+EnumValue -+Enum(indirect_branch) String(keep) Value(indirect_branch_keep) -+ -+EnumValue -+Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk) -+ -+EnumValue -+Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) -+ -+EnumValue -+Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 8cc4f7e1f6a..8668dae9e99 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -5419,6 +5419,16 @@ Specify which floating-point unit to use. You must specify the - @code{target("fpmath=sse,387")} option as - @code{target("fpmath=sse+387")} because the comma would separate - different options. -+ -+@item indirect_branch("@var{choice}") -+@cindex @code{indirect_branch} function attribute, x86 -+On x86 targets, the @code{indirect_branch} attribute causes the compiler -+to convert indirect call and jump with @var{choice}. @samp{keep} -+keeps indirect call and jump unmodified. @samp{thunk} converts indirect -+call and jump to call and return thunk. @samp{thunk-inline} converts -+indirect call and jump to inlined call and return thunk. -+@samp{thunk-extern} converts indirect call and jump to external call -+and return thunk provided in a separate object file. - @end table - - On the x86, the inliner does not inline a -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 1d3a824d7b8..6f60339a56a 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1169,7 +1169,7 @@ See RS/6000 and PowerPC Options. - -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol ---mmitigate-rop} -+-mmitigate-rop -mindirect-branch=@var{choice}} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24230,6 +24230,17 @@ opcodes, to mitigate against certain forms of attack. At the moment, - this option is limited in what it can do and should not be relied - on to provide serious protection. - -+@item -mindirect-branch=@var{choice} -+@opindex -mindirect-branch -+Convert indirect call and jump with @var{choice}. The default is -+@samp{keep}, which keeps indirect call and jump unmodified. -+@samp{thunk} converts indirect call and jump to call and return thunk. -+@samp{thunk-inline} converts indirect call and jump to inlined call -+and return thunk. @samp{thunk-extern} converts indirect call and jump -+to external call and return thunk provided in a separate object file. -+You can control this behavior for a specific function by using the -+function attribute @code{indirect_branch}. @xref{Function Attributes}. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -new file mode 100644 -index 00000000000..d983e1c3e26 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -new file mode 100644 -index 00000000000..58f09b42d8a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -new file mode 100644 -index 00000000000..f20d35c19b6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -new file mode 100644 -index 00000000000..0eff8fb658a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -new file mode 100644 -index 00000000000..a25b20dd808 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -new file mode 100644 -index 00000000000..cff114a6c29 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -new file mode 100644 -index 00000000000..afdb6007986 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -new file mode 100644 -index 00000000000..d64d978b699 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+extern void male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk"))); -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -new file mode 100644 -index 00000000000..93067454d3d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk"))) -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -new file mode 100644 -index 00000000000..97744d65729 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+extern int male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk-inline"))); -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -new file mode 100644 -index 00000000000..bfce3ea5cb2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk-inline"))) -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -new file mode 100644 -index 00000000000..0833606046b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+extern int male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk-extern"))); -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -new file mode 100644 -index 00000000000..2eba0fbd9b2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -new file mode 100644 -index 00000000000..f58427eae11 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -new file mode 100644 -index 00000000000..564ed39547c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -@@ -0,0 +1,42 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+__attribute__ ((indirect_branch("keep"))) -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -new file mode 100644 -index 00000000000..50fbee20a5a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+void (*dispatch) (char *); -+char buf[10]; -+ -+void -+foo (void) -+{ -+ dispatch (buf); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -new file mode 100644 -index 00000000000..2976e67adce ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+void (*dispatch) (char *); -+char buf[10]; -+ -+int -+foo (void) -+{ -+ dispatch (buf); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -new file mode 100644 -index 00000000000..da4bc98ef23 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+ -+void bar (char *); -+char buf[10]; -+ -+void -+foo (void) -+{ -+ bar (buf); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -new file mode 100644 -index 00000000000..c64d12ef989 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+ -+void bar (char *); -+char buf[10]; -+ -+int -+foo (void) -+{ -+ bar (buf); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -new file mode 100644 -index 00000000000..49f27b49465 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -new file mode 100644 -index 00000000000..a1e3eb6fc74 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -new file mode 100644 -index 00000000000..395634e7e5c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -new file mode 100644 -index 00000000000..fd3f63379a1 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -new file mode 100644 -index 00000000000..ba2f92b6f34 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -new file mode 100644 -index 00000000000..0c5a2d472c6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -new file mode 100644 -index 00000000000..665252327aa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -0,0 +1,43 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -new file mode 100644 -index 00000000000..68c0ff713b3 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -new file mode 100644 -index 00000000000..e2da1fcb683 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -new file mode 100644 -index 00000000000..244fec708d6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -new file mode 100644 -index 00000000000..107ebe32f54 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -new file mode 100644 -index 00000000000..17b04ef2229 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -new file mode 100644 -index 00000000000..d9eb11285aa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -new file mode 100644 -index 00000000000..d02b1dcb1b9 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0005-x86-Add-mfunction-return.patch b/aports/cross/gcc-aarch64/0005-x86-Add-mfunction-return.patch deleted file mode 100644 index f311d067..00000000 --- a/aports/cross/gcc-aarch64/0005-x86-Add-mfunction-return.patch +++ /dev/null @@ -1,1565 +0,0 @@ -From 3b946bffc536481a484d9a2b98b829f3d71b5519 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 05/13] x86: Add -mfunction-return= - -Add -mfunction-return= option to convert function return to call and -return thunks. The default is 'keep', which keeps function return -unmodified. 'thunk' converts function return to call and return thunk. -'thunk-inline' converts function return to inlined call and return thunk. -'thunk-extern' converts function return to external call and return -thunk provided in a separate object file. You can control this behavior -for a specific function by using the function attribute function_return. - -Function return thunk is the same as memory thunk for -mindirect-branch= -where the return address is at the top of the stack: - -__x86_return_thunk: - call L2 -L1: - pause - lfence - jmp L1 -L2: - lea 8(%rsp), %rsp|lea 4(%esp), %esp - ret - -and function return becomes - - jmp __x86_return_thunk - --mindirect-branch= tests are updated with -mfunction-return=keep to -avoid false test failures when -mfunction-return=thunk is added to -RUNTESTFLAGS for "make check". - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386-protos.h (ix86_output_function_return): New. - * config/i386/i386.c (ix86_set_indirect_branch_type): Also - set function_return_type. - (indirect_thunk_name): Add ret_p to indicate thunk for function - return. - (output_indirect_thunk_function): Pass false to - indirect_thunk_name. - (ix86_output_indirect_branch_via_reg): Likewise. - (ix86_output_indirect_branch_via_push): Likewise. - (output_indirect_thunk_function): Create alias for function - return thunk if regno < 0. - (ix86_output_function_return): New function. - (ix86_handle_fndecl_attribute): Handle function_return. - (ix86_attribute_table): Add function_return. - * config/i386/i386.h (machine_function): Add - function_return_type. - * config/i386/i386.md (simple_return_internal): Use - ix86_output_function_return. - (simple_return_internal_long): Likewise. - * config/i386/i386.opt (mfunction-return=): New option. - (indirect_branch): Mention -mfunction-return=. - * doc/extend.texi: Document function_return function attribute. - * doc/invoke.texi: Document -mfunction-return= option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c (dg-options): Add - -mfunction-return=keep. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-1.c: New test. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-16.c: Likewise. - * gcc.target/i386/ret-thunk-2.c: Likewise. - * gcc.target/i386/ret-thunk-3.c: Likewise. - * gcc.target/i386/ret-thunk-4.c: Likewise. - * gcc.target/i386/ret-thunk-5.c: Likewise. - * gcc.target/i386/ret-thunk-6.c: Likewise. - * gcc.target/i386/ret-thunk-7.c: Likewise. - * gcc.target/i386/ret-thunk-8.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - -i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO - -ASM_OUTPUT_DEF isn't defined for TARGET_MACHO. Use ASM_OUTPUT_LABEL to -generate the __x86_return_thunk label, instead of the set directive. -Update testcase to remove the __x86_return_thunk label check. Since --fno-pic is ignored on Darwin, update testcases to sscan or "push" -only on Linux. - -gcc/ - - Backport from mainline - 2018-01-15 H.J. Lu - - PR target/83839 - * config/i386/i386.c (output_indirect_thunk_function): Use - ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO - for __x86.return_thunk. - -gcc/testsuite/ - - Backport from mainline - 2018-01-15 H.J. Lu - - PR target/83839 - * gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on - Linux. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-register-1.c: Likewise. - * gcc.target/i386/indirect-thunk-register-3.c: Likewise. - * gcc.target/i386/indirect-thunk-register-4.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Don't check the - __x86_return_thunk label. - Scan for "push" only for Linux. ---- - gcc/config/i386/i386-protos.h | 1 + - gcc/config/i386/i386.c | 152 +++++++++++++++++++-- - gcc/config/i386/i386.h | 3 + - gcc/config/i386/i386.md | 9 +- - gcc/config/i386/i386.opt | 6 +- - gcc/doc/extend.texi | 9 ++ - gcc/doc/invoke.texi | 14 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-5.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-6.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-8.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-7.c | 4 +- - gcc/testsuite/gcc.target/i386/ret-thunk-1.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 23 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 23 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-16.c | 18 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-2.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-3.c | 12 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-4.c | 12 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-5.c | 15 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-6.c | 14 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-7.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-8.c | 14 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 24 ++++ - 56 files changed, 516 insertions(+), 74 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-11.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-12.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-13.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-14.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-15.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-16.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-9.c - -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index eca4cbf0776..620d70ef9f6 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -312,6 +312,7 @@ extern enum attr_cpu ix86_schedule; - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); - extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); -+extern const char * ix86_output_function_return (bool long_p); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 0b9fc4d3026..34e26a3a3c7 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -6390,6 +6390,31 @@ ix86_set_indirect_branch_type (tree fndecl) - else - cfun->machine->indirect_branch_type = ix86_indirect_branch; - } -+ -+ if (cfun->machine->function_return_type == indirect_branch_unset) -+ { -+ tree attr = lookup_attribute ("function_return", -+ DECL_ATTRIBUTES (fndecl)); -+ if (attr != NULL) -+ { -+ tree args = TREE_VALUE (attr); -+ if (args == NULL) -+ gcc_unreachable (); -+ tree cst = TREE_VALUE (args); -+ if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0) -+ cfun->machine->function_return_type = indirect_branch_keep; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk_inline; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk_extern; -+ else -+ gcc_unreachable (); -+ } -+ else -+ cfun->machine->function_return_type = ix86_function_return; -+ } - } - - /* Establish appropriate back-end context for processing the function -@@ -11036,8 +11061,12 @@ static int indirect_thunks_bnd_used; - /* Fills in the label name that should be used for the indirect thunk. */ - - static void --indirect_thunk_name (char name[32], int regno, bool need_bnd_p) -+indirect_thunk_name (char name[32], int regno, bool need_bnd_p, -+ bool ret_p) - { -+ if (regno >= 0 && ret_p) -+ gcc_unreachable (); -+ - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -@@ -11052,7 +11081,10 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p) - bnd, reg_prefix, reg_names[regno]); - } - else -- sprintf (name, "__x86_indirect_thunk%s", bnd); -+ { -+ const char *ret = ret_p ? "return" : "indirect"; -+ sprintf (name, "__x86_%s_thunk%s", ret, bnd); -+ } - } - else - { -@@ -11065,10 +11097,20 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p) - } - else - { -- if (need_bnd_p) -- ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ if (ret_p) -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LRTB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LRT", 0); -+ } - else -- ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ } - } - } - } -@@ -11163,7 +11205,7 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - tree decl; - - /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -- indirect_thunk_name (name, regno, need_bnd_p); -+ indirect_thunk_name (name, regno, need_bnd_p, false); - decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, - get_identifier (name), - build_function_type_list (void_type_node, NULL_TREE)); -@@ -11206,6 +11248,36 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -+ if (regno < 0) -+ { -+ /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ -+ char alias[32]; -+ -+ indirect_thunk_name (alias, regno, need_bnd_p, true); -+#if TARGET_MACHO -+ if (TARGET_MACHO) -+ { -+ fputs ("\t.weak_definition\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ fputs ("\n\t.private_extern\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ ASM_OUTPUT_LABEL (asm_out_file, alias); -+ } -+#else -+ ASM_OUTPUT_DEF (asm_out_file, alias, name); -+ if (USE_HIDDEN_LINKONCE) -+ { -+ fputs ("\t.globl\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ fputs ("\t.hidden\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ } -+#endif -+ } -+ - DECL_INITIAL (decl) = make_node (BLOCK); - current_function_decl = decl; - allocate_struct_function (decl, false); -@@ -27687,7 +27759,7 @@ ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p) - else - indirect_thunks_used |= 1 << i; - } -- indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false); - thunk_name = thunk_name_buf; - } - else -@@ -27796,7 +27868,7 @@ ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm, - else - indirect_thunk_needed = true; - } -- indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false); - thunk_name = thunk_name_buf; - } - else -@@ -27931,6 +28003,46 @@ ix86_output_indirect_jmp (rtx call_op, bool ret_p) - return "%!jmp\t%A0"; - } - -+/* Output function return. CALL_OP is the jump target. Add a REP -+ prefix to RET if LONG_P is true and function return is kept. */ -+ -+const char * -+ix86_output_function_return (bool long_p) -+{ -+ if (cfun->machine->function_return_type != indirect_branch_keep) -+ { -+ char thunk_name[32]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ -+ if (cfun->machine->function_return_type -+ != indirect_branch_thunk_inline) -+ { -+ bool need_thunk = (cfun->machine->function_return_type -+ == indirect_branch_thunk); -+ indirect_thunk_name (thunk_name, -1, need_bnd_p, true); -+ if (need_bnd_p) -+ { -+ indirect_thunk_bnd_needed |= need_thunk; -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ } -+ else -+ { -+ indirect_thunk_needed |= need_thunk; -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ } -+ else -+ output_indirect_thunk (need_bnd_p, -1); -+ -+ return ""; -+ } -+ -+ if (!long_p || ix86_bnd_prefixed_insn_p (current_output_insn)) -+ return "%!ret"; -+ -+ return "rep%; ret"; -+} -+ - /* Output the assembly for a call instruction. */ - - const char * -@@ -45461,6 +45573,28 @@ ix86_handle_fndecl_attribute (tree *node, tree name, tree args, int, - } - } - -+ if (is_attribute_p ("function_return", name)) -+ { -+ tree cst = TREE_VALUE (args); -+ if (TREE_CODE (cst) != STRING_CST) -+ { -+ warning (OPT_Wattributes, -+ "%qE attribute requires a string constant argument", -+ name); -+ *no_add_attrs = true; -+ } -+ else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0) -+ { -+ warning (OPT_Wattributes, -+ "argument to %qE attribute is not " -+ "(keep|thunk|thunk-inline|thunk-extern)", name); -+ *no_add_attrs = true; -+ } -+ } -+ - return NULL_TREE; - } - -@@ -49690,6 +49824,8 @@ static const struct attribute_spec ix86_attribute_table[] = - ix86_handle_callee_pop_aggregate_return, true }, - { "indirect_branch", 1, 1, true, false, false, - ix86_handle_fndecl_attribute, false }, -+ { "function_return", 1, 1, true, false, false, -+ ix86_handle_fndecl_attribute, false }, - - /* End element. */ - { NULL, 0, 0, false, false, false, NULL, false } -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 9dccdb0351e..b34bc117c34 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2579,6 +2579,9 @@ struct GTY(()) machine_function { - "indirect_jump" or "tablejump". */ - BOOL_BITFIELD has_local_indirect_jump : 1; - -+ /* How to generate function return. */ -+ ENUM_BITFIELD(indirect_branch) function_return_type : 3; -+ - /* If true, there is register available for argument passing. This - is used only in ix86_function_ok_for_sibcall by 32-bit to determine - if there is scratch register available for indirect sibcall. In -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 153e1622b2d..2da671e9f2d 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -12489,7 +12489,7 @@ - (define_insn "simple_return_internal" - [(simple_return)] - "reload_completed" -- "%!ret" -+ "* return ix86_output_function_return (false);" - [(set_attr "length" "1") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "0") -@@ -12503,12 +12503,7 @@ - [(simple_return) - (unspec [(const_int 0)] UNSPEC_REP)] - "reload_completed" --{ -- if (ix86_bnd_prefixed_insn_p (insn)) -- return "%!ret"; -- -- return "rep%; ret"; --} -+ "* return ix86_output_function_return (true);" - [(set_attr "length" "2") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "0") -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index 5ffa3349a30..ad5916fb643 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -902,9 +902,13 @@ mindirect-branch= - Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_indirect_branch) Init(indirect_branch_keep) - Convert indirect call and jump to call and return thunks. - -+mfunction-return= -+Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_function_return) Init(indirect_branch_keep) -+Convert function return to call and return thunk. -+ - Enum - Name(indirect_branch) Type(enum indirect_branch) --Known indirect branch choices (for use with the -mindirect-branch= option): -+Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options): - - EnumValue - Enum(indirect_branch) String(keep) Value(indirect_branch_keep) -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 8668dae9e99..2cb6bd1ef3e 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -5429,6 +5429,15 @@ call and jump to call and return thunk. @samp{thunk-inline} converts - indirect call and jump to inlined call and return thunk. - @samp{thunk-extern} converts indirect call and jump to external call - and return thunk provided in a separate object file. -+ -+@item function_return("@var{choice}") -+@cindex @code{function_return} function attribute, x86 -+On x86 targets, the @code{function_return} attribute causes the compiler -+to convert function return with @var{choice}. @samp{keep} keeps function -+return unmodified. @samp{thunk} converts function return to call and -+return thunk. @samp{thunk-inline} converts function return to inlined -+call and return thunk. @samp{thunk-extern} converts function return to -+external call and return thunk provided in a separate object file. - @end table - - On the x86, the inliner does not inline a -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 6f60339a56a..337a761015a 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1169,7 +1169,8 @@ See RS/6000 and PowerPC Options. - -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol ---mmitigate-rop -mindirect-branch=@var{choice}} -+-mmitigate-rop -mindirect-branch=@var{choice} @gol -+-mfunction-return=@var{choice}} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24241,6 +24242,17 @@ to external call and return thunk provided in a separate object file. - You can control this behavior for a specific function by using the - function attribute @code{indirect_branch}. @xref{Function Attributes}. - -+@item -mfunction-return=@var{choice} -+@opindex -mfunction-return -+Convert function return with @var{choice}. The default is @samp{keep}, -+which keeps function return unmodified. @samp{thunk} converts function -+return to call and return thunk. @samp{thunk-inline} converts function -+return to inlined call and return thunk. @samp{thunk-extern} converts -+function return to external call and return thunk provided in a separate -+object file. You can control this behavior for a specific function by -+using the function attribute @code{function_return}. -+@xref{Function Attributes}. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index d983e1c3e26..e365ef5698a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index 58f09b42d8a..05a51ad9157 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index f20d35c19b6..3c0d4c39f0b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 0eff8fb658a..14d4ef6dd98 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index a25b20dd808..b4836c38d6c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index cff114a6c29..1f06bd1af74 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index afdb6007986..bc6b47a636e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index d64d978b699..2257be3affa 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index 93067454d3d..e9cfdc5879e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index 97744d65729..f938db050f7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index bfce3ea5cb2..4e58599692a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -13,7 +13,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index 0833606046b..b8d50249d8b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index 2eba0fbd9b2..455adabfe0e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -13,7 +13,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index f58427eae11..4595b841ec0 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -36,7 +36,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -index 564ed39547c..d730d31bda1 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index 50fbee20a5a..5e3e118e9bd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -@@ -10,7 +10,7 @@ foo (void) - dispatch (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index 2976e67adce..2801aa4192e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -@@ -11,7 +11,7 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index da4bc98ef23..70b4fb36eea 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index c64d12ef989..3baf03ee77c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index 49f27b49465..edeb264218c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index a1e3eb6fc74..1d00413a76a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index 395634e7e5c..06ebf1c9063 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index fd3f63379a1..1c8f9446636 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index ba2f92b6f34..21740ac5b7f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index 0c5a2d472c6..a77c1f470b8 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index 665252327aa..86e9fd1f1e4 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 68c0ff713b3..3ecde878867 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index e2da1fcb683..df32a19a2b5 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 244fec708d6..9540996de01 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index 107ebe32f54..f3db6e2441f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index 17b04ef2229..0f687c3b027 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index d9eb11285aa..b27c6fc96a2 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index d02b1dcb1b9..764a375fc37 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-1.c b/gcc/testsuite/gcc.target/i386/ret-thunk-1.c -new file mode 100644 -index 00000000000..7223f67ba5e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-1.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -new file mode 100644 -index 00000000000..3a6727b5c54 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -new file mode 100644 -index 00000000000..b8f68188313 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -new file mode 100644 -index 00000000000..01b0a02f80b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -new file mode 100644 -index 00000000000..4b497b5f8af ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+extern void (*bar) (void); -+extern int foo (void) __attribute__ ((function_return("thunk"))); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -new file mode 100644 -index 00000000000..4ae4c44a3fd ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("thunk-inline"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -new file mode 100644 -index 00000000000..5b5bc765a7e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("thunk-extern"), indirect_branch("thunk"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-16.c b/gcc/testsuite/gcc.target/i386/ret-thunk-16.c -new file mode 100644 -index 00000000000..a16cad16aaa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-16.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("keep"), indirect_branch("keep"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-2.c b/gcc/testsuite/gcc.target/i386/ret-thunk-2.c -new file mode 100644 -index 00000000000..c6659e3ad09 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-2.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-3.c b/gcc/testsuite/gcc.target/i386/ret-thunk-3.c -new file mode 100644 -index 00000000000..0f7f388f459 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-3.c -@@ -0,0 +1,12 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-4.c b/gcc/testsuite/gcc.target/i386/ret-thunk-4.c -new file mode 100644 -index 00000000000..9ae37e835a0 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-4.c -@@ -0,0 +1,12 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-5.c b/gcc/testsuite/gcc.target/i386/ret-thunk-5.c -new file mode 100644 -index 00000000000..4bd0d2a27bc ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-5.c -@@ -0,0 +1,15 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+extern void foo (void) __attribute__ ((function_return("thunk"))); -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-6.c b/gcc/testsuite/gcc.target/i386/ret-thunk-6.c -new file mode 100644 -index 00000000000..053841f6f7d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-6.c -@@ -0,0 +1,14 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+__attribute__ ((function_return("thunk-inline"))) -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-7.c b/gcc/testsuite/gcc.target/i386/ret-thunk-7.c -new file mode 100644 -index 00000000000..262e6780112 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-7.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+__attribute__ ((function_return("thunk-extern"))) -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-8.c b/gcc/testsuite/gcc.target/i386/ret-thunk-8.c -new file mode 100644 -index 00000000000..c1658e96673 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-8.c -@@ -0,0 +1,14 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+extern void foo (void) __attribute__ ((function_return("keep"))); -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -new file mode 100644 -index 00000000000..fa24a1f7365 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -0,0 +1,24 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0006-x86-Add-mindirect-branch-register.patch b/aports/cross/gcc-aarch64/0006-x86-Add-mindirect-branch-register.patch deleted file mode 100644 index 111e6e43..00000000 --- a/aports/cross/gcc-aarch64/0006-x86-Add-mindirect-branch-register.patch +++ /dev/null @@ -1,941 +0,0 @@ -From 61bb7f0e152ce5be700a44007d036ea0de4b254d Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 06/13] x86: Add -mindirect-branch-register - -Add -mindirect-branch-register to force indirect branch via register. -This is implemented by disabling patterns of indirect branch via memory, -similar to TARGET_X32. - --mindirect-branch= and -mfunction-return= tests are updated with --mno-indirect-branch-register to avoid false test failures when --mindirect-branch-register is added to RUNTESTFLAGS for "make check". - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/constraints.md (Bs): Disallow memory operand for - -mindirect-branch-register. - (Bw): Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - * config/i386/i386.md (indirect_jump): Call convert_memory_address - for -mindirect-branch-register. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Disallow peepholes of indirect call and jump via memory for - -mindirect-branch-register. - (*call_pop): Replace m with Bw. - (*call_value_pop): Likewise. - (*sibcall_pop_memory): Replace m with Bs. - * config/i386/i386.opt (mindirect-branch-register): New option. - * doc/invoke.texi: Document -mindirect-branch-register option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c (dg-options): Add - -mno-indirect-branch-register. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - * gcc.target/i386/indirect-thunk-register-1.c: New test. - * gcc.target/i386/indirect-thunk-register-2.c: Likewise. - * gcc.target/i386/indirect-thunk-register-3.c: Likewise. - -i386: Rename to ix86_indirect_branch_register - -Rename the variable for -mindirect-branch-register to -ix86_indirect_branch_register to match the command-line option name. - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/constraints.md (Bs): Replace - ix86_indirect_branch_thunk_register with - ix86_indirect_branch_register. - (Bw): Likewise. - * config/i386/i386.md (indirect_jump): Likewise. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Peepholes of indirect call and jump via memory: Likewise. - * config/i386/i386.opt: Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - -x86: Rewrite ix86_indirect_branch_register logic - -Rewrite ix86_indirect_branch_register logic with - -(and (not (match_test "ix86_indirect_branch_register")) - (original condition before r256662)) - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/predicates.md (constant_call_address_operand): - Rewrite ix86_indirect_branch_register logic. - (sibcall_insn_operand): Likewise. - -Don't check ix86_indirect_branch_register for GOT operand - -Since GOT_memory_operand and GOT32_symbol_operand are simple pattern -matches, don't check ix86_indirect_branch_register here. If needed, --mindirect-branch= will convert indirect branch via GOT slot to a call -and return thunk. - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/constraints.md (Bs): Update - ix86_indirect_branch_register check. Don't check - ix86_indirect_branch_register with GOT_memory_operand. - (Bw): Likewise. - * config/i386/predicates.md (GOT_memory_operand): Don't check - ix86_indirect_branch_register here. - (GOT32_symbol_operand): Likewise. - -i386: Rewrite indirect_branch_operand logic - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/predicates.md (indirect_branch_operand): Rewrite - ix86_indirect_branch_register logic. ---- - gcc/config/i386/constraints.md | 6 ++-- - gcc/config/i386/i386.md | 34 ++++++++++++++-------- - gcc/config/i386/i386.opt | 4 +++ - gcc/config/i386/predicates.md | 21 +++++++------ - gcc/doc/invoke.texi | 6 +++- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-register-1.c | 22 ++++++++++++++ - .../gcc.target/i386/indirect-thunk-register-2.c | 20 +++++++++++++ - .../gcc.target/i386/indirect-thunk-register-3.c | 19 ++++++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 2 +- - 47 files changed, 147 insertions(+), 63 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c - -diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md -index 1a4c701ad13..9204c8e8487 100644 ---- a/gcc/config/i386/constraints.md -+++ b/gcc/config/i386/constraints.md -@@ -172,14 +172,16 @@ - - (define_constraint "Bs" - "@internal Sibcall memory operand." -- (ior (and (not (match_test "TARGET_X32")) -+ (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") - (match_operand 0 "GOT_memory_operand")))) - - (define_constraint "Bw" - "@internal Call memory operand." -- (ior (and (not (match_test "TARGET_X32")) -+ (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") - (match_operand 0 "GOT_memory_operand")))) -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 2da671e9f2d..05a88fff356 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11805,7 +11805,7 @@ - [(set (pc) (match_operand 0 "indirect_branch_operand"))] - "" - { -- if (TARGET_X32) -+ if (TARGET_X32 || ix86_indirect_branch_register) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -11859,7 +11859,7 @@ - OPTAB_DIRECT); - } - -- if (TARGET_X32) -+ if (TARGET_X32 || ix86_indirect_branch_register) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -12048,7 +12048,7 @@ - [(call (mem:QI (match_operand:W 0 "memory_operand" "m")) - (match_operand 1)) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32" -+ "!TARGET_X32 && !ix86_indirect_branch_register" - "* return ix86_output_call_insn (insn, operands[0]);" - [(set_attr "type" "call")]) - -@@ -12057,7 +12057,9 @@ - (match_operand:W 1 "memory_operand")) - (call (mem:QI (match_dup 0)) - (match_operand 3))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" - [(parallel [(call (mem:QI (match_dup 1)) -@@ -12070,7 +12072,9 @@ - (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) - (call (mem:QI (match_dup 0)) - (match_operand 3))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" - [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) -@@ -12092,7 +12096,7 @@ - }) - - (define_insn "*call_pop" -- [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lmBz")) -+ [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lBwBz")) - (match_operand 1)) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -@@ -12112,7 +12116,7 @@ - [(set_attr "type" "call")]) - - (define_insn "*sibcall_pop_memory" -- [(call (mem:QI (match_operand:SI 0 "memory_operand" "m")) -+ [(call (mem:QI (match_operand:SI 0 "memory_operand" "Bs")) - (match_operand 1)) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -@@ -12166,7 +12170,9 @@ - [(set (match_operand:W 0 "register_operand") - (match_operand:W 1 "memory_operand")) - (set (pc) (match_dup 0))] -- "!TARGET_X32 && peep2_reg_dead_p (2, operands[0])" -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && peep2_reg_dead_p (2, operands[0])" - [(set (pc) (match_dup 1))]) - - ;; Call subroutine, returning value in operand 0 -@@ -12244,7 +12250,7 @@ - (call (mem:QI (match_operand:W 1 "memory_operand" "m")) - (match_operand 2))) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32" -+ "!TARGET_X32 && !ix86_indirect_branch_register" - "* return ix86_output_call_insn (insn, operands[1]);" - [(set_attr "type" "callv")]) - -@@ -12254,7 +12260,9 @@ - (set (match_operand 2) - (call (mem:QI (match_dup 0)) - (match_operand 3)))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" - [(parallel [(set (match_dup 2) -@@ -12269,7 +12277,9 @@ - (set (match_operand 2) - (call (mem:QI (match_dup 0)) - (match_operand 3)))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" - [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) -@@ -12294,7 +12304,7 @@ - - (define_insn "*call_value_pop" - [(set (match_operand 0) -- (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lmBz")) -+ (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lBwBz")) - (match_operand 2))) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index ad5916fb643..a97f84f68f2 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -921,3 +921,7 @@ Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) - - EnumValue - Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) -+ -+mindirect-branch-register -+Target Report Var(ix86_indirect_branch_register) Init(0) -+Force indirect call and jump via register. -diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md -index 93dda7bb0e7..d1f0a7dbf61 100644 ---- a/gcc/config/i386/predicates.md -+++ b/gcc/config/i386/predicates.md -@@ -593,7 +593,8 @@ - ;; Test for a valid operand for indirect branch. - (define_predicate "indirect_branch_operand" - (ior (match_operand 0 "register_operand") -- (and (not (match_test "TARGET_X32")) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")))) - - ;; Return true if OP is a memory operands that can be used in sibcalls. -@@ -636,20 +637,22 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "call_register_no_elim_operand") -- (ior (and (not (match_test "TARGET_X32")) -- (match_operand 0 "memory_operand")) -- (and (match_test "TARGET_X32 && Pmode == DImode") -- (match_operand 0 "GOT_memory_operand"))))) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_X32")) -+ (match_operand 0 "memory_operand")) -+ (and (match_test "TARGET_X32 && Pmode == DImode") -+ (match_operand 0 "GOT_memory_operand")))))) - - ;; Similarly, but for tail calls, in which we cannot allow memory references. - (define_special_predicate "sibcall_insn_operand" - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "register_no_elim_operand") -- (ior (and (not (match_test "TARGET_X32")) -- (match_operand 0 "sibcall_memory_operand")) -- (and (match_test "TARGET_X32 && Pmode == DImode") -- (match_operand 0 "GOT_memory_operand"))))) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_X32")) -+ (match_operand 0 "sibcall_memory_operand")) -+ (and (match_test "TARGET_X32 && Pmode == DImode") -+ (match_operand 0 "GOT_memory_operand")))))) - - ;; Return true if OP is a 32-bit GOT symbol operand. - (define_predicate "GOT32_symbol_operand" -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 337a761015a..94374661f2d 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1170,7 +1170,7 @@ See RS/6000 and PowerPC Options. - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol - -mmitigate-rop -mindirect-branch=@var{choice} @gol ---mfunction-return=@var{choice}} -+-mfunction-return=@var{choice} -mindirect-branch-register} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24253,6 +24253,10 @@ object file. You can control this behavior for a specific function by - using the function attribute @code{function_return}. - @xref{Function Attributes}. - -+@item -mindirect-branch-register -+@opindex -mindirect-branch-register -+Force indirect call and jump via register. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index e365ef5698a..60d09881a99 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index 05a51ad9157..aac75163794 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index 3c0d4c39f0b..9e24a385387 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 14d4ef6dd98..127b5d94523 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index b4836c38d6c..fcaa18d10b7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index 1f06bd1af74..e4649283d10 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index bc6b47a636e..17c2d0faf88 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index 2257be3affa..9194ccf3cbc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index e9cfdc5879e..e51f261a612 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index f938db050f7..4aeec1833cd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index 4e58599692a..ac0e5999f63 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index b8d50249d8b..573cf1ef09e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index 455adabfe0e..b2b37fc6e2e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index 4595b841ec0..4a43e199931 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index 5e3e118e9bd..ac84ab623fa 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index 2801aa4192e..ce655e8be1c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index 70b4fb36eea..d34485a0010 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index 3baf03ee77c..0e19830de4d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index edeb264218c..579441f250e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index 1d00413a76a..c92e6f2b02d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index 06ebf1c9063..d9964c25bbd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index 1c8f9446636..d4dca4dc5fe 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index 21740ac5b7f..5c07e02df6a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index a77c1f470b8..3eb440693a0 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index 86e9fd1f1e4..aece9383697 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 3ecde878867..3aba5e8c81f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index df32a19a2b5..0f0181d6672 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 9540996de01..2eef6f35a75 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index f3db6e2441f..e825a10f14c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index 0f687c3b027..c6d77e10352 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index b27c6fc96a2..6454827b780 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index 764a375fc37..c67066cf197 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c -new file mode 100644 -index 00000000000..7d396a31953 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk\n" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk_bnd\n" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c -new file mode 100644 -index 00000000000..e7e616bb271 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c -new file mode 100644 -index 00000000000..5320e923be2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not {\t(pause|pause|nop)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -index 3a6727b5c54..e6fea84a4d9 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -index b8f68188313..e239ec4542f 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -index 01b0a02f80b..fa3181303c9 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -index 4b497b5f8af..fd5b41fdd3f 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - extern void (*bar) (void); - extern int foo (void) __attribute__ ((function_return("thunk"))); -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -index 4ae4c44a3fd..d606373ead1 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -index 5b5bc765a7e..75e45e226b8 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index fa24a1f7365..d1db41cc128 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0007-x86-Add-V-register-operand-modifier.patch b/aports/cross/gcc-aarch64/0007-x86-Add-V-register-operand-modifier.patch deleted file mode 100644 index f75b2133..00000000 --- a/aports/cross/gcc-aarch64/0007-x86-Add-V-register-operand-modifier.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 92308185917678406afee3c165ea5e71b53b3cc1 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 07/13] x86: Add 'V' register operand modifier - -Add 'V', a special modifier which prints the name of the full integer -register without '%'. For - -extern void (*func_p) (void); - -void -foo (void) -{ - asm ("call __x86_indirect_thunk_%V0" : : "a" (func_p)); -} - -it generates: - -foo: - movq func_p(%rip), %rax - call __x86_indirect_thunk_rax - ret - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386.c (print_reg): Print the name of the full - integer register without '%'. - (ix86_print_operand): Handle 'V'. - * doc/extend.texi: Document 'V' modifier. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-register-4.c: New test. ---- - gcc/config/i386/i386.c | 13 ++++++++++++- - gcc/doc/extend.texi | 3 +++ - gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c | 13 +++++++++++++ - 3 files changed, 28 insertions(+), 1 deletion(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 34e26a3a3c7..eeca7e5e490 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -16869,6 +16869,7 @@ put_condition_code (enum rtx_code code, machine_mode mode, bool reverse, - If CODE is 'h', pretend the reg is the 'high' byte register. - If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op. - If CODE is 'd', duplicate the operand for AVX instruction. -+ If CODE is 'V', print naked full integer register name without %. - */ - - void -@@ -16879,7 +16880,7 @@ print_reg (rtx x, int code, FILE *file) - unsigned int regno; - bool duplicated; - -- if (ASSEMBLER_DIALECT == ASM_ATT) -+ if (ASSEMBLER_DIALECT == ASM_ATT && code != 'V') - putc ('%', file); - - if (x == pc_rtx) -@@ -16922,6 +16923,14 @@ print_reg (rtx x, int code, FILE *file) - && regno != FPSR_REG - && regno != FPCR_REG); - -+ if (code == 'V') -+ { -+ if (GENERAL_REGNO_P (regno)) -+ msize = GET_MODE_SIZE (word_mode); -+ else -+ error ("'V' modifier on non-integer register"); -+ } -+ - duplicated = code == 'd' && TARGET_AVX; - - switch (msize) -@@ -17035,6 +17044,7 @@ print_reg (rtx x, int code, FILE *file) - & -- print some in-use local-dynamic symbol name. - H -- print a memory address offset by 8; used for sse high-parts - Y -- print condition for XOP pcom* instruction. -+ V -- print naked full integer register name without %. - + -- print a branch hint as 'cs' or 'ds' prefix - ; -- print a semicolon (after prefixes due to bug in older gas). - ~ -- print "i" if TARGET_AVX2, "f" otherwise. -@@ -17259,6 +17269,7 @@ ix86_print_operand (FILE *file, rtx x, int code) - case 'X': - case 'P': - case 'p': -+ case 'V': - break; - - case 's': -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 2cb6bd1ef3e..76ba1d4f913 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -8511,6 +8511,9 @@ The table below shows the list of supported modifiers and their effects. - @tab @code{2} - @end multitable - -+@code{V} is a special modifier which prints the name of the full integer -+register without @code{%}. -+ - @anchor{x86floatingpointasmoperands} - @subsubsection x86 Floating-Point @code{asm} Operands - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c -new file mode 100644 -index 00000000000..f0cd9b75be8 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=keep -fno-pic" } */ -+ -+extern void (*func_p) (void); -+ -+void -+foo (void) -+{ -+ asm("call __x86_indirect_thunk_%V0" : : "a" (func_p)); -+} -+ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_eax" { target ia32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_rax" { target { ! ia32 } } } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch b/aports/cross/gcc-aarch64/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch deleted file mode 100644 index 73a58bf8..00000000 --- a/aports/cross/gcc-aarch64/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch +++ /dev/null @@ -1,299 +0,0 @@ -From 087b12213a5b4b8654c70320c671bb05c1b1b012 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 13 Jan 2018 18:01:54 -0800 -Subject: [PATCH 08/13] x86: Disallow -mindirect-branch=/-mfunction-return= - with -mcmodel=large - -Since the thunk function may not be reachable in large code model, --mcmodel=large is incompatible with -mindirect-branch=thunk, --mindirect-branch=thunk-extern, -mfunction-return=thunk and --mfunction-return=thunk-extern. Issue an error when they are used with --mcmodel=large. - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386.c (ix86_set_indirect_branch_type): Disallow - -mcmodel=large with -mindirect-branch=thunk, - -mindirect-branch=thunk-extern, -mfunction-return=thunk and - -mfunction-return=thunk-extern. - * doc/invoke.texi: Document -mcmodel=large is incompatible with - -mindirect-branch=thunk, -mindirect-branch=thunk-extern, - -mfunction-return=thunk and -mfunction-return=thunk-extern. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-10.c: New test. - * gcc.target/i386/indirect-thunk-8.c: Likewise. - * gcc.target/i386/indirect-thunk-9.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-10.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-11.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-9.c: Likewise. - * gcc.target/i386/ret-thunk-17.c: Likewise. - * gcc.target/i386/ret-thunk-18.c: Likewise. - * gcc.target/i386/ret-thunk-19.c: Likewise. - * gcc.target/i386/ret-thunk-20.c: Likewise. - * gcc.target/i386/ret-thunk-21.c: Likewise. ---- - gcc/config/i386/i386.c | 26 ++++++++++++++++++++++ - gcc/doc/invoke.texi | 11 +++++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-10.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-8.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-9.c | 7 ++++++ - .../gcc.target/i386/indirect-thunk-attr-10.c | 9 ++++++++ - .../gcc.target/i386/indirect-thunk-attr-11.c | 9 ++++++++ - .../gcc.target/i386/indirect-thunk-attr-9.c | 9 ++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-17.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-18.c | 8 +++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-19.c | 8 +++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-20.c | 9 ++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-21.c | 9 ++++++++ - 13 files changed, 126 insertions(+) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-9.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-17.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-18.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-19.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-20.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-21.c - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index eeca7e5e490..9c038bee000 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -6389,6 +6389,19 @@ ix86_set_indirect_branch_type (tree fndecl) - } - else - cfun->machine->indirect_branch_type = ix86_indirect_branch; -+ -+ /* -mcmodel=large is not compatible with -mindirect-branch=thunk -+ nor -mindirect-branch=thunk-extern. */ -+ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) -+ && ((cfun->machine->indirect_branch_type -+ == indirect_branch_thunk_extern) -+ || (cfun->machine->indirect_branch_type -+ == indirect_branch_thunk))) -+ error ("%<-mindirect-branch=%s%> and %<-mcmodel=large%> are not " -+ "compatible", -+ ((cfun->machine->indirect_branch_type -+ == indirect_branch_thunk_extern) -+ ? "thunk-extern" : "thunk")); - } - - if (cfun->machine->function_return_type == indirect_branch_unset) -@@ -6414,6 +6427,19 @@ ix86_set_indirect_branch_type (tree fndecl) - } - else - cfun->machine->function_return_type = ix86_function_return; -+ -+ /* -mcmodel=large is not compatible with -mfunction-return=thunk -+ nor -mfunction-return=thunk-extern. */ -+ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) -+ && ((cfun->machine->function_return_type -+ == indirect_branch_thunk_extern) -+ || (cfun->machine->function_return_type -+ == indirect_branch_thunk))) -+ error ("%<-mfunction-return=%s%> and %<-mcmodel=large%> are not " -+ "compatible", -+ ((cfun->machine->function_return_type -+ == indirect_branch_thunk_extern) -+ ? "thunk-extern" : "thunk")); - } - } - -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 94374661f2d..1dee495c86b 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -24242,6 +24242,11 @@ to external call and return thunk provided in a separate object file. - You can control this behavior for a specific function by using the - function attribute @code{indirect_branch}. @xref{Function Attributes}. - -+Note that @option{-mcmodel=large} is incompatible with -+@option{-mindirect-branch=thunk} nor -+@option{-mindirect-branch=thunk-extern} since the thunk function may -+not be reachable in large code model. -+ - @item -mfunction-return=@var{choice} - @opindex -mfunction-return - Convert function return with @var{choice}. The default is @samp{keep}, -@@ -24253,6 +24258,12 @@ object file. You can control this behavior for a specific function by - using the function attribute @code{function_return}. - @xref{Function Attributes}. - -+Note that @option{-mcmodel=large} is incompatible with -+@option{-mfunction-return=thunk} nor -+@option{-mfunction-return=thunk-extern} since the thunk function may -+not be reachable in large code model. -+ -+ - @item -mindirect-branch-register - @opindex -mindirect-branch-register - Force indirect call and jump via register. -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c -new file mode 100644 -index 00000000000..a0674bd2363 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c -new file mode 100644 -index 00000000000..7a80a8986e8 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c -new file mode 100644 -index 00000000000..d4d45c5114d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c -new file mode 100644 -index 00000000000..3a2aeaddbc5 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c -new file mode 100644 -index 00000000000..8e52f032b6c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk-inline"))) -+void -+bar (void) -+{ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c -new file mode 100644 -index 00000000000..bdaa4f6911b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk"))) -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-17.c b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c -new file mode 100644 -index 00000000000..0605e2c6542 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-18.c b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c -new file mode 100644 -index 00000000000..307019dc242 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c -@@ -0,0 +1,8 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-19.c b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c -new file mode 100644 -index 00000000000..772617f4010 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c -@@ -0,0 +1,8 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+ -+__attribute__ ((function_return("thunk"))) -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-20.c b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c -new file mode 100644 -index 00000000000..1e9f9bd5a66 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((function_return("thunk-extern"))) -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-21.c b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c -new file mode 100644 -index 00000000000..eea07f7abe1 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((function_return("thunk-inline"))) -+void -+bar (void) -+{ -+} --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch b/aports/cross/gcc-aarch64/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch deleted file mode 100644 index f33946c1..00000000 --- a/aports/cross/gcc-aarch64/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch +++ /dev/null @@ -1,121 +0,0 @@ -From 07857bd9fb9ccab67a932ad9df3e53f3f0c2c617 Mon Sep 17 00:00:00 2001 -From: uros -Date: Thu, 25 Jan 2018 19:39:01 +0000 -Subject: [PATCH 09/13] Use INVALID_REGNUM in indirect thunk processing - - Backport from mainline - 2018-01-17 Uros Bizjak - - * config/i386/i386.c (indirect_thunk_name): Declare regno - as unsigned int. Compare regno with INVALID_REGNUM. - (output_indirect_thunk): Ditto. - (output_indirect_thunk_function): Ditto. - (ix86_code_end): Declare regno as unsigned int. Use INVALID_REGNUM - in the call to output_indirect_thunk_function. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257067 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 30 +++++++++++++++--------------- - 1 file changed, 15 insertions(+), 15 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 9c038bee000..40126579c22 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11087,16 +11087,16 @@ static int indirect_thunks_bnd_used; - /* Fills in the label name that should be used for the indirect thunk. */ - - static void --indirect_thunk_name (char name[32], int regno, bool need_bnd_p, -- bool ret_p) -+indirect_thunk_name (char name[32], unsigned int regno, -+ bool need_bnd_p, bool ret_p) - { -- if (regno >= 0 && ret_p) -+ if (regno != INVALID_REGNUM && ret_p) - gcc_unreachable (); - - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - const char *reg_prefix; - if (LEGACY_INT_REGNO_P (regno)) -@@ -11114,7 +11114,7 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p, - } - else - { -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - if (need_bnd_p) - ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno); -@@ -11166,7 +11166,7 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p, - */ - - static void --output_indirect_thunk (bool need_bnd_p, int regno) -+output_indirect_thunk (bool need_bnd_p, unsigned int regno) - { - char indirectlabel1[32]; - char indirectlabel2[32]; -@@ -11196,7 +11196,7 @@ output_indirect_thunk (bool need_bnd_p, int regno) - - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); - -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - /* MOV. */ - rtx xops[2]; -@@ -11220,12 +11220,12 @@ output_indirect_thunk (bool need_bnd_p, int regno) - } - - /* Output a funtion with a call and return thunk for indirect branch. -- If BND_P is true, the BND prefix is needed. If REGNO != -1, the -- function address is in REGNO. Otherwise, the function address is -+ If BND_P is true, the BND prefix is needed. If REGNO != INVALID_REGNUM, -+ the function address is in REGNO. Otherwise, the function address is - on the top of stack. */ - - static void --output_indirect_thunk_function (bool need_bnd_p, int regno) -+output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - { - char name[32]; - tree decl; -@@ -11274,7 +11274,7 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -- if (regno < 0) -+ if (regno == INVALID_REGNUM) - { - /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ - char alias[32]; -@@ -11348,16 +11348,16 @@ static void - ix86_code_end (void) - { - rtx xops[2]; -- int regno; -+ unsigned int regno; - - if (indirect_thunk_needed) -- output_indirect_thunk_function (false, -1); -+ output_indirect_thunk_function (false, INVALID_REGNUM); - if (indirect_thunk_bnd_needed) -- output_indirect_thunk_function (true, -1); -+ output_indirect_thunk_function (true, INVALID_REGNUM); - - for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) - { -- int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; -+ unsigned int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; - if ((indirect_thunks_used & (1 << i))) - output_indirect_thunk_function (false, regno); - --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch b/aports/cross/gcc-aarch64/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch deleted file mode 100644 index 08593c2b..00000000 --- a/aports/cross/gcc-aarch64/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 3815e98f0f46b6c4c41e6810bad987bd083691aa Mon Sep 17 00:00:00 2001 -From: hjl -Date: Fri, 2 Feb 2018 16:47:02 +0000 -Subject: [PATCH 10/13] i386: Pass INVALID_REGNUM as invalid register number - - Backport from mainline - * config/i386/i386.c (ix86_output_function_return): Pass - INVALID_REGNUM, instead of -1, as invalid register number to - indirect_thunk_name and output_indirect_thunk. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257341 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 40126579c22..66502ee6da6 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -28056,7 +28056,8 @@ ix86_output_function_return (bool long_p) - { - bool need_thunk = (cfun->machine->function_return_type - == indirect_branch_thunk); -- indirect_thunk_name (thunk_name, -1, need_bnd_p, true); -+ indirect_thunk_name (thunk_name, INVALID_REGNUM, need_bnd_p, -+ true); - if (need_bnd_p) - { - indirect_thunk_bnd_needed |= need_thunk; -@@ -28069,7 +28070,7 @@ ix86_output_function_return (bool long_p) - } - } - else -- output_indirect_thunk (need_bnd_p, -1); -+ output_indirect_thunk (need_bnd_p, INVALID_REGNUM); - - return ""; - } --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0011-i386-Update-mfunction-return-for-return-with-pop.patch b/aports/cross/gcc-aarch64/0011-i386-Update-mfunction-return-for-return-with-pop.patch deleted file mode 100644 index 3d528395..00000000 --- a/aports/cross/gcc-aarch64/0011-i386-Update-mfunction-return-for-return-with-pop.patch +++ /dev/null @@ -1,456 +0,0 @@ -From 771535dec733e4b85924f00a3a94c29683d614e5 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 26 Feb 2018 15:29:30 +0000 -Subject: [PATCH 11/13] i386: Update -mfunction-return= for return with pop - -When -mfunction-return= is used, simple_return_pop_internal should pop -return address into ECX register, adjust stack by bytes to pop from stack -and jump to the return thunk via ECX register. - -Revision 257992 removed the bool argument from ix86_output_indirect_jmp. -Update comments to reflect it. - -Tested on i686 and x86-64. - -gcc/ - - Backport from mainline - 2018-02-26 H.J. Lu - - * config/i386/i386.c (ix86_output_indirect_jmp): Update comments. - - 2018-02-26 H.J. Lu - - PR target/84530 - * config/i386/i386-protos.h (ix86_output_indirect_jmp): Remove - the bool argument. - (ix86_output_indirect_function_return): New prototype. - (ix86_split_simple_return_pop_internal): Likewise. - * config/i386/i386.c (indirect_return_via_cx): New. - (indirect_return_via_cx_bnd): Likewise. - (indirect_thunk_name): Handle return va CX_REG. - (output_indirect_thunk_function): Create alias for - __x86_return_thunk_[re]cx and __x86_return_thunk_[re]cx_bnd. - (ix86_output_indirect_jmp): Remove the bool argument. - (ix86_output_indirect_function_return): New function. - (ix86_split_simple_return_pop_internal): Likewise. - * config/i386/i386.md (*indirect_jump): Don't pass false - to ix86_output_indirect_jmp. - (*tablejump_1): Likewise. - (simple_return_pop_internal): Change it to define_insn_and_split. - Call ix86_split_simple_return_pop_internal to split it for - -mfunction-return=. - (simple_return_indirect_internal): Call - ix86_output_indirect_function_return instead of - ix86_output_indirect_jmp. - -gcc/testsuite/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84530 - * gcc.target/i386/ret-thunk-22.c: New test. - * gcc.target/i386/ret-thunk-23.c: Likewise. - * gcc.target/i386/ret-thunk-24.c: Likewise. - * gcc.target/i386/ret-thunk-25.c: Likewise. - * gcc.target/i386/ret-thunk-26.c: Likewise. ---- - gcc/config/i386/i386-protos.h | 4 +- - gcc/config/i386/i386.c | 127 +++++++++++++++++++++++---- - gcc/config/i386/i386.md | 11 ++- - gcc/testsuite/gcc.target/i386/ret-thunk-22.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-23.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-24.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-25.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-26.c | 40 +++++++++ - 8 files changed, 222 insertions(+), 20 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-22.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-23.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-24.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-25.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-26.c - -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index 620d70ef9f6..c7a0ccb58d3 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -311,8 +311,10 @@ extern enum attr_cpu ix86_schedule; - #endif - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); --extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); -+extern const char * ix86_output_indirect_jmp (rtx call_op); - extern const char * ix86_output_function_return (bool long_p); -+extern const char * ix86_output_indirect_function_return (rtx ret_op); -+extern void ix86_split_simple_return_pop_internal (rtx); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 66502ee6da6..21c3c18bd3c 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11080,6 +11080,12 @@ static int indirect_thunks_used; - by call and return thunks functions with the BND prefix. */ - static int indirect_thunks_bnd_used; - -+/* True if return thunk function via CX is needed. */ -+static bool indirect_return_via_cx; -+/* True if return thunk function via CX with the BND prefix is -+ needed. */ -+static bool indirect_return_via_cx_bnd; -+ - #ifndef INDIRECT_LABEL - # define INDIRECT_LABEL "LIND" - #endif -@@ -11090,12 +11096,13 @@ static void - indirect_thunk_name (char name[32], unsigned int regno, - bool need_bnd_p, bool ret_p) - { -- if (regno != INVALID_REGNUM && ret_p) -+ if (regno != INVALID_REGNUM && regno != CX_REG && ret_p) - gcc_unreachable (); - - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -+ const char *ret = ret_p ? "return" : "indirect"; - if (regno != INVALID_REGNUM) - { - const char *reg_prefix; -@@ -11103,14 +11110,11 @@ indirect_thunk_name (char name[32], unsigned int regno, - reg_prefix = TARGET_64BIT ? "r" : "e"; - else - reg_prefix = ""; -- sprintf (name, "__x86_indirect_thunk%s_%s%s", -- bnd, reg_prefix, reg_names[regno]); -+ sprintf (name, "__x86_%s_thunk%s_%s%s", -+ ret, bnd, reg_prefix, reg_names[regno]); - } - else -- { -- const char *ret = ret_p ? "return" : "indirect"; -- sprintf (name, "__x86_%s_thunk%s", ret, bnd); -- } -+ sprintf (name, "__x86_%s_thunk%s", ret, bnd); - } - else - { -@@ -11274,9 +11278,23 @@ output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -+ /* Create alias for __x86_return_thunk/__x86_return_thunk_bnd or -+ __x86_return_thunk_ecx/__x86_return_thunk_ecx_bnd. */ -+ bool need_alias; - if (regno == INVALID_REGNUM) -+ need_alias = true; -+ else if (regno == CX_REG) -+ { -+ if (need_bnd_p) -+ need_alias = indirect_return_via_cx_bnd; -+ else -+ need_alias = indirect_return_via_cx; -+ } -+ else -+ need_alias = false; -+ -+ if (need_alias) - { -- /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ - char alias[32]; - - indirect_thunk_name (alias, regno, need_bnd_p, true); -@@ -28019,18 +28037,17 @@ ix86_output_indirect_branch (rtx call_op, const char *xasm, - else - ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p); - } --/* Output indirect jump. CALL_OP is the jump target. Jump is a -- function return if RET_P is true. */ -+ -+/* Output indirect jump. CALL_OP is the jump target. */ - - const char * --ix86_output_indirect_jmp (rtx call_op, bool ret_p) -+ix86_output_indirect_jmp (rtx call_op) - { - if (cfun->machine->indirect_branch_type != indirect_branch_keep) - { -- /* We can't have red-zone if this isn't a function return since -- "call" in the indirect thunk pushes the return address onto -- stack, destroying red-zone. */ -- if (!ret_p && ix86_red_zone_size != 0) -+ /* We can't have red-zone since "call" in the indirect thunk -+ pushes the return address onto stack, destroying red-zone. */ -+ if (ix86_red_zone_size != 0) - gcc_unreachable (); - - ix86_output_indirect_branch (call_op, "%0", true); -@@ -28081,6 +28098,86 @@ ix86_output_function_return (bool long_p) - return "rep%; ret"; - } - -+/* Output indirect function return. RET_OP is the function return -+ target. */ -+ -+const char * -+ix86_output_indirect_function_return (rtx ret_op) -+{ -+ if (cfun->machine->function_return_type != indirect_branch_keep) -+ { -+ char thunk_name[32]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ unsigned int regno = REGNO (ret_op); -+ gcc_assert (regno == CX_REG); -+ -+ if (cfun->machine->function_return_type -+ != indirect_branch_thunk_inline) -+ { -+ bool need_thunk = (cfun->machine->function_return_type -+ == indirect_branch_thunk); -+ indirect_thunk_name (thunk_name, regno, need_bnd_p, true); -+ if (need_bnd_p) -+ { -+ if (need_thunk) -+ { -+ indirect_return_via_cx_bnd = true; -+ indirect_thunks_bnd_used |= 1 << CX_REG; -+ } -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ } -+ else -+ { -+ if (need_thunk) -+ { -+ indirect_return_via_cx = true; -+ indirect_thunks_used |= 1 << CX_REG; -+ } -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ return ""; -+ } -+ else -+ return "%!jmp\t%A0"; -+} -+ -+/* Split simple return with popping POPC bytes from stack to indirect -+ branch with stack adjustment . */ -+ -+void -+ix86_split_simple_return_pop_internal (rtx popc) -+{ -+ struct machine_function *m = cfun->machine; -+ rtx ecx = gen_rtx_REG (SImode, CX_REG); -+ rtx_insn *insn; -+ -+ /* There is no "pascal" calling convention in any 64bit ABI. */ -+ gcc_assert (!TARGET_64BIT); -+ -+ insn = emit_insn (gen_pop (ecx)); -+ m->fs.cfa_offset -= UNITS_PER_WORD; -+ m->fs.sp_offset -= UNITS_PER_WORD; -+ -+ rtx x = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD); -+ x = gen_rtx_SET (stack_pointer_rtx, x); -+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x); -+ add_reg_note (insn, REG_CFA_REGISTER, gen_rtx_SET (ecx, pc_rtx)); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ -+ x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, popc); -+ x = gen_rtx_SET (stack_pointer_rtx, x); -+ insn = emit_insn (x); -+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ -+ /* Now return address is in ECX. */ -+ emit_jump_insn (gen_simple_return_indirect_internal (ecx)); -+} -+ - /* Output the assembly for a call instruction. */ - - const char * -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 05a88fff356..857466a6361 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11813,7 +11813,7 @@ - (define_insn "*indirect_jump" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))] - "" -- "* return ix86_output_indirect_jmp (operands[0], false);" -+ "* return ix86_output_indirect_jmp (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -@@ -11868,7 +11868,7 @@ - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw")) - (use (label_ref (match_operand 1)))] - "" -- "* return ix86_output_indirect_jmp (operands[0], false);" -+ "* return ix86_output_indirect_jmp (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -@@ -12520,11 +12520,14 @@ - (set_attr "prefix_rep" "1") - (set_attr "modrm" "0")]) - --(define_insn "simple_return_pop_internal" -+(define_insn_and_split "simple_return_pop_internal" - [(simple_return) - (use (match_operand:SI 0 "const_int_operand"))] - "reload_completed" - "%!ret\t%0" -+ "&& cfun->machine->function_return_type != indirect_branch_keep" -+ [(const_int 0)] -+ "ix86_split_simple_return_pop_internal (operands[0]); DONE;" - [(set_attr "length" "3") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "2") -@@ -12535,7 +12538,7 @@ - [(simple_return) - (use (match_operand:SI 0 "register_operand" "r"))] - "reload_completed" -- "* return ix86_output_indirect_jmp (operands[0], true);" -+ "* return ix86_output_indirect_function_return (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-22.c b/gcc/testsuite/gcc.target/i386/ret-thunk-22.c -new file mode 100644 -index 00000000000..89e086de97b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-22.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-23.c b/gcc/testsuite/gcc.target/i386/ret-thunk-23.c -new file mode 100644 -index 00000000000..43f0ccaa854 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-23.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not {\tpause} } } */ -+/* { dg-final { scan-assembler-not {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-24.c b/gcc/testsuite/gcc.target/i386/ret-thunk-24.c -new file mode 100644 -index 00000000000..8729e35147e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-24.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-25.c b/gcc/testsuite/gcc.target/i386/ret-thunk-25.c -new file mode 100644 -index 00000000000..f73553c9a9f ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-25.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_bnd_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-26.c b/gcc/testsuite/gcc.target/i386/ret-thunk-26.c -new file mode 100644 -index 00000000000..9144e988735 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-26.c -@@ -0,0 +1,40 @@ -+/* PR target/r84530 */ -+/* { dg-do run } */ -+/* { dg-options "-Os -mfunction-return=thunk" } */ -+ -+struct S { int i; }; -+__attribute__((const, noinline, noclone)) -+struct S foo (int x) -+{ -+ struct S s; -+ s.i = x; -+ return s; -+} -+ -+int a[2048], b[2048], c[2048], d[2048]; -+struct S e[2048]; -+ -+__attribute__((noinline, noclone)) void -+bar (void) -+{ -+ int i; -+ for (i = 0; i < 1024; i++) -+ { -+ e[i] = foo (i); -+ a[i+2] = a[i] + a[i+1]; -+ b[10] = b[10] + i; -+ c[i] = c[2047 - i]; -+ d[i] = d[i + 1]; -+ } -+} -+ -+int -+main () -+{ -+ int i; -+ bar (); -+ for (i = 0; i < 1024; i++) -+ if (e[i].i != i) -+ __builtin_abort (); -+ return 0; -+} --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch b/aports/cross/gcc-aarch64/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch deleted file mode 100644 index 1bd6134c..00000000 --- a/aports/cross/gcc-aarch64/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch +++ /dev/null @@ -1,1003 +0,0 @@ -From a34d0b92e2c81792bd1f27e872c4c97a2df6861c Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 26 Feb 2018 17:00:46 +0000 -Subject: [PATCH 12/13] i386: Add TARGET_INDIRECT_BRANCH_REGISTER - -For - ---- -struct C { - virtual ~C(); - virtual void f(); -}; - -void -f (C *p) -{ - p->f(); - p->f(); -} ---- - --mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates: - -_Z1fP1C: -.LFB0: - .cfi_startproc - pushq %rbx - .cfi_def_cfa_offset 16 - .cfi_offset 3, -16 - movq (%rdi), %rax - movq %rdi, %rbx - jmp .LIND1 -.LIND0: - pushq 16(%rax) - jmp __x86_indirect_thunk -.LIND1: - call .LIND0 - movq (%rbx), %rax - movq %rbx, %rdi - popq %rbx - .cfi_def_cfa_offset 8 - movq 16(%rax), %rax - jmp __x86_indirect_thunk_rax - .cfi_endproc - -x86-64 is supposed to have asynchronous unwind tables by default, but -there is nothing that reflects the change in the (relative) frame -address after .LIND0. That region really has to be moved outside of -the .cfi_startproc/.cfi_endproc bracket. - -This patch adds TARGET_INDIRECT_BRANCH_REGISTER to force indirect -branch via register whenever -mindirect-branch= is used. Now, --mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates: - -_Z1fP1C: -.LFB0: - .cfi_startproc - pushq %rbx - .cfi_def_cfa_offset 16 - .cfi_offset 3, -16 - movq (%rdi), %rax - movq %rdi, %rbx - movq 16(%rax), %rax - call __x86_indirect_thunk_rax - movq (%rbx), %rax - movq %rbx, %rdi - popq %rbx - .cfi_def_cfa_offset 8 - movq 16(%rax), %rax - jmp __x86_indirect_thunk_rax - .cfi_endproc - -so that "-mindirect-branch=thunk-extern" is equivalent to -"-mindirect-branch=thunk-extern -mindirect-branch-register", which is -used by Linux kernel. - -gcc/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84039 - * config/i386/constraints.md (Bs): Replace - ix86_indirect_branch_register with - TARGET_INDIRECT_BRANCH_REGISTER. - (Bw): Likewise. - * config/i386/i386.md (indirect_jump): Likewise. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Peepholes of indirect call and jump via memory: Likewise. - (*sibcall_GOT_32): Disallowed for TARGET_INDIRECT_BRANCH_REGISTER. - (*sibcall_value_GOT_32): Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - * config/i386/i386.h (TARGET_INDIRECT_BRANCH_REGISTER): New. - -gcc/testsuite/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84039 - * gcc.target/i386/indirect-thunk-1.c: Updated. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. ---- - gcc/config/i386/constraints.md | 4 ++-- - gcc/config/i386/i386.h | 5 ++++ - gcc/config/i386/i386.md | 28 +++++++++++++--------- - gcc/config/i386/predicates.md | 6 ++--- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 6 +++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 12 ++++++---- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-1.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-2.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-3.c | 3 +-- - .../gcc.target/i386/indirect-thunk-attr-4.c | 3 +-- - .../gcc.target/i386/indirect-thunk-attr-5.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-attr-6.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-attr-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 7 +++--- - .../gcc.target/i386/indirect-thunk-extern-1.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-extern-2.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-extern-3.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-extern-4.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-extern-5.c | 6 +++-- - .../gcc.target/i386/indirect-thunk-extern-6.c | 8 +++---- - .../gcc.target/i386/indirect-thunk-extern-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-inline-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 3 ++- - .../gcc.target/i386/indirect-thunk-inline-6.c | 3 ++- - .../gcc.target/i386/indirect-thunk-inline-7.c | 4 ++-- - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 9 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 9 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 8 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 5 ++-- - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 7 +++--- - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 7 +++--- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 13 ++++------ - 43 files changed, 128 insertions(+), 141 deletions(-) - -diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md -index 9204c8e8487..ef684a95497 100644 ---- a/gcc/config/i386/constraints.md -+++ b/gcc/config/i386/constraints.md -@@ -172,7 +172,7 @@ - - (define_constraint "Bs" - "@internal Sibcall memory operand." -- (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -@@ -180,7 +180,7 @@ - - (define_constraint "Bw" - "@internal Call memory operand." -- (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index b34bc117c34..1816d710f4e 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2676,6 +2676,11 @@ extern void debug_dispatch_window (int); - #define TARGET_RECIP_VEC_DIV ((recip_mask & RECIP_MASK_VEC_DIV) != 0) - #define TARGET_RECIP_VEC_SQRT ((recip_mask & RECIP_MASK_VEC_SQRT) != 0) - -+ -+#define TARGET_INDIRECT_BRANCH_REGISTER \ -+ (ix86_indirect_branch_register \ -+ || cfun->machine->indirect_branch_type != indirect_branch_keep) -+ - #define IX86_HLE_ACQUIRE (1 << 16) - #define IX86_HLE_RELEASE (1 << 17) - -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 857466a6361..6a6dc26799c 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11805,7 +11805,7 @@ - [(set (pc) (match_operand 0 "indirect_branch_operand"))] - "" - { -- if (TARGET_X32 || ix86_indirect_branch_register) -+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -11859,7 +11859,7 @@ - OPTAB_DIRECT); - } - -- if (TARGET_X32 || ix86_indirect_branch_register) -+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -12029,7 +12029,10 @@ - (match_operand:SI 0 "register_no_elim_operand" "U") - (match_operand:SI 1 "GOT32_symbol_operand")))) - (match_operand 2))] -- "!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)" -+ "!TARGET_MACHO -+ && !TARGET_64BIT -+ && !TARGET_INDIRECT_BRANCH_REGISTER -+ && SIBLING_CALL_P (insn)" - { - rtx fnaddr = gen_rtx_PLUS (Pmode, operands[0], operands[1]); - fnaddr = gen_const_mem (Pmode, fnaddr); -@@ -12048,7 +12051,7 @@ - [(call (mem:QI (match_operand:W 0 "memory_operand" "m")) - (match_operand 1)) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32 && !ix86_indirect_branch_register" -+ "!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER" - "* return ix86_output_call_insn (insn, operands[0]);" - [(set_attr "type" "call")]) - -@@ -12058,7 +12061,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" -@@ -12073,7 +12076,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" -@@ -12171,7 +12174,7 @@ - (match_operand:W 1 "memory_operand")) - (set (pc) (match_dup 0))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && peep2_reg_dead_p (2, operands[0])" - [(set (pc) (match_dup 1))]) - -@@ -12229,7 +12232,10 @@ - (match_operand:SI 1 "register_no_elim_operand" "U") - (match_operand:SI 2 "GOT32_symbol_operand")))) - (match_operand 3)))] -- "!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)" -+ "!TARGET_MACHO -+ && !TARGET_64BIT -+ && !TARGET_INDIRECT_BRANCH_REGISTER -+ && SIBLING_CALL_P (insn)" - { - rtx fnaddr = gen_rtx_PLUS (Pmode, operands[1], operands[2]); - fnaddr = gen_const_mem (Pmode, fnaddr); -@@ -12250,7 +12256,7 @@ - (call (mem:QI (match_operand:W 1 "memory_operand" "m")) - (match_operand 2))) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32 && !ix86_indirect_branch_register" -+ "!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER" - "* return ix86_output_call_insn (insn, operands[1]);" - [(set_attr "type" "callv")]) - -@@ -12261,7 +12267,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3)))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" -@@ -12278,7 +12284,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3)))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" -diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md -index d1f0a7dbf61..5f8a98faead 100644 ---- a/gcc/config/i386/predicates.md -+++ b/gcc/config/i386/predicates.md -@@ -593,7 +593,7 @@ - ;; Test for a valid operand for indirect branch. - (define_predicate "indirect_branch_operand" - (ior (match_operand 0 "register_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")))) - -@@ -637,7 +637,7 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "call_register_no_elim_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (ior (and (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -@@ -648,7 +648,7 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "register_no_elim_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (ior (and (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index 60d09881a99..6e94d2c4865 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index aac75163794..3c467078964 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index 9e24a385387..2c7fb52b59d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 127b5d94523..0d3f895009d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index fcaa18d10b7..fb26c005e80 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -9,8 +9,10 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index e4649283d10..aa03fbd8446 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -10,9 +10,13 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 { target x32 } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index 17c2d0faf88..3c72036dbaf 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -35,9 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index 9194ccf3cbc..7106407b83d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -14,9 +14,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index e51f261a612..27c7e5b029b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index 4aeec1833cd..89a2bac8403 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -14,10 +14,9 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ - /* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index ac0e5999f63..3eb83c3779a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -13,10 +13,9 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ - /* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index 573cf1ef09e..0098dd1133d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -14,9 +14,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index b2b37fc6e2e..ece8de15a4b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -13,9 +13,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index 4a43e199931..d53fc887dcc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -36,9 +36,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index ac84ab623fa..73d16baddc7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -10,9 +10,9 @@ foo (void) - dispatch (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index ce655e8be1c..856751ac224 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -11,10 +11,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index d34485a0010..42312f65588 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -10,8 +10,9 @@ foo (void) - bar (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index 0e19830de4d..c8ca102c8df 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -11,10 +11,9 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 1 } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index 579441f250e..c09dd0afd2d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index c92e6f2b02d..826425a5115 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index d9964c25bbd..385626850a2 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index d4dca4dc5fe..1ae49b137ca 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -12,9 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index 5c07e02df6a..53282390977 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -9,8 +9,10 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index 3eb440693a0..8ae43482d0c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -10,8 +10,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index aece9383697..2b9a33e93dc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -35,9 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 3aba5e8c81f..869d9040838 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index 0f0181d6672..c5c16ed8bd8 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 2eef6f35a75..4a63ebed8ab 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index e825a10f14c..a395ffca018 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index c6d77e10352..21cbfd39582 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -9,7 +9,8 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index 6454827b780..d1300f18dc7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -10,7 +10,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index c67066cf197..ea009245a58 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -35,8 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -index e6fea84a4d9..af9023af613 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -15,9 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -index e239ec4542f..ba467c59b36 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -15,9 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -index fa3181303c9..43e57cac2c3 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -15,8 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -index fd5b41fdd3f..55f156c4376 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -14,9 +14,8 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -index d606373ead1..1c790436a53 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -16,7 +16,6 @@ foo (void) - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -index 75e45e226b8..58aba319cba 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -16,7 +16,6 @@ foo (void) - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index d1db41cc128..d2df8b874e0 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -14,11 +14,8 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ --/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */ --/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch b/aports/cross/gcc-aarch64/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch deleted file mode 100644 index d846ac77..00000000 --- a/aports/cross/gcc-aarch64/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch +++ /dev/null @@ -1,225 +0,0 @@ -From e7fbaebc8ff650df76f43e92cb9ca59d5174ebe7 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Thu, 15 Mar 2018 17:54:40 +0000 -Subject: [PATCH 13/13] i386: Don't generate alias for function return thunk - -Function return thunks shouldn't be aliased to indirect branch thunks -since indirect branch thunks are placed in COMDAT section and a COMDAT -section with indirect branch may not have function return thunk. This -patch generates function return thunks directly. - -gcc/ - - Backport from mainline - PR target/84574 - * config/i386/i386.c (indirect_thunk_needed): Update comments. - (indirect_thunk_bnd_needed): Likewise. - (indirect_thunks_used): Likewise. - (indirect_thunks_bnd_used): Likewise. - (indirect_return_needed): New. - (indirect_return_bnd_needed): Likewise. - (output_indirect_thunk_function): Add a bool argument for - function return. - (output_indirect_thunk_function): Don't generate alias for - function return thunk. - (ix86_code_end): Call output_indirect_thunk_function to generate - function return thunks. - (ix86_output_function_return): Set indirect_return_bnd_needed - and indirect_return_needed instead of indirect_thunk_bnd_needed - and indirect_thunk_needed. - -gcc/testsuite/ - - Backport from mainline - PR target/84574 - * gcc.target/i386/ret-thunk-9.c: Expect __x86_return_thunk - label instead of __x86_indirect_thunk label. ---- - gcc/config/i386/i386.c | 92 ++++++++++------------------- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 2 +- - 2 files changed, 33 insertions(+), 61 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 21c3c18bd3c..f4cd1c6f4e9 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11067,19 +11067,23 @@ ix86_setup_frame_addresses (void) - labels in call and return thunks. */ - static int indirectlabelno; - --/* True if call and return thunk functions are needed. */ -+/* True if call thunk function is needed. */ - static bool indirect_thunk_needed = false; --/* True if call and return thunk functions with the BND prefix are -- needed. */ -+/* True if call thunk function with the BND prefix is needed. */ - static bool indirect_thunk_bnd_needed = false; - - /* Bit masks of integer registers, which contain branch target, used -- by call and return thunks functions. */ -+ by call thunk functions. */ - static int indirect_thunks_used; - /* Bit masks of integer registers, which contain branch target, used -- by call and return thunks functions with the BND prefix. */ -+ by call thunk functions with the BND prefix. */ - static int indirect_thunks_bnd_used; - -+/* True if return thunk function is needed. */ -+static bool indirect_return_needed = false; -+/* True if return thunk function with the BND prefix is needed. */ -+static bool indirect_return_bnd_needed = false; -+ - /* True if return thunk function via CX is needed. */ - static bool indirect_return_via_cx; - /* True if return thunk function via CX with the BND prefix is -@@ -11226,16 +11230,18 @@ output_indirect_thunk (bool need_bnd_p, unsigned int regno) - /* Output a funtion with a call and return thunk for indirect branch. - If BND_P is true, the BND prefix is needed. If REGNO != INVALID_REGNUM, - the function address is in REGNO. Otherwise, the function address is -- on the top of stack. */ -+ on the top of stack. Thunk is used for function return if RET_P is -+ true. */ - - static void --output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) -+output_indirect_thunk_function (bool need_bnd_p, unsigned int regno, -+ bool ret_p) - { - char name[32]; - tree decl; - - /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -- indirect_thunk_name (name, regno, need_bnd_p, false); -+ indirect_thunk_name (name, regno, need_bnd_p, ret_p); - decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, - get_identifier (name), - build_function_type_list (void_type_node, NULL_TREE)); -@@ -11278,50 +11284,6 @@ output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -- /* Create alias for __x86_return_thunk/__x86_return_thunk_bnd or -- __x86_return_thunk_ecx/__x86_return_thunk_ecx_bnd. */ -- bool need_alias; -- if (regno == INVALID_REGNUM) -- need_alias = true; -- else if (regno == CX_REG) -- { -- if (need_bnd_p) -- need_alias = indirect_return_via_cx_bnd; -- else -- need_alias = indirect_return_via_cx; -- } -- else -- need_alias = false; -- -- if (need_alias) -- { -- char alias[32]; -- -- indirect_thunk_name (alias, regno, need_bnd_p, true); --#if TARGET_MACHO -- if (TARGET_MACHO) -- { -- fputs ("\t.weak_definition\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- fputs ("\n\t.private_extern\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- ASM_OUTPUT_LABEL (asm_out_file, alias); -- } --#else -- ASM_OUTPUT_DEF (asm_out_file, alias, name); -- if (USE_HIDDEN_LINKONCE) -- { -- fputs ("\t.globl\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- fputs ("\t.hidden\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- } --#endif -- } -- - DECL_INITIAL (decl) = make_node (BLOCK); - current_function_decl = decl; - allocate_struct_function (decl, false); -@@ -11368,19 +11330,29 @@ ix86_code_end (void) - rtx xops[2]; - unsigned int regno; - -+ if (indirect_return_needed) -+ output_indirect_thunk_function (false, INVALID_REGNUM, true); -+ if (indirect_return_bnd_needed) -+ output_indirect_thunk_function (true, INVALID_REGNUM, true); -+ -+ if (indirect_return_via_cx) -+ output_indirect_thunk_function (false, CX_REG, true); -+ if (indirect_return_via_cx_bnd) -+ output_indirect_thunk_function (true, CX_REG, true); -+ - if (indirect_thunk_needed) -- output_indirect_thunk_function (false, INVALID_REGNUM); -+ output_indirect_thunk_function (false, INVALID_REGNUM, false); - if (indirect_thunk_bnd_needed) -- output_indirect_thunk_function (true, INVALID_REGNUM); -+ output_indirect_thunk_function (true, INVALID_REGNUM, false); - - for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) - { - unsigned int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; - if ((indirect_thunks_used & (1 << i))) -- output_indirect_thunk_function (false, regno); -+ output_indirect_thunk_function (false, regno, false); - - if ((indirect_thunks_bnd_used & (1 << i))) -- output_indirect_thunk_function (true, regno); -+ output_indirect_thunk_function (true, regno, false); - } - - for (regno = AX_REG; regno <= SP_REG; regno++) -@@ -11389,10 +11361,10 @@ ix86_code_end (void) - tree decl; - - if ((indirect_thunks_used & (1 << regno))) -- output_indirect_thunk_function (false, regno); -+ output_indirect_thunk_function (false, regno, false); - - if ((indirect_thunks_bnd_used & (1 << regno))) -- output_indirect_thunk_function (true, regno); -+ output_indirect_thunk_function (true, regno, false); - - if (!(pic_labels_used & (1 << regno))) - continue; -@@ -28077,12 +28049,12 @@ ix86_output_function_return (bool long_p) - true); - if (need_bnd_p) - { -- indirect_thunk_bnd_needed |= need_thunk; -+ indirect_return_bnd_needed |= need_thunk; - fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); - } - else - { -- indirect_thunk_needed |= need_thunk; -+ indirect_return_needed |= need_thunk; - fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); - } - } -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index d2df8b874e0..eee230ca2f6 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -13,7 +13,7 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ -+/* { dg-final { scan-assembler "__x86_return_thunk:" } } */ - /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-aarch64/001_all_default-ssp-strong.patch b/aports/cross/gcc-aarch64/001_all_default-ssp-strong.patch deleted file mode 100644 index 95949eb0..00000000 --- a/aports/cross/gcc-aarch64/001_all_default-ssp-strong.patch +++ /dev/null @@ -1,215 +0,0 @@ -# DP: Turn on -fstack-protector by default for C, C++, ObjC, ObjC++. -# DP: Build libgcc using -fno-stack-protector. - ---- - gcc/Makefile.in | 2 ++ - gcc/cp/lang-specs.h | 6 +++--- - gcc/doc/invoke.texi | 4 ++++ - gcc/gcc.c | 18 ++++++++++++++---- - gcc/objc/lang-specs.h | 10 +++++----- - gcc/objcp/lang-specs.h | 8 ++++---- - 6 files changed, 32 insertions(+), 16 deletions(-) - -Index: b/gcc/gcc.c -=================================================================== ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -858,6 +858,14 @@ proper position among the other output f - #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G" - #endif - -+#ifndef SSP_DEFAULT_SPEC -+#ifdef TARGET_LIBC_PROVIDES_SSP -+#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!ffreestanding:%{!nostdlib:%{!fstack-protector:-fstack-protector-strong}}}}}" -+#else -+#define SSP_DEFAULT_SPEC "" -+#endif -+#endif -+ - #ifndef LINK_SSP_SPEC - #ifdef TARGET_LIBC_PROVIDES_SSP - #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ -@@ -1057,6 +1065,7 @@ static const char *cc1_spec = CC1_SPEC; - static const char *cc1plus_spec = CC1PLUS_SPEC; - static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC; - static const char *link_ssp_spec = LINK_SSP_SPEC; -+static const char *ssp_default_spec = SSP_DEFAULT_SPEC; - static const char *asm_spec = ASM_SPEC; - static const char *asm_final_spec = ASM_FINAL_SPEC; - static const char *link_spec = LINK_SPEC; -@@ -1112,7 +1121,7 @@ static const char *cpp_unique_options = - static const char *cpp_options = - "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\ - %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\ -- %{undef} %{save-temps*:-fpch-preprocess}"; -+ %{undef} %{save-temps*:-fpch-preprocess} %(ssp_default)"; - - /* This contains cpp options which are not passed when the preprocessor - output will be used by another program. */ -@@ -1301,9 +1310,9 @@ static const struct compiler default_com - %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \ - %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\ - cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \ -- %(cc1_options)}\ -+ %(cc1_options) %(ssp_default)}\ - %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\ -- cc1 %(cpp_unique_options) %(cc1_options)}}}\ -+ cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 1}, - {"-", - "%{!E:%e-E or -x required when input is from standard input}\ -@@ -1328,7 +1337,7 @@ static const struct compiler default_com - %W{o*:--output-pch=%*}}%V}}}}}}}", 0, 0, 0}, - {".i", "@cpp-output", 0, 0, 0}, - {"@cpp-output", -- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -+ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(ssp_default) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {".s", "@assembler", 0, 0, 0}, - {"@assembler", - "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0}, -@@ -1560,6 +1569,7 @@ static struct spec_list static_specs[] = - INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec), - INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec), - INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec), -+ INIT_STATIC_SPEC ("ssp_default", &ssp_default_spec), - INIT_STATIC_SPEC ("endfile", &endfile_spec), - INIT_STATIC_SPEC ("link", &link_spec), - INIT_STATIC_SPEC ("lib", &lib_spec), -Index: b/gcc/cp/lang-specs.h -=================================================================== ---- a/gcc/cp/lang-specs.h -+++ b/gcc/cp/lang-specs.h -@@ -46,7 +46,7 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\ - cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:-o %g.s \ - %{!fdump-ada-spec*:%{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}}%V}}}}", -@@ -58,11 +58,11 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\ - cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {".ii", "@c++-cpp-output", 0, 0, 0}, - {"@c++-cpp-output", - "%{!M:%{!MM:%{!E:\ -- cc1plus -fpreprocessed %i %(cc1_options) %2\ -+ cc1plus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/params.def -=================================================================== ---- a/gcc/params.def -+++ b/gcc/params.def -@@ -673,7 +673,7 @@ DEFPARAM (PARAM_INTEGER_SHARE_LIMIT, - DEFPARAM (PARAM_SSP_BUFFER_SIZE, - "ssp-buffer-size", - "The lower bound for a buffer to be considered for stack smashing protection.", -- 8, 1, 0) -+ 4, 1, 0) - - DEFPARAM (PARAM_MIN_SIZE_FOR_STACK_SHARING, - "min-size-for-stack-sharing", -Index: b/gcc/objc/lang-specs.h -=================================================================== ---- a/gcc/objc/lang-specs.h -+++ b/gcc/objc/lang-specs.h -@@ -29,9 +29,9 @@ along with GCC; see the file COPYING3. - %{traditional|traditional-cpp:\ - %eGNU Objective C no longer supports traditional compilation}\ - %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\ -- cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\ -+ cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}\ - %{!save-temps*:%{!no-integrated-cpp:\ -- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\ -+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objective-c-header", - "%{E|M|MM:cc1obj -E %{traditional|traditional-cpp:-traditional-cpp}\ -@@ -40,18 +40,18 @@ along with GCC; see the file COPYING3. - %{traditional|traditional-cpp:\ - %eGNU Objective C no longer supports traditional compilation}\ - %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\ -- cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ cc1obj -fpreprocessed %b.mi %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - -o %g.s %{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}%V}\ - %{!save-temps*:%{!no-integrated-cpp:\ -- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - -o %g.s %{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0}, - {".mi", "@objective-c-cpp-output", 0, 0, 0}, - {"@objective-c-cpp-output", -- "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objc-cpp-output", - "%nobjc-cpp-output is deprecated; please use objective-c-cpp-output instead\n\ -- %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/objcp/lang-specs.h -=================================================================== ---- a/gcc/objcp/lang-specs.h -+++ b/gcc/objcp/lang-specs.h -@@ -36,7 +36,7 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\ - cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - -o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {"@objective-c++", -@@ -46,16 +46,16 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\ - cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {".mii", "@objective-c++-cpp-output", 0, 0, 0}, - {"@objective-c++-cpp-output", - "%{!M:%{!MM:%{!E:\ -- cc1objplus -fpreprocessed %i %(cc1_options) %2\ -+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objc++-cpp-output", - "%nobjc++-cpp-output is deprecated; please use objective-c++-cpp-output instead\n\ - %{!M:%{!MM:%{!E:\ -- cc1objplus -fpreprocessed %i %(cc1_options) %2\ -+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -9247,6 +9247,9 @@ - The minimum size of variables taking part in stack slot sharing when not - optimizing. The default value is 32. - -+The Alpine Linux default is "4", to increase -+the number of functions protected by the stack protector. -+ - @item max-jump-thread-duplication-stmts - Maximum number of statements allowed in a block that needs to be - duplicated when threading jumps. -@@ -10185,6 +10188,11 @@ - Like @option{-fstack-protector} but includes additional functions to - be protected --- those that have local array definitions, or have - references to local frame addresses. -+ -+NOTE: In Alpine Linux, -+@option{-fstack-protector-strong} is enabled by default for C, -+C++, ObjC, ObjC++, if none of @option{-fno-stack-protector}, -+@option{-nostdlib}, nor @option{-ffreestanding} are found. - - @item -fstack-protector-explicit - @opindex fstack-protector-explicit diff --git a/aports/cross/gcc-aarch64/002_all_default-relro.patch b/aports/cross/gcc-aarch64/002_all_default-relro.patch deleted file mode 100644 index c461017d..00000000 --- a/aports/cross/gcc-aarch64/002_all_default-relro.patch +++ /dev/null @@ -1,33 +0,0 @@ -# Turn on -Wl,-z,relro,-z,now by default. - ---- - gcc/doc/invoke.texi | 3 +++ - gcc/gcc.c | 1 + - 2 files changed, 4 insertions(+), 0 deletions(-) - -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -11424,6 +11424,9 @@ For example, @option{-Wl,-Map,output.map - linker. When using the GNU linker, you can also get the same effect with - @option{-Wl,-Map=output.map}. - -+NOTE: In Alpine Linux, for LDFLAGS, the option -+@option{-Wl,-z,relro,now} is used. To disable, use @option{-Wl,-z,norelro}. -+ - @item -u @var{symbol} - @opindex u - Pretend the symbol @var{symbol} is undefined, to force linking of -Index: b/gcc/gcc.c -=================================================================== ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -890,6 +890,7 @@ proper position among the other output f - "%{flto|flto=*:% 0 - ---- - gcc/doc/invoke.texi | 6 ++++++ - gcc/c-family/c-cppbuiltin.c | 3 + - 2 files changed, 9 insertions(+), 0 deletions(-) - -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -7840,6 +7840,12 @@ also turns on the following optimization - Please note the warning under @option{-fgcse} about - invoking @option{-O2} on programs that use computed gotos. - -+NOTE: In Alpine Linux, @option{-D_FORTIFY_SOURCE=2} is -+set by default, and is activated when @option{-O} is set to 2 or higher. -+This enables additional compile-time and run-time checks for several libc -+functions. To disable, specify either @option{-U_FORTIFY_SOURCE} or -+@option{-D_FORTIFY_SOURCE=0}. -+ - @item -O3 - @opindex O3 - Optimize yet more. @option{-O3} turns on all optimizations specified -Index: b/gcc/c-family/c-cppbuiltin.c -=================================================================== ---- a/gcc/c-family/c-cppbuiltin.c -+++ b/gcc/c-family/c-cppbuiltin.c -@@ -1176,6 +1176,10 @@ c_cpp_builtins (cpp_reader *pfile) - builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0); - builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0); - -+ /* Fortify Source enabled by default for optimization levels > 0 */ -+ if (optimize) -+ builtin_define_with_int_value ("_FORTIFY_SOURCE", 2); -+ - /* Misc. */ - if (flag_gnu89_inline) - cpp_define (pfile, "__GNUC_GNU_INLINE__"); diff --git a/aports/cross/gcc-aarch64/005_all_default-as-needed.patch b/aports/cross/gcc-aarch64/005_all_default-as-needed.patch deleted file mode 100644 index ee4f7962..00000000 --- a/aports/cross/gcc-aarch64/005_all_default-as-needed.patch +++ /dev/null @@ -1,241 +0,0 @@ -# DP: On linux targets pass --as-needed by default to the linker, but always -# DP: link the sanitizer libraries with --no-as-needed. - ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -568,8 +568,11 @@ proper position among the other output f - #ifdef LIBTSAN_EARLY_SPEC - #define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS - #elif defined(HAVE_LD_STATIC_DYNAMIC) --#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \ -- "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ -+#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \ -+ " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ -+ " -ltsan " \ -+ " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ -+ " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ - STATIC_LIBTSAN_LIBS - #else - #define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS ---- a/gcc/config/gnu-user.h -+++ b/gcc/config/gnu-user.h -@@ -124,13 +124,13 @@ - #define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \ - "%{static-libasan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}" -+ LD_DYNAMIC_OPTION "}}%{!static-libasan:%{!fuse-ld=gold:--push-state} --no-as-needed -lasan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #undef LIBTSAN_EARLY_SPEC - #define LIBTSAN_EARLY_SPEC "%{static-libtsan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}" -+ LD_DYNAMIC_OPTION "}}%{!static-libtsan:%{!fuse-ld=gold:--push-state} --no-as-needed -ltsan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #undef LIBLSAN_EARLY_SPEC - #define LIBLSAN_EARLY_SPEC "%{static-liblsan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan}" -+ LD_DYNAMIC_OPTION "}}%{!static-liblsan:%{!fuse-ld=gold:--push-state} --no-as-needed -llsan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #endif -Index: b/gcc/config/aarch64/aarch64-linux.h -=================================================================== ---- a/gcc/config/aarch64/aarch64-linux.h -+++ b/gcc/config/aarch64/aarch64-linux.h -@@ -36,5 +36,6 @@ - - #define LINUX_TARGET_LINK_SPEC "%{h*} \ -+ --as-needed \ - %{static:-Bstatic} \ - %{shared:-shared} \ - %{symbolic:-Bsymbolic} \ -Index: b/gcc/config/ia64/linux.h -=================================================================== ---- a/gcc/config/ia64/linux.h -+++ b/gcc/config/ia64/linux.h -@@ -58,7 +58,7 @@ do { \ - #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" - - #undef LINK_SPEC --#define LINK_SPEC "\ -+#define LINK_SPEC " --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/sparc/linux.h -=================================================================== ---- a/gcc/config/sparc/linux.h -+++ b/gcc/config/sparc/linux.h -@@ -86,7 +86,7 @@ extern const char *host_detect_local_cpu - #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" - - #undef LINK_SPEC --#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \ -+#define LINK_SPEC "-m elf32_sparc --as-needed %{shared:-shared} \ - %{!mno-relax:%{!r:-relax}} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/s390/linux.h -=================================================================== ---- a/gcc/config/s390/linux.h -+++ b/gcc/config/s390/linux.h -@@ -65,7 +65,7 @@ along with GCC; see the file COPYING3. - - #undef LINK_SPEC - #define LINK_SPEC \ -- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \ -+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{static:-static} \ -Index: b/gcc/config/rs6000/linux64.h -=================================================================== ---- a/gcc/config/rs6000/linux64.h -+++ b/gcc/config/rs6000/linux64.h -@@ -466,12 +466,12 @@ extern int dot_symbols; - " -m elf64ppc") - #endif - --#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \ - %(link_os_extra_spec32)" - --#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \ - %(link_os_extra_spec64)" -Index: b/gcc/config/rs6000/sysv4.h -=================================================================== ---- a/gcc/config/rs6000/sysv4.h -+++ b/gcc/config/rs6000/sysv4.h -@@ -784,7 +784,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF - CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \ - MUSL_DYNAMIC_LINKER) - --#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" - -Index: b/gcc/config/i386/gnu-user64.h -=================================================================== ---- a/gcc/config/i386/gnu-user64.h -+++ b/gcc/config/i386/gnu-user64.h -@@ -57,5 +57,6 @@ see the files COPYING3 and COPYING.RUNTI - %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \ - %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \ -+ --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/i386/gnu-user.h -=================================================================== ---- a/gcc/config/i386/gnu-user.h -+++ b/gcc/config/i386/gnu-user.h -@@ -74,7 +74,7 @@ along with GCC; see the file COPYING3. - { "link_emulation", GNU_USER_LINK_EMULATION },\ - { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } - --#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ -+#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --as-needed %{shared:-shared} \ - %{!shared: \ - %{!static: \ - %{rdynamic:-export-dynamic} \ -Index: b/gcc/config/alpha/linux-elf.h -=================================================================== ---- a/gcc/config/alpha/linux-elf.h -+++ b/gcc/config/alpha/linux-elf.h -@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. - - #define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER - --#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ -+#define LINK_SPEC "-m elf64alpha --as-needed %{G*} %{relax:-relax} \ - %{O*:-O3} %{!O*:-O1} \ - %{shared:-shared} \ - %{!shared: \ -Index: b/gcc/config/arm/linux-elf.h -=================================================================== ---- a/gcc/config/arm/linux-elf.h -+++ b/gcc/config/arm/linux-elf.h -@@ -73,5 +73,6 @@ - %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \ - -X \ -+ --as-needed \ - %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ - SUBTARGET_EXTRA_LINK_SPEC - -Index: b/gcc/config/mips/gnu-user.h -=================================================================== ---- a/gcc/config/mips/gnu-user.h -+++ b/gcc/config/mips/gnu-user.h -@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. - #undef GNU_USER_TARGET_LINK_SPEC - #define GNU_USER_TARGET_LINK_SPEC "\ - %{G*} %{EB} %{EL} %{mips*} %{shared} \ -+ -as-needed \ - %{!shared: \ - %{!static: \ - %{rdynamic:-export-dynamic} \ -Index: b/libjava/Makefile.am -=================================================================== ---- a/libjava/Makefile.am -+++ b/libjava/Makefile.am -@@ -627,14 +631,14 @@ - rm .libs/libgcj_bc.so; \ - mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm .libs/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 - - ## This rule creates the libgcj_bc library that is actually installed. - install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp) - $(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \ -- $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -+ $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -Wl,--no-as-needed -lgcj - - ## Note that property_files is defined in sources.am. - propertyo_files = $(patsubst classpath/resource/%,%,$(addsuffix .lo,$(property_files))) -@@ -762,7 +766,7 @@ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la; - -Index: b/libjava/Makefile.in -=================================================================== ---- a/libjava/Makefile.in -+++ b/libjava/Makefile.in -@@ -10644,13 +10648,13 @@ - rm .libs/libgcj_bc.so; \ - mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm .libs/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 - - install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp) - $(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \ -- $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -+ $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -Wl,--no-as-needed -lgcj - - $(propertyo_files): %.lo: classpath/resource/% - $(mkinstalldirs) `dirname $@`; \ -@@ -12494,7 +12498,7 @@ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - @USE_LIBGCJ_BC_TRUE@ mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - @USE_LIBGCJ_BC_TRUE@ $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ --@USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+@USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - @USE_LIBGCJ_BC_TRUE@ $(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la; - diff --git a/aports/cross/gcc-aarch64/011_all_default-warn-format-security.patch b/aports/cross/gcc-aarch64/011_all_default-warn-format-security.patch deleted file mode 100644 index a58383a8..00000000 --- a/aports/cross/gcc-aarch64/011_all_default-warn-format-security.patch +++ /dev/null @@ -1,43 +0,0 @@ -Enable -Wformat and -Wformat-security by default. - - ---- a/gcc/c-family/c.opt -+++ b/gcc/c-family/c.opt -@@ -412,7 +412,7 @@ C ObjC C++ ObjC++ Var(warn_format_nonliteral) Warning LangEnabledBy(C ObjC C++ O - Warn about format strings that are not literals - - Wformat-security --C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) -+C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) - Warn about possible security problems with format functions - - Wformat-y2k -@@ -424,7 +424,7 @@ C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy(C ObjC C++ - Warn about zero-length formats - - Wformat= --C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) -+C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) - Warn about printf/scanf/strftime/strfmon format string anomalies - - Wignored-qualifiers ---- a/gcc/doc/gcc.info -+++ b/gcc/doc/gcc.info -@@ -3451,6 +3451,8 @@ compiler warns that an unrecognized option is present. - '-Wno-format-contains-nul', '-Wno-format-extra-args', and - '-Wno-format-zero-length'. '-Wformat' is enabled by '-Wall'. - -+ This option is enabled by default in Alpine Linux. -+ - '-Wno-format-contains-nul' - If '-Wformat' is specified, do not warn about format strings - that contain NUL bytes. -@@ -3496,6 +3498,8 @@ compiler warns that an unrecognized option is present. - future warnings may be added to '-Wformat-security' that are - not included in '-Wformat-nonliteral'.) - -+ This option is enabled by default in Alpine Linux. -+ - '-Wformat-y2k' - If '-Wformat' is specified, also warn about 'strftime' formats - that may yield only a two-digit year. diff --git a/aports/cross/gcc-aarch64/012_all_default-warn-trampolines.patch b/aports/cross/gcc-aarch64/012_all_default-warn-trampolines.patch deleted file mode 100644 index 9ab4378d..00000000 --- a/aports/cross/gcc-aarch64/012_all_default-warn-trampolines.patch +++ /dev/null @@ -1,25 +0,0 @@ -Enable -Wtrampolines by default. - - ---- a/gcc/common.opt -+++ b/gcc/common.opt -@@ -648,7 +648,7 @@ Common Var(warn_system_headers) Warning - Do not suppress warnings from system headers - - Wtrampolines --Common Var(warn_trampolines) Warning -+Common Var(warn_trampolines) Init(1) Warning - Warn whenever a trampoline is generated - - Wtype-limits ---- a/gcc/doc/gcc.info -+++ b/gcc/doc/gcc.info -@@ -4021,6 +4021,8 @@ compiler warns that an unrecognized option is present. - and thus requires the stack to be made executable in order for the - program to work properly. - -+ This warning is enabled by default in Gentoo. -+ - '-Wfloat-equal' - Warn if floating-point values are used in equality comparisons. - diff --git a/aports/cross/gcc-aarch64/020_all_msgfmt-libstdc++-link.patch b/aports/cross/gcc-aarch64/020_all_msgfmt-libstdc++-link.patch deleted file mode 100644 index a70ea50a..00000000 --- a/aports/cross/gcc-aarch64/020_all_msgfmt-libstdc++-link.patch +++ /dev/null @@ -1,39 +0,0 @@ -Ensure that msgfmt doesn't encounter problems during gcc bootstrapping. - -Solves error messages like the following: - -msgfmt: /var/tmp/portage/sys-devel/gcc-4.1.2/work/build/./gcc/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libstdc++.so.6) - -The libgcc_s.so used during build doesn't satisfy the needs of the -libstdc++.so that msgfmt is linked against. On the other hand, msgfmt -is used as a stand-alone application here, and what library it uses -behind the scenes is of no concern to the gcc build process. -Therefore, simply invoking it "as usual", i.e. without any special -library path, will make it work as expected here. - -2011-09-19 Martin von Gagern - -References: -https://bugs.gentoo.org/372377 -https://bugs.gentoo.org/295480 - ---- gcc-4.1.2.orig/libstdc++-v3/po/Makefile.am -+++ gcc-4.1.2/libstdc++-v3/po/Makefile.am -@@ -39,6 +39,7 @@ MSGFMT = msgfmt - EXTRA_DIST = string_literals.cc POTFILES.in $(PACKAGE).pot $(LOCALE_IN) - - .po.mo: -+ env --unset=LD_LIBRARY_PATH \ - $(MSGFMT) -o $@ $< - - all-local: all-local-$(USE_NLS) ---- gcc-4.1.2.orig/libstdc++-v3/po/Makefile.in -+++ gcc-4.1.2/libstdc++-v3/po/Makefile.in -@@ -419,6 +419,7 @@ uninstall-am: uninstall-info-am - - - .po.mo: -+ env --unset=LD_LIBRARY_PATH \ - $(MSGFMT) -o $@ $< - - all-local: all-local-$(USE_NLS) diff --git a/aports/cross/gcc-aarch64/050_all_libiberty-asprintf.patch b/aports/cross/gcc-aarch64/050_all_libiberty-asprintf.patch deleted file mode 100644 index bee0c4c2..00000000 --- a/aports/cross/gcc-aarch64/050_all_libiberty-asprintf.patch +++ /dev/null @@ -1,18 +0,0 @@ -2008-07-25 Magnus Granberg - - * include/libiberty.h (asprintf): Don't declare if defined as a macro - ---- a/include/libiberty.h -+++ b/include/libiberty.h -@@ -609,8 +609,11 @@ extern int pwait (int, int *, int); - /* Like sprintf but provides a pointer to malloc'd storage, which must - be freed by the caller. */ - -+/* asprintf may be declared as a macro by glibc with __USE_FORTIFY_LEVEL. */ -+#ifndef asprintf - extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; - #endif -+#endif - - #if !HAVE_DECL_VASPRINTF - /* Like vsprintf but provides a pointer to malloc'd storage, which diff --git a/aports/cross/gcc-aarch64/051_all_libiberty-pic.patch b/aports/cross/gcc-aarch64/051_all_libiberty-pic.patch deleted file mode 100644 index b6160a73..00000000 --- a/aports/cross/gcc-aarch64/051_all_libiberty-pic.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/libiberty/Makefile.in -+++ b/libiberty/Makefile.in -@@ -246,6 +246,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) - $(AR) $(AR_FLAGS) $(TARGETLIB) \ - $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \ - $(RANLIB) $(TARGETLIB); \ -+ cp $(TARGETLIB) ../ ; \ - cd ..; \ - else true; fi - diff --git a/aports/cross/gcc-aarch64/053_all_libitm-no-fortify-source.patch b/aports/cross/gcc-aarch64/053_all_libitm-no-fortify-source.patch deleted file mode 100644 index 5ab15afc..00000000 --- a/aports/cross/gcc-aarch64/053_all_libitm-no-fortify-source.patch +++ /dev/null @@ -1,27 +0,0 @@ -https://bugs.gentoo.org/508852 -https://gcc.gnu.org/PR61164 - -2014-04-27 Magnus Granberg - - #508852 - * libitm/configure.tgt: Disable FORTIFY - ---- a/libitm/configure.tgt -+++ b/libitm/configure.tgt -@@ -43,6 +43,16 @@ if test "$gcc_cv_have_tls" = yes ; then - esac - fi - -+# FIXME: error: inlining failed in call to always_inline -+# ‘int vfprintf(FILE*, const char*, __va_list_tag*)’ -+# : function body can be overwritten at link time -+# Disable Fortify in libitm for now. #508852 -+case "${target}" in -+ *-*-linux*) -+ XCFLAGS="${XCFLAGS} -U_FORTIFY_SOURCE" -+ ;; -+esac -+ - # Map the target cpu to an ARCH sub-directory. At the same time, - # work out any special compilation flags as necessary. - case "${target_cpu}" in diff --git a/aports/cross/gcc-aarch64/067_all_gcc-poison-system-directories.patch b/aports/cross/gcc-aarch64/067_all_gcc-poison-system-directories.patch deleted file mode 100644 index 10367161..00000000 --- a/aports/cross/gcc-aarch64/067_all_gcc-poison-system-directories.patch +++ /dev/null @@ -1,194 +0,0 @@ -http://cgit.openembedded.org/openembedded-core/plain/meta/recipes-devtools/gcc/gcc-6.1/0010-gcc-poison-system-directories.patch - -From d76250323dad69212c958e4857a98d99ab51a39e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Fri, 29 Mar 2013 08:59:00 +0400 -Subject: [PATCH 10/46] gcc: poison-system-directories - -Signed-off-by: Khem Raj - -Upstream-Status: Inappropriate [distribution: codesourcery] ---- - gcc/common.opt | 4 ++++ - gcc/config.in | 6 ++++++ - gcc/configure | 16 ++++++++++++++++ - gcc/configure.ac | 10 ++++++++++ - gcc/doc/invoke.texi | 9 +++++++++ - gcc/gcc.c | 2 ++ - gcc/incpath.c | 19 +++++++++++++++++++ - 7 files changed, 66 insertions(+) - -diff --git a/gcc/common.opt b/gcc/common.opt -index 67048db..733185c 100644 ---- a/gcc/common.opt -+++ b/gcc/common.opt -@@ -659,6 +659,10 @@ Wreturn-local-addr - Common Var(warn_return_local_addr) Init(1) Warning - Warn about returning a pointer/reference to a local or temporary variable. - -+Wpoison-system-directories -+Common Var(flag_poison_system_directories) Init(1) Warning -+Warn for -I and -L options using system directories if cross compiling -+ - Wshadow - Common Var(warn_shadow) Warning - Warn when one local variable shadows another. -diff --git a/gcc/config.in b/gcc/config.in -index 115cb61..105b30f 100644 ---- a/gcc/config.in -+++ b/gcc/config.in -@@ -187,6 +187,12 @@ - #endif - - -+/* Define to warn for use of native system header directories */ -+#ifndef USED_FOR_TARGET -+#undef ENABLE_POISON_SYSTEM_DIRECTORIES -+#endif -+ -+ - /* Define if you want all operations on RTL (the basic data structure of the - optimizer and back end) to be checked for dynamic type safety at runtime. - This is quite expensive. */ -diff --git a/gcc/configure b/gcc/configure -index 1c6e340..8f83152 100755 ---- a/gcc/configure -+++ b/gcc/configure -@@ -942,6 +942,7 @@ with_system_zlib - enable_maintainer_mode - enable_link_mutex - enable_version_specific_runtime_libs -+enable_poison_system_directories - enable_plugin - enable_host_shared - enable_libquadmath_support -@@ -1681,6 +1682,8 @@ Optional Features: - --enable-version-specific-runtime-libs - specify that runtime libraries should be installed - in a compiler-specific directory -+ --enable-poison-system-directories -+ warn for use of native system header directories - --enable-plugin enable plugin support - --enable-host-shared build host code as shared libraries - --disable-libquadmath-support -@@ -28908,6 +28911,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then : - fi - - -+# Check whether --enable-poison-system-directories was given. -+if test "${enable_poison_system_directories+set}" = set; then : -+ enableval=$enable_poison_system_directories; -+else -+ enable_poison_system_directories=no -+fi -+ -+if test "x${enable_poison_system_directories}" = "xyes"; then -+ -+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h -+ -+fi -+ - # Substitute configuration variables - - -diff --git a/gcc/configure.ac b/gcc/configure.ac -index 6c1dcd9..0fccaef 100644 ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -5861,6 +5861,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs, - [specify that runtime libraries should be - installed in a compiler-specific directory])]) - -+AC_ARG_ENABLE([poison-system-directories], -+ AS_HELP_STRING([--enable-poison-system-directories], -+ [warn for use of native system header directories]),, -+ [enable_poison_system_directories=no]) -+if test "x${enable_poison_system_directories}" = "xyes"; then -+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], -+ [1], -+ [Define to warn for use of native system header directories]) -+fi -+ - # Substitute configuration variables - AC_SUBST(subdirs) - AC_SUBST(srcdir) -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 821f8fd..8bb49e7 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -284,6 +284,7 @@ Objective-C and Objective-C++ Dialects}. - -Wparentheses -Wno-pedantic-ms-format @gol - -Wplacement-new -Wplacement-new=@var{n} @gol - -Wpointer-arith -Wno-pointer-to-int-cast @gol -+-Wno-poison-system-directories @gol - -Wno-pragmas -Wredundant-decls -Wno-return-local-addr @gol - -Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar @gol - -Wshift-overflow -Wshift-overflow=@var{n} @gol -@@ -4723,6 +4724,14 @@ made up of data only and thus requires no special treatment. But, for - most targets, it is made up of code and thus requires the stack to be - made executable in order for the program to work properly. - -+@item -Wno-poison-system-directories -+@opindex Wno-poison-system-directories -+Do not warn for @option{-I} or @option{-L} options using system -+directories such as @file{/usr/include} when cross compiling. This -+option is intended for use in chroot environments when such -+directories contain the correct headers and libraries for the target -+system rather than the host. -+ - @item -Wfloat-equal - @opindex Wfloat-equal - @opindex Wno-float-equal -diff --git a/gcc/gcc.c b/gcc/gcc.c -index 1af5920..4cfef7f 100644 ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -1017,6 +1017,8 @@ proper position among the other output files. */ - "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \ - "%X %{o*} %{e*} %{N} %{n} %{r}\ - %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \ -+ %{Wno-poison-system-directories:--no-poison-system-directories} \ -+ %{Werror=poison-system-directories:--error-poison-system-directories} \ - %{static:} %{L*} %(mfwrap) %(link_libgcc) " \ - VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \ - %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\ -diff --git a/gcc/incpath.c b/gcc/incpath.c -index ea40f4a..856da41 100644 ---- a/gcc/incpath.c -+++ b/gcc/incpath.c -@@ -26,6 +26,7 @@ - #include "intl.h" - #include "incpath.h" - #include "cppdefault.h" -+#include "diagnostic-core.h" - - /* Microsoft Windows does not natively support inodes. - VMS has non-numeric inodes. */ -@@ -381,6 +382,24 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose) - } - fprintf (stderr, _("End of search list.\n")); - } -+ -+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES -+ if (flag_poison_system_directories) -+ { -+ struct cpp_dir *p; -+ -+ for (p = heads[QUOTE]; p; p = p->next) -+ { -+ if ((!strncmp (p->name, "/usr/include", 12)) -+ || (!strncmp (p->name, "/usr/local/include", 18)) -+ || (!strncmp (p->name, "/usr/X11R6/include", 18))) -+ warning (OPT_Wpoison_system_directories, -+ "include location \"%s\" is unsafe for " -+ "cross-compilation", -+ p->name); -+ } -+ } -+#endif - } - - /* Use given -I paths for #include "..." but not #include <...>, and --- -2.8.2 - diff --git a/aports/cross/gcc-aarch64/090_all_pr55930-dependency-tracking.patch b/aports/cross/gcc-aarch64/090_all_pr55930-dependency-tracking.patch deleted file mode 100644 index a8743e08..00000000 --- a/aports/cross/gcc-aarch64/090_all_pr55930-dependency-tracking.patch +++ /dev/null @@ -1,18 +0,0 @@ -libatomic build failure if configured with --disable-dependency-tracking -load_n.c:115:1: fatal error: opening dependency file .deps/load_1_.lo.Ppo: No such file or directory - -https://bugs.gentoo.org/463463 -http://gcc.gnu.org/PR55930 - ---- a/libatomic/Makefile.in -+++ b/libatomic/Makefile.in -@@ -298,7 +298,8 @@ PAT_N = $(word 2,$(PAT_SPLIT)) - PAT_S = $(word 3,$(PAT_SPLIT)) - IFUNC_DEF = -DIFUNC_ALT=$(PAT_S) - IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS)) --M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo -+@AMDEP_TRUE@M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo -+@AMDEP_FALSE@M_DEPS = - M_SIZE = -DN=$(PAT_N) - M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT)) - M_FILE = $(PAT_BASE)_n.c diff --git a/aports/cross/gcc-aarch64/201-cilkrts.patch b/aports/cross/gcc-aarch64/201-cilkrts.patch deleted file mode 100644 index 4aac10d6..00000000 --- a/aports/cross/gcc-aarch64/201-cilkrts.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 594e3c1ab576daddeb86015efc8b1677020b1878 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 24 Oct 2015 20:39:30 +0000 -Subject: [PATCH 1/6] cilkrts - ---- - libcilkrts/runtime/os-unix.c | 22 +++++++--------------- - 1 file changed, 7 insertions(+), 15 deletions(-) - -diff --git a/libcilkrts/runtime/os-unix.c b/libcilkrts/runtime/os-unix.c -index cb582dd..e43d7d5 100644 ---- a/libcilkrts/runtime/os-unix.c -+++ b/libcilkrts/runtime/os-unix.c -@@ -51,6 +51,7 @@ - #if defined __linux__ - # include - # include -+# include - #elif defined __APPLE__ - # include - // Uses sysconf(_SC_NPROCESSORS_ONLN) in verbose output -@@ -400,28 +401,19 @@ COMMON_SYSDEP void __cilkrts_sleep(void) - - COMMON_SYSDEP void __cilkrts_yield(void) - { --#if __APPLE__ || __FreeBSD__ || __VXWORKS__ -- // On MacOS, call sched_yield to yield quantum. I'm not sure why we -- // don't do this on Linux also. -- sched_yield(); --#elif defined(__DragonFly__) -- // On DragonFly BSD, call sched_yield to yield quantum. -- sched_yield(); --#elif defined(__MIC__) -+#if defined(__MIC__) - // On MIC, pthread_yield() really trashes things. Arch's measurements - // showed that calling _mm_delay_32() (or doing nothing) was a better - // option. Delaying 1024 clock cycles is a reasonable compromise between - // giving up the processor and latency starting up when work becomes - // available - _mm_delay_32(1024); --#elif defined(__ANDROID__) || (defined(__sun__) && defined(__svr4__)) -- // On Android and Solaris, call sched_yield to yield quantum. I'm not -- // sure why we don't do this on Linux also. -- sched_yield(); --#else -- // On Linux, call pthread_yield (which in turn will call sched_yield) -- // to yield quantum. -+#elif defined(__sun__) && !defined(__svr4__) -+ // On old SunOS call pthread_yield to yield a quantum. - pthread_yield(); -+#else -+ // On other platforms call sched_yield to yield a quantum. -+ sched_yield(); - #endif - } - --- -2.8.1 - diff --git a/aports/cross/gcc-aarch64/203-libgcc_s.patch b/aports/cross/gcc-aarch64/203-libgcc_s.patch deleted file mode 100644 index c74351c7..00000000 --- a/aports/cross/gcc-aarch64/203-libgcc_s.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 9e3eab51e518018d9d99b3123598b1e2322a6af3 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 24 Oct 2015 20:09:53 +0000 -Subject: [PATCH 3/6] libgcc_s - ---- - gcc/config/i386/i386.c | 4 ++-- - libgcc/config/i386/cpuinfo.c | 6 +++--- - libgcc/config/i386/t-linux | 2 +- - 3 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 3d044e8..82523e1 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -40269,10 +40269,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, - { - case IX86_BUILTIN_CPU_INIT: - { -- /* Make it call __cpu_indicator_init in libgcc. */ -+ /* Make it call __cpu_indicator_init_local in libgcc.a. */ - tree call_expr, fndecl, type; - type = build_function_type_list (integer_type_node, NULL_TREE); -- fndecl = build_fn_decl ("__cpu_indicator_init", type); -+ fndecl = build_fn_decl ("__cpu_indicator_init_local", type); - call_expr = build_call_expr (fndecl, 0); - return expand_expr (call_expr, target, mode, EXPAND_NORMAL); - } -diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c -index 8c2248d..6c82f15 100644 ---- a/libgcc/config/i386/cpuinfo.c -+++ b/libgcc/config/i386/cpuinfo.c -@@ -485,7 +485,7 @@ __cpu_indicator_init (void) - return 0; - } - --#if defined SHARED && defined USE_ELF_SYMVER --__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0"); --__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0"); -+#ifndef SHARED -+int __cpu_indicator_init_local (void) -+ __attribute__ ((weak, alias ("__cpu_indicator_init"))); - #endif -diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux -index 11bb46e..4f47f7b 100644 ---- a/libgcc/config/i386/t-linux -+++ b/libgcc/config/i386/t-linux -@@ -3,4 +3,4 @@ - # t-slibgcc-elf-ver and t-linux - SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver - --HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER -+HOST_LIBGCC2_CFLAGS += -mlong-double-80 --- -2.8.1 - diff --git a/aports/cross/gcc-aarch64/204-linux_libc_has_function.patch b/aports/cross/gcc-aarch64/204-linux_libc_has_function.patch deleted file mode 100644 index 2dcedc3a..00000000 --- a/aports/cross/gcc-aarch64/204-linux_libc_has_function.patch +++ /dev/null @@ -1,25 +0,0 @@ -From edec78452d693fb524daa9a6efd45c850b27b25c Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Fri, 6 Nov 2015 23:59:20 +0000 -Subject: [PATCH 4/6] linux_libc_has_function - ---- - gcc/config/linux.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gcc/config/linux.c b/gcc/config/linux.c -index 250296b..16c3768 100644 ---- a/gcc/config/linux.c -+++ b/gcc/config/linux.c -@@ -26,7 +26,7 @@ along with GCC; see the file COPYING3. If not see - bool - linux_libc_has_function (enum function_class fn_class) - { -- if (OPTION_GLIBC) -+ if (OPTION_GLIBC || OPTION_MUSL) - return true; - if (OPTION_BIONIC) - if (fn_class == function_c94 --- -2.8.1 - diff --git a/aports/cross/gcc-aarch64/205-nopie.patch b/aports/cross/gcc-aarch64/205-nopie.patch deleted file mode 100644 index e3da94d1..00000000 --- a/aports/cross/gcc-aarch64/205-nopie.patch +++ /dev/null @@ -1,75 +0,0 @@ -From b6015aca9c9cc83739fd0ed637a835119b2c4e34 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 7 Nov 2015 02:08:05 +0000 -Subject: [PATCH 5/6] nopie - ---- - gcc/configure | 27 +++++++++++++++++++++++++++ - gcc/configure.ac | 13 +++++++++++++ - 2 files changed, 40 insertions(+) - -diff --git a/gcc/configure b/gcc/configure -index 1c6e340..7e8b5d6 100755 ---- a/gcc/configure -+++ b/gcc/configure -@@ -29390,6 +29390,33 @@ fi - $as_echo "$gcc_cv_no_pie" >&6; } - if test "$gcc_cv_no_pie" = "yes"; then - NO_PIE_FLAG="-no-pie" -+else -+ # Check if -nopie works. -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -nopie option" >&5 -+$as_echo_n "checking for -nopie option... " >&6; } -+if test "${gcc_cv_nopie+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ saved_LDFLAGS="$LDFLAGS" -+ LDFLAGS="$LDFLAGS -nopie" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+int main(void) {return 0;} -+_ACEOF -+if ac_fn_cxx_try_link "$LINENO"; then : -+ gcc_cv_nopie=yes -+else -+ gcc_cv_nopie=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+ LDFLAGS="$saved_LDFLAGS" -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_nopie" >&5 -+$as_echo "$gcc_cv_nopie" >&6; } -+ if test "$gcc_cv_nopie" = "yes"; then -+ NO_PIE_FLAG="-nopie" -+ fi - fi - - -diff --git a/gcc/configure.ac b/gcc/configure.ac -index 6c1dcd9..0ca7647 100644 ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -6098,6 +6098,19 @@ AC_CACHE_CHECK([for -no-pie option], - LDFLAGS="$saved_LDFLAGS"]) - if test "$gcc_cv_no_pie" = "yes"; then - NO_PIE_FLAG="-no-pie" -+else -+ # Check if -nopie works. -+ AC_CACHE_CHECK([for -nopie option], -+ [gcc_cv_nopie], -+ [saved_LDFLAGS="$LDFLAGS" -+ LDFLAGS="$LDFLAGS -nopie" -+ AC_LINK_IFELSE([int main(void) {return 0;}], -+ [gcc_cv_nopie=yes], -+ [gcc_cv_nopie=no]) -+ LDFLAGS="$saved_LDFLAGS"]) -+ if test "$gcc_cv_nopie" = "yes"; then -+ NO_PIE_FLAG="-nopie" -+ fi - fi - AC_SUBST([NO_PIE_FLAG]) - --- -2.8.1 - diff --git a/aports/cross/gcc-aarch64/207-static-pie.patch b/aports/cross/gcc-aarch64/207-static-pie.patch deleted file mode 100644 index 9355c584..00000000 --- a/aports/cross/gcc-aarch64/207-static-pie.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h -index b0bf40a..d4b56fe 100644 ---- a/gcc/config/gnu-user.h -+++ b/gcc/config/gnu-user.h -@@ -51,10 +51,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - #if defined HAVE_LD_PIE - #define GNU_USER_TARGET_STARTFILE_SPEC \ - "%{!shared: %{pg|p|profile:gcrt1.o%s;: \ -- %{" PIE_SPEC ":Scrt1.o%s} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -- crti.o%s %{static:crtbeginT.o%s;: %{shared:crtbeginS.o%s} \ -+ %{" PIE_SPEC ":%{static:rcrt1.o%s;:Scrt1.o%s}} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -+ crti.o%s %{shared:crtbeginS.o%s;: \ - %{" PIE_SPEC ":crtbeginS.o%s} \ -- %{" NO_PIE_SPEC ":crtbegin.o%s}} \ -+ %{" NO_PIE_SPEC ":%{static:crtbeginT.o%s;:crtbegin.o%s}}} \ - %{fvtable-verify=none:%s; \ - fvtable-verify=preinit:vtv_start_preinit.o%s; \ - fvtable-verify=std:vtv_start.o%s} \ -diff --git a/gcc/gcc.c b/gcc/gcc.c -index 0208d61..731564e 100644 ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -870,7 +870,7 @@ proper position among the other output files. */ - #endif - - #ifdef ENABLE_DEFAULT_PIE --#define NO_PIE_SPEC "no-pie|static" -+#define NO_PIE_SPEC "no-pie" - #define PIE_SPEC NO_PIE_SPEC "|r|shared:;" - #define NO_FPIE1_SPEC "fno-pie" - #define FPIE1_SPEC NO_FPIE1_SPEC ":;" -@@ -916,7 +916,7 @@ proper position among the other output files. */ - #ifndef LINK_PIE_SPEC - #ifdef HAVE_LD_PIE - #ifndef LD_PIE_SPEC --#define LD_PIE_SPEC "-pie" -+#define LD_PIE_SPEC "-pie %{static:--no-dynamic-linker -Bsymbolic}" - #endif - #else - #define LD_PIE_SPEC "" diff --git a/aports/cross/gcc-aarch64/300-main-gcc-add-musl-s390x-dynamic-linker.patch b/aports/cross/gcc-aarch64/300-main-gcc-add-musl-s390x-dynamic-linker.patch deleted file mode 100644 index 24195787..00000000 --- a/aports/cross/gcc-aarch64/300-main-gcc-add-musl-s390x-dynamic-linker.patch +++ /dev/null @@ -1,32 +0,0 @@ -From be841c16dd544553c67faac79bd4cc3cd10a1dc0 Mon Sep 17 00:00:00 2001 -From: "Tuan M. Hoang" -Date: Mon, 21 Nov 2016 01:42:16 +0700 -Subject: [PATCH] main/gcc: add musl s390x dynamic linker - ---- - gcc/config/s390/linux.h | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h -index 1e3ed35..a244214 100644 ---- a/gcc/config/s390/linux.h -+++ b/gcc/config/s390/linux.h -@@ -63,6 +63,15 @@ along with GCC; see the file COPYING3. If not see - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1" - #define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1" - -+#undef MUSL_DYNAMIC_LINKER -+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKER32 -+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKER64 -+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKERX32 -+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-s390x.so.1" -+ - #undef LINK_SPEC - #define LINK_SPEC \ - "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \ --- -2.10.2 - diff --git a/aports/cross/gcc-aarch64/310-build-gcj-s390x.patch b/aports/cross/gcc-aarch64/310-build-gcj-s390x.patch deleted file mode 100644 index 1e522ee1..00000000 --- a/aports/cross/gcc-aarch64/310-build-gcj-s390x.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 697a7ba791fce2ffab2ed723d909a89684019e3d Mon Sep 17 00:00:00 2001 -From: "Tuan M. Hoang" -Date: Sun, 19 Feb 2017 17:03:33 +0000 -Subject: [PATCH] main/gcc : when building gcc-java on s390x, libgcj.so - complains about undefined reference to __data_start. Using - SEARCH_FOR_DATA_START instead solved it. Credit to Andrew Haley at RedHat. - ---- - boehm-gc/include/private/gcconfig.h | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h -index 4ca6a80..a15fff6 100644 ---- a/boehm-gc/include/private/gcconfig.h -+++ b/boehm-gc/include/private/gcconfig.h -@@ -1837,8 +1837,7 @@ - # define OS_TYPE "LINUX" - # define LINUX_STACKBOTTOM - # define DYNAMIC_LOADING -- extern int __data_start[]; --# define DATASTART ((ptr_t)(__data_start)) -+# define SEARCH_FOR_DATA_START - extern int _end[]; - # define DATAEND (_end) - # define CACHE_LINE_SIZE 256 --- -2.11.1 - diff --git a/aports/cross/gcc-aarch64/320-libffi-gnulinux.patch b/aports/cross/gcc-aarch64/320-libffi-gnulinux.patch deleted file mode 100644 index b3b4fc93..00000000 --- a/aports/cross/gcc-aarch64/320-libffi-gnulinux.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/libffi/closures.c.orig b/libffi/closures.c -index 721ff00..22a699c 100644 ---- a/libffi/src/closures.c.orig -+++ b/libffi/src/closures.c -@@ -34,7 +34,7 @@ - #include - - #if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE --# if __gnu_linux__ && !defined(__ANDROID__) -+# if __linux__ && !defined(__ANDROID__) - /* This macro indicates it may be forbidden to map anonymous memory - with both write and execute permission. Code compiled when this - option is defined will attempt to map such pages once, but if it diff --git a/aports/cross/gcc-aarch64/APKBUILD b/aports/cross/gcc-aarch64/APKBUILD deleted file mode 100644 index 13cdb07b..00000000 --- a/aports/cross/gcc-aarch64/APKBUILD +++ /dev/null @@ -1,717 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen gcc-aarch64 -# Based on: main/gcc - -CTARGET_ARCH=aarch64 -CTARGET="$(arch_to_hostspec ${CTARGET_ARCH})" -LANG_OBJC=false -LANG_JAVA=false -LANG_GO=false -LANG_FORTRAN=false -LANG_ADA=false -options="!strip !tracedeps" - -# abuild doesn't try to tries to install "build-base-$CTARGET_ARCH" -# when this variable matches "no*" -BOOTSTRAP="nobuildbase" - -# abuild will only cross compile when this variable is set, but it -# needs to find a valid package database in there for dependency -# resolving, so we set it to /. -CBUILDROOT="/" - -_cross_configure="--disable-bootstrap --with-sysroot=/usr/$CTARGET" - -pkgname="gcc-aarch64" -pkgver=6.4.0 -[ "$BOOTSTRAP" = "nolibc" ] && pkgname="gcc-pass2" -[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" -[ "$CHOST" != "$CTARGET" ] && _target="-$CTARGET_ARCH" || _target="" - -pkgname="gcc-aarch64" -pkgrel=8 -pkgdesc="Stage2 cross-compiler for aarch64" -url="http://gcc.gnu.org" -arch="armhf x86_64 x86" -license="GPL LGPL" -_gccrel=$pkgver-r$pkgrel -depends="isl binutils-aarch64" -makedepends_build="gcc g++ paxmark bison flex texinfo gawk zip gmp-dev mpfr-dev mpc1-dev zlib-dev" -makedepends_host="linux-headers gmp-dev mpfr-dev mpc1-dev isl-dev zlib-dev musl-dev-aarch64 binutils-aarch64" -subpackages="g++-aarch64:gpp" -[ "$CHOST" = "$CTARGET" ] && subpackages="gcc-doc$_target" -replaces="libstdc++ binutils" - -: ${LANG_CXX:=true} -: ${LANG_OBJC:=true} -: ${LANG_JAVA:=true} -: ${LANG_GO:=true} -: ${LANG_FORTRAN:=true} -: ${LANG_ADA:=true} - -LIBGOMP="false" -LIBGCC="false" -LIBATOMIC="false" -LIBITM="false" - -if [ "$CHOST" != "$CTARGET" ]; then - if [ "$BOOTSTRAP" = nolibc ]; then - LANG_CXX=false - LANG_ADA=false - LIBGCC=false - _builddir="$srcdir/build-cross-pass2" - else - _builddir="$srcdir/build-cross-final" - fi - LANG_OBJC=false - LANG_JAVA=false - LANG_GO=false - LANG_FORTRAN=false - LIBGOMP=false - LIBATOMIC=false - LIBITM=false - - # reset target flags (should be set in crosscreate abuild) - # fixup flags. seems gcc treats CPPFLAGS as global without - # _FOR_xxx variants. wrap it in CFLAGS and CXXFLAGS. - export CFLAGS="$CPPFLAGS $CFLAGS" - export CXXFLAGS="$CPPFLAGS $CXXFLAGS" - unset CPPFLAGS - export CFLAGS_FOR_TARGET=" " - export CXXFLAGS_FOR_TARGET=" " - export LDFLAGS_FOR_TARGET=" " - - STRIP_FOR_TARGET="$CTARGET-strip" -elif [ "$CBUILD" != "$CHOST" ]; then - # fixup flags. seems gcc treats CPPFLAGS as global without - # _FOR_xxx variants. wrap it in CFLAGS and CXXFLAGS. - export CFLAGS="$CPPFLAGS $CFLAGS" - export CXXFLAGS="$CPPFLAGS $CXXFLAGS" - unset CPPFLAGS - - # reset flags and cc for build - export CC_FOR_BUILD="gcc" - export CXX_FOR_BUILD="g++" - export CFLAGS_FOR_BUILD=" " - export CXXFLAGS_FOR_BUILD=" " - export LDFLAGS_FOR_BUILD=" " - export CFLAGS_FOR_TARGET=" " - export CXXFLAGS_FOR_TARGET=" " - export LDFLAGS_FOR_TARGET=" " - - # Languages that do not need bootstrapping - LANG_OBJC=false - LANG_JAVA=false - LANG_GO=false - LANG_FORTRAN=false - - STRIP_FOR_TARGET=${CROSS_COMPILE}strip - _builddir="$srcdir/build-cross-native" -else - STRIP_FOR_TARGET=${CROSS_COMPILE}strip - _builddir="$srcdir/build" -fi - -# Go needs {set,make,swap}context, unimplemented in musl -[ "$CTARGET_LIBC" = musl ] && LANG_GO=false - -# libitm has TEXTRELs in ARM build, so disable for now -case "$CTARGET_ARCH" in -arm*) LIBITM=false ;; -mips*) LIBITM=false ;; -esac - -# Fortran uses libquadmath if toolchain has __float128 -# currently on x86, x86_64 and ia64 -LIBQUADMATH=$LANG_FORTRAN -case "$CTARGET_ARCH" in -x86 | x86_64) LIBQUADMATH=$LANG_FORTRAN ;; -*) LIBQUADMATH=false ;; -esac - -# libatomic is a dependency for openvswitch -$LIBATOMIC && subpackages="$subpackages libatomic::$CTARGET_ARCH" -$LIBGCC && subpackages="$subpackages libgcc::$CTARGET_ARCH" -$LIBQUADMATH && subpackages="$subpackages libquadmath::$CTARGET_ARCH" -if $LIBGOMP; then - depends="$depends libgomp=$_gccrel" - subpackages="$subpackages libgomp::$CTARGET_ARCH" -fi - -_languages=c -if $LANG_CXX; then - _languages="$_languages,c++" -fi -if $LANG_OBJC; then - subpackages="$subpackages libobjc::$CTARGET_ARCH gcc-objc$_target:objc" - _languages="$_languages,objc" -fi -if $LANG_JAVA; then - subpackages="$subpackages libgcj::$CTARGET_ARCH gcc-java$_target:java" - _languages="$_languages,java" -fi -if $LANG_GO; then - subpackages="$subpackages libgo::$CTARGET_ARCH gcc-go$_target:go" - _languages="$_languages,go" -fi -if $LANG_FORTRAN; then - subpackages="$subpackages libgfortran::$CTARGET_ARCH gfortran$_target:gfortran" - _languages="$_languages,fortran" -fi -if $LANG_ADA; then - subpackages="$subpackages libgnat::$CTARGET_ARCH gcc-gnat$_target:gnat" - _languages="$_languages,ada" - makedepends_build="$makedepends_build gcc-gnat gcc-gnat$_cross" -fi -makedepends="$makedepends_build $makedepends_host" - -source="http://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkgbase:-$pkgver}.tar.xz - http://sourceware.org/pub/java/ecj-4.9.jar - - 001_all_default-ssp-strong.patch - 002_all_default-relro.patch - 003_all_default-fortify-source.patch - 005_all_default-as-needed.patch - 011_all_default-warn-format-security.patch - 012_all_default-warn-trampolines.patch - 020_all_msgfmt-libstdc++-link.patch - 050_all_libiberty-asprintf.patch - 051_all_libiberty-pic.patch - 053_all_libitm-no-fortify-source.patch - 067_all_gcc-poison-system-directories.patch - 090_all_pr55930-dependency-tracking.patch - - 201-cilkrts.patch - 203-libgcc_s.patch - 204-linux_libc_has_function.patch - 205-nopie.patch - 207-static-pie.patch - - libgcc-always-build-gcceh.a.patch - gcc-4.9-musl-fortify.patch - gcc-6.1-musl-libssp.patch - boehm-gc-musl.patch - gcc-pure64.patch - fix-gcj-stdgnu14-link.patch - fix-gcj-musl.patch - fix-gcj-iconv-musl.patch - - gcc-4.8-build-args.patch - fix-cxxflags-passing.patch - ada-fixes.patch - ada-shared.patch - ada-musl.patch - ada-aarch64-multiarch.patch - - 300-main-gcc-add-musl-s390x-dynamic-linker.patch - 310-build-gcj-s390x.patch - 320-libffi-gnulinux.patch - - fix-rs6000-pie.patch - fix-linux-header-use-in-libgcc.patch - gcc-pure64-mips.patch - ada-mips64.patch - - 0001-i386-Move-struct-ix86_frame-to-machine_function.patch - 0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch - 0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch - 0004-x86-Add-mindirect-branch.patch - 0005-x86-Add-mfunction-return.patch - 0006-x86-Add-mindirect-branch-register.patch - 0007-x86-Add-V-register-operand-modifier.patch - 0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch - 0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch - 0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch - 0011-i386-Update-mfunction-return-for-return-with-pop.patch - 0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch - 0013-i386-Don-t-generate-alias-for-function-return-thunk.patch - " - -# we build out-of-tree -_gccdir="$srcdir"/gcc-${_pkgbase:-$pkgver} -_gcclibdir=/usr/lib/gcc/${CTARGET}/$pkgver -_gcclibexec=/usr/libexec/gcc/${CTARGET}/$pkgver - -prepare() { - cd "$_gccdir" - - _err= - for i in $source; do - case "$i" in - *.patch) - msg "Applying $i" - patch -p1 -F3 -i "$srcdir"/$i || _err="$_err $i" - ;; - esac - done - - if [ -n "$_err" ]; then - error "The following patches failed:" - for i in $_err; do - echo " $i" - done - return 1 - fi - - # see http://gcc.gnu.org/ml/java/2008-04/msg00027.html - mv "$srcdir"/ecj-*.jar ecj.jar - - echo ${pkgver} > gcc/BASE-VER -} - -build() { - local _arch_configure= - local _libc_configure= - local _bootstrap_configure= - local _symvers= - - cd "$_gccdir" - - case "$CTARGET" in - aarch64-*-*-*) _arch_configure="--with-arch=armv8-a --with-abi=lp64";; - armv5-*-*-*eabi) _arch_configure="--with-arch=armv5te --with-tune=arm926ej-s --with-float=soft --with-abi=aapcs-linux";; - armv6-*-*-*eabihf) _arch_configure="--with-arch=armv6zk --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-abi=aapcs-linux";; - armv7-*-*-*eabihf) _arch_configure="--with-arch=armv7-a --with-tune=generic-armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-abi=aapcs-linux --with-mode=thumb";; - mips-*-*-*) _arch_configure="--with-arch=mips32 --with-mips-plt --with-float=soft --with-abi=32";; - mips64-*-*-*) _arch_configure="--with-arch=mips3 --with-tune=mips64 --with-mips-plt --with-float=soft --with-abi=64";; - mips64el-*-*-*) _arch_configure="--with-arch=mips3 --with-tune=mips64 --with-mips-plt --with-float=soft --with-abi=64";; - mipsel-*-*-*) _arch_configure="--with-arch=mips32 --with-mips-plt --with-float=soft --with-abi=32";; - powerpc-*-*-*) _arch_configure="--enable-secureplt --enable-decimal-float=no";; - powerpc64*-*-*-*) _arch_configure="--with-abi=elfv2 --enable-secureplt --enable-decimal-float=no --enable-targets=powerpcle-linux";; - i486-*-*-*) _arch_configure="--with-arch=i486 --with-tune=generic --enable-cld";; - i586-*-*-*) _arch_configure="--with-arch=i586 --with-tune=generic --enable-cld";; - s390x-*-*-*) _arch_configure="--with-arch=z196 --with-tune=zEC12 --with-zarch --with-long-double-128 --enable-decimal-float";; - esac - - case "$CTARGET_ARCH" in - mips*) _hash_style_configure="--with-linker-hash-style=sysv" ;; - *) _hash_style_configure="--with-linker-hash-style=gnu" ;; - esac - - case "$CTARGET_LIBC" in - musl) - # musl does not support mudflap, or libsanitizer - # libmpx uses secure_getenv and struct _libc_fpstate not present in musl - # alpine musl provides libssp_nonshared.a, so we don't need libssp either - _libc_configure="--disable-libssp --disable-libmpx --disable-libmudflap --disable-libsanitizer" - _symvers="--disable-symvers" - export libat_cv_have_ifunc=no - ;; - esac - - - case "$BOOTSTRAP" in - nolibc) _bootstrap_configure="--with-newlib --disable-shared --enable-threads=no" ;; - *) _bootstrap_configure="--enable-shared --enable-threads --enable-tls" ;; - esac - - $LIBGOMP || _bootstrap_configure="$_bootstrap_configure --disable-libgomp" - $LIBATOMIC || _bootstrap_configure="$_bootstrap_configure --disable-libatomic" - $LIBITM || _bootstrap_configure="$_bootstrap_configure --disable-libitm" - $LIBQUADMATH || _arch_configure="$_arch_configure --disable-libquadmath" - - msg "Building the following:" - echo "" - echo " CBUILD=$CBUILD" - echo " CHOST=$CHOST" - echo " CTARGET=$CTARGET" - echo " CTARGET_ARCH=$CTARGET_ARCH" - echo " CTARGET_LIBC=$CTARGET_LIBC" - echo " languages=$_languages" - echo " arch_configure=$_arch_configure" - echo " libc_configure=$_libc_configure" - echo " cross_configure=$_cross_configure" - echo " bootstrap_configure=$_bootstrap_configure" - echo " hash_style_configure=$_hash_style_configure" - echo "" - - mkdir -p "$_builddir" - cd "$_builddir" - "$_gccdir"/configure --prefix=/usr \ - --mandir=/usr/share/man \ - --infodir=/usr/share/info \ - --build=${CBUILD} \ - --host=${CHOST} \ - --target=${CTARGET} \ - --with-pkgversion="Alpine ${pkgver}" \ - --enable-checking=release \ - --disable-fixed-point \ - --disable-libstdcxx-pch \ - --disable-multilib \ - --disable-nls \ - --disable-werror \ - $_symvers \ - --enable-__cxa_atexit \ - --enable-default-pie \ - --enable-cloog-backend \ - --enable-languages=$_languages \ - $_arch_configure \ - $_libc_configure \ - $_cross_configure \ - $_bootstrap_configure \ - --with-system-zlib \ - $_hash_style_configure - make -} - -package() { - cd "$_builddir" - make -j1 DESTDIR="${pkgdir}" install - - ln -s gcc "$pkgdir"/usr/bin/cc - - # we dont support gcj -static - # and saving 35MB is not bad. - find "$pkgdir" -name libgcj.a -o -name libgtkpeer.a \ - -o -name libgjsmalsa.a -o -name libgcj-tools.a \ - -o -name libjvm.a -o -name libgij.a -o -name libgcj_bc.a \ - -o -name libjavamath.a \ - | xargs rm -f - - # strip debug info from some static libs - ${STRIP_FOR_TARGET} -g `find "$pkgdir" \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \ - -o -name libmudflap.a -o -name libmudflapth.a \ - -o -name libgcc.a -o -name libgcov.a -o -name libquadmath.a \ - -o -name libitm.a -o -name libgo.a -o -name libcaf\*.a \ - -o -name libatomic.a -o -name libasan.a -o -name libtsan.a \) \ - -a -type f` - - if $LANG_JAVA; then - sed -i -e 's/lib: /&%{static:%eJava programs cannot be linked statically}/' \ - "$pkgdir"/usr/lib/libgcj.spec - fi - - if $LIBGOMP; then - mv "$pkgdir"/usr/lib/libgomp.spec "$pkgdir"/$_gcclibdir - fi - if $LIBITM; then - mv "$pkgdir"/usr/lib/libitm.spec "$pkgdir"/$_gcclibdir - fi - - # remove ffi - rm -f "$pkgdir"/usr/lib/libffi* "$pkgdir"/usr/share/man/man3/ffi* - find "$pkgdir" -name 'ffi*.h' | xargs rm -f - - local gdblib=${_target:+$CTARGET/}lib - for i in $(find "$pkgdir"/usr/$gdblib/ -type f -maxdepth 1 -name "*-gdb.py" ); do - mkdir -p "$pkgdir"/usr/share/gdb/python/auto-load/usr/$gdblib - mv "$i" "$pkgdir"/usr/share/gdb/python/auto-load/usr/$gdblib/ - done - - paxmark -pmrs "$pkgdir"/$_gcclibexec/cc1 - - # move ada runtime libs - if $LANG_ADA; then - for i in $(find "$pkgdir"/$_gcclibdir/adalib/ -type f -maxdepth 1 -name "libgna*.so"); do - mv "$i" "$pkgdir"/usr/lib/ - ln -s ../../../../${i##*/} $i - done - fi - - if [ "$CHOST" != "$CTARGET" ]; then - # cross-gcc: remove any files that would conflict with the - # native gcc package - rm -rf "$pkgdir"/usr/bin/cc "$pkgdir"/usr/include "$pkgdir"/usr/share - # libcc1 does not depend on target, don't ship it - rm -rf "$pkgdir"/usr/lib/libcc1.so* - - # fixup gcc library symlinks to be linker scripts so - # linker finds the libs from relocated sysroot - for so in "$pkgdir"/usr/$CTARGET/lib/*.so; do - if [ -h "$so" ]; then - local _real=$(basename $(readlink "$so")) - rm -f "$so" - echo "GROUP ($_real)" > "$so" - fi - done - else - # add c89/c99 wrapper scripts - cat >"$pkgdir"/usr/bin/c89 <<'EOF' -#!/bin/sh -fl="-std=c89" -for opt; do - case "$opt" in - -ansi|-std=c89|-std=iso9899:1990) fl="";; - -std=*) echo "$(basename $0) called with non ANSI/ISO C option $opt" >&2 - exit 1;; - esac -done -exec gcc $fl ${1+"$@"} -EOF - cat >"$pkgdir"/usr/bin/c99 <<'EOF' -#!/bin/sh -fl="-std=c99" -for opt; do - case "$opt" in - -std=c99|-std=iso9899:1999) fl="";; - -std=*) echo "$(basename $0) called with non ISO C99 option $opt" >&2 - exit 1;; - esac -done -exec gcc $fl ${1+"$@"} -EOF - chmod 755 "$pkgdir"/usr/bin/c?9 - fi -} - -libatomic() { - pkgdesc="GCC Atomic library" - depends= - replaces="gcc" - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libatomic.so.* "$subpkgdir"/usr/lib/ -} - -libcxx() { - pkgdesc="GNU C++ standard runtime library" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libstdc++.so.* "$subpkgdir"/usr/lib/ -} - -gpp() { - pkgdesc="GNU C++ standard library and compiler" - depends="libstdc++=$_gccrel gcc=$_gccrel libc-dev" - mkdir -p "$subpkgdir/$_gcclibexec" \ - "$subpkgdir"/usr/bin \ - "$subpkgdir"/usr/${_target:+$CTARGET/}include \ - "$subpkgdir"/usr/${_target:+$CTARGET/}lib \ - - mv "$pkgdir/$_gcclibexec/cc1plus" "$subpkgdir/$_gcclibexec/" - paxmark -pmrs "$subpkgdir/$_gcclibexec/cc1plus" - - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/*++* "$subpkgdir"/usr/${_target:+$CTARGET/}lib/ - mv "$pkgdir"/usr/${_target:+$CTARGET/}include/c++ "$subpkgdir"/usr/${_target:+$CTARGET/}include/ - mv "$pkgdir"/usr/bin/*++ "$subpkgdir"/usr/bin/ -} - -libobjc() { - pkgdesc="GNU Objective-C runtime" - replaces="objc" - depends= - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libobjc.so.* "$subpkgdir"/usr/lib/ -} - -objc() { - pkgdesc="GNU Objective-C" - replaces="gcc" - depends="libc-dev gcc=$_gccrel libobjc=$_gccrel" - - mkdir -p "$subpkgdir"/$_gcclibdir/include \ - "$subpkgdir"/usr/lib - mv "$pkgdir"/$_gcclibdir/include/objc "$subpkgdir"/$_gcclibdir/include/ - mv "$pkgdir"/usr/lib/libobjc.so "$pkgdir"/usr/lib/libobjc.a \ - "$subpkgdir"/usr/lib/ -} - -libgcc() { - pkgdesc="GNU C compiler runtime libraries" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libgcc_s.so.* "$subpkgdir"/usr/lib/ -} - -libgomp() { - pkgdesc="GCC shared-memory parallel programming API library" - depends= - replaces="gcc" - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libgomp.so.* "$subpkgdir"/usr/lib/ -} - -java() { - pkgdesc="Java support for GCC" - depends="zlib-dev gcc=$_gccrel libgcj=$_gccrel" - - paxmark -pm "$pkgdir"/$_gcclibexec/ecj1 - mkdir -p "$subpkgdir"/usr/bin "$subpkgdir"/usr/lib "$subpkgdir"/$_gcclibdir/ - cd "$pkgdir"/usr/bin - mv gcj gcj-dbtool gjavah gcjh jcf-dump "$subpkgdir"/usr/bin/ - cd "$pkgdir" - for i in $(find usr/ -name ecj1 -o -name jc1 -o -name jvgenmain); do - mkdir -p "$subpkgdir"/${i%/*} - mv "$pkgdir"/$i "$subpkgdir"/$i - done - for i in "$pkgdir"/usr/lib/libgcj*.so; do - if [ -L "$i" ]; then - mv "$i" "$subpkgdir"/usr/lib/ - fi - done - mv "$pkgdir"/usr/lib/libgij.so "$subpkgdir"/usr/lib/ - mv "$pkgdir"/usr/lib/libgcj.spec "$subpkgdir"/$_gcclibdir/ -} - -libgcj() { - pkgdesc="Java runtime library for gcc" - # libgcj_bc.so moved from gcc-java to libgcj - replaces="gcc-java" - depends= - - mkdir -p "$subpkgdir"/usr/bin - cd "$pkgdir"/usr/bin - paxmark -pmse "$pkgdir"/usr/bin/gij - mv aot-compile gappletviewer gc-analyze gij gjar gjarsigner gkeytool\ - gnative2ascii gorbd grmic grmid grmiregistry gserialver \ - gtnameserv jv-convert rebuild-gcj-db \ - "$subpkgdir"/usr/bin/ - cd "$pkgdir" - for i in $(find usr/lib -name jc1 -o -name jvgenmain); do - mkdir -p "$subpkgdir"/${i%/*} - mv "$pkgdir"/$i "$subpkgdir"/$i - done - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/gcj-* \ - "$pkgdir"/usr/lib/libgcj_bc.so \ - "$pkgdir"/usr/lib/libgcj*.so.* \ - "$pkgdir"/usr/lib/libgij.so.* \ - "$pkgdir"/usr/lib/logging.properties \ - "$pkgdir"/usr/lib/security \ - "$subpkgdir"/usr/lib/ - - mkdir -p "$subpkgdir"/usr/share/ - mv "$pkgdir"/usr/share/java "$subpkgdir"/usr/share/ -} - -libgo() { - pkgdesc="Go runtime library for GCC" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/libgo.so.* "$subpkgdir"/usr/lib/ -} - -go() { - pkgdesc="Go support for GCC" - depends="gcc=$_gccrel libgo=$_gccrel" - - mkdir -p "$subpkgdir"/$_gcclibexec \ - "$subpkgdir"/usr/lib \ - "$subpkgdir"/usr/bin - mv "$pkgdir"/usr/lib/go "$subpkgdir"/usr/lib/ - mv "$pkgdir"/usr/bin/*gccgo "$subpkgdir"/usr/bin/ - mv "$pkgdir"/$_gcclibexec/go1 "$subpkgdir"/$_gcclibexec/ - mv "$pkgdir"/usr/lib/libgo.a \ - "$pkgdir"/usr/lib/libgo.so \ - "$pkgdir"/usr/lib/libgobegin.a \ - "$subpkgdir"/usr/lib/ -} - -libgfortran() { - pkgdesc="Fortran runtime library for GCC" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/libgfortran.so.* "$subpkgdir"/usr/lib/ -} - -libquadmath() { - replaces="gcc" - pkgdesc="128-bit math library for GCC" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/libquadmath.so.* "$subpkgdir"/usr/lib/ -} - -gfortran() { - pkgdesc="GNU Fortran Compiler" - depends="gcc=$_gccrel libgfortran=$_gccrel" - $LIBQUADMATH && depends="$depends libquadmath=$_gccrel" - replaces="gcc" - - mkdir -p "$subpkgdir"/$_gcclibexec \ - "$subpkgdir"/$_gcclibdir \ - "$subpkgdir"/usr/lib \ - "$subpkgdir"/usr/bin - mv "$pkgdir"/usr/bin/*gfortran "$subpkgdir"/usr/bin/ - mv "$pkgdir"/usr/lib/libgfortran.a \ - "$pkgdir"/usr/lib/libgfortran.so \ - "$subpkgdir"/usr/lib/ - if $LIBQUADMATH; then - mv "$pkgdir"/usr/lib/libquadmath.a \ - "$pkgdir"/usr/lib/libquadmath.so \ - "$subpkgdir"/usr/lib/ - fi - mv "$pkgdir"/$_gcclibexec/f951 "$subpkgdir"/$_gcclibexec - mv "$pkgdir"/usr/lib/libgfortran.spec "$subpkgdir"/$_gcclibdir -} - -libgnat() { - pkgdesc="GNU Ada runtime shared libraries" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/libgna*.so "$subpkgdir"/usr/lib/ -} - -gnat() { - pkgdesc="Ada support for GCC" - depends="gcc=$_gccrel" - [ "$CHOST" = "$CTARGET" ] && depends="$depends libgnat=$_gccrel" - - mkdir -p "$subpkgdir"/$_gcclibexec \ - "$subpkgdir"/$_gcclibdir \ - "$subpkgdir"/usr/bin - mv "$pkgdir"/$_gcclibexec/*gnat* "$subpkgdir"/$_gcclibexec/ - mv "$pkgdir"/$_gcclibdir/*ada* "$subpkgdir"/$_gcclibdir/ - mv "$pkgdir"/usr/bin/*gnat* "$subpkgdir"/usr/bin/ -} - -sha512sums="02c60e54527c7adf584798d5251f8a0b80c93d5deafce82501b2c28e6692e0bd783927bbfc4bc527a863c0cccc025150a34740a9e29badb02d4b48e56a8aba90 gcc-6.4.0.tar.xz -28f8c6fdbcb19e950b1d0bafb3bcc7a8cba87bc673aa6027cece116599cdee80f0cf5e95a1440544890239f5c754e8a93ab46d9daedd937faef445d7ea33b226 ecj-4.9.jar -a1335adc2fbee98e36c4437ff2587771b98ed4180726779020f65039498235626a411cdb0100dbd20cd19d12f0d94f9a21af179ff624676c28cead9d60598b5d 001_all_default-ssp-strong.patch -e36e95b81489163abd6fe9d58f7867bdca43e61143afacbfb17f4698c0b16ec5fd0061d8fab7b2ae615540bebd721c2e2227f80401b4e7fc253da9da62e6b513 002_all_default-relro.patch -f86466c62b8291fac46f9c250c7ad8fa5ab7b1cce2504442fd07ddc4543665b317ae28951f244e39aba29aeaf3fff252ec4f6a147aa16adb2b7aed747dd89188 003_all_default-fortify-source.patch -51282fea54c7e616367bbeb2479ba13fec6f24eb47bd04e2071907b3b36273b2ff24676f46ef8d22f241c8ab4857307861eee076eab66797c3a50a8ecaa1809a 005_all_default-as-needed.patch -3398386dd1e079d6545dd9799adc799c6b80e3984fac6899d0e1a7ee21b66d0c7e53cddf17a65d590c883db750f9f79aaedd857355a8b9f7fb9476c906237919 011_all_default-warn-format-security.patch -9adb0d2b9b67dd957df6c609b8714c7c078efb52cd88770905c37c67827be8fc83d1125037b9c29d77db21ce78756aa2bb0bacdb0b98d869ac126da76a298e21 012_all_default-warn-trampolines.patch -d35a3ac7e13a4446921a90e1ff3eec1079840c845f9d523c868e24ae21f94cf69ba041de5341ebef96432a6f57598e223381d4286e8fb8baaa25906707f29fbd 020_all_msgfmt-libstdc++-link.patch -840070a3c423e6206aaa6e63e1d9a0fcd6efd53626cd1240a193f0b60aa5d84216acc4a2a4fa8bce74549b07e6a316b01d638f20cea13dc62473491a302fb3d6 050_all_libiberty-asprintf.patch -0a0bc72b9366158f5d23fff1928e756fdd212433bac6ab1f00d632f241382820db8db5d475ddf11ea020eaf7e2e71b12fb9b1c3c870cf84adf6c2b16f15aabca 051_all_libiberty-pic.patch -e7a2eb1b1870e199d6fd753d065781575656fa12baa264f96c5d179689d88c31b8a3f92a5dae96088c05e96aa2bda138364ad7dbcc79e1819a102f192cbb7bab 053_all_libitm-no-fortify-source.patch -e87da18aa7ab92b02b06168658c63b42a6c73a08fad2a30f81ef6296100fdbe3c3a91548fd0cb24eaf591e862bb08e4b67249bc4b977b07da33523aee0c686bc 067_all_gcc-poison-system-directories.patch -4a328d1e1a56c20166307edcfa322068915784d9c08025b7f81cf69714da48fc266b6d34f77b9135c2f10da830d9df408276a1b78d1fd218637c2823506593c2 090_all_pr55930-dependency-tracking.patch -ef052d0c3c9642fcb5ed570069c5a49c8ef523c47ac8ce3f201a801766f72ae4ff7c3725a70ee66e52c0fb559621e35fe0cf5b88b901d71ceadd381f49653a08 201-cilkrts.patch -808e206f5e107084156fba333d4e091dcbd62f5d7756142bc292d4b0a52619f8c2aaca3617defc2f5b6552ba0439aebd33f4141329d88eab6ddf2dd637d92c08 203-libgcc_s.patch -fc0de05b36613b732a0222ea005c90653c6a40d6761b6894af2419272f4e74875f37e26af33a9b9940669ef89269c44c46d17ca5bcd54b5cd1176e5eaf2992c1 204-linux_libc_has_function.patch -98473bcaa77903a223ca9b0d2087c0921b287a2816d308cc32c8fe009e6cbf5dd1ae7fba27794ab8d9c09e117fe534413d91a464d1218474fc123ce0adfdc2c1 205-nopie.patch -3287d5b443bea8ec64132bcabe869c738ae98ea8f1a86df1c5d18c927f8816edbfcefeefc47792dbbb2bcacf50319af00e01b3735d34525913b64350770ad453 207-static-pie.patch -d08d7ead2de0429e5c9055d5b029ec2be9a8c821d22cecaf9b51f633652c493333f98963d9267fa2fa63850c50ae5eefd5f59e5910ec10d20044dac082182a8b libgcc-always-build-gcceh.a.patch -600fe5098dc54edaa9808fd5717af9dec058953f9ad37d49cfba1db4f7e9a7a8f02019342f75157fc575946fa693259422184de27b7ecc8386d9f3ecc0f7cc5d gcc-4.9-musl-fortify.patch -dbe0ee917fc7668571722364ab7c806731e3a31e8bfa30b4941b28b16b877d2a32b4a3897ef533399a28f82d43cac9b28e92de0493f0e779046db56584e07fa4 gcc-6.1-musl-libssp.patch -bda845a6aa1854d2c883910b115f79ccfa93dfc2b5eac69a3a236d83eb34cadc140731d616ffc24698c7abc8878dd15f231bcc5119f1860e575a120b311706c7 boehm-gc-musl.patch -fa62556719449caec6b2b434355bfbcaa5ae55ffe017b3e1f827f66a2aae21b79c571ee7a4ce723ea69169bc3a6447e73650991a200cc372adf2f102677518d7 gcc-pure64.patch -2253941f3d19b6d08801d3782f5f5ed56c3b73fbc9d3561a8f01c702963ac4fab91599c686076e7081eb6a80c37ccd33591ae978996d6eee1dc0ce0f1c50259a fix-gcj-stdgnu14-link.patch -f89ddeb21bc8f97e6a850a6b70b4501a8f3e49a4bc8cc82897488decda5d98ad01cb7f6c8b392d452e9579924a523bc75da6e0648c1c976d42e40af48b10343b fix-gcj-musl.patch -54d67cc008b735e47771314171930c5d8b8f5f5dc97fcf4214824c105c808f3e75d22d5a4fdf5068ed0457fa0d46c60cfb442e276259a4a5e9b8722a027d18e6 fix-gcj-iconv-musl.patch -abe9aaf9aa956058d0386a4396a511d176a46bb3906b90e952383646cdc158cbeb0a5dc616a1ccb1ca7d49fd0b5e351532aa15a3b13362abbf1ca4266f54a687 gcc-4.8-build-args.patch -35d6d59f0b7b968f282f56767c9e0823a7bdc5aa0d450aca50fbd802649a7ca608b47671244a3faa208a9b0d6832cabb5a22724157dc817b2c0ad63d09f93282 fix-cxxflags-passing.patch -9016b257abd8fa981de44a49512e35db814d1cbb47c1a87cd31c12d4ae20b13e9e149fe41691a7ec3c95bbcfde8a79194a8d2eaf547ceade3a246fad67c47dd8 ada-fixes.patch -3f5bc334d9f73d06f5f7c876738d02356acdd08958bea0e4d2095ebf15c2c2ec4e411abdae0297505ae9a1699ca01b17338e853184e84663203b192b0d35fc19 ada-shared.patch -631d4bdef6d8bde34df7978bb53ec28c3c909cf1f87139e5f148138d0f09adc58b41ecf0148bbf50fb4bc916c411e9bf8a2b6c046c75c0e77d754d8c35bcd4d7 ada-musl.patch -fa44c8158111627aa0e91c43e7cc3aa38642c2041c96532dd4f0932dae4d6f92ea2850b683abcf10e7e120299d42ea6b69adc00002a514c76be8e39e99fa052b ada-aarch64-multiarch.patch -4b4a0ff306a8ef34ff6e3284fbfca869012164a47ba7cb099085c1dd03e6ca0cdd462f82710e08c9a02895adc7484e4c5eef17b5aa264cf5d978fe8ad78eea93 300-main-gcc-add-musl-s390x-dynamic-linker.patch -385bc2fa50204f678964e5148c6170f572701dab920fbec8301f505bda34d182cde0adb7da042fee71719e12fb59f59181897f9b1bb4f4716ff59aad46ca1998 310-build-gcj-s390x.patch -f4ef08454e28c8732db69115e4998ec153399e8d229dd27f923dbdcf57b68128a65640d026cc7f45b58ba8764ab1eb575d4eb6d6dfc550a87a183f8b94e76181 320-libffi-gnulinux.patch -01c71cd5881fc07ea3b9b980697e89b3ca0fe98502958ceafc3fca18b2604c844e2f457feab711baf8e03f00a5383b0e38aac7eb954034e306f43d4a37f165ed fix-rs6000-pie.patch -34a818d5be67eb1f34e44a80b83c28a9b9c17d37fc9fac639f490d6bb5b53ebe3318140d09c236a17d7c98f5a7792ae3d6cefccda8067a5e942d6305b9d1f87c fix-linux-header-use-in-libgcc.patch -86be3338cc9c33089608bc4c5e3b7918c4e500a345c338f361b18c342119a6ed69af5495d72950de7106d760f003528b46ad14795e805f8a3331e206dcb234e3 gcc-pure64-mips.patch -508f3bca214d88531d739d761d07affc953689b1540905c73420b34c246e1e6b72588cf89f0e1462752633f8ddc88da8c0238be2a1b6e1c213829cecee7924cf ada-mips64.patch -7912964bf3a985e9f870250d6e068f715582a4fb04270849d697a50e6aad0cf50df3d483ff80a0eb777d9940fd85526dd8d0b85da9bc71a5f2fbc07616263866 0001-i386-Move-struct-ix86_frame-to-machine_function.patch -baa27a4b912d8e27cd65a556b09cf45289a0e00e86dae3925f2923d1f3752080e80d80e159c996ef4156c4df1dfc3069114810a846672170ef3ae461ae0ab7e1 0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch -6701d15000bdd7c4c98a8fece8c814f5e4e73603eecf84fe4dc5ac10f79b3074afba7c2cc9e51d08b2abade1c34cb0c944c08ead7a85db94e97158c752fd1aac 0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch -4e7e71ae57e232b29a6455ec977f60b47df1356eca0e85976ae2b4567c4c39541be9f10c30fe0085d69be5acdb61dff51d3e9d7af587c95d9cd2cb9ee307bd13 0004-x86-Add-mindirect-branch.patch -07f7fdbd9b4876f36ed7715a35a369dbaf1016f46c42a8935930cfcc9ea250de2dbe8113f077373ccce3c39cd728f957b6c4c7c6a7da299f160a4109f0bbe88d 0005-x86-Add-mfunction-return.patch -76ea947591e5241f8e6216ce337baaf1b5dfe3f02d8251f77a4acd70e2a5e7798e2867d70f452027f51a2e3baf1b5c94c3bffe9ef8e0a5ce24dc5d509adaf414 0006-x86-Add-mindirect-branch-register.patch -1c33c5cd34efb44d4fa0ace56e3d27ec802a66e03b08a29ab6122cbc70edbbe22313a34114437a41e09e0a6869af3cea3fb18f5bcb49db2f8e3f155026fe15f0 0007-x86-Add-V-register-operand-modifier.patch -5366e2cff0629304394bf35e9417c7faea6b6f3fc565d0410a17fdafcb2b30c9a218f8ca098274c09ca4c982ff5b178ad6df5bf464ec541aa086966915c7fe11 0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch -67c738b1f6afb09b6f0469c9cb282ab4d51fc8dd8e39df1cfdff8831788c1022081fccd446a482623f649898733aeaaa205cba0aa41162cdbdc74e57de9bb6eb 0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch -b7b59f3203bf53168de2170b91738cd456f6ae205b3fe5bf8aacbaa8cc5624dd09c941ad8f1071d1ab8ab4fb5f69068a4bc792c0486fdec1ee2eb9c83688bb78 0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch -c53d4c5968865abb709ee8a9af9d57917d43ea3ba31ee8312f9e8f338e9b1b44babf5aa3414848da7267e5cf13a9261815eb9185dc153cbd41ee7ce5ea23d2d0 0011-i386-Update-mfunction-return-for-return-with-pop.patch -955080ba3e42cfe2f604e5dcef46aa6fca7c899c7808398947af655ff3b7954e30807ef85246986a5cc7db36dbc870db151e9fa8d8bc967b89ea56efdf64614c 0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch -3aae3a9cef8e8afe5a5433db8d9f410e1a2882481af01bb1d33232f987dbb74d7780c32be70b868bb391b3601b65ed3a16d777afea946f5eeaff72aa1e7fa3a9 0013-i386-Don-t-generate-alias-for-function-return-thunk.patch" diff --git a/aports/cross/gcc-aarch64/ada-aarch64-multiarch.patch b/aports/cross/gcc-aarch64/ada-aarch64-multiarch.patch deleted file mode 100644 index ac60b6f6..00000000 --- a/aports/cross/gcc-aarch64/ada-aarch64-multiarch.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- gcc-6.4.0/gcc/ada/gcc-interface/Makefile.in.orig -+++ gcc-6.4.0/gcc/ada/gcc-interface/Makefile.in -@@ -2042,13 +2042,8 @@ - system.ads - #else - #include -+#include - #endif - - #ifdef __MINGW32__ ---- gcc-6.1.0.orig/gcc/ada/terminals.c -+++ gcc-6.1.0/gcc/ada/terminals.c -@@ -1068,13 +1068,6 @@ - #include - #include - --/* On some system termio is either absent or including it will disable termios -- (HP-UX) */ --#if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \ -- && !defined (__rtems__) --# include --#endif -- - #include - #include - #include -@@ -1169,7 +1162,7 @@ - char *slave_name = NULL; - - #ifdef USE_GETPT -- master_fd = getpt (); -+ master_fd = posix_openpt (O_RDWR); - #elif defined (USE_OPENPTY) - status = openpty (&master_fd, &slave_fd, NULL, NULL, NULL); - #elif defined (USE_CLONE_DEVICE) diff --git a/aports/cross/gcc-aarch64/ada-mips64.patch b/aports/cross/gcc-aarch64/ada-mips64.patch deleted file mode 100644 index b7cd3deb..00000000 --- a/aports/cross/gcc-aarch64/ada-mips64.patch +++ /dev/null @@ -1,224 +0,0 @@ -From 5bbd6ca3755e2a199de98d2b270d8a6f616aa6a6 Mon Sep 17 00:00:00 2001 -From: Nils Andreas Svee -Date: Thu, 21 Dec 2017 16:46:12 +0100 -Subject: [PATCH] ada-mips64 - ---- - gcc/ada/gcc-interface/Makefile.in | 29 ++++++-- - gcc/ada/system-linux-mips64.ads | 147 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 171 insertions(+), 5 deletions(-) - create mode 100644 gcc/ada/system-linux-mips64.ads - -diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in -index 598b262d9..1844a6962 100644 ---- a/gcc/ada/gcc-interface/Makefile.in -+++ b/gcc/ada/gcc-interface/Makefile.in -@@ -1854,9 +1854,9 @@ ifeq ($(strip $(filter-out cygwin% mingw32% pe,$(target_os))),) - LIBRARY_VERSION := $(LIB_VERSION) - endif - --# Mips Linux --ifeq ($(strip $(filter-out mips linux%,$(target_cpu) $(target_os))),) -- LIBGNAT_TARGET_PAIRS = \ -+# Mips and Mips64 Linux -+ifeq ($(strip $(filter-out mips mips64 linux%,$(target_cpu) $(target_os))),) -+ LIBGNAT_TARGET_PAIRS_COMMON = \ - a-intnam.ads. -- -+-- -- -+-- GNAT was originally developed by the GNAT team at New York University. -- -+-- Extensive contributions were provided by Ada Core Technologies Inc. -- -+-- -- -+------------------------------------------------------------------------------ -+ -+package System is -+ pragma Pure; -+ -- Note that we take advantage of the implementation permission to make -+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada -+ -- 2005, this is Pure in any case (AI-362). -+ -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ -+ type Name is (SYSTEM_NAME_GNAT); -+ System_Name : constant Name := SYSTEM_NAME_GNAT; -+ -+ -- System-Dependent Named Numbers -+ -+ Min_Int : constant := Long_Long_Integer'First; -+ Max_Int : constant := Long_Long_Integer'Last; -+ -+ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; -+ Max_Nonbinary_Modulus : constant := Integer'Last; -+ -+ Max_Base_Digits : constant := Long_Long_Float'Digits; -+ Max_Digits : constant := Long_Long_Float'Digits; -+ -+ Max_Mantissa : constant := 63; -+ Fine_Delta : constant := 2.0 ** (-Max_Mantissa); -+ -+ Tick : constant := 0.000_001; -+ -+ -- Storage-related Declarations -+ -+ type Address is private; -+ pragma Preelaborable_Initialization (Address); -+ Null_Address : constant Address; -+ -+ Storage_Unit : constant := 8; -+ Word_Size : constant := 64; -+ Memory_Size : constant := 2 ** 64; -+ -+ -- Address comparison -+ -+ function "<" (Left, Right : Address) return Boolean; -+ function "<=" (Left, Right : Address) return Boolean; -+ function ">" (Left, Right : Address) return Boolean; -+ function ">=" (Left, Right : Address) return Boolean; -+ function "=" (Left, Right : Address) return Boolean; -+ -+ pragma Import (Intrinsic, "<"); -+ pragma Import (Intrinsic, "<="); -+ pragma Import (Intrinsic, ">"); -+ pragma Import (Intrinsic, ">="); -+ pragma Import (Intrinsic, "="); -+ -+ -- Other System-Dependent Declarations -+ -+ type Bit_Order is (High_Order_First, Low_Order_First); -+ Default_Bit_Order : constant Bit_Order := High_Order_First; -+ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning -+ -+ -- Priority-related Declarations (RM D.1) -+ -+ Max_Priority : constant Positive := 30; -+ Max_Interrupt_Priority : constant Positive := 31; -+ -+ subtype Any_Priority is Integer range 0 .. 31; -+ subtype Priority is Any_Priority range 0 .. 30; -+ subtype Interrupt_Priority is Any_Priority range 31 .. 31; -+ -+ Default_Priority : constant Priority := 15; -+ -+private -+ -+ type Address is mod Memory_Size; -+ Null_Address : constant Address := 0; -+ -+ -------------------------------------- -+ -- System Implementation Parameters -- -+ -------------------------------------- -+ -+ -- These parameters provide information about the target that is used -+ -- by the compiler. They are in the private part of System, where they -+ -- can be accessed using the special circuitry in the Targparm unit -+ -- whose source should be consulted for more detailed descriptions -+ -- of the individual switch values. -+ -+ Backend_Divide_Checks : constant Boolean := False; -+ Backend_Overflow_Checks : constant Boolean := True; -+ Command_Line_Args : constant Boolean := True; -+ Configurable_Run_Time : constant Boolean := False; -+ Denorm : constant Boolean := True; -+ Duration_32_Bits : constant Boolean := False; -+ Exit_Status_Supported : constant Boolean := True; -+ Fractional_Fixed_Ops : constant Boolean := False; -+ Frontend_Layout : constant Boolean := False; -+ Machine_Overflows : constant Boolean := False; -+ Machine_Rounds : constant Boolean := True; -+ Preallocated_Stacks : constant Boolean := False; -+ Signed_Zeros : constant Boolean := True; -+ Stack_Check_Default : constant Boolean := False; -+ Stack_Check_Probes : constant Boolean := True; -+ Stack_Check_Limits : constant Boolean := False; -+ Support_Aggregates : constant Boolean := True; -+ Support_Composite_Assign : constant Boolean := True; -+ Support_Composite_Compare : constant Boolean := True; -+ Support_Long_Shifts : constant Boolean := True; -+ Always_Compatible_Rep : constant Boolean := False; -+ Suppress_Standard_Library : constant Boolean := False; -+ Use_Ada_Main_Program_Name : constant Boolean := False; -+ Frontend_Exceptions : constant Boolean := False; -+ ZCX_By_Default : constant Boolean := True; -+ -+end System; --- -2.15.1 - diff --git a/aports/cross/gcc-aarch64/ada-musl.patch b/aports/cross/gcc-aarch64/ada-musl.patch deleted file mode 100644 index 464c3d57..00000000 --- a/aports/cross/gcc-aarch64/ada-musl.patch +++ /dev/null @@ -1,137 +0,0 @@ -diff -rup gcc-5.1.0/gcc.orig/ada/adaint.c gcc-5.1.0/gcc/ada/adaint.c ---- gcc-5.1.0/gcc.orig/ada/adaint.c 2015-02-20 11:48:57.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/adaint.c 2015-06-02 10:47:51.672767476 +0000 -@@ -70,6 +70,11 @@ - #include - #include - #endif -+ -+#if defined (linux) -+#define _GNU_SOURCE 1 -+#include -+#endif - - #ifdef __PikeOS__ - #define __BSD_VISIBLE 1 -@@ -3057,8 +3062,6 @@ __gnat_lwp_self (void) - return (void *) syscall (__NR_gettid); - } - --#include -- - /* glibc versions earlier than 2.7 do not define the routines to handle - dynamically allocated CPU sets. For these targets, we use the static - versions. */ -@@ -3067,7 +3070,7 @@ __gnat_lwp_self (void) - - /* Dynamic cpu sets */ - --cpu_set_t * -+void * - __gnat_cpu_alloc (size_t count) - { - return CPU_ALLOC (count); -@@ -3080,33 +3083,33 @@ __gnat_cpu_alloc_size (size_t count) - } - - void --__gnat_cpu_free (cpu_set_t *set) -+__gnat_cpu_free (void *set) - { -- CPU_FREE (set); -+ CPU_FREE ((cpu_set_t *) set); - } - - void --__gnat_cpu_zero (size_t count, cpu_set_t *set) -+__gnat_cpu_zero (size_t count, void *set) - { -- CPU_ZERO_S (count, set); -+ CPU_ZERO_S (count, (cpu_set_t *) set); - } - - void --__gnat_cpu_set (int cpu, size_t count, cpu_set_t *set) -+__gnat_cpu_set (int cpu, size_t count, void *set) - { - /* Ada handles CPU numbers starting from 1, while C identifies the first - CPU by a 0, so we need to adjust. */ -- CPU_SET_S (cpu - 1, count, set); -+ CPU_SET_S (cpu - 1, count, (cpu_set_t *) set); - } - - #else /* !CPU_ALLOC */ - - /* Static cpu sets */ - --cpu_set_t * -+void * - __gnat_cpu_alloc (size_t count ATTRIBUTE_UNUSED) - { -- return (cpu_set_t *) xmalloc (sizeof (cpu_set_t)); -+ return xmalloc (sizeof (cpu_set_t)); - } - - size_t -@@ -3116,23 +3119,23 @@ __gnat_cpu_alloc_size (size_t count ATTR - } - - void --__gnat_cpu_free (cpu_set_t *set) -+__gnat_cpu_free (void *set) - { - free (set); - } - - void --__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) -+__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, void *set) - { -- CPU_ZERO (set); -+ CPU_ZERO ((cpu_set_t *) set); - } - - void --__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) -+__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, void *set) - { - /* Ada handles CPU numbers starting from 1, while C identifies the first - CPU by a 0, so we need to adjust. */ -- CPU_SET (cpu - 1, set); -+ CPU_SET (cpu - 1, (cpu_set_t *) set); - } - #endif /* !CPU_ALLOC */ - #endif /* linux */ -diff -rup gcc-5.1.0/gcc.orig/ada/adaint.h gcc-5.1.0/gcc/ada/adaint.h ---- gcc-5.1.0/gcc.orig/ada/adaint.h 2015-01-27 17:20:27.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/adaint.h 2015-06-02 10:47:23.188910894 +0000 -@@ -287,13 +287,11 @@ extern void *__gnat_lwp_self (voi - - /* Routines for interface to required CPU set primitives */ - --#include -- --extern cpu_set_t *__gnat_cpu_alloc (size_t); -+extern void * __gnat_cpu_alloc (size_t); - extern size_t __gnat_cpu_alloc_size (size_t); --extern void __gnat_cpu_free (cpu_set_t *); --extern void __gnat_cpu_zero (size_t, cpu_set_t *); --extern void __gnat_cpu_set (int, size_t, cpu_set_t *); -+extern void __gnat_cpu_free (void *); -+extern void __gnat_cpu_zero (size_t, void *); -+extern void __gnat_cpu_set (int, size_t, void *); - #endif - - #if defined (_WIN32) -diff -rup gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in ---- gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in 2015-04-09 20:29:28.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in 2015-06-02 10:47:23.188910894 +0000 -@@ -1910,7 +1910,7 @@ ifeq ($(strip $(filter-out powerpc% linu - endif - - # ARM linux, GNU eabi --ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),) -+ifeq ($(strip $(filter-out arm% linux-gnueabi% linux-musleabi% linux-muslgnueabi%,$(target_cpu) $(target_os))),) - LIBGNAT_TARGET_PAIRS = \ - a-intnam.ads - # undef __KERNEL__ --# else -+# elif defined(__GLIBC__) - /* Kernels prior to 2.1.1 defined struct sigcontext_struct instead of */ - /* struct sigcontext. libc6 (glibc2) uses "struct sigcontext" in */ - /* prototypes, so we have to include the top-level sigcontext.h to */ ---- gcc-4.8.2/boehm-gc/dyn_load.c.orig 2014-02-17 14:13:09.519850231 +0200 -+++ gcc-4.8.2/boehm-gc/dyn_load.c 2014-02-17 14:14:27.906093514 +0200 -@@ -459,9 +459,7 @@ - /* For glibc 2.2.4+. Unfortunately, it doesn't work for older */ - /* versions. Thanks to Jakub Jelinek for most of the code. */ - --# if (defined(LINUX) || defined (__GLIBC__)) /* Are others OK here, too? */ \ -- && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \ -- || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) -+# if (defined(LINUX) || defined (__GLIBC__)) - - /* We have the header files for a glibc that includes dl_iterate_phdr. */ - /* It may still not be available in the library on the target system. */ ---- gcc-4.8.2/boehm-gc/include/private/gcconfig.h.orig 2014-02-17 14:14:36.026049422 +0200 -+++ gcc-4.8.2/boehm-gc/include/private/gcconfig.h 2014-02-17 14:17:11.345207887 +0200 -@@ -684,7 +684,7 @@ - # ifdef __ELF__ - # define DYNAMIC_LOADING - # include --# if defined(__GLIBC__)&& __GLIBC__>=2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else /* !GLIBC2 */ - extern char **__environ; -@@ -1147,7 +1147,7 @@ - # define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff)) - # endif - # include --# if defined(__GLIBC__) && __GLIBC__ >= 2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else - extern char **__environ; -@@ -1367,7 +1367,7 @@ - # define HBLKSIZE 4096 - # endif - # define USE_GENERIC_PUSH_REGS --# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2 || __GLIBC__ > 2 -+# if 1 - # define LINUX_STACKBOTTOM - # else - # define STACKBOTTOM 0x80000000 -@@ -1858,7 +1858,7 @@ - # ifdef __ELF__ - # define DYNAMIC_LOADING - # include --# if defined(__GLIBC__) && __GLIBC__ >= 2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else - extern char **__environ; diff --git a/aports/cross/gcc-aarch64/fix-cxxflags-passing.patch b/aports/cross/gcc-aarch64/fix-cxxflags-passing.patch deleted file mode 100644 index 8eb1de77..00000000 --- a/aports/cross/gcc-aarch64/fix-cxxflags-passing.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- gcc-4.8.1/Makefile.in.orig -+++ gcc-4.8.1/Makefile.in -@@ -169,6 +169,7 @@ - # built for the build system to override those in BASE_FLAGS_TO_PASSS. - EXTRA_BUILD_FLAGS = \ - CFLAGS="$(CFLAGS_FOR_BUILD)" \ -+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \ - LDFLAGS="$(LDFLAGS_FOR_BUILD)" - - # This is the list of directories to built for the host system. diff --git a/aports/cross/gcc-aarch64/fix-gcj-iconv-musl.patch b/aports/cross/gcc-aarch64/fix-gcj-iconv-musl.patch deleted file mode 100644 index b0015751..00000000 --- a/aports/cross/gcc-aarch64/fix-gcj-iconv-musl.patch +++ /dev/null @@ -1,120 +0,0 @@ ---- gcc-4.8.2/libjava/gnu/gcj/convert/natIconv.cc.orig 2014-02-18 18:46:14.897880526 +0200 -+++ gcc-4.8.2/libjava/gnu/gcj/convert/natIconv.cc 2014-02-18 18:50:08.766613550 +0200 -@@ -24,6 +24,13 @@ - - #ifdef HAVE_ICONV - #include -+#include -+ -+#if __BYTE_ORDER == __BIG_ENDIAN -+#define UCS2_CHARSET "UCS-2BE" -+#else -+#define UCS2_CHARSET "UCS-2LE" -+#endif - - template - static inline size_t -@@ -45,7 +52,7 @@ - _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer); - buffer[len] = '\0'; - -- iconv_t h = iconv_open ("UCS-2", buffer); -+ iconv_t h = iconv_open (UCS2_CHARSET, buffer); - if (h == (iconv_t) -1) - throw new ::java::io::UnsupportedEncodingException (encoding); - -@@ -99,18 +106,6 @@ - throw new ::java::io::CharConversionException (); - } - -- if (iconv_byte_swap) -- { -- size_t max = (old_out - outavail) / sizeof (jchar); -- for (size_t i = 0; i < max; ++i) -- { -- // Byte swap. -- jchar c = (((out[outpos + i] & 0xff) << 8) -- | ((out[outpos + i] >> 8) & 0xff)); -- outbuf[i] = c; -- } -- } -- - inpos += old_in - inavail; - return (old_out - outavail) / sizeof (jchar); - #else /* HAVE_ICONV */ -@@ -145,7 +140,7 @@ - _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer); - buffer[len] = '\0'; - -- iconv_t h = iconv_open (buffer, "UCS-2"); -+ iconv_t h = iconv_open (buffer, UCS2_CHARSET); - if (h == (iconv_t) -1) - throw new ::java::io::UnsupportedEncodingException (encoding); - -@@ -187,20 +182,6 @@ - char *inbuf = (char *) &chars[inpos]; - char *outbuf = (char *) &out[count]; - -- if (iconv_byte_swap) -- { -- // Ugly performance penalty -- don't use losing systems! -- temp_buffer = (jchar *) _Jv_Malloc (inlength * sizeof (jchar)); -- for (int i = 0; i < inlength; ++i) -- { -- // Byte swap. -- jchar c = (((chars[inpos + i] & 0xff) << 8) -- | ((chars[inpos + i] >> 8) & 0xff)); -- temp_buffer[i] = c; -- } -- inbuf = (char *) temp_buffer; -- } -- - size_t loop_old_in = old_in; - while (1) - { -@@ -252,44 +233,7 @@ - jboolean - gnu::gcj::convert::IOConverter::iconv_init (void) - { -- // Some versions of iconv() always return their UCS-2 results in -- // big-endian order, and they also require UCS-2 inputs to be in -- // big-endian order. For instance, glibc 2.1.3 does this. If the -- // UTF-8=>UCS-2 iconv converter has this feature, then we assume -- // that all UCS-2 converters do. (This might not be the best -- // heuristic, but is is all we've got.) -- jboolean result = false; --#ifdef HAVE_ICONV -- iconv_t handle = iconv_open ("UCS-2", "UTF-8"); -- if (handle != (iconv_t) -1) -- { -- jchar c; -- unsigned char in[4]; -- char *inp, *outp; -- size_t inc, outc, r; -- -- // This is the UTF-8 encoding of \ufeff. At least Tru64 UNIX libiconv -- // needs the trailing NUL byte, otherwise iconv fails with EINVAL. -- in[0] = 0xef; -- in[1] = 0xbb; -- in[2] = 0xbf; -- in[3] = 0x00; -- -- inp = (char *) in; -- inc = 4; -- outp = (char *) &c; -- outc = 2; -- -- r = iconv_adapter (iconv, handle, &inp, &inc, &outp, &outc); -- // Conversion must be complete for us to use the result. -- if (r != (size_t) -1 && inc == 0 && outc == 0) -- result = (c != 0xfeff); -- -- // Release iconv handle. -- iconv_close (handle); -- } --#endif /* HAVE_ICONV */ -- return result; -+ return false; - } - - void diff --git a/aports/cross/gcc-aarch64/fix-gcj-musl.patch b/aports/cross/gcc-aarch64/fix-gcj-musl.patch deleted file mode 100644 index d26f510c..00000000 --- a/aports/cross/gcc-aarch64/fix-gcj-musl.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- gcc-4.8.2/libjava/gnu/classpath/natSystemProperties.cc.orig 2014-02-18 10:55:08.617678779 +0200 -+++ gcc-4.8.2/libjava/gnu/classpath/natSystemProperties.cc 2014-02-18 10:56:31.927227453 +0200 -@@ -289,7 +289,7 @@ - // just default to `en_US'. - setlocale (LC_ALL, ""); - char *locale = setlocale (LC_MESSAGES, ""); -- if (locale && strlen (locale) >= 2) -+ if (locale && strlen (locale) >= 2 && (locale[2] == '\0' || locale[2] == '_')) - { - char buf[3]; - buf[2] = '\0'; ---- gcc-4.8.2/libjava/posix-threads.cc.orig 2014-02-18 13:22:01.789933726 +0200 -+++ gcc-4.8.2/libjava/posix-threads.cc 2014-02-18 13:29:50.924058875 +0200 -@@ -657,6 +657,7 @@ - struct sched_param param; - pthread_attr_t attr; - struct starter *info; -+ size_t ss; - - if (data->flags & FLAG_START) - return; -@@ -675,8 +676,25 @@ - // Set stack size if -Xss option was given. - if (gcj::stack_size > 0) - { -- int e = pthread_attr_setstacksize (&attr, gcj::stack_size); -+ ss = gcj::stack_size; -+ } -+ else -+ { -+ int e = pthread_attr_getstacksize (&attr, &ss); -+ if (e != 0) -+ JvFail (strerror (e)); -+ -+ // Request at least 1meg of stack -+ if (ss >= 1024 * 1024) -+ ss = 0; -+ else -+ ss = 1024 * 1024; -+ } -+ -+ if (ss) -+ { -+ int e = pthread_attr_setstacksize (&attr, ss); - if (e != 0) - JvFail (strerror (e)); - } - - info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter)); diff --git a/aports/cross/gcc-aarch64/fix-gcj-stdgnu14-link.patch b/aports/cross/gcc-aarch64/fix-gcj-stdgnu14-link.patch deleted file mode 100644 index 2b2ce0fa..00000000 --- a/aports/cross/gcc-aarch64/fix-gcj-stdgnu14-link.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- gcc-6.1.0/libjava/Makefile.am -+++ gcc-6.1.0/libjava/Makefile.am -@@ -488,10 +488,14 @@ - nat_files = $(nat_source_files:.cc=.lo) - xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) - -+libgcj_la_CPPFLAGS = \ -+ $(AM_CPPFLAGS) \ -+ $(LIBSTDCXX_RAW_CXX_CXXFLAGS) -+ - # Include THREADLIBS here to ensure that the correct version of - # certain linuxthread functions get linked: - ## The mysterious backslash in the grep pattern is consumed by make. --libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ -+libgcj_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ - $(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ - -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL) ---- gcc-6.1.0/libjava/Makefile.in -+++ gcc-6.1.0/libjava/Makefile.in -@@ -1103,9 +1103,13 @@ - nat_files = $(nat_source_files:.cc=.lo) - xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) - -+libgcj_la_CPPFLAGS = \ -+ $(AM_CPPFLAGS) \ -+ $(LIBSTDCXX_RAW_CXX_CXXFLAGS) -+ - # Include THREADLIBS here to ensure that the correct version of - # certain linuxthread functions get linked: --libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ -+libgcj_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ - $(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ - -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL) diff --git a/aports/cross/gcc-aarch64/fix-linux-header-use-in-libgcc.patch b/aports/cross/gcc-aarch64/fix-linux-header-use-in-libgcc.patch deleted file mode 100644 index 6dad1b2c..00000000 --- a/aports/cross/gcc-aarch64/fix-linux-header-use-in-libgcc.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 9cd4503714c4e596818c4ea8e15905c249b7a319 Mon Sep 17 00:00:00 2001 -From: nsz -Date: Thu, 25 Aug 2016 14:08:27 +0000 -Subject: [PATCH] [mips] Fix linux header use in libgcc - -libgcc/ - * config/mips/linux-unwind.h: Use sys/syscall.h. - - - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239759 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - libgcc/ChangeLog | 4 ++++ - libgcc/config/mips/linux-unwind.h | 2 +- - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog -index b78c4b2..99bd2f1 100644 ---- a/libgcc/ChangeLog -+++ b/libgcc/ChangeLog -@@ -1,3 +1,7 @@ -+2016-08-25 Szabolcs Nagy -+ -+ * config/mips/linux-unwind.h: Use sys/syscall.h. -+ - 2016-08-16 Joseph Myers - - PR libgcc/77265 -diff --git a/libgcc/config/mips/linux-unwind.h b/libgcc/config/mips/linux-unwind.h -index bf12de5..4035c121 100644 ---- a/libgcc/config/mips/linux-unwind.h -+++ b/libgcc/config/mips/linux-unwind.h -@@ -27,7 +27,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - state data appropriately. See unwind-dw2.c for the structs. */ - - #include --#include -+#include - - /* The third parameter to the signal handler points to something with - * this structure defined in asm/ucontext.h, but the name clashes with --- -2.9.3 - diff --git a/aports/cross/gcc-aarch64/fix-rs6000-pie.patch b/aports/cross/gcc-aarch64/fix-rs6000-pie.patch deleted file mode 100644 index 1fbc31a5..00000000 --- a/aports/cross/gcc-aarch64/fix-rs6000-pie.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- gcc-6.3.0.orig/gcc/config/rs6000/sysv4.h -+++ gcc-6.3.0/gcc/config/rs6000/sysv4.h -@@ -753,23 +753,42 @@ - #endif - - #ifdef HAVE_LD_PIE --#define STARTFILE_LINUX_SPEC "\ --%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ --%{mnewlib:ecrti.o%s;:crti.o%s} \ --%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ --" CRTOFFLOADBEGIN -+#define STARTFILE_LINUX_SPEC \ -+ "%{!shared: %{pg|p|profile:gcrt1.o%s;: \ -+ %{" PIE_SPEC ":%{static:rcrt1.o%s;:Scrt1.o%s}} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -+ crti.o%s %{shared:crtbeginS.o%s;: \ -+ %{" PIE_SPEC ":crtbeginS.o%s} \ -+ %{" NO_PIE_SPEC ":%{static:crtbeginT.o%s;:crtbegin.o%s}}} \ -+ %{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_start_preinit.o%s; \ -+ fvtable-verify=std:vtv_start.o%s} \ -+ " CRTOFFLOADBEGIN - #else --#define STARTFILE_LINUX_SPEC "\ --%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ --%{mnewlib:ecrti.o%s;:crti.o%s} \ --%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ --" CRTOFFLOADBEGIN -+#define STARTFILE_LINUX_SPEC \ -+ "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ -+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ -+ %{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_start_preinit.o%s; \ -+ fvtable-verify=std:vtv_start.o%s} \ -+ " CRTOFFLOADBEGIN - #endif - --#define ENDFILE_LINUX_SPEC "\ --%{shared|pie:crtendS.o%s;:crtend.o%s} \ --%{mnewlib:ecrtn.o%s;:crtn.o%s} \ --" CRTOFFLOADEND -+#ifdef HAVE_LD_PIE -+#define ENDFILE_LINUX_SPEC \ -+ "%{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_end_preinit.o%s; \ -+ fvtable-verify=std:vtv_end.o%s} \ -+ %{shared:crtendS.o%s;: %{" PIE_SPEC ":crtendS.o%s} \ -+ %{" NO_PIE_SPEC ":crtend.o%s}} crtn.o%s \ -+ " CRTOFFLOADEND -+#else -+#define ENDFILE_LINUX_SPEC \ -+ "%{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_end_preinit.o%s; \ -+ fvtable-verify=std:vtv_end.o%s} \ -+ %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s \ -+ " CRTOFFLOADEND -+#endif - - #define LINK_START_LINUX_SPEC "" - diff --git a/aports/cross/gcc-aarch64/gcc-4.8-build-args.patch b/aports/cross/gcc-aarch64/gcc-4.8-build-args.patch deleted file mode 100644 index c27e0096..00000000 --- a/aports/cross/gcc-aarch64/gcc-4.8-build-args.patch +++ /dev/null @@ -1,41 +0,0 @@ -When cross compiling a target gcc, target flags may be used on the host - -Configure identifies a number of warning flags (WARN_CFLAGS and -WARN_CXXFLAGS) from the $CC value. The cross compiler may be different -from the host compiler and may not support the same set of flags. This -leads to problems such as: - -cc1plus: error: unrecognized command line option "-Wno-narrowing" -cc1plus: error: unrecognized command line option "-Wno-overlength-strings" - -Work around this problem by removing the warning flags from the -BUILD_CXXFLAGS value, in a way similar to the BUILD_CFLAGS. - -Upstream-Status: Pending - -Signed-off-by: Mark Hatle - -Index: gcc-4.8.0/gcc/configure -=================================================================== ---- gcc-4.8.0.orig/gcc/configure -+++ gcc-4.8.0/gcc/configure -@@ -11720,6 +10581,7 @@ STMP_FIXINC=stmp-fixinc - if test x$build != x$host || test "x$coverage_flags" != x - then - BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' -+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' - BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)' - fi - -Index: gcc-4.8.0/gcc/configure.ac -=================================================================== ---- gcc-4.8.0.orig/gcc/configure.ac -+++ gcc-4.8.0/gcc/configure.ac -@@ -1901,6 +1901,7 @@ STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_F - if test x$build != x$host || test "x$coverage_flags" != x - then - BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' -+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' - BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)' - fi - diff --git a/aports/cross/gcc-aarch64/gcc-4.9-musl-fortify.patch b/aports/cross/gcc-aarch64/gcc-4.9-musl-fortify.patch deleted file mode 100644 index daae954c..00000000 --- a/aports/cross/gcc-aarch64/gcc-4.9-musl-fortify.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gcc-4.9.2/gcc/config/linux.h.orig 2015-03-09 13:27:13.289736710 +0000 -+++ gcc-4.9.2/gcc/config/linux.h 2015-03-09 13:29:32.295625046 +0000 -@@ -146,6 +146,8 @@ - - #ifdef NATIVE_SYSTEM_HEADER_DIR - #define INCLUDE_DEFAULTS_MUSL_NATIVE \ -+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 2 }, \ -+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 0 }, \ - { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \ - { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 }, - #else diff --git a/aports/cross/gcc-aarch64/gcc-6.1-musl-libssp.patch b/aports/cross/gcc-aarch64/gcc-6.1-musl-libssp.patch deleted file mode 100644 index fe5c6143..00000000 --- a/aports/cross/gcc-aarch64/gcc-6.1-musl-libssp.patch +++ /dev/null @@ -1,20 +0,0 @@ -Author: Timo Teräs - -Alpine musl package provides libssp_nonshared.a. We link to it unconditionally, -as otherwise we get link failures if some objects are -fstack-protector built -and final link happens with -fno-stack-protector. This seems to be the common -case when bootstrapping gcc, the piepatches do not seem to fully fix the -crosstoolchain and bootstrap sequence wrt. stack-protector flag usage. - ---- gcc-6.1.0/gcc/gcc.c.orig -+++ gcc-6.1.0/gcc/gcc.c -@@ -870,8 +870,7 @@ - - #ifndef LINK_SSP_SPEC - #ifdef TARGET_LIBC_PROVIDES_SSP --#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ -- "|fstack-protector-strong|fstack-protector-explicit:}" -+#define LINK_SSP_SPEC "-lssp_nonshared" - #else - #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ - "|fstack-protector-strong|fstack-protector-explicit" \ diff --git a/aports/cross/gcc-aarch64/gcc-pure64-mips.patch b/aports/cross/gcc-aarch64/gcc-pure64-mips.patch deleted file mode 100644 index d78f2838..00000000 --- a/aports/cross/gcc-aarch64/gcc-pure64-mips.patch +++ /dev/null @@ -1,47 +0,0 @@ -From b8c4e45d052adc247341066f748421743704b481 Mon Sep 17 00:00:00 2001 -From: Nils Andreas Svee -Date: Thu, 21 Dec 2017 03:14:33 +0100 -Subject: [PATCH] Pure 64-bit MIPS - ---- - gcc/config/mips/mips.h | 8 ++++---- - gcc/config/mips/t-linux64 | 6 +++--- - 2 files changed, 7 insertions(+), 7 deletions(-) - -diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h -index 803ab98e7..afd74752f 100644 ---- a/gcc/config/mips/mips.h -+++ b/gcc/config/mips/mips.h -@@ -3330,11 +3330,11 @@ struct GTY(()) machine_function { - /* If we are *not* using multilibs and the default ABI is not ABI_32 we - need to change these from /lib and /usr/lib. */ - #if MIPS_ABI_DEFAULT == ABI_N32 --#define STANDARD_STARTFILE_PREFIX_1 "/lib32/" --#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib32/" -+#define STANDARD_STARTFILE_PREFIX_1 "/lib/" -+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" - #elif MIPS_ABI_DEFAULT == ABI_64 --#define STANDARD_STARTFILE_PREFIX_1 "/lib64/" --#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/" -+#define STANDARD_STARTFILE_PREFIX_1 "/lib/" -+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" - #endif - - /* Load store bonding is not supported by micromips and fix_24k. The -diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64 -index 16c8adf85..bb46204db 100644 ---- a/gcc/config/mips/t-linux64 -+++ b/gcc/config/mips/t-linux64 -@@ -21,6 +21,6 @@ MULTILIB_DIRNAMES = n32 32 64 - MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el) - MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft) - MULTILIB_OSDIRNAMES = \ -- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ -- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ -- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) -+ ../lib \ -+ ../lib32 \ -+ ../lib --- -2.15.1 - diff --git a/aports/cross/gcc-aarch64/gcc-pure64.patch b/aports/cross/gcc-aarch64/gcc-pure64.patch deleted file mode 100644 index 2c350fe5..00000000 --- a/aports/cross/gcc-aarch64/gcc-pure64.patch +++ /dev/null @@ -1,89 +0,0 @@ ---- ./gcc/config/i386/t-linux64.orig 2013-01-14 16:32:37.000000000 +0000 -+++ ./gcc/config/i386/t-linux64 2013-04-22 06:12:32.984439677 +0000 -@@ -34,6 +34,6 @@ - comma=, - MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG)) - MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS))) --MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu) --MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32) ---- ./gcc/config/aarch64/t-aarch64-linux.orig -+++ ./gcc/config/aarch64/t-aarch64-linux -@@ -22,7 +22,7 @@ - LIB1ASMFUNCS = _aarch64_sync_cache_range - - AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be) --MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) -+MULTILIB_OSDIRNAMES = mabi.lp64=../lib - MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu) - - MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32 ---- ./gcc/config/s390/t-linux64.orig -+++ ./gcc/config/s390/t-linux64 -@@ -7,5 +7,5 @@ - MULTILIB_OPTIONS = m64/m31 - MULTILIB_DIRNAMES = 64 32 --MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu) --MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - ---- ./gcc/config/rs6000/t-linux.orig -+++ ./gcc/config/rs6000/t-linux -@@ -2,7 +2,8 @@ - # or soft-float. - ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float))) - ifneq (,$(findstring powerpc64,$(target))) --MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - else - ifneq (,$(findstring spe,$(target))) - MULTIARCH_DIRNAME := powerpc-linux-gnuspe$(if $(findstring 8548,$(with_cpu)),,v1) -@@ -14,7 +15,8 @@ - MULTIARCH_DIRNAME := $(subst -linux,le-linux,$(MULTIARCH_DIRNAME)) - endif - ifneq (,$(findstring powerpc64le,$(target))) --MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES)) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - endif - endif - ---- ./gcc/config/rs6000/t-linux64.orig -+++ ./gcc/config/rs6000/t-linux64 -@@ -28,8 +28,8 @@ - MULTILIB_OPTIONS := m64/m32 - MULTILIB_DIRNAMES := 64 32 - MULTILIB_EXTRA_OPTS := --MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu) --MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - - rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c - $(COMPILE) $< ---- ./gcc/config/rs6000/t-linux64bele.orig -+++ ./gcc/config/rs6000/t-linux64bele -@@ -2,6 +2,6 @@ - - MULTILIB_OPTIONS += mlittle - MULTILIB_DIRNAMES += le --MULTILIB_OSDIRNAMES += $(subst =,.mlittle=,$(subst lible32,lib32le,$(subst lible64,lib64le,$(subst lib,lible,$(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES)))))) --MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mlittle%,$(MULTILIB_OSDIRNAMES))) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN} ---- ./gcc/config/rs6000/t-linux64lebe.orig -+++ ./gcc/config/rs6000/t-linux64lebe -@@ -2,6 +2,6 @@ - - MULTILIB_OPTIONS += mbig - MULTILIB_DIRNAMES += be --MULTILIB_OSDIRNAMES += $(subst =,.mbig=,$(subst libbe32,lib32be,$(subst libbe64,lib64be,$(subst lib,libbe,$(subst le-linux,-linux,$(MULTILIB_OSDIRNAMES)))))) --MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mbig%,$(MULTILIB_OSDIRNAMES))) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN} diff --git a/aports/cross/gcc-aarch64/libgcc-always-build-gcceh.a.patch b/aports/cross/gcc-aarch64/libgcc-always-build-gcceh.a.patch deleted file mode 100644 index 74ae8973..00000000 --- a/aports/cross/gcc-aarch64/libgcc-always-build-gcceh.a.patch +++ /dev/null @@ -1,39 +0,0 @@ -Highly inspired by: - http://landley.net/hg/aboriginal/file/7e0747a665ab/sources/patches/gcc-core-libgcceh.patch - -diff -durN gcc-4.6.0.orig/libgcc/Makefile.in gcc-4.6.0/libgcc/Makefile.in ---- gcc-4.6.0.orig/libgcc/Makefile.in 2011-01-26 05:19:58.000000000 +0100 -+++ gcc-4.6.0/libgcc/Makefile.in 2011-09-12 18:17:12.743718974 +0200 -@@ -772,8 +772,9 @@ - libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT) - endif - -+all: libgcc_eh.a - ifeq ($(enable_shared),yes) --all: libgcc_eh.a libgcc_s$(SHLIB_EXT) -+all: libgcc_s$(SHLIB_EXT) - ifneq ($(LIBUNWIND),) - all: libunwind$(SHLIB_EXT) - endif -@@ -950,10 +951,6 @@ - install-shared: - $(mkinstalldirs) $(DESTDIR)$(inst_libdir) - -- $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ -- chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a -- $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a -- - $(subst @multilib_dir@,$(MULTIDIR),$(subst \ - @shlib_base_name@,libgcc_s,$(subst \ - @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL)))) -@@ -968,6 +965,10 @@ - chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a - $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a - -+ $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ -+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a -+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a -+ - parts="$(INSTALL_PARTS)"; \ - for file in $$parts; do \ - rm -f $(DESTDIR)$(inst_libdir)/$$file; \ diff --git a/aports/cross/gcc-armhf/0001-i386-Move-struct-ix86_frame-to-machine_function.patch b/aports/cross/gcc-armhf/0001-i386-Move-struct-ix86_frame-to-machine_function.patch deleted file mode 100644 index ecec2bad..00000000 --- a/aports/cross/gcc-armhf/0001-i386-Move-struct-ix86_frame-to-machine_function.patch +++ /dev/null @@ -1,241 +0,0 @@ -From b1d2df5090abc9202a7bf2d224ac90de22908d21 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 15 Jan 2018 11:27:24 +0000 -Subject: [PATCH 01/13] i386: Move struct ix86_frame to machine_function - -Make ix86_frame available to i386 code generation. This is needed to -backport the patch set of -mindirect-branch= to mitigate variant #2 of -the speculative execution vulnerabilities on x86 processors identified -by CVE-2017-5715, aka Spectre. - - Backport from mainline - 2017-06-01 Bernd Edlinger - - * config/i386/i386.c (ix86_frame): Moved to ... - * config/i386/i386.h (ix86_frame): Here. - (machine_function): Add frame. - * config/i386/i386.c (ix86_compute_frame_layout): Repace the - frame argument with &cfun->machine->frame. - (ix86_can_use_return_insn_p): Don't pass &frame to - ix86_compute_frame_layout. Copy frame from cfun->machine->frame. - (ix86_can_eliminate): Likewise. - (ix86_expand_prologue): Likewise. - (ix86_expand_epilogue): Likewise. - (ix86_expand_split_stack_prologue): Likewise. ---- - gcc/config/i386/i386.c | 68 ++++++++++---------------------------------------- - gcc/config/i386/i386.h | 53 ++++++++++++++++++++++++++++++++++++++- - 2 files changed, 65 insertions(+), 56 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 8b5faac5129..a1ff32b648b 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -2434,53 +2434,6 @@ struct GTY(()) stack_local_entry { - struct stack_local_entry *next; - }; - --/* Structure describing stack frame layout. -- Stack grows downward: -- -- [arguments] -- <- ARG_POINTER -- saved pc -- -- saved static chain if ix86_static_chain_on_stack -- -- saved frame pointer if frame_pointer_needed -- <- HARD_FRAME_POINTER -- [saved regs] -- <- regs_save_offset -- [padding0] -- -- [saved SSE regs] -- <- sse_regs_save_offset -- [padding1] | -- | <- FRAME_POINTER -- [va_arg registers] | -- | -- [frame] | -- | -- [padding2] | = to_allocate -- <- STACK_POINTER -- */ --struct ix86_frame --{ -- int nsseregs; -- int nregs; -- int va_arg_size; -- int red_zone_size; -- int outgoing_arguments_size; -- -- /* The offsets relative to ARG_POINTER. */ -- HOST_WIDE_INT frame_pointer_offset; -- HOST_WIDE_INT hard_frame_pointer_offset; -- HOST_WIDE_INT stack_pointer_offset; -- HOST_WIDE_INT hfp_save_offset; -- HOST_WIDE_INT reg_save_offset; -- HOST_WIDE_INT sse_reg_save_offset; -- -- /* When save_regs_using_mov is set, emit prologue using -- move instead of push instructions. */ -- bool save_regs_using_mov; --}; -- - /* Which cpu are we scheduling for. */ - enum attr_cpu ix86_schedule; - -@@ -2572,7 +2525,7 @@ static unsigned int ix86_function_arg_boundary (machine_mode, - const_tree); - static rtx ix86_static_chain (const_tree, bool); - static int ix86_function_regparm (const_tree, const_tree); --static void ix86_compute_frame_layout (struct ix86_frame *); -+static void ix86_compute_frame_layout (void); - static bool ix86_expand_vector_init_one_nonzero (bool, machine_mode, - rtx, rtx, int); - static void ix86_add_new_builtins (HOST_WIDE_INT); -@@ -10944,7 +10897,8 @@ ix86_can_use_return_insn_p (void) - if (crtl->args.pops_args && crtl->args.size >= 32768) - return 0; - -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = cfun->machine->frame; - return (frame.stack_pointer_offset == UNITS_PER_WORD - && (frame.nregs + frame.nsseregs) == 0); - } -@@ -11355,8 +11309,8 @@ ix86_can_eliminate (const int from, const int to) - HOST_WIDE_INT - ix86_initial_elimination_offset (int from, int to) - { -- struct ix86_frame frame; -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ struct ix86_frame frame = cfun->machine->frame; - - if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) - return frame.hard_frame_pointer_offset; -@@ -11395,8 +11349,9 @@ ix86_builtin_setjmp_frame_value (void) - /* Fill structure ix86_frame about frame of currently computed function. */ - - static void --ix86_compute_frame_layout (struct ix86_frame *frame) -+ix86_compute_frame_layout (void) - { -+ struct ix86_frame *frame = &cfun->machine->frame; - unsigned HOST_WIDE_INT stack_alignment_needed; - HOST_WIDE_INT offset; - unsigned HOST_WIDE_INT preferred_alignment; -@@ -12702,7 +12657,8 @@ ix86_expand_prologue (void) - m->fs.sp_offset = INCOMING_FRAME_SP_OFFSET; - m->fs.sp_valid = true; - -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = m->frame; - - if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) - { -@@ -13379,7 +13335,8 @@ ix86_expand_epilogue (int style) - bool using_drap; - - ix86_finalize_stack_realign_flags (); -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = m->frame; - - m->fs.sp_valid = (!frame_pointer_needed - || (crtl->sp_is_unchanging -@@ -13876,7 +13833,8 @@ ix86_expand_split_stack_prologue (void) - gcc_assert (flag_split_stack && reload_completed); - - ix86_finalize_stack_realign_flags (); -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = cfun->machine->frame; - allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; - - /* This is the label we will branch to if we have enough stack -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 8113f83c7fd..54144166172 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2427,9 +2427,56 @@ enum avx_u128_state - - #define FASTCALL_PREFIX '@' - -+#ifndef USED_FOR_TARGET -+/* Structure describing stack frame layout. -+ Stack grows downward: -+ -+ [arguments] -+ <- ARG_POINTER -+ saved pc -+ -+ saved static chain if ix86_static_chain_on_stack -+ -+ saved frame pointer if frame_pointer_needed -+ <- HARD_FRAME_POINTER -+ [saved regs] -+ <- regs_save_offset -+ [padding0] -+ -+ [saved SSE regs] -+ <- sse_regs_save_offset -+ [padding1] | -+ | <- FRAME_POINTER -+ [va_arg registers] | -+ | -+ [frame] | -+ | -+ [padding2] | = to_allocate -+ <- STACK_POINTER -+ */ -+struct GTY(()) ix86_frame -+{ -+ int nsseregs; -+ int nregs; -+ int va_arg_size; -+ int red_zone_size; -+ int outgoing_arguments_size; -+ -+ /* The offsets relative to ARG_POINTER. */ -+ HOST_WIDE_INT frame_pointer_offset; -+ HOST_WIDE_INT hard_frame_pointer_offset; -+ HOST_WIDE_INT stack_pointer_offset; -+ HOST_WIDE_INT hfp_save_offset; -+ HOST_WIDE_INT reg_save_offset; -+ HOST_WIDE_INT sse_reg_save_offset; -+ -+ /* When save_regs_using_mov is set, emit prologue using -+ move instead of push instructions. */ -+ bool save_regs_using_mov; -+}; -+ - /* Machine specific frame tracking during prologue/epilogue generation. */ - --#ifndef USED_FOR_TARGET - struct GTY(()) machine_frame_state - { - /* This pair tracks the currently active CFA as reg+offset. When reg -@@ -2475,6 +2522,9 @@ struct GTY(()) machine_function { - int varargs_fpr_size; - int optimize_mode_switching[MAX_386_ENTITIES]; - -+ /* Cached initial frame layout for the current function. */ -+ struct ix86_frame frame; -+ - /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE - has been computed for. */ - int use_fast_prologue_epilogue_nregs; -@@ -2554,6 +2604,7 @@ struct GTY(()) machine_function { - #define ix86_current_function_calls_tls_descriptor \ - (ix86_tls_descriptor_calls_expanded_in_cfun && df_regs_ever_live_p (SP_REG)) - #define ix86_static_chain_on_stack (cfun->machine->static_chain_on_stack) -+#define ix86_red_zone_size (cfun->machine->frame.red_zone_size) - - /* Control behavior of x86_file_start. */ - #define X86_FILE_START_VERSION_DIRECTIVE false --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch b/aports/cross/gcc-armhf/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch deleted file mode 100644 index 79219e85..00000000 --- a/aports/cross/gcc-armhf/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch +++ /dev/null @@ -1,69 +0,0 @@ -From b1fc91cda7c15264116f3dde6944ead149123653 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 15 Jan 2018 11:28:44 +0000 -Subject: [PATCH 02/13] i386: Use reference of struct ix86_frame to avoid copy - -When there is no need to make a copy of ix86_frame, we can use reference -of struct ix86_frame to avoid copy. - - Backport from mainline - 2017-11-06 H.J. Lu - - * config/i386/i386.c (ix86_can_use_return_insn_p): Use reference - of struct ix86_frame. - (ix86_initial_elimination_offset): Likewise. - (ix86_expand_split_stack_prologue): Likewise. ---- - gcc/config/i386/i386.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index a1ff32b648b..13ebf107e90 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -10887,7 +10887,6 @@ symbolic_reference_mentioned_p (rtx op) - bool - ix86_can_use_return_insn_p (void) - { -- struct ix86_frame frame; - - if (! reload_completed || frame_pointer_needed) - return 0; -@@ -10898,7 +10897,7 @@ ix86_can_use_return_insn_p (void) - return 0; - - ix86_compute_frame_layout (); -- frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - return (frame.stack_pointer_offset == UNITS_PER_WORD - && (frame.nregs + frame.nsseregs) == 0); - } -@@ -11310,7 +11309,7 @@ HOST_WIDE_INT - ix86_initial_elimination_offset (int from, int to) - { - ix86_compute_frame_layout (); -- struct ix86_frame frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - - if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) - return frame.hard_frame_pointer_offset; -@@ -13821,7 +13820,6 @@ static GTY(()) rtx split_stack_fn_large; - void - ix86_expand_split_stack_prologue (void) - { -- struct ix86_frame frame; - HOST_WIDE_INT allocate; - unsigned HOST_WIDE_INT args_size; - rtx_code_label *label; -@@ -13834,7 +13832,7 @@ ix86_expand_split_stack_prologue (void) - - ix86_finalize_stack_realign_flags (); - ix86_compute_frame_layout (); -- frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; - - /* This is the label we will branch to if we have enough stack --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch b/aports/cross/gcc-armhf/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch deleted file mode 100644 index 2f293946..00000000 --- a/aports/cross/gcc-armhf/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 3e39c0a8053b3e960cf4c3aea3c814e7dc97cfd6 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Sat, 27 Jan 2018 13:10:24 +0000 -Subject: [PATCH 03/13] i386: Use const reference of struct ix86_frame to avoid - copy - -We can use const reference of struct ix86_frame to avoid making a local -copy of ix86_frame. ix86_expand_epilogue makes a local copy of struct -ix86_frame and uses the reg_save_offset field as a local variable. This -patch uses a separate local variable for reg_save_offset. - -Tested on x86-64 with ada. - - Backport from mainline - PR target/83905 - * config/i386/i386.c (ix86_expand_prologue): Use cost reference - of struct ix86_frame. - (ix86_expand_epilogue): Likewise. Add a local variable for - the reg_save_offset field in struct ix86_frame. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257123 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 13ebf107e90..6c98f7581e2 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -12633,7 +12633,6 @@ ix86_expand_prologue (void) - { - struct machine_function *m = cfun->machine; - rtx insn, t; -- struct ix86_frame frame; - HOST_WIDE_INT allocate; - bool int_registers_saved; - bool sse_registers_saved; -@@ -12657,7 +12656,7 @@ ix86_expand_prologue (void) - m->fs.sp_valid = true; - - ix86_compute_frame_layout (); -- frame = m->frame; -+ const struct ix86_frame &frame = cfun->machine->frame; - - if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) - { -@@ -13329,13 +13328,12 @@ ix86_expand_epilogue (int style) - { - struct machine_function *m = cfun->machine; - struct machine_frame_state frame_state_save = m->fs; -- struct ix86_frame frame; - bool restore_regs_via_mov; - bool using_drap; - - ix86_finalize_stack_realign_flags (); - ix86_compute_frame_layout (); -- frame = m->frame; -+ const struct ix86_frame &frame = cfun->machine->frame; - - m->fs.sp_valid = (!frame_pointer_needed - || (crtl->sp_is_unchanging -@@ -13377,11 +13375,13 @@ ix86_expand_epilogue (int style) - + UNITS_PER_WORD); - } - -+ HOST_WIDE_INT reg_save_offset = frame.reg_save_offset; -+ - /* Special care must be taken for the normal return case of a function - using eh_return: the eax and edx registers are marked as saved, but - not restored along this path. Adjust the save location to match. */ - if (crtl->calls_eh_return && style != 2) -- frame.reg_save_offset -= 2 * UNITS_PER_WORD; -+ reg_save_offset -= 2 * UNITS_PER_WORD; - - /* EH_RETURN requires the use of moves to function properly. */ - if (crtl->calls_eh_return) -@@ -13397,11 +13397,11 @@ ix86_expand_epilogue (int style) - else if (TARGET_EPILOGUE_USING_MOVE - && cfun->machine->use_fast_prologue_epilogue - && (frame.nregs > 1 -- || m->fs.sp_offset != frame.reg_save_offset)) -+ || m->fs.sp_offset != reg_save_offset)) - restore_regs_via_mov = true; - else if (frame_pointer_needed - && !frame.nregs -- && m->fs.sp_offset != frame.reg_save_offset) -+ && m->fs.sp_offset != reg_save_offset) - restore_regs_via_mov = true; - else if (frame_pointer_needed - && TARGET_USE_LEAVE -@@ -13439,7 +13439,7 @@ ix86_expand_epilogue (int style) - rtx t; - - if (frame.nregs) -- ix86_emit_restore_regs_using_mov (frame.reg_save_offset, style == 2); -+ ix86_emit_restore_regs_using_mov (reg_save_offset, style == 2); - - /* eh_return epilogues need %ecx added to the stack pointer. */ - if (style == 2) -@@ -13529,19 +13529,19 @@ ix86_expand_epilogue (int style) - epilogues. */ - if (!m->fs.sp_valid - || (TARGET_SEH -- && (m->fs.sp_offset - frame.reg_save_offset -+ && (m->fs.sp_offset - reg_save_offset - >= SEH_MAX_FRAME_SIZE))) - { - pro_epilogue_adjust_stack (stack_pointer_rtx, hard_frame_pointer_rtx, - GEN_INT (m->fs.fp_offset -- - frame.reg_save_offset), -+ - reg_save_offset), - style, false); - } -- else if (m->fs.sp_offset != frame.reg_save_offset) -+ else if (m->fs.sp_offset != reg_save_offset) - { - pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, - GEN_INT (m->fs.sp_offset -- - frame.reg_save_offset), -+ - reg_save_offset), - style, - m->fs.cfa_reg == stack_pointer_rtx); - } --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0004-x86-Add-mindirect-branch.patch b/aports/cross/gcc-armhf/0004-x86-Add-mindirect-branch.patch deleted file mode 100644 index db5fe2f4..00000000 --- a/aports/cross/gcc-armhf/0004-x86-Add-mindirect-branch.patch +++ /dev/null @@ -1,2149 +0,0 @@ -From 64da0f4b794672ae14350b09c276422f79f78fc0 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:55 -0800 -Subject: [PATCH 04/13] x86: Add -mindirect-branch= - -Add -mindirect-branch= option to convert indirect call and jump to call -and return thunks. The default is 'keep', which keeps indirect call and -jump unmodified. 'thunk' converts indirect call and jump to call and -return thunk. 'thunk-inline' converts indirect call and jump to inlined -call and return thunk. 'thunk-extern' converts indirect call and jump to -external call and return thunk provided in a separate object file. You -can control this behavior for a specific function by using the function -attribute indirect_branch. - -2 kinds of thunks are geneated. Memory thunk where the function address -is at the top of the stack: - -__x86_indirect_thunk: - call L2 -L1: - pause - lfence - jmp L1 -L2: - lea 8(%rsp), %rsp|lea 4(%esp), %esp - ret - -Indirect jmp via memory, "jmp mem", is converted to - - push memory - jmp __x86_indirect_thunk - -Indirect call via memory, "call mem", is converted to - - jmp L2 -L1: - push [mem] - jmp __x86_indirect_thunk -L2: - call L1 - -Register thunk where the function address is in a register, reg: - -__x86_indirect_thunk_reg: - call L2 -L1: - pause - lfence - jmp L1 -L2: - movq %reg, (%rsp)|movl %reg, (%esp) - ret - -where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di, -(r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15. - -Indirect jmp via register, "jmp reg", is converted to - - jmp __x86_indirect_thunk_reg - -Indirect call via register, "call reg", is converted to - - call __x86_indirect_thunk_reg - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386-opts.h (indirect_branch): New. - * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise. - * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone - with local indirect jump when converting indirect call and jump. - (ix86_set_indirect_branch_type): New. - (ix86_set_current_function): Call ix86_set_indirect_branch_type. - (indirectlabelno): New. - (indirect_thunk_needed): Likewise. - (indirect_thunk_bnd_needed): Likewise. - (indirect_thunks_used): Likewise. - (indirect_thunks_bnd_used): Likewise. - (INDIRECT_LABEL): Likewise. - (indirect_thunk_name): Likewise. - (output_indirect_thunk): Likewise. - (output_indirect_thunk_function): Likewise. - (ix86_output_indirect_branch_via_reg): Likewise. - (ix86_output_indirect_branch_via_push): Likewise. - (ix86_output_indirect_branch): Likewise. - (ix86_output_indirect_jmp): Likewise. - (ix86_code_end): Call output_indirect_thunk_function if needed. - (ix86_output_call_insn): Call ix86_output_indirect_branch if - needed. - (ix86_handle_fndecl_attribute): Handle indirect_branch. - (ix86_attribute_table): Add indirect_branch. - * config/i386/i386.h (machine_function): Add indirect_branch_type - and has_local_indirect_jump. - * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump - to true. - (tablejump): Likewise. - (*indirect_jump): Use ix86_output_indirect_jmp. - (*tablejump_1): Likewise. - (simple_return_indirect_internal): Likewise. - * config/i386/i386.opt (mindirect-branch=): New option. - (indirect_branch): New. - (keep): Likewise. - (thunk): Likewise. - (thunk-inline): Likewise. - (thunk-extern): Likewise. - * doc/extend.texi: Document indirect_branch function attribute. - * doc/invoke.texi: Document -mindirect-branch= option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c: New test. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. ---- - gcc/config/i386/i386-opts.h | 13 + - gcc/config/i386/i386-protos.h | 1 + - gcc/config/i386/i386.c | 639 ++++++++++++++++++++- - gcc/config/i386/i386.h | 7 + - gcc/config/i386/i386.md | 26 +- - gcc/config/i386/i386.opt | 20 + - gcc/doc/extend.texi | 10 + - gcc/doc/invoke.texi | 13 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 20 + - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 20 + - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 21 + - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 21 + - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 17 + - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 18 + - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 44 ++ - .../gcc.target/i386/indirect-thunk-attr-1.c | 23 + - .../gcc.target/i386/indirect-thunk-attr-2.c | 21 + - .../gcc.target/i386/indirect-thunk-attr-3.c | 23 + - .../gcc.target/i386/indirect-thunk-attr-4.c | 22 + - .../gcc.target/i386/indirect-thunk-attr-5.c | 22 + - .../gcc.target/i386/indirect-thunk-attr-6.c | 21 + - .../gcc.target/i386/indirect-thunk-attr-7.c | 44 ++ - .../gcc.target/i386/indirect-thunk-attr-8.c | 42 ++ - .../gcc.target/i386/indirect-thunk-bnd-1.c | 20 + - .../gcc.target/i386/indirect-thunk-bnd-2.c | 21 + - .../gcc.target/i386/indirect-thunk-bnd-3.c | 19 + - .../gcc.target/i386/indirect-thunk-bnd-4.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-1.c | 19 + - .../gcc.target/i386/indirect-thunk-extern-2.c | 19 + - .../gcc.target/i386/indirect-thunk-extern-3.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-4.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-5.c | 16 + - .../gcc.target/i386/indirect-thunk-extern-6.c | 17 + - .../gcc.target/i386/indirect-thunk-extern-7.c | 43 ++ - .../gcc.target/i386/indirect-thunk-inline-1.c | 20 + - .../gcc.target/i386/indirect-thunk-inline-2.c | 20 + - .../gcc.target/i386/indirect-thunk-inline-3.c | 21 + - .../gcc.target/i386/indirect-thunk-inline-4.c | 21 + - .../gcc.target/i386/indirect-thunk-inline-5.c | 17 + - .../gcc.target/i386/indirect-thunk-inline-6.c | 18 + - .../gcc.target/i386/indirect-thunk-inline-7.c | 44 ++ - 41 files changed, 1486 insertions(+), 17 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c - -diff --git a/gcc/config/i386/i386-opts.h b/gcc/config/i386/i386-opts.h -index b7f92e3bea1..cc21152875f 100644 ---- a/gcc/config/i386/i386-opts.h -+++ b/gcc/config/i386/i386-opts.h -@@ -99,4 +99,17 @@ enum stack_protector_guard { - SSP_GLOBAL /* global canary */ - }; - -+/* This is used to mitigate variant #2 of the speculative execution -+ vulnerabilities on x86 processors identified by CVE-2017-5715, aka -+ Spectre. They convert indirect branches and function returns to -+ call and return thunks to avoid speculative execution via indirect -+ call, jmp and ret. */ -+enum indirect_branch { -+ indirect_branch_unset = 0, -+ indirect_branch_keep, -+ indirect_branch_thunk, -+ indirect_branch_thunk_inline, -+ indirect_branch_thunk_extern -+}; -+ - #endif -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index ff47bc15600..eca4cbf0776 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -311,6 +311,7 @@ extern enum attr_cpu ix86_schedule; - #endif - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); -+extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 6c98f7581e2..0b9fc4d3026 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -3662,12 +3662,23 @@ make_pass_stv (gcc::context *ctxt) - return new pass_stv (ctxt); - } - --/* Return true if a red-zone is in use. */ -+/* Return true if a red-zone is in use. We can't use red-zone when -+ there are local indirect jumps, like "indirect_jump" or "tablejump", -+ which jumps to another place in the function, since "call" in the -+ indirect thunk pushes the return address onto stack, destroying -+ red-zone. -+ -+ TODO: If we can reserve the first 2 WORDs, for PUSH and, another -+ for CALL, in red-zone, we can allow local indirect jumps with -+ indirect thunk. */ - - bool - ix86_using_red_zone (void) - { -- return TARGET_RED_ZONE && !TARGET_64BIT_MS_ABI; -+ return (TARGET_RED_ZONE -+ && !TARGET_64BIT_MS_ABI -+ && (!cfun->machine->has_local_indirect_jump -+ || cfun->machine->indirect_branch_type == indirect_branch_keep)); - } - - /* Return a string that documents the current -m options. The caller is -@@ -6350,6 +6361,37 @@ ix86_reset_previous_fndecl (void) - ix86_previous_fndecl = NULL_TREE; - } - -+/* Set the indirect_branch_type field from the function FNDECL. */ -+ -+static void -+ix86_set_indirect_branch_type (tree fndecl) -+{ -+ if (cfun->machine->indirect_branch_type == indirect_branch_unset) -+ { -+ tree attr = lookup_attribute ("indirect_branch", -+ DECL_ATTRIBUTES (fndecl)); -+ if (attr != NULL) -+ { -+ tree args = TREE_VALUE (attr); -+ if (args == NULL) -+ gcc_unreachable (); -+ tree cst = TREE_VALUE (args); -+ if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_keep; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk_inline; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk_extern; -+ else -+ gcc_unreachable (); -+ } -+ else -+ cfun->machine->indirect_branch_type = ix86_indirect_branch; -+ } -+} -+ - /* Establish appropriate back-end context for processing the function - FNDECL. The argument might be NULL to indicate processing at top - level, outside of any function scope. */ -@@ -6360,7 +6402,13 @@ ix86_set_current_function (tree fndecl) - several times in the course of compiling a function, and we don't want to - slow things down too much or call target_reinit when it isn't safe. */ - if (fndecl == ix86_previous_fndecl) -- return; -+ { -+ /* There may be 2 function bodies for the same function FNDECL, -+ one is extern inline and one isn't. */ -+ if (fndecl != NULL_TREE) -+ ix86_set_indirect_branch_type (fndecl); -+ return; -+ } - - tree old_tree; - if (ix86_previous_fndecl == NULL_TREE) -@@ -6377,6 +6425,8 @@ ix86_set_current_function (tree fndecl) - return; - } - -+ ix86_set_indirect_branch_type (fndecl); -+ - tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl); - if (new_tree == NULL_TREE) - new_tree = target_option_default_node; -@@ -10962,6 +11012,220 @@ ix86_setup_frame_addresses (void) - # endif - #endif - -+/* Label count for call and return thunks. It is used to make unique -+ labels in call and return thunks. */ -+static int indirectlabelno; -+ -+/* True if call and return thunk functions are needed. */ -+static bool indirect_thunk_needed = false; -+/* True if call and return thunk functions with the BND prefix are -+ needed. */ -+static bool indirect_thunk_bnd_needed = false; -+ -+/* Bit masks of integer registers, which contain branch target, used -+ by call and return thunks functions. */ -+static int indirect_thunks_used; -+/* Bit masks of integer registers, which contain branch target, used -+ by call and return thunks functions with the BND prefix. */ -+static int indirect_thunks_bnd_used; -+ -+#ifndef INDIRECT_LABEL -+# define INDIRECT_LABEL "LIND" -+#endif -+ -+/* Fills in the label name that should be used for the indirect thunk. */ -+ -+static void -+indirect_thunk_name (char name[32], int regno, bool need_bnd_p) -+{ -+ if (USE_HIDDEN_LINKONCE) -+ { -+ const char *bnd = need_bnd_p ? "_bnd" : ""; -+ if (regno >= 0) -+ { -+ const char *reg_prefix; -+ if (LEGACY_INT_REGNO_P (regno)) -+ reg_prefix = TARGET_64BIT ? "r" : "e"; -+ else -+ reg_prefix = ""; -+ sprintf (name, "__x86_indirect_thunk%s_%s%s", -+ bnd, reg_prefix, reg_names[regno]); -+ } -+ else -+ sprintf (name, "__x86_indirect_thunk%s", bnd); -+ } -+ else -+ { -+ if (regno >= 0) -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITR", regno); -+ } -+ else -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ } -+ } -+} -+ -+/* Output a call and return thunk for indirect branch. If BND_P is -+ true, the BND prefix is needed. If REGNO != -1, the function -+ address is in REGNO and the call and return thunk looks like: -+ -+ call L2 -+ L1: -+ pause -+ jmp L1 -+ L2: -+ mov %REG, (%sp) -+ ret -+ -+ Otherwise, the function address is on the top of stack and the -+ call and return thunk looks like: -+ -+ call L2 -+ L1: -+ pause -+ jmp L1 -+ L2: -+ lea WORD_SIZE(%sp), %sp -+ ret -+ */ -+ -+static void -+output_indirect_thunk (bool need_bnd_p, int regno) -+{ -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Call */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ /* Pause + lfence. */ -+ fprintf (asm_out_file, "\tpause\n\tlfence\n"); -+ -+ /* Jump. */ -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ if (regno >= 0) -+ { -+ /* MOV. */ -+ rtx xops[2]; -+ xops[0] = gen_rtx_MEM (word_mode, stack_pointer_rtx); -+ xops[1] = gen_rtx_REG (word_mode, regno); -+ output_asm_insn ("mov\t{%1, %0|%0, %1}", xops); -+ } -+ else -+ { -+ /* LEA. */ -+ rtx xops[2]; -+ xops[0] = stack_pointer_rtx; -+ xops[1] = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD); -+ output_asm_insn ("lea\t{%E1, %0|%0, %E1}", xops); -+ } -+ -+ if (need_bnd_p) -+ fputs ("\tbnd ret\n", asm_out_file); -+ else -+ fputs ("\tret\n", asm_out_file); -+} -+ -+/* Output a funtion with a call and return thunk for indirect branch. -+ If BND_P is true, the BND prefix is needed. If REGNO != -1, the -+ function address is in REGNO. Otherwise, the function address is -+ on the top of stack. */ -+ -+static void -+output_indirect_thunk_function (bool need_bnd_p, int regno) -+{ -+ char name[32]; -+ tree decl; -+ -+ /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -+ indirect_thunk_name (name, regno, need_bnd_p); -+ decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, -+ get_identifier (name), -+ build_function_type_list (void_type_node, NULL_TREE)); -+ DECL_RESULT (decl) = build_decl (BUILTINS_LOCATION, RESULT_DECL, -+ NULL_TREE, void_type_node); -+ TREE_PUBLIC (decl) = 1; -+ TREE_STATIC (decl) = 1; -+ DECL_IGNORED_P (decl) = 1; -+ -+#if TARGET_MACHO -+ if (TARGET_MACHO) -+ { -+ switch_to_section (darwin_sections[picbase_thunk_section]); -+ fputs ("\t.weak_definition\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ fputs ("\n\t.private_extern\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ putc ('\n', asm_out_file); -+ ASM_OUTPUT_LABEL (asm_out_file, name); -+ DECL_WEAK (decl) = 1; -+ } -+ else -+#endif -+ if (USE_HIDDEN_LINKONCE) -+ { -+ cgraph_node::create (decl)->set_comdat_group (DECL_ASSEMBLER_NAME (decl)); -+ -+ targetm.asm_out.unique_section (decl, 0); -+ switch_to_section (get_named_section (decl, NULL, 0)); -+ -+ targetm.asm_out.globalize_label (asm_out_file, name); -+ fputs ("\t.hidden\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ putc ('\n', asm_out_file); -+ ASM_DECLARE_FUNCTION_NAME (asm_out_file, name, decl); -+ } -+ else -+ { -+ switch_to_section (text_section); -+ ASM_OUTPUT_LABEL (asm_out_file, name); -+ } -+ -+ DECL_INITIAL (decl) = make_node (BLOCK); -+ current_function_decl = decl; -+ allocate_struct_function (decl, false); -+ init_function_start (decl); -+ /* We're about to hide the function body from callees of final_* by -+ emitting it directly; tell them we're a thunk, if they care. */ -+ cfun->is_thunk = true; -+ first_function_block_is_cold = false; -+ /* Make sure unwind info is emitted for the thunk if needed. */ -+ final_start_function (emit_barrier (), asm_out_file, 1); -+ -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ final_end_function (); -+ init_insn_lengths (); -+ free_after_compilation (cfun); -+ set_cfun (NULL); -+ current_function_decl = NULL; -+} -+ - static int pic_labels_used; - - /* Fills in the label name that should be used for a pc thunk for -@@ -10988,11 +11252,32 @@ ix86_code_end (void) - rtx xops[2]; - int regno; - -+ if (indirect_thunk_needed) -+ output_indirect_thunk_function (false, -1); -+ if (indirect_thunk_bnd_needed) -+ output_indirect_thunk_function (true, -1); -+ -+ for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) -+ { -+ int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; -+ if ((indirect_thunks_used & (1 << i))) -+ output_indirect_thunk_function (false, regno); -+ -+ if ((indirect_thunks_bnd_used & (1 << i))) -+ output_indirect_thunk_function (true, regno); -+ } -+ - for (regno = AX_REG; regno <= SP_REG; regno++) - { - char name[32]; - tree decl; - -+ if ((indirect_thunks_used & (1 << regno))) -+ output_indirect_thunk_function (false, regno); -+ -+ if ((indirect_thunks_bnd_used & (1 << regno))) -+ output_indirect_thunk_function (true, regno); -+ - if (!(pic_labels_used & (1 << regno))) - continue; - -@@ -27369,12 +27654,292 @@ ix86_nopic_noplt_attribute_p (rtx call_op) - return false; - } - -+/* Output indirect branch via a call and return thunk. CALL_OP is a -+ register which contains the branch target. XASM is the assembly -+ template for CALL_OP. Branch is a tail call if SIBCALL_P is true. -+ A normal call is converted to: -+ -+ call __x86_indirect_thunk_reg -+ -+ and a tail call is converted to: -+ -+ jmp __x86_indirect_thunk_reg -+ */ -+ -+static void -+ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p) -+{ -+ char thunk_name_buf[32]; -+ char *thunk_name; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ int regno = REGNO (call_op); -+ -+ if (cfun->machine->indirect_branch_type -+ != indirect_branch_thunk_inline) -+ { -+ if (cfun->machine->indirect_branch_type == indirect_branch_thunk) -+ { -+ int i = regno; -+ if (i >= FIRST_REX_INT_REG) -+ i -= (FIRST_REX_INT_REG - LAST_INT_REG - 1); -+ if (need_bnd_p) -+ indirect_thunks_bnd_used |= 1 << i; -+ else -+ indirect_thunks_used |= 1 << i; -+ } -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ thunk_name = thunk_name_buf; -+ } -+ else -+ thunk_name = NULL; -+ -+ if (sibcall_p) -+ { -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ } -+ else -+ { -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd call\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tcall\t%s\n", thunk_name); -+ return; -+ } -+ -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Jump. */ -+ if (need_bnd_p) -+ fputs ("\tbnd jmp\t", asm_out_file); -+ else -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ /* Call. */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ } -+} -+ -+/* Output indirect branch via a call and return thunk. CALL_OP is -+ the branch target. XASM is the assembly template for CALL_OP. -+ Branch is a tail call if SIBCALL_P is true. A normal call is -+ converted to: -+ -+ jmp L2 -+ L1: -+ push CALL_OP -+ jmp __x86_indirect_thunk -+ L2: -+ call L1 -+ -+ and a tail call is converted to: -+ -+ push CALL_OP -+ jmp __x86_indirect_thunk -+ */ -+ -+static void -+ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm, -+ bool sibcall_p) -+{ -+ char thunk_name_buf[32]; -+ char *thunk_name; -+ char push_buf[64]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ int regno = -1; -+ -+ if (cfun->machine->indirect_branch_type -+ != indirect_branch_thunk_inline) -+ { -+ if (cfun->machine->indirect_branch_type == indirect_branch_thunk) -+ { -+ if (need_bnd_p) -+ indirect_thunk_bnd_needed = true; -+ else -+ indirect_thunk_needed = true; -+ } -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ thunk_name = thunk_name_buf; -+ } -+ else -+ thunk_name = NULL; -+ -+ snprintf (push_buf, sizeof (push_buf), "push{%c}\t%s", -+ TARGET_64BIT ? 'q' : 'l', xasm); -+ -+ if (sibcall_p) -+ { -+ output_asm_insn (push_buf, &call_op); -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ } -+ else -+ { -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Jump. */ -+ if (need_bnd_p) -+ fputs ("\tbnd jmp\t", asm_out_file); -+ else -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ /* An external function may be called via GOT, instead of PLT. */ -+ if (MEM_P (call_op)) -+ { -+ struct ix86_address parts; -+ rtx addr = XEXP (call_op, 0); -+ if (ix86_decompose_address (addr, &parts) -+ && parts.base == stack_pointer_rtx) -+ { -+ /* Since call will adjust stack by -UNITS_PER_WORD, -+ we must convert "disp(stack, index, scale)" to -+ "disp+UNITS_PER_WORD(stack, index, scale)". */ -+ if (parts.index) -+ { -+ addr = gen_rtx_MULT (Pmode, parts.index, -+ GEN_INT (parts.scale)); -+ addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, -+ addr); -+ } -+ else -+ addr = stack_pointer_rtx; -+ -+ rtx disp; -+ if (parts.disp != NULL_RTX) -+ disp = plus_constant (Pmode, parts.disp, -+ UNITS_PER_WORD); -+ else -+ disp = GEN_INT (UNITS_PER_WORD); -+ -+ addr = gen_rtx_PLUS (Pmode, addr, disp); -+ call_op = gen_rtx_MEM (GET_MODE (call_op), addr); -+ } -+ } -+ -+ output_asm_insn (push_buf, &call_op); -+ -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ /* Call. */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ } -+} -+ -+/* Output indirect branch via a call and return thunk. CALL_OP is -+ the branch target. XASM is the assembly template for CALL_OP. -+ Branch is a tail call if SIBCALL_P is true. */ -+ -+static void -+ix86_output_indirect_branch (rtx call_op, const char *xasm, -+ bool sibcall_p) -+{ -+ if (REG_P (call_op)) -+ ix86_output_indirect_branch_via_reg (call_op, sibcall_p); -+ else -+ ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p); -+} -+/* Output indirect jump. CALL_OP is the jump target. Jump is a -+ function return if RET_P is true. */ -+ -+const char * -+ix86_output_indirect_jmp (rtx call_op, bool ret_p) -+{ -+ if (cfun->machine->indirect_branch_type != indirect_branch_keep) -+ { -+ /* We can't have red-zone if this isn't a function return since -+ "call" in the indirect thunk pushes the return address onto -+ stack, destroying red-zone. */ -+ if (!ret_p && ix86_red_zone_size != 0) -+ gcc_unreachable (); -+ -+ ix86_output_indirect_branch (call_op, "%0", true); -+ return ""; -+ } -+ else -+ return "%!jmp\t%A0"; -+} -+ - /* Output the assembly for a call instruction. */ - - const char * - ix86_output_call_insn (rtx_insn *insn, rtx call_op) - { - bool direct_p = constant_call_address_operand (call_op, VOIDmode); -+ bool output_indirect_p -+ = (!TARGET_SEH -+ && cfun->machine->indirect_branch_type != indirect_branch_keep); - bool seh_nop_p = false; - const char *xasm; - -@@ -27383,7 +27948,13 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - if (direct_p) - { - if (ix86_nopic_noplt_attribute_p (call_op)) -- xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ { -+ direct_p = false; -+ if (output_indirect_p) -+ xasm = "{%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ else -+ xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ } - else - xasm = "%!jmp\t%P0"; - } -@@ -27392,9 +27963,17 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - else if (TARGET_SEH) - xasm = "%!rex.W jmp\t%A0"; - else -- xasm = "%!jmp\t%A0"; -+ { -+ if (output_indirect_p) -+ xasm = "%0"; -+ else -+ xasm = "%!jmp\t%A0"; -+ } - -- output_asm_insn (xasm, &call_op); -+ if (output_indirect_p && !direct_p) -+ ix86_output_indirect_branch (call_op, xasm, true); -+ else -+ output_asm_insn (xasm, &call_op); - return ""; - } - -@@ -27431,14 +28010,28 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - if (direct_p) - { - if (ix86_nopic_noplt_attribute_p (call_op)) -- xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ { -+ direct_p = false; -+ if (output_indirect_p) -+ xasm = "{%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ else -+ xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ } - else - xasm = "%!call\t%P0"; - } - else -- xasm = "%!call\t%A0"; -+ { -+ if (output_indirect_p) -+ xasm = "%0"; -+ else -+ xasm = "%!call\t%A0"; -+ } - -- output_asm_insn (xasm, &call_op); -+ if (output_indirect_p && !direct_p) -+ ix86_output_indirect_branch (call_op, xasm, false); -+ else -+ output_asm_insn (xasm, &call_op); - - if (seh_nop_p) - return "nop"; -@@ -44836,7 +45429,7 @@ ix86_handle_struct_attribute (tree *node, tree name, tree, int, - } - - static tree --ix86_handle_fndecl_attribute (tree *node, tree name, tree, int, -+ix86_handle_fndecl_attribute (tree *node, tree name, tree args, int, - bool *no_add_attrs) - { - if (TREE_CODE (*node) != FUNCTION_DECL) -@@ -44845,6 +45438,29 @@ ix86_handle_fndecl_attribute (tree *node, tree name, tree, int, - name); - *no_add_attrs = true; - } -+ -+ if (is_attribute_p ("indirect_branch", name)) -+ { -+ tree cst = TREE_VALUE (args); -+ if (TREE_CODE (cst) != STRING_CST) -+ { -+ warning (OPT_Wattributes, -+ "%qE attribute requires a string constant argument", -+ name); -+ *no_add_attrs = true; -+ } -+ else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0) -+ { -+ warning (OPT_Wattributes, -+ "argument to %qE attribute is not " -+ "(keep|thunk|thunk-inline|thunk-extern)", name); -+ *no_add_attrs = true; -+ } -+ } -+ - return NULL_TREE; - } - -@@ -49072,6 +49688,9 @@ static const struct attribute_spec ix86_attribute_table[] = - false }, - { "callee_pop_aggregate_return", 1, 1, false, true, true, - ix86_handle_callee_pop_aggregate_return, true }, -+ { "indirect_branch", 1, 1, true, false, false, -+ ix86_handle_fndecl_attribute, false }, -+ - /* End element. */ - { NULL, 0, 0, false, false, false, NULL, false } - }; -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 54144166172..9dccdb0351e 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2572,6 +2572,13 @@ struct GTY(()) machine_function { - /* If true, it is safe to not save/restore DRAP register. */ - BOOL_BITFIELD no_drap_save_restore : 1; - -+ /* How to generate indirec branch. */ -+ ENUM_BITFIELD(indirect_branch) indirect_branch_type : 3; -+ -+ /* If true, the current function has local indirect jumps, like -+ "indirect_jump" or "tablejump". */ -+ BOOL_BITFIELD has_local_indirect_jump : 1; -+ - /* If true, there is register available for argument passing. This - is used only in ix86_function_ok_for_sibcall by 32-bit to determine - if there is scratch register available for indirect sibcall. In -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index d2bfe314f71..153e1622b2d 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11807,13 +11807,18 @@ - { - if (TARGET_X32) - operands[0] = convert_memory_address (word_mode, operands[0]); -+ cfun->machine->has_local_indirect_jump = true; - }) - - (define_insn "*indirect_jump" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))] - "" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], false);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -@@ -11856,14 +11861,19 @@ - - if (TARGET_X32) - operands[0] = convert_memory_address (word_mode, operands[0]); -+ cfun->machine->has_local_indirect_jump = true; - }) - - (define_insn "*tablejump_1" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw")) - (use (label_ref (match_operand 1)))] - "" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], false);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -@@ -12520,8 +12530,12 @@ - [(simple_return) - (use (match_operand:SI 0 "register_operand" "r"))] - "reload_completed" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], true);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index f304b621e6a..5ffa3349a30 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -897,3 +897,23 @@ Enum(stack_protector_guard) String(global) Value(SSP_GLOBAL) - mmitigate-rop - Target Var(flag_mitigate_rop) Init(0) - Attempt to avoid generating instruction sequences containing ret bytes. -+ -+mindirect-branch= -+Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_indirect_branch) Init(indirect_branch_keep) -+Convert indirect call and jump to call and return thunks. -+ -+Enum -+Name(indirect_branch) Type(enum indirect_branch) -+Known indirect branch choices (for use with the -mindirect-branch= option): -+ -+EnumValue -+Enum(indirect_branch) String(keep) Value(indirect_branch_keep) -+ -+EnumValue -+Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk) -+ -+EnumValue -+Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) -+ -+EnumValue -+Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 8cc4f7e1f6a..8668dae9e99 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -5419,6 +5419,16 @@ Specify which floating-point unit to use. You must specify the - @code{target("fpmath=sse,387")} option as - @code{target("fpmath=sse+387")} because the comma would separate - different options. -+ -+@item indirect_branch("@var{choice}") -+@cindex @code{indirect_branch} function attribute, x86 -+On x86 targets, the @code{indirect_branch} attribute causes the compiler -+to convert indirect call and jump with @var{choice}. @samp{keep} -+keeps indirect call and jump unmodified. @samp{thunk} converts indirect -+call and jump to call and return thunk. @samp{thunk-inline} converts -+indirect call and jump to inlined call and return thunk. -+@samp{thunk-extern} converts indirect call and jump to external call -+and return thunk provided in a separate object file. - @end table - - On the x86, the inliner does not inline a -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 1d3a824d7b8..6f60339a56a 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1169,7 +1169,7 @@ See RS/6000 and PowerPC Options. - -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol ---mmitigate-rop} -+-mmitigate-rop -mindirect-branch=@var{choice}} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24230,6 +24230,17 @@ opcodes, to mitigate against certain forms of attack. At the moment, - this option is limited in what it can do and should not be relied - on to provide serious protection. - -+@item -mindirect-branch=@var{choice} -+@opindex -mindirect-branch -+Convert indirect call and jump with @var{choice}. The default is -+@samp{keep}, which keeps indirect call and jump unmodified. -+@samp{thunk} converts indirect call and jump to call and return thunk. -+@samp{thunk-inline} converts indirect call and jump to inlined call -+and return thunk. @samp{thunk-extern} converts indirect call and jump -+to external call and return thunk provided in a separate object file. -+You can control this behavior for a specific function by using the -+function attribute @code{indirect_branch}. @xref{Function Attributes}. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -new file mode 100644 -index 00000000000..d983e1c3e26 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -new file mode 100644 -index 00000000000..58f09b42d8a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -new file mode 100644 -index 00000000000..f20d35c19b6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -new file mode 100644 -index 00000000000..0eff8fb658a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -new file mode 100644 -index 00000000000..a25b20dd808 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -new file mode 100644 -index 00000000000..cff114a6c29 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -new file mode 100644 -index 00000000000..afdb6007986 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -new file mode 100644 -index 00000000000..d64d978b699 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+extern void male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk"))); -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -new file mode 100644 -index 00000000000..93067454d3d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk"))) -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -new file mode 100644 -index 00000000000..97744d65729 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+extern int male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk-inline"))); -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -new file mode 100644 -index 00000000000..bfce3ea5cb2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk-inline"))) -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -new file mode 100644 -index 00000000000..0833606046b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+extern int male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk-extern"))); -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -new file mode 100644 -index 00000000000..2eba0fbd9b2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -new file mode 100644 -index 00000000000..f58427eae11 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -new file mode 100644 -index 00000000000..564ed39547c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -@@ -0,0 +1,42 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+__attribute__ ((indirect_branch("keep"))) -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -new file mode 100644 -index 00000000000..50fbee20a5a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+void (*dispatch) (char *); -+char buf[10]; -+ -+void -+foo (void) -+{ -+ dispatch (buf); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -new file mode 100644 -index 00000000000..2976e67adce ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+void (*dispatch) (char *); -+char buf[10]; -+ -+int -+foo (void) -+{ -+ dispatch (buf); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -new file mode 100644 -index 00000000000..da4bc98ef23 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+ -+void bar (char *); -+char buf[10]; -+ -+void -+foo (void) -+{ -+ bar (buf); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -new file mode 100644 -index 00000000000..c64d12ef989 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+ -+void bar (char *); -+char buf[10]; -+ -+int -+foo (void) -+{ -+ bar (buf); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -new file mode 100644 -index 00000000000..49f27b49465 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -new file mode 100644 -index 00000000000..a1e3eb6fc74 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -new file mode 100644 -index 00000000000..395634e7e5c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -new file mode 100644 -index 00000000000..fd3f63379a1 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -new file mode 100644 -index 00000000000..ba2f92b6f34 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -new file mode 100644 -index 00000000000..0c5a2d472c6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -new file mode 100644 -index 00000000000..665252327aa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -0,0 +1,43 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -new file mode 100644 -index 00000000000..68c0ff713b3 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -new file mode 100644 -index 00000000000..e2da1fcb683 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -new file mode 100644 -index 00000000000..244fec708d6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -new file mode 100644 -index 00000000000..107ebe32f54 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -new file mode 100644 -index 00000000000..17b04ef2229 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -new file mode 100644 -index 00000000000..d9eb11285aa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -new file mode 100644 -index 00000000000..d02b1dcb1b9 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0005-x86-Add-mfunction-return.patch b/aports/cross/gcc-armhf/0005-x86-Add-mfunction-return.patch deleted file mode 100644 index f311d067..00000000 --- a/aports/cross/gcc-armhf/0005-x86-Add-mfunction-return.patch +++ /dev/null @@ -1,1565 +0,0 @@ -From 3b946bffc536481a484d9a2b98b829f3d71b5519 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 05/13] x86: Add -mfunction-return= - -Add -mfunction-return= option to convert function return to call and -return thunks. The default is 'keep', which keeps function return -unmodified. 'thunk' converts function return to call and return thunk. -'thunk-inline' converts function return to inlined call and return thunk. -'thunk-extern' converts function return to external call and return -thunk provided in a separate object file. You can control this behavior -for a specific function by using the function attribute function_return. - -Function return thunk is the same as memory thunk for -mindirect-branch= -where the return address is at the top of the stack: - -__x86_return_thunk: - call L2 -L1: - pause - lfence - jmp L1 -L2: - lea 8(%rsp), %rsp|lea 4(%esp), %esp - ret - -and function return becomes - - jmp __x86_return_thunk - --mindirect-branch= tests are updated with -mfunction-return=keep to -avoid false test failures when -mfunction-return=thunk is added to -RUNTESTFLAGS for "make check". - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386-protos.h (ix86_output_function_return): New. - * config/i386/i386.c (ix86_set_indirect_branch_type): Also - set function_return_type. - (indirect_thunk_name): Add ret_p to indicate thunk for function - return. - (output_indirect_thunk_function): Pass false to - indirect_thunk_name. - (ix86_output_indirect_branch_via_reg): Likewise. - (ix86_output_indirect_branch_via_push): Likewise. - (output_indirect_thunk_function): Create alias for function - return thunk if regno < 0. - (ix86_output_function_return): New function. - (ix86_handle_fndecl_attribute): Handle function_return. - (ix86_attribute_table): Add function_return. - * config/i386/i386.h (machine_function): Add - function_return_type. - * config/i386/i386.md (simple_return_internal): Use - ix86_output_function_return. - (simple_return_internal_long): Likewise. - * config/i386/i386.opt (mfunction-return=): New option. - (indirect_branch): Mention -mfunction-return=. - * doc/extend.texi: Document function_return function attribute. - * doc/invoke.texi: Document -mfunction-return= option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c (dg-options): Add - -mfunction-return=keep. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-1.c: New test. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-16.c: Likewise. - * gcc.target/i386/ret-thunk-2.c: Likewise. - * gcc.target/i386/ret-thunk-3.c: Likewise. - * gcc.target/i386/ret-thunk-4.c: Likewise. - * gcc.target/i386/ret-thunk-5.c: Likewise. - * gcc.target/i386/ret-thunk-6.c: Likewise. - * gcc.target/i386/ret-thunk-7.c: Likewise. - * gcc.target/i386/ret-thunk-8.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - -i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO - -ASM_OUTPUT_DEF isn't defined for TARGET_MACHO. Use ASM_OUTPUT_LABEL to -generate the __x86_return_thunk label, instead of the set directive. -Update testcase to remove the __x86_return_thunk label check. Since --fno-pic is ignored on Darwin, update testcases to sscan or "push" -only on Linux. - -gcc/ - - Backport from mainline - 2018-01-15 H.J. Lu - - PR target/83839 - * config/i386/i386.c (output_indirect_thunk_function): Use - ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO - for __x86.return_thunk. - -gcc/testsuite/ - - Backport from mainline - 2018-01-15 H.J. Lu - - PR target/83839 - * gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on - Linux. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-register-1.c: Likewise. - * gcc.target/i386/indirect-thunk-register-3.c: Likewise. - * gcc.target/i386/indirect-thunk-register-4.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Don't check the - __x86_return_thunk label. - Scan for "push" only for Linux. ---- - gcc/config/i386/i386-protos.h | 1 + - gcc/config/i386/i386.c | 152 +++++++++++++++++++-- - gcc/config/i386/i386.h | 3 + - gcc/config/i386/i386.md | 9 +- - gcc/config/i386/i386.opt | 6 +- - gcc/doc/extend.texi | 9 ++ - gcc/doc/invoke.texi | 14 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-5.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-6.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-8.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-7.c | 4 +- - gcc/testsuite/gcc.target/i386/ret-thunk-1.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 23 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 23 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-16.c | 18 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-2.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-3.c | 12 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-4.c | 12 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-5.c | 15 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-6.c | 14 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-7.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-8.c | 14 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 24 ++++ - 56 files changed, 516 insertions(+), 74 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-11.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-12.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-13.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-14.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-15.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-16.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-9.c - -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index eca4cbf0776..620d70ef9f6 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -312,6 +312,7 @@ extern enum attr_cpu ix86_schedule; - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); - extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); -+extern const char * ix86_output_function_return (bool long_p); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 0b9fc4d3026..34e26a3a3c7 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -6390,6 +6390,31 @@ ix86_set_indirect_branch_type (tree fndecl) - else - cfun->machine->indirect_branch_type = ix86_indirect_branch; - } -+ -+ if (cfun->machine->function_return_type == indirect_branch_unset) -+ { -+ tree attr = lookup_attribute ("function_return", -+ DECL_ATTRIBUTES (fndecl)); -+ if (attr != NULL) -+ { -+ tree args = TREE_VALUE (attr); -+ if (args == NULL) -+ gcc_unreachable (); -+ tree cst = TREE_VALUE (args); -+ if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0) -+ cfun->machine->function_return_type = indirect_branch_keep; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk_inline; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk_extern; -+ else -+ gcc_unreachable (); -+ } -+ else -+ cfun->machine->function_return_type = ix86_function_return; -+ } - } - - /* Establish appropriate back-end context for processing the function -@@ -11036,8 +11061,12 @@ static int indirect_thunks_bnd_used; - /* Fills in the label name that should be used for the indirect thunk. */ - - static void --indirect_thunk_name (char name[32], int regno, bool need_bnd_p) -+indirect_thunk_name (char name[32], int regno, bool need_bnd_p, -+ bool ret_p) - { -+ if (regno >= 0 && ret_p) -+ gcc_unreachable (); -+ - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -@@ -11052,7 +11081,10 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p) - bnd, reg_prefix, reg_names[regno]); - } - else -- sprintf (name, "__x86_indirect_thunk%s", bnd); -+ { -+ const char *ret = ret_p ? "return" : "indirect"; -+ sprintf (name, "__x86_%s_thunk%s", ret, bnd); -+ } - } - else - { -@@ -11065,10 +11097,20 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p) - } - else - { -- if (need_bnd_p) -- ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ if (ret_p) -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LRTB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LRT", 0); -+ } - else -- ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ } - } - } - } -@@ -11163,7 +11205,7 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - tree decl; - - /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -- indirect_thunk_name (name, regno, need_bnd_p); -+ indirect_thunk_name (name, regno, need_bnd_p, false); - decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, - get_identifier (name), - build_function_type_list (void_type_node, NULL_TREE)); -@@ -11206,6 +11248,36 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -+ if (regno < 0) -+ { -+ /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ -+ char alias[32]; -+ -+ indirect_thunk_name (alias, regno, need_bnd_p, true); -+#if TARGET_MACHO -+ if (TARGET_MACHO) -+ { -+ fputs ("\t.weak_definition\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ fputs ("\n\t.private_extern\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ ASM_OUTPUT_LABEL (asm_out_file, alias); -+ } -+#else -+ ASM_OUTPUT_DEF (asm_out_file, alias, name); -+ if (USE_HIDDEN_LINKONCE) -+ { -+ fputs ("\t.globl\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ fputs ("\t.hidden\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ } -+#endif -+ } -+ - DECL_INITIAL (decl) = make_node (BLOCK); - current_function_decl = decl; - allocate_struct_function (decl, false); -@@ -27687,7 +27759,7 @@ ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p) - else - indirect_thunks_used |= 1 << i; - } -- indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false); - thunk_name = thunk_name_buf; - } - else -@@ -27796,7 +27868,7 @@ ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm, - else - indirect_thunk_needed = true; - } -- indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false); - thunk_name = thunk_name_buf; - } - else -@@ -27931,6 +28003,46 @@ ix86_output_indirect_jmp (rtx call_op, bool ret_p) - return "%!jmp\t%A0"; - } - -+/* Output function return. CALL_OP is the jump target. Add a REP -+ prefix to RET if LONG_P is true and function return is kept. */ -+ -+const char * -+ix86_output_function_return (bool long_p) -+{ -+ if (cfun->machine->function_return_type != indirect_branch_keep) -+ { -+ char thunk_name[32]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ -+ if (cfun->machine->function_return_type -+ != indirect_branch_thunk_inline) -+ { -+ bool need_thunk = (cfun->machine->function_return_type -+ == indirect_branch_thunk); -+ indirect_thunk_name (thunk_name, -1, need_bnd_p, true); -+ if (need_bnd_p) -+ { -+ indirect_thunk_bnd_needed |= need_thunk; -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ } -+ else -+ { -+ indirect_thunk_needed |= need_thunk; -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ } -+ else -+ output_indirect_thunk (need_bnd_p, -1); -+ -+ return ""; -+ } -+ -+ if (!long_p || ix86_bnd_prefixed_insn_p (current_output_insn)) -+ return "%!ret"; -+ -+ return "rep%; ret"; -+} -+ - /* Output the assembly for a call instruction. */ - - const char * -@@ -45461,6 +45573,28 @@ ix86_handle_fndecl_attribute (tree *node, tree name, tree args, int, - } - } - -+ if (is_attribute_p ("function_return", name)) -+ { -+ tree cst = TREE_VALUE (args); -+ if (TREE_CODE (cst) != STRING_CST) -+ { -+ warning (OPT_Wattributes, -+ "%qE attribute requires a string constant argument", -+ name); -+ *no_add_attrs = true; -+ } -+ else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0) -+ { -+ warning (OPT_Wattributes, -+ "argument to %qE attribute is not " -+ "(keep|thunk|thunk-inline|thunk-extern)", name); -+ *no_add_attrs = true; -+ } -+ } -+ - return NULL_TREE; - } - -@@ -49690,6 +49824,8 @@ static const struct attribute_spec ix86_attribute_table[] = - ix86_handle_callee_pop_aggregate_return, true }, - { "indirect_branch", 1, 1, true, false, false, - ix86_handle_fndecl_attribute, false }, -+ { "function_return", 1, 1, true, false, false, -+ ix86_handle_fndecl_attribute, false }, - - /* End element. */ - { NULL, 0, 0, false, false, false, NULL, false } -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 9dccdb0351e..b34bc117c34 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2579,6 +2579,9 @@ struct GTY(()) machine_function { - "indirect_jump" or "tablejump". */ - BOOL_BITFIELD has_local_indirect_jump : 1; - -+ /* How to generate function return. */ -+ ENUM_BITFIELD(indirect_branch) function_return_type : 3; -+ - /* If true, there is register available for argument passing. This - is used only in ix86_function_ok_for_sibcall by 32-bit to determine - if there is scratch register available for indirect sibcall. In -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 153e1622b2d..2da671e9f2d 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -12489,7 +12489,7 @@ - (define_insn "simple_return_internal" - [(simple_return)] - "reload_completed" -- "%!ret" -+ "* return ix86_output_function_return (false);" - [(set_attr "length" "1") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "0") -@@ -12503,12 +12503,7 @@ - [(simple_return) - (unspec [(const_int 0)] UNSPEC_REP)] - "reload_completed" --{ -- if (ix86_bnd_prefixed_insn_p (insn)) -- return "%!ret"; -- -- return "rep%; ret"; --} -+ "* return ix86_output_function_return (true);" - [(set_attr "length" "2") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "0") -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index 5ffa3349a30..ad5916fb643 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -902,9 +902,13 @@ mindirect-branch= - Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_indirect_branch) Init(indirect_branch_keep) - Convert indirect call and jump to call and return thunks. - -+mfunction-return= -+Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_function_return) Init(indirect_branch_keep) -+Convert function return to call and return thunk. -+ - Enum - Name(indirect_branch) Type(enum indirect_branch) --Known indirect branch choices (for use with the -mindirect-branch= option): -+Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options): - - EnumValue - Enum(indirect_branch) String(keep) Value(indirect_branch_keep) -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 8668dae9e99..2cb6bd1ef3e 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -5429,6 +5429,15 @@ call and jump to call and return thunk. @samp{thunk-inline} converts - indirect call and jump to inlined call and return thunk. - @samp{thunk-extern} converts indirect call and jump to external call - and return thunk provided in a separate object file. -+ -+@item function_return("@var{choice}") -+@cindex @code{function_return} function attribute, x86 -+On x86 targets, the @code{function_return} attribute causes the compiler -+to convert function return with @var{choice}. @samp{keep} keeps function -+return unmodified. @samp{thunk} converts function return to call and -+return thunk. @samp{thunk-inline} converts function return to inlined -+call and return thunk. @samp{thunk-extern} converts function return to -+external call and return thunk provided in a separate object file. - @end table - - On the x86, the inliner does not inline a -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 6f60339a56a..337a761015a 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1169,7 +1169,8 @@ See RS/6000 and PowerPC Options. - -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol ---mmitigate-rop -mindirect-branch=@var{choice}} -+-mmitigate-rop -mindirect-branch=@var{choice} @gol -+-mfunction-return=@var{choice}} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24241,6 +24242,17 @@ to external call and return thunk provided in a separate object file. - You can control this behavior for a specific function by using the - function attribute @code{indirect_branch}. @xref{Function Attributes}. - -+@item -mfunction-return=@var{choice} -+@opindex -mfunction-return -+Convert function return with @var{choice}. The default is @samp{keep}, -+which keeps function return unmodified. @samp{thunk} converts function -+return to call and return thunk. @samp{thunk-inline} converts function -+return to inlined call and return thunk. @samp{thunk-extern} converts -+function return to external call and return thunk provided in a separate -+object file. You can control this behavior for a specific function by -+using the function attribute @code{function_return}. -+@xref{Function Attributes}. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index d983e1c3e26..e365ef5698a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index 58f09b42d8a..05a51ad9157 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index f20d35c19b6..3c0d4c39f0b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 0eff8fb658a..14d4ef6dd98 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index a25b20dd808..b4836c38d6c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index cff114a6c29..1f06bd1af74 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index afdb6007986..bc6b47a636e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index d64d978b699..2257be3affa 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index 93067454d3d..e9cfdc5879e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index 97744d65729..f938db050f7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index bfce3ea5cb2..4e58599692a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -13,7 +13,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index 0833606046b..b8d50249d8b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index 2eba0fbd9b2..455adabfe0e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -13,7 +13,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index f58427eae11..4595b841ec0 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -36,7 +36,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -index 564ed39547c..d730d31bda1 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index 50fbee20a5a..5e3e118e9bd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -@@ -10,7 +10,7 @@ foo (void) - dispatch (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index 2976e67adce..2801aa4192e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -@@ -11,7 +11,7 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index da4bc98ef23..70b4fb36eea 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index c64d12ef989..3baf03ee77c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index 49f27b49465..edeb264218c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index a1e3eb6fc74..1d00413a76a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index 395634e7e5c..06ebf1c9063 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index fd3f63379a1..1c8f9446636 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index ba2f92b6f34..21740ac5b7f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index 0c5a2d472c6..a77c1f470b8 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index 665252327aa..86e9fd1f1e4 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 68c0ff713b3..3ecde878867 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index e2da1fcb683..df32a19a2b5 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 244fec708d6..9540996de01 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index 107ebe32f54..f3db6e2441f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index 17b04ef2229..0f687c3b027 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index d9eb11285aa..b27c6fc96a2 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index d02b1dcb1b9..764a375fc37 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-1.c b/gcc/testsuite/gcc.target/i386/ret-thunk-1.c -new file mode 100644 -index 00000000000..7223f67ba5e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-1.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -new file mode 100644 -index 00000000000..3a6727b5c54 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -new file mode 100644 -index 00000000000..b8f68188313 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -new file mode 100644 -index 00000000000..01b0a02f80b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -new file mode 100644 -index 00000000000..4b497b5f8af ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+extern void (*bar) (void); -+extern int foo (void) __attribute__ ((function_return("thunk"))); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -new file mode 100644 -index 00000000000..4ae4c44a3fd ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("thunk-inline"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -new file mode 100644 -index 00000000000..5b5bc765a7e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("thunk-extern"), indirect_branch("thunk"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-16.c b/gcc/testsuite/gcc.target/i386/ret-thunk-16.c -new file mode 100644 -index 00000000000..a16cad16aaa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-16.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("keep"), indirect_branch("keep"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-2.c b/gcc/testsuite/gcc.target/i386/ret-thunk-2.c -new file mode 100644 -index 00000000000..c6659e3ad09 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-2.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-3.c b/gcc/testsuite/gcc.target/i386/ret-thunk-3.c -new file mode 100644 -index 00000000000..0f7f388f459 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-3.c -@@ -0,0 +1,12 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-4.c b/gcc/testsuite/gcc.target/i386/ret-thunk-4.c -new file mode 100644 -index 00000000000..9ae37e835a0 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-4.c -@@ -0,0 +1,12 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-5.c b/gcc/testsuite/gcc.target/i386/ret-thunk-5.c -new file mode 100644 -index 00000000000..4bd0d2a27bc ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-5.c -@@ -0,0 +1,15 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+extern void foo (void) __attribute__ ((function_return("thunk"))); -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-6.c b/gcc/testsuite/gcc.target/i386/ret-thunk-6.c -new file mode 100644 -index 00000000000..053841f6f7d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-6.c -@@ -0,0 +1,14 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+__attribute__ ((function_return("thunk-inline"))) -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-7.c b/gcc/testsuite/gcc.target/i386/ret-thunk-7.c -new file mode 100644 -index 00000000000..262e6780112 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-7.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+__attribute__ ((function_return("thunk-extern"))) -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-8.c b/gcc/testsuite/gcc.target/i386/ret-thunk-8.c -new file mode 100644 -index 00000000000..c1658e96673 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-8.c -@@ -0,0 +1,14 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+extern void foo (void) __attribute__ ((function_return("keep"))); -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -new file mode 100644 -index 00000000000..fa24a1f7365 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -0,0 +1,24 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0006-x86-Add-mindirect-branch-register.patch b/aports/cross/gcc-armhf/0006-x86-Add-mindirect-branch-register.patch deleted file mode 100644 index 111e6e43..00000000 --- a/aports/cross/gcc-armhf/0006-x86-Add-mindirect-branch-register.patch +++ /dev/null @@ -1,941 +0,0 @@ -From 61bb7f0e152ce5be700a44007d036ea0de4b254d Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 06/13] x86: Add -mindirect-branch-register - -Add -mindirect-branch-register to force indirect branch via register. -This is implemented by disabling patterns of indirect branch via memory, -similar to TARGET_X32. - --mindirect-branch= and -mfunction-return= tests are updated with --mno-indirect-branch-register to avoid false test failures when --mindirect-branch-register is added to RUNTESTFLAGS for "make check". - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/constraints.md (Bs): Disallow memory operand for - -mindirect-branch-register. - (Bw): Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - * config/i386/i386.md (indirect_jump): Call convert_memory_address - for -mindirect-branch-register. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Disallow peepholes of indirect call and jump via memory for - -mindirect-branch-register. - (*call_pop): Replace m with Bw. - (*call_value_pop): Likewise. - (*sibcall_pop_memory): Replace m with Bs. - * config/i386/i386.opt (mindirect-branch-register): New option. - * doc/invoke.texi: Document -mindirect-branch-register option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c (dg-options): Add - -mno-indirect-branch-register. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - * gcc.target/i386/indirect-thunk-register-1.c: New test. - * gcc.target/i386/indirect-thunk-register-2.c: Likewise. - * gcc.target/i386/indirect-thunk-register-3.c: Likewise. - -i386: Rename to ix86_indirect_branch_register - -Rename the variable for -mindirect-branch-register to -ix86_indirect_branch_register to match the command-line option name. - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/constraints.md (Bs): Replace - ix86_indirect_branch_thunk_register with - ix86_indirect_branch_register. - (Bw): Likewise. - * config/i386/i386.md (indirect_jump): Likewise. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Peepholes of indirect call and jump via memory: Likewise. - * config/i386/i386.opt: Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - -x86: Rewrite ix86_indirect_branch_register logic - -Rewrite ix86_indirect_branch_register logic with - -(and (not (match_test "ix86_indirect_branch_register")) - (original condition before r256662)) - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/predicates.md (constant_call_address_operand): - Rewrite ix86_indirect_branch_register logic. - (sibcall_insn_operand): Likewise. - -Don't check ix86_indirect_branch_register for GOT operand - -Since GOT_memory_operand and GOT32_symbol_operand are simple pattern -matches, don't check ix86_indirect_branch_register here. If needed, --mindirect-branch= will convert indirect branch via GOT slot to a call -and return thunk. - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/constraints.md (Bs): Update - ix86_indirect_branch_register check. Don't check - ix86_indirect_branch_register with GOT_memory_operand. - (Bw): Likewise. - * config/i386/predicates.md (GOT_memory_operand): Don't check - ix86_indirect_branch_register here. - (GOT32_symbol_operand): Likewise. - -i386: Rewrite indirect_branch_operand logic - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/predicates.md (indirect_branch_operand): Rewrite - ix86_indirect_branch_register logic. ---- - gcc/config/i386/constraints.md | 6 ++-- - gcc/config/i386/i386.md | 34 ++++++++++++++-------- - gcc/config/i386/i386.opt | 4 +++ - gcc/config/i386/predicates.md | 21 +++++++------ - gcc/doc/invoke.texi | 6 +++- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-register-1.c | 22 ++++++++++++++ - .../gcc.target/i386/indirect-thunk-register-2.c | 20 +++++++++++++ - .../gcc.target/i386/indirect-thunk-register-3.c | 19 ++++++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 2 +- - 47 files changed, 147 insertions(+), 63 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c - -diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md -index 1a4c701ad13..9204c8e8487 100644 ---- a/gcc/config/i386/constraints.md -+++ b/gcc/config/i386/constraints.md -@@ -172,14 +172,16 @@ - - (define_constraint "Bs" - "@internal Sibcall memory operand." -- (ior (and (not (match_test "TARGET_X32")) -+ (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") - (match_operand 0 "GOT_memory_operand")))) - - (define_constraint "Bw" - "@internal Call memory operand." -- (ior (and (not (match_test "TARGET_X32")) -+ (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") - (match_operand 0 "GOT_memory_operand")))) -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 2da671e9f2d..05a88fff356 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11805,7 +11805,7 @@ - [(set (pc) (match_operand 0 "indirect_branch_operand"))] - "" - { -- if (TARGET_X32) -+ if (TARGET_X32 || ix86_indirect_branch_register) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -11859,7 +11859,7 @@ - OPTAB_DIRECT); - } - -- if (TARGET_X32) -+ if (TARGET_X32 || ix86_indirect_branch_register) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -12048,7 +12048,7 @@ - [(call (mem:QI (match_operand:W 0 "memory_operand" "m")) - (match_operand 1)) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32" -+ "!TARGET_X32 && !ix86_indirect_branch_register" - "* return ix86_output_call_insn (insn, operands[0]);" - [(set_attr "type" "call")]) - -@@ -12057,7 +12057,9 @@ - (match_operand:W 1 "memory_operand")) - (call (mem:QI (match_dup 0)) - (match_operand 3))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" - [(parallel [(call (mem:QI (match_dup 1)) -@@ -12070,7 +12072,9 @@ - (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) - (call (mem:QI (match_dup 0)) - (match_operand 3))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" - [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) -@@ -12092,7 +12096,7 @@ - }) - - (define_insn "*call_pop" -- [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lmBz")) -+ [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lBwBz")) - (match_operand 1)) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -@@ -12112,7 +12116,7 @@ - [(set_attr "type" "call")]) - - (define_insn "*sibcall_pop_memory" -- [(call (mem:QI (match_operand:SI 0 "memory_operand" "m")) -+ [(call (mem:QI (match_operand:SI 0 "memory_operand" "Bs")) - (match_operand 1)) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -@@ -12166,7 +12170,9 @@ - [(set (match_operand:W 0 "register_operand") - (match_operand:W 1 "memory_operand")) - (set (pc) (match_dup 0))] -- "!TARGET_X32 && peep2_reg_dead_p (2, operands[0])" -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && peep2_reg_dead_p (2, operands[0])" - [(set (pc) (match_dup 1))]) - - ;; Call subroutine, returning value in operand 0 -@@ -12244,7 +12250,7 @@ - (call (mem:QI (match_operand:W 1 "memory_operand" "m")) - (match_operand 2))) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32" -+ "!TARGET_X32 && !ix86_indirect_branch_register" - "* return ix86_output_call_insn (insn, operands[1]);" - [(set_attr "type" "callv")]) - -@@ -12254,7 +12260,9 @@ - (set (match_operand 2) - (call (mem:QI (match_dup 0)) - (match_operand 3)))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" - [(parallel [(set (match_dup 2) -@@ -12269,7 +12277,9 @@ - (set (match_operand 2) - (call (mem:QI (match_dup 0)) - (match_operand 3)))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" - [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) -@@ -12294,7 +12304,7 @@ - - (define_insn "*call_value_pop" - [(set (match_operand 0) -- (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lmBz")) -+ (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lBwBz")) - (match_operand 2))) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index ad5916fb643..a97f84f68f2 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -921,3 +921,7 @@ Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) - - EnumValue - Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) -+ -+mindirect-branch-register -+Target Report Var(ix86_indirect_branch_register) Init(0) -+Force indirect call and jump via register. -diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md -index 93dda7bb0e7..d1f0a7dbf61 100644 ---- a/gcc/config/i386/predicates.md -+++ b/gcc/config/i386/predicates.md -@@ -593,7 +593,8 @@ - ;; Test for a valid operand for indirect branch. - (define_predicate "indirect_branch_operand" - (ior (match_operand 0 "register_operand") -- (and (not (match_test "TARGET_X32")) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")))) - - ;; Return true if OP is a memory operands that can be used in sibcalls. -@@ -636,20 +637,22 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "call_register_no_elim_operand") -- (ior (and (not (match_test "TARGET_X32")) -- (match_operand 0 "memory_operand")) -- (and (match_test "TARGET_X32 && Pmode == DImode") -- (match_operand 0 "GOT_memory_operand"))))) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_X32")) -+ (match_operand 0 "memory_operand")) -+ (and (match_test "TARGET_X32 && Pmode == DImode") -+ (match_operand 0 "GOT_memory_operand")))))) - - ;; Similarly, but for tail calls, in which we cannot allow memory references. - (define_special_predicate "sibcall_insn_operand" - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "register_no_elim_operand") -- (ior (and (not (match_test "TARGET_X32")) -- (match_operand 0 "sibcall_memory_operand")) -- (and (match_test "TARGET_X32 && Pmode == DImode") -- (match_operand 0 "GOT_memory_operand"))))) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_X32")) -+ (match_operand 0 "sibcall_memory_operand")) -+ (and (match_test "TARGET_X32 && Pmode == DImode") -+ (match_operand 0 "GOT_memory_operand")))))) - - ;; Return true if OP is a 32-bit GOT symbol operand. - (define_predicate "GOT32_symbol_operand" -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 337a761015a..94374661f2d 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1170,7 +1170,7 @@ See RS/6000 and PowerPC Options. - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol - -mmitigate-rop -mindirect-branch=@var{choice} @gol ---mfunction-return=@var{choice}} -+-mfunction-return=@var{choice} -mindirect-branch-register} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24253,6 +24253,10 @@ object file. You can control this behavior for a specific function by - using the function attribute @code{function_return}. - @xref{Function Attributes}. - -+@item -mindirect-branch-register -+@opindex -mindirect-branch-register -+Force indirect call and jump via register. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index e365ef5698a..60d09881a99 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index 05a51ad9157..aac75163794 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index 3c0d4c39f0b..9e24a385387 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 14d4ef6dd98..127b5d94523 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index b4836c38d6c..fcaa18d10b7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index 1f06bd1af74..e4649283d10 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index bc6b47a636e..17c2d0faf88 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index 2257be3affa..9194ccf3cbc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index e9cfdc5879e..e51f261a612 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index f938db050f7..4aeec1833cd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index 4e58599692a..ac0e5999f63 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index b8d50249d8b..573cf1ef09e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index 455adabfe0e..b2b37fc6e2e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index 4595b841ec0..4a43e199931 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index 5e3e118e9bd..ac84ab623fa 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index 2801aa4192e..ce655e8be1c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index 70b4fb36eea..d34485a0010 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index 3baf03ee77c..0e19830de4d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index edeb264218c..579441f250e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index 1d00413a76a..c92e6f2b02d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index 06ebf1c9063..d9964c25bbd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index 1c8f9446636..d4dca4dc5fe 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index 21740ac5b7f..5c07e02df6a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index a77c1f470b8..3eb440693a0 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index 86e9fd1f1e4..aece9383697 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 3ecde878867..3aba5e8c81f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index df32a19a2b5..0f0181d6672 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 9540996de01..2eef6f35a75 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index f3db6e2441f..e825a10f14c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index 0f687c3b027..c6d77e10352 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index b27c6fc96a2..6454827b780 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index 764a375fc37..c67066cf197 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c -new file mode 100644 -index 00000000000..7d396a31953 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk\n" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk_bnd\n" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c -new file mode 100644 -index 00000000000..e7e616bb271 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c -new file mode 100644 -index 00000000000..5320e923be2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not {\t(pause|pause|nop)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -index 3a6727b5c54..e6fea84a4d9 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -index b8f68188313..e239ec4542f 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -index 01b0a02f80b..fa3181303c9 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -index 4b497b5f8af..fd5b41fdd3f 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - extern void (*bar) (void); - extern int foo (void) __attribute__ ((function_return("thunk"))); -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -index 4ae4c44a3fd..d606373ead1 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -index 5b5bc765a7e..75e45e226b8 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index fa24a1f7365..d1db41cc128 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0007-x86-Add-V-register-operand-modifier.patch b/aports/cross/gcc-armhf/0007-x86-Add-V-register-operand-modifier.patch deleted file mode 100644 index f75b2133..00000000 --- a/aports/cross/gcc-armhf/0007-x86-Add-V-register-operand-modifier.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 92308185917678406afee3c165ea5e71b53b3cc1 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 07/13] x86: Add 'V' register operand modifier - -Add 'V', a special modifier which prints the name of the full integer -register without '%'. For - -extern void (*func_p) (void); - -void -foo (void) -{ - asm ("call __x86_indirect_thunk_%V0" : : "a" (func_p)); -} - -it generates: - -foo: - movq func_p(%rip), %rax - call __x86_indirect_thunk_rax - ret - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386.c (print_reg): Print the name of the full - integer register without '%'. - (ix86_print_operand): Handle 'V'. - * doc/extend.texi: Document 'V' modifier. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-register-4.c: New test. ---- - gcc/config/i386/i386.c | 13 ++++++++++++- - gcc/doc/extend.texi | 3 +++ - gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c | 13 +++++++++++++ - 3 files changed, 28 insertions(+), 1 deletion(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 34e26a3a3c7..eeca7e5e490 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -16869,6 +16869,7 @@ put_condition_code (enum rtx_code code, machine_mode mode, bool reverse, - If CODE is 'h', pretend the reg is the 'high' byte register. - If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op. - If CODE is 'd', duplicate the operand for AVX instruction. -+ If CODE is 'V', print naked full integer register name without %. - */ - - void -@@ -16879,7 +16880,7 @@ print_reg (rtx x, int code, FILE *file) - unsigned int regno; - bool duplicated; - -- if (ASSEMBLER_DIALECT == ASM_ATT) -+ if (ASSEMBLER_DIALECT == ASM_ATT && code != 'V') - putc ('%', file); - - if (x == pc_rtx) -@@ -16922,6 +16923,14 @@ print_reg (rtx x, int code, FILE *file) - && regno != FPSR_REG - && regno != FPCR_REG); - -+ if (code == 'V') -+ { -+ if (GENERAL_REGNO_P (regno)) -+ msize = GET_MODE_SIZE (word_mode); -+ else -+ error ("'V' modifier on non-integer register"); -+ } -+ - duplicated = code == 'd' && TARGET_AVX; - - switch (msize) -@@ -17035,6 +17044,7 @@ print_reg (rtx x, int code, FILE *file) - & -- print some in-use local-dynamic symbol name. - H -- print a memory address offset by 8; used for sse high-parts - Y -- print condition for XOP pcom* instruction. -+ V -- print naked full integer register name without %. - + -- print a branch hint as 'cs' or 'ds' prefix - ; -- print a semicolon (after prefixes due to bug in older gas). - ~ -- print "i" if TARGET_AVX2, "f" otherwise. -@@ -17259,6 +17269,7 @@ ix86_print_operand (FILE *file, rtx x, int code) - case 'X': - case 'P': - case 'p': -+ case 'V': - break; - - case 's': -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 2cb6bd1ef3e..76ba1d4f913 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -8511,6 +8511,9 @@ The table below shows the list of supported modifiers and their effects. - @tab @code{2} - @end multitable - -+@code{V} is a special modifier which prints the name of the full integer -+register without @code{%}. -+ - @anchor{x86floatingpointasmoperands} - @subsubsection x86 Floating-Point @code{asm} Operands - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c -new file mode 100644 -index 00000000000..f0cd9b75be8 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=keep -fno-pic" } */ -+ -+extern void (*func_p) (void); -+ -+void -+foo (void) -+{ -+ asm("call __x86_indirect_thunk_%V0" : : "a" (func_p)); -+} -+ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_eax" { target ia32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_rax" { target { ! ia32 } } } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch b/aports/cross/gcc-armhf/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch deleted file mode 100644 index 73a58bf8..00000000 --- a/aports/cross/gcc-armhf/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch +++ /dev/null @@ -1,299 +0,0 @@ -From 087b12213a5b4b8654c70320c671bb05c1b1b012 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 13 Jan 2018 18:01:54 -0800 -Subject: [PATCH 08/13] x86: Disallow -mindirect-branch=/-mfunction-return= - with -mcmodel=large - -Since the thunk function may not be reachable in large code model, --mcmodel=large is incompatible with -mindirect-branch=thunk, --mindirect-branch=thunk-extern, -mfunction-return=thunk and --mfunction-return=thunk-extern. Issue an error when they are used with --mcmodel=large. - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386.c (ix86_set_indirect_branch_type): Disallow - -mcmodel=large with -mindirect-branch=thunk, - -mindirect-branch=thunk-extern, -mfunction-return=thunk and - -mfunction-return=thunk-extern. - * doc/invoke.texi: Document -mcmodel=large is incompatible with - -mindirect-branch=thunk, -mindirect-branch=thunk-extern, - -mfunction-return=thunk and -mfunction-return=thunk-extern. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-10.c: New test. - * gcc.target/i386/indirect-thunk-8.c: Likewise. - * gcc.target/i386/indirect-thunk-9.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-10.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-11.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-9.c: Likewise. - * gcc.target/i386/ret-thunk-17.c: Likewise. - * gcc.target/i386/ret-thunk-18.c: Likewise. - * gcc.target/i386/ret-thunk-19.c: Likewise. - * gcc.target/i386/ret-thunk-20.c: Likewise. - * gcc.target/i386/ret-thunk-21.c: Likewise. ---- - gcc/config/i386/i386.c | 26 ++++++++++++++++++++++ - gcc/doc/invoke.texi | 11 +++++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-10.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-8.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-9.c | 7 ++++++ - .../gcc.target/i386/indirect-thunk-attr-10.c | 9 ++++++++ - .../gcc.target/i386/indirect-thunk-attr-11.c | 9 ++++++++ - .../gcc.target/i386/indirect-thunk-attr-9.c | 9 ++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-17.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-18.c | 8 +++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-19.c | 8 +++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-20.c | 9 ++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-21.c | 9 ++++++++ - 13 files changed, 126 insertions(+) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-9.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-17.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-18.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-19.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-20.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-21.c - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index eeca7e5e490..9c038bee000 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -6389,6 +6389,19 @@ ix86_set_indirect_branch_type (tree fndecl) - } - else - cfun->machine->indirect_branch_type = ix86_indirect_branch; -+ -+ /* -mcmodel=large is not compatible with -mindirect-branch=thunk -+ nor -mindirect-branch=thunk-extern. */ -+ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) -+ && ((cfun->machine->indirect_branch_type -+ == indirect_branch_thunk_extern) -+ || (cfun->machine->indirect_branch_type -+ == indirect_branch_thunk))) -+ error ("%<-mindirect-branch=%s%> and %<-mcmodel=large%> are not " -+ "compatible", -+ ((cfun->machine->indirect_branch_type -+ == indirect_branch_thunk_extern) -+ ? "thunk-extern" : "thunk")); - } - - if (cfun->machine->function_return_type == indirect_branch_unset) -@@ -6414,6 +6427,19 @@ ix86_set_indirect_branch_type (tree fndecl) - } - else - cfun->machine->function_return_type = ix86_function_return; -+ -+ /* -mcmodel=large is not compatible with -mfunction-return=thunk -+ nor -mfunction-return=thunk-extern. */ -+ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) -+ && ((cfun->machine->function_return_type -+ == indirect_branch_thunk_extern) -+ || (cfun->machine->function_return_type -+ == indirect_branch_thunk))) -+ error ("%<-mfunction-return=%s%> and %<-mcmodel=large%> are not " -+ "compatible", -+ ((cfun->machine->function_return_type -+ == indirect_branch_thunk_extern) -+ ? "thunk-extern" : "thunk")); - } - } - -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 94374661f2d..1dee495c86b 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -24242,6 +24242,11 @@ to external call and return thunk provided in a separate object file. - You can control this behavior for a specific function by using the - function attribute @code{indirect_branch}. @xref{Function Attributes}. - -+Note that @option{-mcmodel=large} is incompatible with -+@option{-mindirect-branch=thunk} nor -+@option{-mindirect-branch=thunk-extern} since the thunk function may -+not be reachable in large code model. -+ - @item -mfunction-return=@var{choice} - @opindex -mfunction-return - Convert function return with @var{choice}. The default is @samp{keep}, -@@ -24253,6 +24258,12 @@ object file. You can control this behavior for a specific function by - using the function attribute @code{function_return}. - @xref{Function Attributes}. - -+Note that @option{-mcmodel=large} is incompatible with -+@option{-mfunction-return=thunk} nor -+@option{-mfunction-return=thunk-extern} since the thunk function may -+not be reachable in large code model. -+ -+ - @item -mindirect-branch-register - @opindex -mindirect-branch-register - Force indirect call and jump via register. -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c -new file mode 100644 -index 00000000000..a0674bd2363 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c -new file mode 100644 -index 00000000000..7a80a8986e8 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c -new file mode 100644 -index 00000000000..d4d45c5114d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c -new file mode 100644 -index 00000000000..3a2aeaddbc5 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c -new file mode 100644 -index 00000000000..8e52f032b6c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk-inline"))) -+void -+bar (void) -+{ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c -new file mode 100644 -index 00000000000..bdaa4f6911b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk"))) -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-17.c b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c -new file mode 100644 -index 00000000000..0605e2c6542 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-18.c b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c -new file mode 100644 -index 00000000000..307019dc242 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c -@@ -0,0 +1,8 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-19.c b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c -new file mode 100644 -index 00000000000..772617f4010 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c -@@ -0,0 +1,8 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+ -+__attribute__ ((function_return("thunk"))) -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-20.c b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c -new file mode 100644 -index 00000000000..1e9f9bd5a66 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((function_return("thunk-extern"))) -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-21.c b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c -new file mode 100644 -index 00000000000..eea07f7abe1 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((function_return("thunk-inline"))) -+void -+bar (void) -+{ -+} --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch b/aports/cross/gcc-armhf/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch deleted file mode 100644 index f33946c1..00000000 --- a/aports/cross/gcc-armhf/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch +++ /dev/null @@ -1,121 +0,0 @@ -From 07857bd9fb9ccab67a932ad9df3e53f3f0c2c617 Mon Sep 17 00:00:00 2001 -From: uros -Date: Thu, 25 Jan 2018 19:39:01 +0000 -Subject: [PATCH 09/13] Use INVALID_REGNUM in indirect thunk processing - - Backport from mainline - 2018-01-17 Uros Bizjak - - * config/i386/i386.c (indirect_thunk_name): Declare regno - as unsigned int. Compare regno with INVALID_REGNUM. - (output_indirect_thunk): Ditto. - (output_indirect_thunk_function): Ditto. - (ix86_code_end): Declare regno as unsigned int. Use INVALID_REGNUM - in the call to output_indirect_thunk_function. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257067 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 30 +++++++++++++++--------------- - 1 file changed, 15 insertions(+), 15 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 9c038bee000..40126579c22 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11087,16 +11087,16 @@ static int indirect_thunks_bnd_used; - /* Fills in the label name that should be used for the indirect thunk. */ - - static void --indirect_thunk_name (char name[32], int regno, bool need_bnd_p, -- bool ret_p) -+indirect_thunk_name (char name[32], unsigned int regno, -+ bool need_bnd_p, bool ret_p) - { -- if (regno >= 0 && ret_p) -+ if (regno != INVALID_REGNUM && ret_p) - gcc_unreachable (); - - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - const char *reg_prefix; - if (LEGACY_INT_REGNO_P (regno)) -@@ -11114,7 +11114,7 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p, - } - else - { -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - if (need_bnd_p) - ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno); -@@ -11166,7 +11166,7 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p, - */ - - static void --output_indirect_thunk (bool need_bnd_p, int regno) -+output_indirect_thunk (bool need_bnd_p, unsigned int regno) - { - char indirectlabel1[32]; - char indirectlabel2[32]; -@@ -11196,7 +11196,7 @@ output_indirect_thunk (bool need_bnd_p, int regno) - - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); - -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - /* MOV. */ - rtx xops[2]; -@@ -11220,12 +11220,12 @@ output_indirect_thunk (bool need_bnd_p, int regno) - } - - /* Output a funtion with a call and return thunk for indirect branch. -- If BND_P is true, the BND prefix is needed. If REGNO != -1, the -- function address is in REGNO. Otherwise, the function address is -+ If BND_P is true, the BND prefix is needed. If REGNO != INVALID_REGNUM, -+ the function address is in REGNO. Otherwise, the function address is - on the top of stack. */ - - static void --output_indirect_thunk_function (bool need_bnd_p, int regno) -+output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - { - char name[32]; - tree decl; -@@ -11274,7 +11274,7 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -- if (regno < 0) -+ if (regno == INVALID_REGNUM) - { - /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ - char alias[32]; -@@ -11348,16 +11348,16 @@ static void - ix86_code_end (void) - { - rtx xops[2]; -- int regno; -+ unsigned int regno; - - if (indirect_thunk_needed) -- output_indirect_thunk_function (false, -1); -+ output_indirect_thunk_function (false, INVALID_REGNUM); - if (indirect_thunk_bnd_needed) -- output_indirect_thunk_function (true, -1); -+ output_indirect_thunk_function (true, INVALID_REGNUM); - - for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) - { -- int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; -+ unsigned int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; - if ((indirect_thunks_used & (1 << i))) - output_indirect_thunk_function (false, regno); - --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch b/aports/cross/gcc-armhf/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch deleted file mode 100644 index 08593c2b..00000000 --- a/aports/cross/gcc-armhf/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 3815e98f0f46b6c4c41e6810bad987bd083691aa Mon Sep 17 00:00:00 2001 -From: hjl -Date: Fri, 2 Feb 2018 16:47:02 +0000 -Subject: [PATCH 10/13] i386: Pass INVALID_REGNUM as invalid register number - - Backport from mainline - * config/i386/i386.c (ix86_output_function_return): Pass - INVALID_REGNUM, instead of -1, as invalid register number to - indirect_thunk_name and output_indirect_thunk. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257341 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 40126579c22..66502ee6da6 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -28056,7 +28056,8 @@ ix86_output_function_return (bool long_p) - { - bool need_thunk = (cfun->machine->function_return_type - == indirect_branch_thunk); -- indirect_thunk_name (thunk_name, -1, need_bnd_p, true); -+ indirect_thunk_name (thunk_name, INVALID_REGNUM, need_bnd_p, -+ true); - if (need_bnd_p) - { - indirect_thunk_bnd_needed |= need_thunk; -@@ -28069,7 +28070,7 @@ ix86_output_function_return (bool long_p) - } - } - else -- output_indirect_thunk (need_bnd_p, -1); -+ output_indirect_thunk (need_bnd_p, INVALID_REGNUM); - - return ""; - } --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0011-i386-Update-mfunction-return-for-return-with-pop.patch b/aports/cross/gcc-armhf/0011-i386-Update-mfunction-return-for-return-with-pop.patch deleted file mode 100644 index 3d528395..00000000 --- a/aports/cross/gcc-armhf/0011-i386-Update-mfunction-return-for-return-with-pop.patch +++ /dev/null @@ -1,456 +0,0 @@ -From 771535dec733e4b85924f00a3a94c29683d614e5 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 26 Feb 2018 15:29:30 +0000 -Subject: [PATCH 11/13] i386: Update -mfunction-return= for return with pop - -When -mfunction-return= is used, simple_return_pop_internal should pop -return address into ECX register, adjust stack by bytes to pop from stack -and jump to the return thunk via ECX register. - -Revision 257992 removed the bool argument from ix86_output_indirect_jmp. -Update comments to reflect it. - -Tested on i686 and x86-64. - -gcc/ - - Backport from mainline - 2018-02-26 H.J. Lu - - * config/i386/i386.c (ix86_output_indirect_jmp): Update comments. - - 2018-02-26 H.J. Lu - - PR target/84530 - * config/i386/i386-protos.h (ix86_output_indirect_jmp): Remove - the bool argument. - (ix86_output_indirect_function_return): New prototype. - (ix86_split_simple_return_pop_internal): Likewise. - * config/i386/i386.c (indirect_return_via_cx): New. - (indirect_return_via_cx_bnd): Likewise. - (indirect_thunk_name): Handle return va CX_REG. - (output_indirect_thunk_function): Create alias for - __x86_return_thunk_[re]cx and __x86_return_thunk_[re]cx_bnd. - (ix86_output_indirect_jmp): Remove the bool argument. - (ix86_output_indirect_function_return): New function. - (ix86_split_simple_return_pop_internal): Likewise. - * config/i386/i386.md (*indirect_jump): Don't pass false - to ix86_output_indirect_jmp. - (*tablejump_1): Likewise. - (simple_return_pop_internal): Change it to define_insn_and_split. - Call ix86_split_simple_return_pop_internal to split it for - -mfunction-return=. - (simple_return_indirect_internal): Call - ix86_output_indirect_function_return instead of - ix86_output_indirect_jmp. - -gcc/testsuite/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84530 - * gcc.target/i386/ret-thunk-22.c: New test. - * gcc.target/i386/ret-thunk-23.c: Likewise. - * gcc.target/i386/ret-thunk-24.c: Likewise. - * gcc.target/i386/ret-thunk-25.c: Likewise. - * gcc.target/i386/ret-thunk-26.c: Likewise. ---- - gcc/config/i386/i386-protos.h | 4 +- - gcc/config/i386/i386.c | 127 +++++++++++++++++++++++---- - gcc/config/i386/i386.md | 11 ++- - gcc/testsuite/gcc.target/i386/ret-thunk-22.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-23.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-24.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-25.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-26.c | 40 +++++++++ - 8 files changed, 222 insertions(+), 20 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-22.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-23.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-24.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-25.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-26.c - -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index 620d70ef9f6..c7a0ccb58d3 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -311,8 +311,10 @@ extern enum attr_cpu ix86_schedule; - #endif - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); --extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); -+extern const char * ix86_output_indirect_jmp (rtx call_op); - extern const char * ix86_output_function_return (bool long_p); -+extern const char * ix86_output_indirect_function_return (rtx ret_op); -+extern void ix86_split_simple_return_pop_internal (rtx); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 66502ee6da6..21c3c18bd3c 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11080,6 +11080,12 @@ static int indirect_thunks_used; - by call and return thunks functions with the BND prefix. */ - static int indirect_thunks_bnd_used; - -+/* True if return thunk function via CX is needed. */ -+static bool indirect_return_via_cx; -+/* True if return thunk function via CX with the BND prefix is -+ needed. */ -+static bool indirect_return_via_cx_bnd; -+ - #ifndef INDIRECT_LABEL - # define INDIRECT_LABEL "LIND" - #endif -@@ -11090,12 +11096,13 @@ static void - indirect_thunk_name (char name[32], unsigned int regno, - bool need_bnd_p, bool ret_p) - { -- if (regno != INVALID_REGNUM && ret_p) -+ if (regno != INVALID_REGNUM && regno != CX_REG && ret_p) - gcc_unreachable (); - - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -+ const char *ret = ret_p ? "return" : "indirect"; - if (regno != INVALID_REGNUM) - { - const char *reg_prefix; -@@ -11103,14 +11110,11 @@ indirect_thunk_name (char name[32], unsigned int regno, - reg_prefix = TARGET_64BIT ? "r" : "e"; - else - reg_prefix = ""; -- sprintf (name, "__x86_indirect_thunk%s_%s%s", -- bnd, reg_prefix, reg_names[regno]); -+ sprintf (name, "__x86_%s_thunk%s_%s%s", -+ ret, bnd, reg_prefix, reg_names[regno]); - } - else -- { -- const char *ret = ret_p ? "return" : "indirect"; -- sprintf (name, "__x86_%s_thunk%s", ret, bnd); -- } -+ sprintf (name, "__x86_%s_thunk%s", ret, bnd); - } - else - { -@@ -11274,9 +11278,23 @@ output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -+ /* Create alias for __x86_return_thunk/__x86_return_thunk_bnd or -+ __x86_return_thunk_ecx/__x86_return_thunk_ecx_bnd. */ -+ bool need_alias; - if (regno == INVALID_REGNUM) -+ need_alias = true; -+ else if (regno == CX_REG) -+ { -+ if (need_bnd_p) -+ need_alias = indirect_return_via_cx_bnd; -+ else -+ need_alias = indirect_return_via_cx; -+ } -+ else -+ need_alias = false; -+ -+ if (need_alias) - { -- /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ - char alias[32]; - - indirect_thunk_name (alias, regno, need_bnd_p, true); -@@ -28019,18 +28037,17 @@ ix86_output_indirect_branch (rtx call_op, const char *xasm, - else - ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p); - } --/* Output indirect jump. CALL_OP is the jump target. Jump is a -- function return if RET_P is true. */ -+ -+/* Output indirect jump. CALL_OP is the jump target. */ - - const char * --ix86_output_indirect_jmp (rtx call_op, bool ret_p) -+ix86_output_indirect_jmp (rtx call_op) - { - if (cfun->machine->indirect_branch_type != indirect_branch_keep) - { -- /* We can't have red-zone if this isn't a function return since -- "call" in the indirect thunk pushes the return address onto -- stack, destroying red-zone. */ -- if (!ret_p && ix86_red_zone_size != 0) -+ /* We can't have red-zone since "call" in the indirect thunk -+ pushes the return address onto stack, destroying red-zone. */ -+ if (ix86_red_zone_size != 0) - gcc_unreachable (); - - ix86_output_indirect_branch (call_op, "%0", true); -@@ -28081,6 +28098,86 @@ ix86_output_function_return (bool long_p) - return "rep%; ret"; - } - -+/* Output indirect function return. RET_OP is the function return -+ target. */ -+ -+const char * -+ix86_output_indirect_function_return (rtx ret_op) -+{ -+ if (cfun->machine->function_return_type != indirect_branch_keep) -+ { -+ char thunk_name[32]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ unsigned int regno = REGNO (ret_op); -+ gcc_assert (regno == CX_REG); -+ -+ if (cfun->machine->function_return_type -+ != indirect_branch_thunk_inline) -+ { -+ bool need_thunk = (cfun->machine->function_return_type -+ == indirect_branch_thunk); -+ indirect_thunk_name (thunk_name, regno, need_bnd_p, true); -+ if (need_bnd_p) -+ { -+ if (need_thunk) -+ { -+ indirect_return_via_cx_bnd = true; -+ indirect_thunks_bnd_used |= 1 << CX_REG; -+ } -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ } -+ else -+ { -+ if (need_thunk) -+ { -+ indirect_return_via_cx = true; -+ indirect_thunks_used |= 1 << CX_REG; -+ } -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ return ""; -+ } -+ else -+ return "%!jmp\t%A0"; -+} -+ -+/* Split simple return with popping POPC bytes from stack to indirect -+ branch with stack adjustment . */ -+ -+void -+ix86_split_simple_return_pop_internal (rtx popc) -+{ -+ struct machine_function *m = cfun->machine; -+ rtx ecx = gen_rtx_REG (SImode, CX_REG); -+ rtx_insn *insn; -+ -+ /* There is no "pascal" calling convention in any 64bit ABI. */ -+ gcc_assert (!TARGET_64BIT); -+ -+ insn = emit_insn (gen_pop (ecx)); -+ m->fs.cfa_offset -= UNITS_PER_WORD; -+ m->fs.sp_offset -= UNITS_PER_WORD; -+ -+ rtx x = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD); -+ x = gen_rtx_SET (stack_pointer_rtx, x); -+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x); -+ add_reg_note (insn, REG_CFA_REGISTER, gen_rtx_SET (ecx, pc_rtx)); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ -+ x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, popc); -+ x = gen_rtx_SET (stack_pointer_rtx, x); -+ insn = emit_insn (x); -+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ -+ /* Now return address is in ECX. */ -+ emit_jump_insn (gen_simple_return_indirect_internal (ecx)); -+} -+ - /* Output the assembly for a call instruction. */ - - const char * -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 05a88fff356..857466a6361 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11813,7 +11813,7 @@ - (define_insn "*indirect_jump" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))] - "" -- "* return ix86_output_indirect_jmp (operands[0], false);" -+ "* return ix86_output_indirect_jmp (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -@@ -11868,7 +11868,7 @@ - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw")) - (use (label_ref (match_operand 1)))] - "" -- "* return ix86_output_indirect_jmp (operands[0], false);" -+ "* return ix86_output_indirect_jmp (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -@@ -12520,11 +12520,14 @@ - (set_attr "prefix_rep" "1") - (set_attr "modrm" "0")]) - --(define_insn "simple_return_pop_internal" -+(define_insn_and_split "simple_return_pop_internal" - [(simple_return) - (use (match_operand:SI 0 "const_int_operand"))] - "reload_completed" - "%!ret\t%0" -+ "&& cfun->machine->function_return_type != indirect_branch_keep" -+ [(const_int 0)] -+ "ix86_split_simple_return_pop_internal (operands[0]); DONE;" - [(set_attr "length" "3") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "2") -@@ -12535,7 +12538,7 @@ - [(simple_return) - (use (match_operand:SI 0 "register_operand" "r"))] - "reload_completed" -- "* return ix86_output_indirect_jmp (operands[0], true);" -+ "* return ix86_output_indirect_function_return (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-22.c b/gcc/testsuite/gcc.target/i386/ret-thunk-22.c -new file mode 100644 -index 00000000000..89e086de97b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-22.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-23.c b/gcc/testsuite/gcc.target/i386/ret-thunk-23.c -new file mode 100644 -index 00000000000..43f0ccaa854 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-23.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not {\tpause} } } */ -+/* { dg-final { scan-assembler-not {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-24.c b/gcc/testsuite/gcc.target/i386/ret-thunk-24.c -new file mode 100644 -index 00000000000..8729e35147e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-24.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-25.c b/gcc/testsuite/gcc.target/i386/ret-thunk-25.c -new file mode 100644 -index 00000000000..f73553c9a9f ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-25.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_bnd_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-26.c b/gcc/testsuite/gcc.target/i386/ret-thunk-26.c -new file mode 100644 -index 00000000000..9144e988735 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-26.c -@@ -0,0 +1,40 @@ -+/* PR target/r84530 */ -+/* { dg-do run } */ -+/* { dg-options "-Os -mfunction-return=thunk" } */ -+ -+struct S { int i; }; -+__attribute__((const, noinline, noclone)) -+struct S foo (int x) -+{ -+ struct S s; -+ s.i = x; -+ return s; -+} -+ -+int a[2048], b[2048], c[2048], d[2048]; -+struct S e[2048]; -+ -+__attribute__((noinline, noclone)) void -+bar (void) -+{ -+ int i; -+ for (i = 0; i < 1024; i++) -+ { -+ e[i] = foo (i); -+ a[i+2] = a[i] + a[i+1]; -+ b[10] = b[10] + i; -+ c[i] = c[2047 - i]; -+ d[i] = d[i + 1]; -+ } -+} -+ -+int -+main () -+{ -+ int i; -+ bar (); -+ for (i = 0; i < 1024; i++) -+ if (e[i].i != i) -+ __builtin_abort (); -+ return 0; -+} --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch b/aports/cross/gcc-armhf/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch deleted file mode 100644 index 1bd6134c..00000000 --- a/aports/cross/gcc-armhf/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch +++ /dev/null @@ -1,1003 +0,0 @@ -From a34d0b92e2c81792bd1f27e872c4c97a2df6861c Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 26 Feb 2018 17:00:46 +0000 -Subject: [PATCH 12/13] i386: Add TARGET_INDIRECT_BRANCH_REGISTER - -For - ---- -struct C { - virtual ~C(); - virtual void f(); -}; - -void -f (C *p) -{ - p->f(); - p->f(); -} ---- - --mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates: - -_Z1fP1C: -.LFB0: - .cfi_startproc - pushq %rbx - .cfi_def_cfa_offset 16 - .cfi_offset 3, -16 - movq (%rdi), %rax - movq %rdi, %rbx - jmp .LIND1 -.LIND0: - pushq 16(%rax) - jmp __x86_indirect_thunk -.LIND1: - call .LIND0 - movq (%rbx), %rax - movq %rbx, %rdi - popq %rbx - .cfi_def_cfa_offset 8 - movq 16(%rax), %rax - jmp __x86_indirect_thunk_rax - .cfi_endproc - -x86-64 is supposed to have asynchronous unwind tables by default, but -there is nothing that reflects the change in the (relative) frame -address after .LIND0. That region really has to be moved outside of -the .cfi_startproc/.cfi_endproc bracket. - -This patch adds TARGET_INDIRECT_BRANCH_REGISTER to force indirect -branch via register whenever -mindirect-branch= is used. Now, --mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates: - -_Z1fP1C: -.LFB0: - .cfi_startproc - pushq %rbx - .cfi_def_cfa_offset 16 - .cfi_offset 3, -16 - movq (%rdi), %rax - movq %rdi, %rbx - movq 16(%rax), %rax - call __x86_indirect_thunk_rax - movq (%rbx), %rax - movq %rbx, %rdi - popq %rbx - .cfi_def_cfa_offset 8 - movq 16(%rax), %rax - jmp __x86_indirect_thunk_rax - .cfi_endproc - -so that "-mindirect-branch=thunk-extern" is equivalent to -"-mindirect-branch=thunk-extern -mindirect-branch-register", which is -used by Linux kernel. - -gcc/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84039 - * config/i386/constraints.md (Bs): Replace - ix86_indirect_branch_register with - TARGET_INDIRECT_BRANCH_REGISTER. - (Bw): Likewise. - * config/i386/i386.md (indirect_jump): Likewise. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Peepholes of indirect call and jump via memory: Likewise. - (*sibcall_GOT_32): Disallowed for TARGET_INDIRECT_BRANCH_REGISTER. - (*sibcall_value_GOT_32): Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - * config/i386/i386.h (TARGET_INDIRECT_BRANCH_REGISTER): New. - -gcc/testsuite/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84039 - * gcc.target/i386/indirect-thunk-1.c: Updated. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. ---- - gcc/config/i386/constraints.md | 4 ++-- - gcc/config/i386/i386.h | 5 ++++ - gcc/config/i386/i386.md | 28 +++++++++++++--------- - gcc/config/i386/predicates.md | 6 ++--- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 6 +++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 12 ++++++---- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-1.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-2.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-3.c | 3 +-- - .../gcc.target/i386/indirect-thunk-attr-4.c | 3 +-- - .../gcc.target/i386/indirect-thunk-attr-5.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-attr-6.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-attr-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 7 +++--- - .../gcc.target/i386/indirect-thunk-extern-1.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-extern-2.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-extern-3.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-extern-4.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-extern-5.c | 6 +++-- - .../gcc.target/i386/indirect-thunk-extern-6.c | 8 +++---- - .../gcc.target/i386/indirect-thunk-extern-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-inline-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 3 ++- - .../gcc.target/i386/indirect-thunk-inline-6.c | 3 ++- - .../gcc.target/i386/indirect-thunk-inline-7.c | 4 ++-- - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 9 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 9 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 8 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 5 ++-- - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 7 +++--- - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 7 +++--- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 13 ++++------ - 43 files changed, 128 insertions(+), 141 deletions(-) - -diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md -index 9204c8e8487..ef684a95497 100644 ---- a/gcc/config/i386/constraints.md -+++ b/gcc/config/i386/constraints.md -@@ -172,7 +172,7 @@ - - (define_constraint "Bs" - "@internal Sibcall memory operand." -- (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -@@ -180,7 +180,7 @@ - - (define_constraint "Bw" - "@internal Call memory operand." -- (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index b34bc117c34..1816d710f4e 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2676,6 +2676,11 @@ extern void debug_dispatch_window (int); - #define TARGET_RECIP_VEC_DIV ((recip_mask & RECIP_MASK_VEC_DIV) != 0) - #define TARGET_RECIP_VEC_SQRT ((recip_mask & RECIP_MASK_VEC_SQRT) != 0) - -+ -+#define TARGET_INDIRECT_BRANCH_REGISTER \ -+ (ix86_indirect_branch_register \ -+ || cfun->machine->indirect_branch_type != indirect_branch_keep) -+ - #define IX86_HLE_ACQUIRE (1 << 16) - #define IX86_HLE_RELEASE (1 << 17) - -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 857466a6361..6a6dc26799c 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11805,7 +11805,7 @@ - [(set (pc) (match_operand 0 "indirect_branch_operand"))] - "" - { -- if (TARGET_X32 || ix86_indirect_branch_register) -+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -11859,7 +11859,7 @@ - OPTAB_DIRECT); - } - -- if (TARGET_X32 || ix86_indirect_branch_register) -+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -12029,7 +12029,10 @@ - (match_operand:SI 0 "register_no_elim_operand" "U") - (match_operand:SI 1 "GOT32_symbol_operand")))) - (match_operand 2))] -- "!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)" -+ "!TARGET_MACHO -+ && !TARGET_64BIT -+ && !TARGET_INDIRECT_BRANCH_REGISTER -+ && SIBLING_CALL_P (insn)" - { - rtx fnaddr = gen_rtx_PLUS (Pmode, operands[0], operands[1]); - fnaddr = gen_const_mem (Pmode, fnaddr); -@@ -12048,7 +12051,7 @@ - [(call (mem:QI (match_operand:W 0 "memory_operand" "m")) - (match_operand 1)) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32 && !ix86_indirect_branch_register" -+ "!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER" - "* return ix86_output_call_insn (insn, operands[0]);" - [(set_attr "type" "call")]) - -@@ -12058,7 +12061,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" -@@ -12073,7 +12076,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" -@@ -12171,7 +12174,7 @@ - (match_operand:W 1 "memory_operand")) - (set (pc) (match_dup 0))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && peep2_reg_dead_p (2, operands[0])" - [(set (pc) (match_dup 1))]) - -@@ -12229,7 +12232,10 @@ - (match_operand:SI 1 "register_no_elim_operand" "U") - (match_operand:SI 2 "GOT32_symbol_operand")))) - (match_operand 3)))] -- "!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)" -+ "!TARGET_MACHO -+ && !TARGET_64BIT -+ && !TARGET_INDIRECT_BRANCH_REGISTER -+ && SIBLING_CALL_P (insn)" - { - rtx fnaddr = gen_rtx_PLUS (Pmode, operands[1], operands[2]); - fnaddr = gen_const_mem (Pmode, fnaddr); -@@ -12250,7 +12256,7 @@ - (call (mem:QI (match_operand:W 1 "memory_operand" "m")) - (match_operand 2))) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32 && !ix86_indirect_branch_register" -+ "!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER" - "* return ix86_output_call_insn (insn, operands[1]);" - [(set_attr "type" "callv")]) - -@@ -12261,7 +12267,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3)))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" -@@ -12278,7 +12284,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3)))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" -diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md -index d1f0a7dbf61..5f8a98faead 100644 ---- a/gcc/config/i386/predicates.md -+++ b/gcc/config/i386/predicates.md -@@ -593,7 +593,7 @@ - ;; Test for a valid operand for indirect branch. - (define_predicate "indirect_branch_operand" - (ior (match_operand 0 "register_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")))) - -@@ -637,7 +637,7 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "call_register_no_elim_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (ior (and (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -@@ -648,7 +648,7 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "register_no_elim_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (ior (and (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index 60d09881a99..6e94d2c4865 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index aac75163794..3c467078964 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index 9e24a385387..2c7fb52b59d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 127b5d94523..0d3f895009d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index fcaa18d10b7..fb26c005e80 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -9,8 +9,10 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index e4649283d10..aa03fbd8446 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -10,9 +10,13 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 { target x32 } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index 17c2d0faf88..3c72036dbaf 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -35,9 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index 9194ccf3cbc..7106407b83d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -14,9 +14,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index e51f261a612..27c7e5b029b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index 4aeec1833cd..89a2bac8403 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -14,10 +14,9 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ - /* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index ac0e5999f63..3eb83c3779a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -13,10 +13,9 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ - /* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index 573cf1ef09e..0098dd1133d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -14,9 +14,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index b2b37fc6e2e..ece8de15a4b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -13,9 +13,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index 4a43e199931..d53fc887dcc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -36,9 +36,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index ac84ab623fa..73d16baddc7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -10,9 +10,9 @@ foo (void) - dispatch (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index ce655e8be1c..856751ac224 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -11,10 +11,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index d34485a0010..42312f65588 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -10,8 +10,9 @@ foo (void) - bar (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index 0e19830de4d..c8ca102c8df 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -11,10 +11,9 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 1 } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index 579441f250e..c09dd0afd2d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index c92e6f2b02d..826425a5115 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index d9964c25bbd..385626850a2 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index d4dca4dc5fe..1ae49b137ca 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -12,9 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index 5c07e02df6a..53282390977 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -9,8 +9,10 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index 3eb440693a0..8ae43482d0c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -10,8 +10,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index aece9383697..2b9a33e93dc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -35,9 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 3aba5e8c81f..869d9040838 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index 0f0181d6672..c5c16ed8bd8 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 2eef6f35a75..4a63ebed8ab 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index e825a10f14c..a395ffca018 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index c6d77e10352..21cbfd39582 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -9,7 +9,8 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index 6454827b780..d1300f18dc7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -10,7 +10,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index c67066cf197..ea009245a58 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -35,8 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -index e6fea84a4d9..af9023af613 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -15,9 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -index e239ec4542f..ba467c59b36 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -15,9 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -index fa3181303c9..43e57cac2c3 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -15,8 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -index fd5b41fdd3f..55f156c4376 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -14,9 +14,8 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -index d606373ead1..1c790436a53 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -16,7 +16,6 @@ foo (void) - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -index 75e45e226b8..58aba319cba 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -16,7 +16,6 @@ foo (void) - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index d1db41cc128..d2df8b874e0 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -14,11 +14,8 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ --/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */ --/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch b/aports/cross/gcc-armhf/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch deleted file mode 100644 index d846ac77..00000000 --- a/aports/cross/gcc-armhf/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch +++ /dev/null @@ -1,225 +0,0 @@ -From e7fbaebc8ff650df76f43e92cb9ca59d5174ebe7 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Thu, 15 Mar 2018 17:54:40 +0000 -Subject: [PATCH 13/13] i386: Don't generate alias for function return thunk - -Function return thunks shouldn't be aliased to indirect branch thunks -since indirect branch thunks are placed in COMDAT section and a COMDAT -section with indirect branch may not have function return thunk. This -patch generates function return thunks directly. - -gcc/ - - Backport from mainline - PR target/84574 - * config/i386/i386.c (indirect_thunk_needed): Update comments. - (indirect_thunk_bnd_needed): Likewise. - (indirect_thunks_used): Likewise. - (indirect_thunks_bnd_used): Likewise. - (indirect_return_needed): New. - (indirect_return_bnd_needed): Likewise. - (output_indirect_thunk_function): Add a bool argument for - function return. - (output_indirect_thunk_function): Don't generate alias for - function return thunk. - (ix86_code_end): Call output_indirect_thunk_function to generate - function return thunks. - (ix86_output_function_return): Set indirect_return_bnd_needed - and indirect_return_needed instead of indirect_thunk_bnd_needed - and indirect_thunk_needed. - -gcc/testsuite/ - - Backport from mainline - PR target/84574 - * gcc.target/i386/ret-thunk-9.c: Expect __x86_return_thunk - label instead of __x86_indirect_thunk label. ---- - gcc/config/i386/i386.c | 92 ++++++++++------------------- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 2 +- - 2 files changed, 33 insertions(+), 61 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 21c3c18bd3c..f4cd1c6f4e9 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11067,19 +11067,23 @@ ix86_setup_frame_addresses (void) - labels in call and return thunks. */ - static int indirectlabelno; - --/* True if call and return thunk functions are needed. */ -+/* True if call thunk function is needed. */ - static bool indirect_thunk_needed = false; --/* True if call and return thunk functions with the BND prefix are -- needed. */ -+/* True if call thunk function with the BND prefix is needed. */ - static bool indirect_thunk_bnd_needed = false; - - /* Bit masks of integer registers, which contain branch target, used -- by call and return thunks functions. */ -+ by call thunk functions. */ - static int indirect_thunks_used; - /* Bit masks of integer registers, which contain branch target, used -- by call and return thunks functions with the BND prefix. */ -+ by call thunk functions with the BND prefix. */ - static int indirect_thunks_bnd_used; - -+/* True if return thunk function is needed. */ -+static bool indirect_return_needed = false; -+/* True if return thunk function with the BND prefix is needed. */ -+static bool indirect_return_bnd_needed = false; -+ - /* True if return thunk function via CX is needed. */ - static bool indirect_return_via_cx; - /* True if return thunk function via CX with the BND prefix is -@@ -11226,16 +11230,18 @@ output_indirect_thunk (bool need_bnd_p, unsigned int regno) - /* Output a funtion with a call and return thunk for indirect branch. - If BND_P is true, the BND prefix is needed. If REGNO != INVALID_REGNUM, - the function address is in REGNO. Otherwise, the function address is -- on the top of stack. */ -+ on the top of stack. Thunk is used for function return if RET_P is -+ true. */ - - static void --output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) -+output_indirect_thunk_function (bool need_bnd_p, unsigned int regno, -+ bool ret_p) - { - char name[32]; - tree decl; - - /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -- indirect_thunk_name (name, regno, need_bnd_p, false); -+ indirect_thunk_name (name, regno, need_bnd_p, ret_p); - decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, - get_identifier (name), - build_function_type_list (void_type_node, NULL_TREE)); -@@ -11278,50 +11284,6 @@ output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -- /* Create alias for __x86_return_thunk/__x86_return_thunk_bnd or -- __x86_return_thunk_ecx/__x86_return_thunk_ecx_bnd. */ -- bool need_alias; -- if (regno == INVALID_REGNUM) -- need_alias = true; -- else if (regno == CX_REG) -- { -- if (need_bnd_p) -- need_alias = indirect_return_via_cx_bnd; -- else -- need_alias = indirect_return_via_cx; -- } -- else -- need_alias = false; -- -- if (need_alias) -- { -- char alias[32]; -- -- indirect_thunk_name (alias, regno, need_bnd_p, true); --#if TARGET_MACHO -- if (TARGET_MACHO) -- { -- fputs ("\t.weak_definition\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- fputs ("\n\t.private_extern\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- ASM_OUTPUT_LABEL (asm_out_file, alias); -- } --#else -- ASM_OUTPUT_DEF (asm_out_file, alias, name); -- if (USE_HIDDEN_LINKONCE) -- { -- fputs ("\t.globl\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- fputs ("\t.hidden\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- } --#endif -- } -- - DECL_INITIAL (decl) = make_node (BLOCK); - current_function_decl = decl; - allocate_struct_function (decl, false); -@@ -11368,19 +11330,29 @@ ix86_code_end (void) - rtx xops[2]; - unsigned int regno; - -+ if (indirect_return_needed) -+ output_indirect_thunk_function (false, INVALID_REGNUM, true); -+ if (indirect_return_bnd_needed) -+ output_indirect_thunk_function (true, INVALID_REGNUM, true); -+ -+ if (indirect_return_via_cx) -+ output_indirect_thunk_function (false, CX_REG, true); -+ if (indirect_return_via_cx_bnd) -+ output_indirect_thunk_function (true, CX_REG, true); -+ - if (indirect_thunk_needed) -- output_indirect_thunk_function (false, INVALID_REGNUM); -+ output_indirect_thunk_function (false, INVALID_REGNUM, false); - if (indirect_thunk_bnd_needed) -- output_indirect_thunk_function (true, INVALID_REGNUM); -+ output_indirect_thunk_function (true, INVALID_REGNUM, false); - - for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) - { - unsigned int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; - if ((indirect_thunks_used & (1 << i))) -- output_indirect_thunk_function (false, regno); -+ output_indirect_thunk_function (false, regno, false); - - if ((indirect_thunks_bnd_used & (1 << i))) -- output_indirect_thunk_function (true, regno); -+ output_indirect_thunk_function (true, regno, false); - } - - for (regno = AX_REG; regno <= SP_REG; regno++) -@@ -11389,10 +11361,10 @@ ix86_code_end (void) - tree decl; - - if ((indirect_thunks_used & (1 << regno))) -- output_indirect_thunk_function (false, regno); -+ output_indirect_thunk_function (false, regno, false); - - if ((indirect_thunks_bnd_used & (1 << regno))) -- output_indirect_thunk_function (true, regno); -+ output_indirect_thunk_function (true, regno, false); - - if (!(pic_labels_used & (1 << regno))) - continue; -@@ -28077,12 +28049,12 @@ ix86_output_function_return (bool long_p) - true); - if (need_bnd_p) - { -- indirect_thunk_bnd_needed |= need_thunk; -+ indirect_return_bnd_needed |= need_thunk; - fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); - } - else - { -- indirect_thunk_needed |= need_thunk; -+ indirect_return_needed |= need_thunk; - fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); - } - } -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index d2df8b874e0..eee230ca2f6 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -13,7 +13,7 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ -+/* { dg-final { scan-assembler "__x86_return_thunk:" } } */ - /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-armhf/001_all_default-ssp-strong.patch b/aports/cross/gcc-armhf/001_all_default-ssp-strong.patch deleted file mode 100644 index 95949eb0..00000000 --- a/aports/cross/gcc-armhf/001_all_default-ssp-strong.patch +++ /dev/null @@ -1,215 +0,0 @@ -# DP: Turn on -fstack-protector by default for C, C++, ObjC, ObjC++. -# DP: Build libgcc using -fno-stack-protector. - ---- - gcc/Makefile.in | 2 ++ - gcc/cp/lang-specs.h | 6 +++--- - gcc/doc/invoke.texi | 4 ++++ - gcc/gcc.c | 18 ++++++++++++++---- - gcc/objc/lang-specs.h | 10 +++++----- - gcc/objcp/lang-specs.h | 8 ++++---- - 6 files changed, 32 insertions(+), 16 deletions(-) - -Index: b/gcc/gcc.c -=================================================================== ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -858,6 +858,14 @@ proper position among the other output f - #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G" - #endif - -+#ifndef SSP_DEFAULT_SPEC -+#ifdef TARGET_LIBC_PROVIDES_SSP -+#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!ffreestanding:%{!nostdlib:%{!fstack-protector:-fstack-protector-strong}}}}}" -+#else -+#define SSP_DEFAULT_SPEC "" -+#endif -+#endif -+ - #ifndef LINK_SSP_SPEC - #ifdef TARGET_LIBC_PROVIDES_SSP - #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ -@@ -1057,6 +1065,7 @@ static const char *cc1_spec = CC1_SPEC; - static const char *cc1plus_spec = CC1PLUS_SPEC; - static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC; - static const char *link_ssp_spec = LINK_SSP_SPEC; -+static const char *ssp_default_spec = SSP_DEFAULT_SPEC; - static const char *asm_spec = ASM_SPEC; - static const char *asm_final_spec = ASM_FINAL_SPEC; - static const char *link_spec = LINK_SPEC; -@@ -1112,7 +1121,7 @@ static const char *cpp_unique_options = - static const char *cpp_options = - "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\ - %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\ -- %{undef} %{save-temps*:-fpch-preprocess}"; -+ %{undef} %{save-temps*:-fpch-preprocess} %(ssp_default)"; - - /* This contains cpp options which are not passed when the preprocessor - output will be used by another program. */ -@@ -1301,9 +1310,9 @@ static const struct compiler default_com - %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \ - %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\ - cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \ -- %(cc1_options)}\ -+ %(cc1_options) %(ssp_default)}\ - %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\ -- cc1 %(cpp_unique_options) %(cc1_options)}}}\ -+ cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 1}, - {"-", - "%{!E:%e-E or -x required when input is from standard input}\ -@@ -1328,7 +1337,7 @@ static const struct compiler default_com - %W{o*:--output-pch=%*}}%V}}}}}}}", 0, 0, 0}, - {".i", "@cpp-output", 0, 0, 0}, - {"@cpp-output", -- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -+ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(ssp_default) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {".s", "@assembler", 0, 0, 0}, - {"@assembler", - "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0}, -@@ -1560,6 +1569,7 @@ static struct spec_list static_specs[] = - INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec), - INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec), - INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec), -+ INIT_STATIC_SPEC ("ssp_default", &ssp_default_spec), - INIT_STATIC_SPEC ("endfile", &endfile_spec), - INIT_STATIC_SPEC ("link", &link_spec), - INIT_STATIC_SPEC ("lib", &lib_spec), -Index: b/gcc/cp/lang-specs.h -=================================================================== ---- a/gcc/cp/lang-specs.h -+++ b/gcc/cp/lang-specs.h -@@ -46,7 +46,7 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\ - cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:-o %g.s \ - %{!fdump-ada-spec*:%{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}}%V}}}}", -@@ -58,11 +58,11 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\ - cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {".ii", "@c++-cpp-output", 0, 0, 0}, - {"@c++-cpp-output", - "%{!M:%{!MM:%{!E:\ -- cc1plus -fpreprocessed %i %(cc1_options) %2\ -+ cc1plus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/params.def -=================================================================== ---- a/gcc/params.def -+++ b/gcc/params.def -@@ -673,7 +673,7 @@ DEFPARAM (PARAM_INTEGER_SHARE_LIMIT, - DEFPARAM (PARAM_SSP_BUFFER_SIZE, - "ssp-buffer-size", - "The lower bound for a buffer to be considered for stack smashing protection.", -- 8, 1, 0) -+ 4, 1, 0) - - DEFPARAM (PARAM_MIN_SIZE_FOR_STACK_SHARING, - "min-size-for-stack-sharing", -Index: b/gcc/objc/lang-specs.h -=================================================================== ---- a/gcc/objc/lang-specs.h -+++ b/gcc/objc/lang-specs.h -@@ -29,9 +29,9 @@ along with GCC; see the file COPYING3. - %{traditional|traditional-cpp:\ - %eGNU Objective C no longer supports traditional compilation}\ - %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\ -- cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\ -+ cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}\ - %{!save-temps*:%{!no-integrated-cpp:\ -- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\ -+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objective-c-header", - "%{E|M|MM:cc1obj -E %{traditional|traditional-cpp:-traditional-cpp}\ -@@ -40,18 +40,18 @@ along with GCC; see the file COPYING3. - %{traditional|traditional-cpp:\ - %eGNU Objective C no longer supports traditional compilation}\ - %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\ -- cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ cc1obj -fpreprocessed %b.mi %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - -o %g.s %{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}%V}\ - %{!save-temps*:%{!no-integrated-cpp:\ -- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - -o %g.s %{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0}, - {".mi", "@objective-c-cpp-output", 0, 0, 0}, - {"@objective-c-cpp-output", -- "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objc-cpp-output", - "%nobjc-cpp-output is deprecated; please use objective-c-cpp-output instead\n\ -- %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/objcp/lang-specs.h -=================================================================== ---- a/gcc/objcp/lang-specs.h -+++ b/gcc/objcp/lang-specs.h -@@ -36,7 +36,7 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\ - cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - -o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {"@objective-c++", -@@ -46,16 +46,16 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\ - cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {".mii", "@objective-c++-cpp-output", 0, 0, 0}, - {"@objective-c++-cpp-output", - "%{!M:%{!MM:%{!E:\ -- cc1objplus -fpreprocessed %i %(cc1_options) %2\ -+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objc++-cpp-output", - "%nobjc++-cpp-output is deprecated; please use objective-c++-cpp-output instead\n\ - %{!M:%{!MM:%{!E:\ -- cc1objplus -fpreprocessed %i %(cc1_options) %2\ -+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -9247,6 +9247,9 @@ - The minimum size of variables taking part in stack slot sharing when not - optimizing. The default value is 32. - -+The Alpine Linux default is "4", to increase -+the number of functions protected by the stack protector. -+ - @item max-jump-thread-duplication-stmts - Maximum number of statements allowed in a block that needs to be - duplicated when threading jumps. -@@ -10185,6 +10188,11 @@ - Like @option{-fstack-protector} but includes additional functions to - be protected --- those that have local array definitions, or have - references to local frame addresses. -+ -+NOTE: In Alpine Linux, -+@option{-fstack-protector-strong} is enabled by default for C, -+C++, ObjC, ObjC++, if none of @option{-fno-stack-protector}, -+@option{-nostdlib}, nor @option{-ffreestanding} are found. - - @item -fstack-protector-explicit - @opindex fstack-protector-explicit diff --git a/aports/cross/gcc-armhf/002_all_default-relro.patch b/aports/cross/gcc-armhf/002_all_default-relro.patch deleted file mode 100644 index c461017d..00000000 --- a/aports/cross/gcc-armhf/002_all_default-relro.patch +++ /dev/null @@ -1,33 +0,0 @@ -# Turn on -Wl,-z,relro,-z,now by default. - ---- - gcc/doc/invoke.texi | 3 +++ - gcc/gcc.c | 1 + - 2 files changed, 4 insertions(+), 0 deletions(-) - -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -11424,6 +11424,9 @@ For example, @option{-Wl,-Map,output.map - linker. When using the GNU linker, you can also get the same effect with - @option{-Wl,-Map=output.map}. - -+NOTE: In Alpine Linux, for LDFLAGS, the option -+@option{-Wl,-z,relro,now} is used. To disable, use @option{-Wl,-z,norelro}. -+ - @item -u @var{symbol} - @opindex u - Pretend the symbol @var{symbol} is undefined, to force linking of -Index: b/gcc/gcc.c -=================================================================== ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -890,6 +890,7 @@ proper position among the other output f - "%{flto|flto=*:% 0 - ---- - gcc/doc/invoke.texi | 6 ++++++ - gcc/c-family/c-cppbuiltin.c | 3 + - 2 files changed, 9 insertions(+), 0 deletions(-) - -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -7840,6 +7840,12 @@ also turns on the following optimization - Please note the warning under @option{-fgcse} about - invoking @option{-O2} on programs that use computed gotos. - -+NOTE: In Alpine Linux, @option{-D_FORTIFY_SOURCE=2} is -+set by default, and is activated when @option{-O} is set to 2 or higher. -+This enables additional compile-time and run-time checks for several libc -+functions. To disable, specify either @option{-U_FORTIFY_SOURCE} or -+@option{-D_FORTIFY_SOURCE=0}. -+ - @item -O3 - @opindex O3 - Optimize yet more. @option{-O3} turns on all optimizations specified -Index: b/gcc/c-family/c-cppbuiltin.c -=================================================================== ---- a/gcc/c-family/c-cppbuiltin.c -+++ b/gcc/c-family/c-cppbuiltin.c -@@ -1176,6 +1176,10 @@ c_cpp_builtins (cpp_reader *pfile) - builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0); - builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0); - -+ /* Fortify Source enabled by default for optimization levels > 0 */ -+ if (optimize) -+ builtin_define_with_int_value ("_FORTIFY_SOURCE", 2); -+ - /* Misc. */ - if (flag_gnu89_inline) - cpp_define (pfile, "__GNUC_GNU_INLINE__"); diff --git a/aports/cross/gcc-armhf/005_all_default-as-needed.patch b/aports/cross/gcc-armhf/005_all_default-as-needed.patch deleted file mode 100644 index ee4f7962..00000000 --- a/aports/cross/gcc-armhf/005_all_default-as-needed.patch +++ /dev/null @@ -1,241 +0,0 @@ -# DP: On linux targets pass --as-needed by default to the linker, but always -# DP: link the sanitizer libraries with --no-as-needed. - ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -568,8 +568,11 @@ proper position among the other output f - #ifdef LIBTSAN_EARLY_SPEC - #define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS - #elif defined(HAVE_LD_STATIC_DYNAMIC) --#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \ -- "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ -+#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \ -+ " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ -+ " -ltsan " \ -+ " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ -+ " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ - STATIC_LIBTSAN_LIBS - #else - #define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS ---- a/gcc/config/gnu-user.h -+++ b/gcc/config/gnu-user.h -@@ -124,13 +124,13 @@ - #define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \ - "%{static-libasan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}" -+ LD_DYNAMIC_OPTION "}}%{!static-libasan:%{!fuse-ld=gold:--push-state} --no-as-needed -lasan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #undef LIBTSAN_EARLY_SPEC - #define LIBTSAN_EARLY_SPEC "%{static-libtsan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}" -+ LD_DYNAMIC_OPTION "}}%{!static-libtsan:%{!fuse-ld=gold:--push-state} --no-as-needed -ltsan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #undef LIBLSAN_EARLY_SPEC - #define LIBLSAN_EARLY_SPEC "%{static-liblsan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan}" -+ LD_DYNAMIC_OPTION "}}%{!static-liblsan:%{!fuse-ld=gold:--push-state} --no-as-needed -llsan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #endif -Index: b/gcc/config/aarch64/aarch64-linux.h -=================================================================== ---- a/gcc/config/aarch64/aarch64-linux.h -+++ b/gcc/config/aarch64/aarch64-linux.h -@@ -36,5 +36,6 @@ - - #define LINUX_TARGET_LINK_SPEC "%{h*} \ -+ --as-needed \ - %{static:-Bstatic} \ - %{shared:-shared} \ - %{symbolic:-Bsymbolic} \ -Index: b/gcc/config/ia64/linux.h -=================================================================== ---- a/gcc/config/ia64/linux.h -+++ b/gcc/config/ia64/linux.h -@@ -58,7 +58,7 @@ do { \ - #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" - - #undef LINK_SPEC --#define LINK_SPEC "\ -+#define LINK_SPEC " --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/sparc/linux.h -=================================================================== ---- a/gcc/config/sparc/linux.h -+++ b/gcc/config/sparc/linux.h -@@ -86,7 +86,7 @@ extern const char *host_detect_local_cpu - #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" - - #undef LINK_SPEC --#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \ -+#define LINK_SPEC "-m elf32_sparc --as-needed %{shared:-shared} \ - %{!mno-relax:%{!r:-relax}} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/s390/linux.h -=================================================================== ---- a/gcc/config/s390/linux.h -+++ b/gcc/config/s390/linux.h -@@ -65,7 +65,7 @@ along with GCC; see the file COPYING3. - - #undef LINK_SPEC - #define LINK_SPEC \ -- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \ -+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{static:-static} \ -Index: b/gcc/config/rs6000/linux64.h -=================================================================== ---- a/gcc/config/rs6000/linux64.h -+++ b/gcc/config/rs6000/linux64.h -@@ -466,12 +466,12 @@ extern int dot_symbols; - " -m elf64ppc") - #endif - --#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \ - %(link_os_extra_spec32)" - --#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \ - %(link_os_extra_spec64)" -Index: b/gcc/config/rs6000/sysv4.h -=================================================================== ---- a/gcc/config/rs6000/sysv4.h -+++ b/gcc/config/rs6000/sysv4.h -@@ -784,7 +784,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF - CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \ - MUSL_DYNAMIC_LINKER) - --#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" - -Index: b/gcc/config/i386/gnu-user64.h -=================================================================== ---- a/gcc/config/i386/gnu-user64.h -+++ b/gcc/config/i386/gnu-user64.h -@@ -57,5 +57,6 @@ see the files COPYING3 and COPYING.RUNTI - %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \ - %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \ -+ --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/i386/gnu-user.h -=================================================================== ---- a/gcc/config/i386/gnu-user.h -+++ b/gcc/config/i386/gnu-user.h -@@ -74,7 +74,7 @@ along with GCC; see the file COPYING3. - { "link_emulation", GNU_USER_LINK_EMULATION },\ - { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } - --#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ -+#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --as-needed %{shared:-shared} \ - %{!shared: \ - %{!static: \ - %{rdynamic:-export-dynamic} \ -Index: b/gcc/config/alpha/linux-elf.h -=================================================================== ---- a/gcc/config/alpha/linux-elf.h -+++ b/gcc/config/alpha/linux-elf.h -@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. - - #define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER - --#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ -+#define LINK_SPEC "-m elf64alpha --as-needed %{G*} %{relax:-relax} \ - %{O*:-O3} %{!O*:-O1} \ - %{shared:-shared} \ - %{!shared: \ -Index: b/gcc/config/arm/linux-elf.h -=================================================================== ---- a/gcc/config/arm/linux-elf.h -+++ b/gcc/config/arm/linux-elf.h -@@ -73,5 +73,6 @@ - %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \ - -X \ -+ --as-needed \ - %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ - SUBTARGET_EXTRA_LINK_SPEC - -Index: b/gcc/config/mips/gnu-user.h -=================================================================== ---- a/gcc/config/mips/gnu-user.h -+++ b/gcc/config/mips/gnu-user.h -@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. - #undef GNU_USER_TARGET_LINK_SPEC - #define GNU_USER_TARGET_LINK_SPEC "\ - %{G*} %{EB} %{EL} %{mips*} %{shared} \ -+ -as-needed \ - %{!shared: \ - %{!static: \ - %{rdynamic:-export-dynamic} \ -Index: b/libjava/Makefile.am -=================================================================== ---- a/libjava/Makefile.am -+++ b/libjava/Makefile.am -@@ -627,14 +631,14 @@ - rm .libs/libgcj_bc.so; \ - mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm .libs/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 - - ## This rule creates the libgcj_bc library that is actually installed. - install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp) - $(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \ -- $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -+ $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -Wl,--no-as-needed -lgcj - - ## Note that property_files is defined in sources.am. - propertyo_files = $(patsubst classpath/resource/%,%,$(addsuffix .lo,$(property_files))) -@@ -762,7 +766,7 @@ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la; - -Index: b/libjava/Makefile.in -=================================================================== ---- a/libjava/Makefile.in -+++ b/libjava/Makefile.in -@@ -10644,13 +10648,13 @@ - rm .libs/libgcj_bc.so; \ - mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm .libs/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 - - install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp) - $(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \ -- $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -+ $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -Wl,--no-as-needed -lgcj - - $(propertyo_files): %.lo: classpath/resource/% - $(mkinstalldirs) `dirname $@`; \ -@@ -12494,7 +12498,7 @@ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - @USE_LIBGCJ_BC_TRUE@ mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - @USE_LIBGCJ_BC_TRUE@ $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ --@USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+@USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - @USE_LIBGCJ_BC_TRUE@ $(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la; - diff --git a/aports/cross/gcc-armhf/011_all_default-warn-format-security.patch b/aports/cross/gcc-armhf/011_all_default-warn-format-security.patch deleted file mode 100644 index a58383a8..00000000 --- a/aports/cross/gcc-armhf/011_all_default-warn-format-security.patch +++ /dev/null @@ -1,43 +0,0 @@ -Enable -Wformat and -Wformat-security by default. - - ---- a/gcc/c-family/c.opt -+++ b/gcc/c-family/c.opt -@@ -412,7 +412,7 @@ C ObjC C++ ObjC++ Var(warn_format_nonliteral) Warning LangEnabledBy(C ObjC C++ O - Warn about format strings that are not literals - - Wformat-security --C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) -+C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) - Warn about possible security problems with format functions - - Wformat-y2k -@@ -424,7 +424,7 @@ C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy(C ObjC C++ - Warn about zero-length formats - - Wformat= --C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) -+C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) - Warn about printf/scanf/strftime/strfmon format string anomalies - - Wignored-qualifiers ---- a/gcc/doc/gcc.info -+++ b/gcc/doc/gcc.info -@@ -3451,6 +3451,8 @@ compiler warns that an unrecognized option is present. - '-Wno-format-contains-nul', '-Wno-format-extra-args', and - '-Wno-format-zero-length'. '-Wformat' is enabled by '-Wall'. - -+ This option is enabled by default in Alpine Linux. -+ - '-Wno-format-contains-nul' - If '-Wformat' is specified, do not warn about format strings - that contain NUL bytes. -@@ -3496,6 +3498,8 @@ compiler warns that an unrecognized option is present. - future warnings may be added to '-Wformat-security' that are - not included in '-Wformat-nonliteral'.) - -+ This option is enabled by default in Alpine Linux. -+ - '-Wformat-y2k' - If '-Wformat' is specified, also warn about 'strftime' formats - that may yield only a two-digit year. diff --git a/aports/cross/gcc-armhf/012_all_default-warn-trampolines.patch b/aports/cross/gcc-armhf/012_all_default-warn-trampolines.patch deleted file mode 100644 index 9ab4378d..00000000 --- a/aports/cross/gcc-armhf/012_all_default-warn-trampolines.patch +++ /dev/null @@ -1,25 +0,0 @@ -Enable -Wtrampolines by default. - - ---- a/gcc/common.opt -+++ b/gcc/common.opt -@@ -648,7 +648,7 @@ Common Var(warn_system_headers) Warning - Do not suppress warnings from system headers - - Wtrampolines --Common Var(warn_trampolines) Warning -+Common Var(warn_trampolines) Init(1) Warning - Warn whenever a trampoline is generated - - Wtype-limits ---- a/gcc/doc/gcc.info -+++ b/gcc/doc/gcc.info -@@ -4021,6 +4021,8 @@ compiler warns that an unrecognized option is present. - and thus requires the stack to be made executable in order for the - program to work properly. - -+ This warning is enabled by default in Gentoo. -+ - '-Wfloat-equal' - Warn if floating-point values are used in equality comparisons. - diff --git a/aports/cross/gcc-armhf/020_all_msgfmt-libstdc++-link.patch b/aports/cross/gcc-armhf/020_all_msgfmt-libstdc++-link.patch deleted file mode 100644 index a70ea50a..00000000 --- a/aports/cross/gcc-armhf/020_all_msgfmt-libstdc++-link.patch +++ /dev/null @@ -1,39 +0,0 @@ -Ensure that msgfmt doesn't encounter problems during gcc bootstrapping. - -Solves error messages like the following: - -msgfmt: /var/tmp/portage/sys-devel/gcc-4.1.2/work/build/./gcc/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libstdc++.so.6) - -The libgcc_s.so used during build doesn't satisfy the needs of the -libstdc++.so that msgfmt is linked against. On the other hand, msgfmt -is used as a stand-alone application here, and what library it uses -behind the scenes is of no concern to the gcc build process. -Therefore, simply invoking it "as usual", i.e. without any special -library path, will make it work as expected here. - -2011-09-19 Martin von Gagern - -References: -https://bugs.gentoo.org/372377 -https://bugs.gentoo.org/295480 - ---- gcc-4.1.2.orig/libstdc++-v3/po/Makefile.am -+++ gcc-4.1.2/libstdc++-v3/po/Makefile.am -@@ -39,6 +39,7 @@ MSGFMT = msgfmt - EXTRA_DIST = string_literals.cc POTFILES.in $(PACKAGE).pot $(LOCALE_IN) - - .po.mo: -+ env --unset=LD_LIBRARY_PATH \ - $(MSGFMT) -o $@ $< - - all-local: all-local-$(USE_NLS) ---- gcc-4.1.2.orig/libstdc++-v3/po/Makefile.in -+++ gcc-4.1.2/libstdc++-v3/po/Makefile.in -@@ -419,6 +419,7 @@ uninstall-am: uninstall-info-am - - - .po.mo: -+ env --unset=LD_LIBRARY_PATH \ - $(MSGFMT) -o $@ $< - - all-local: all-local-$(USE_NLS) diff --git a/aports/cross/gcc-armhf/050_all_libiberty-asprintf.patch b/aports/cross/gcc-armhf/050_all_libiberty-asprintf.patch deleted file mode 100644 index bee0c4c2..00000000 --- a/aports/cross/gcc-armhf/050_all_libiberty-asprintf.patch +++ /dev/null @@ -1,18 +0,0 @@ -2008-07-25 Magnus Granberg - - * include/libiberty.h (asprintf): Don't declare if defined as a macro - ---- a/include/libiberty.h -+++ b/include/libiberty.h -@@ -609,8 +609,11 @@ extern int pwait (int, int *, int); - /* Like sprintf but provides a pointer to malloc'd storage, which must - be freed by the caller. */ - -+/* asprintf may be declared as a macro by glibc with __USE_FORTIFY_LEVEL. */ -+#ifndef asprintf - extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; - #endif -+#endif - - #if !HAVE_DECL_VASPRINTF - /* Like vsprintf but provides a pointer to malloc'd storage, which diff --git a/aports/cross/gcc-armhf/051_all_libiberty-pic.patch b/aports/cross/gcc-armhf/051_all_libiberty-pic.patch deleted file mode 100644 index b6160a73..00000000 --- a/aports/cross/gcc-armhf/051_all_libiberty-pic.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/libiberty/Makefile.in -+++ b/libiberty/Makefile.in -@@ -246,6 +246,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) - $(AR) $(AR_FLAGS) $(TARGETLIB) \ - $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \ - $(RANLIB) $(TARGETLIB); \ -+ cp $(TARGETLIB) ../ ; \ - cd ..; \ - else true; fi - diff --git a/aports/cross/gcc-armhf/053_all_libitm-no-fortify-source.patch b/aports/cross/gcc-armhf/053_all_libitm-no-fortify-source.patch deleted file mode 100644 index 5ab15afc..00000000 --- a/aports/cross/gcc-armhf/053_all_libitm-no-fortify-source.patch +++ /dev/null @@ -1,27 +0,0 @@ -https://bugs.gentoo.org/508852 -https://gcc.gnu.org/PR61164 - -2014-04-27 Magnus Granberg - - #508852 - * libitm/configure.tgt: Disable FORTIFY - ---- a/libitm/configure.tgt -+++ b/libitm/configure.tgt -@@ -43,6 +43,16 @@ if test "$gcc_cv_have_tls" = yes ; then - esac - fi - -+# FIXME: error: inlining failed in call to always_inline -+# ‘int vfprintf(FILE*, const char*, __va_list_tag*)’ -+# : function body can be overwritten at link time -+# Disable Fortify in libitm for now. #508852 -+case "${target}" in -+ *-*-linux*) -+ XCFLAGS="${XCFLAGS} -U_FORTIFY_SOURCE" -+ ;; -+esac -+ - # Map the target cpu to an ARCH sub-directory. At the same time, - # work out any special compilation flags as necessary. - case "${target_cpu}" in diff --git a/aports/cross/gcc-armhf/067_all_gcc-poison-system-directories.patch b/aports/cross/gcc-armhf/067_all_gcc-poison-system-directories.patch deleted file mode 100644 index 10367161..00000000 --- a/aports/cross/gcc-armhf/067_all_gcc-poison-system-directories.patch +++ /dev/null @@ -1,194 +0,0 @@ -http://cgit.openembedded.org/openembedded-core/plain/meta/recipes-devtools/gcc/gcc-6.1/0010-gcc-poison-system-directories.patch - -From d76250323dad69212c958e4857a98d99ab51a39e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Fri, 29 Mar 2013 08:59:00 +0400 -Subject: [PATCH 10/46] gcc: poison-system-directories - -Signed-off-by: Khem Raj - -Upstream-Status: Inappropriate [distribution: codesourcery] ---- - gcc/common.opt | 4 ++++ - gcc/config.in | 6 ++++++ - gcc/configure | 16 ++++++++++++++++ - gcc/configure.ac | 10 ++++++++++ - gcc/doc/invoke.texi | 9 +++++++++ - gcc/gcc.c | 2 ++ - gcc/incpath.c | 19 +++++++++++++++++++ - 7 files changed, 66 insertions(+) - -diff --git a/gcc/common.opt b/gcc/common.opt -index 67048db..733185c 100644 ---- a/gcc/common.opt -+++ b/gcc/common.opt -@@ -659,6 +659,10 @@ Wreturn-local-addr - Common Var(warn_return_local_addr) Init(1) Warning - Warn about returning a pointer/reference to a local or temporary variable. - -+Wpoison-system-directories -+Common Var(flag_poison_system_directories) Init(1) Warning -+Warn for -I and -L options using system directories if cross compiling -+ - Wshadow - Common Var(warn_shadow) Warning - Warn when one local variable shadows another. -diff --git a/gcc/config.in b/gcc/config.in -index 115cb61..105b30f 100644 ---- a/gcc/config.in -+++ b/gcc/config.in -@@ -187,6 +187,12 @@ - #endif - - -+/* Define to warn for use of native system header directories */ -+#ifndef USED_FOR_TARGET -+#undef ENABLE_POISON_SYSTEM_DIRECTORIES -+#endif -+ -+ - /* Define if you want all operations on RTL (the basic data structure of the - optimizer and back end) to be checked for dynamic type safety at runtime. - This is quite expensive. */ -diff --git a/gcc/configure b/gcc/configure -index 1c6e340..8f83152 100755 ---- a/gcc/configure -+++ b/gcc/configure -@@ -942,6 +942,7 @@ with_system_zlib - enable_maintainer_mode - enable_link_mutex - enable_version_specific_runtime_libs -+enable_poison_system_directories - enable_plugin - enable_host_shared - enable_libquadmath_support -@@ -1681,6 +1682,8 @@ Optional Features: - --enable-version-specific-runtime-libs - specify that runtime libraries should be installed - in a compiler-specific directory -+ --enable-poison-system-directories -+ warn for use of native system header directories - --enable-plugin enable plugin support - --enable-host-shared build host code as shared libraries - --disable-libquadmath-support -@@ -28908,6 +28911,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then : - fi - - -+# Check whether --enable-poison-system-directories was given. -+if test "${enable_poison_system_directories+set}" = set; then : -+ enableval=$enable_poison_system_directories; -+else -+ enable_poison_system_directories=no -+fi -+ -+if test "x${enable_poison_system_directories}" = "xyes"; then -+ -+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h -+ -+fi -+ - # Substitute configuration variables - - -diff --git a/gcc/configure.ac b/gcc/configure.ac -index 6c1dcd9..0fccaef 100644 ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -5861,6 +5861,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs, - [specify that runtime libraries should be - installed in a compiler-specific directory])]) - -+AC_ARG_ENABLE([poison-system-directories], -+ AS_HELP_STRING([--enable-poison-system-directories], -+ [warn for use of native system header directories]),, -+ [enable_poison_system_directories=no]) -+if test "x${enable_poison_system_directories}" = "xyes"; then -+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], -+ [1], -+ [Define to warn for use of native system header directories]) -+fi -+ - # Substitute configuration variables - AC_SUBST(subdirs) - AC_SUBST(srcdir) -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 821f8fd..8bb49e7 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -284,6 +284,7 @@ Objective-C and Objective-C++ Dialects}. - -Wparentheses -Wno-pedantic-ms-format @gol - -Wplacement-new -Wplacement-new=@var{n} @gol - -Wpointer-arith -Wno-pointer-to-int-cast @gol -+-Wno-poison-system-directories @gol - -Wno-pragmas -Wredundant-decls -Wno-return-local-addr @gol - -Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar @gol - -Wshift-overflow -Wshift-overflow=@var{n} @gol -@@ -4723,6 +4724,14 @@ made up of data only and thus requires no special treatment. But, for - most targets, it is made up of code and thus requires the stack to be - made executable in order for the program to work properly. - -+@item -Wno-poison-system-directories -+@opindex Wno-poison-system-directories -+Do not warn for @option{-I} or @option{-L} options using system -+directories such as @file{/usr/include} when cross compiling. This -+option is intended for use in chroot environments when such -+directories contain the correct headers and libraries for the target -+system rather than the host. -+ - @item -Wfloat-equal - @opindex Wfloat-equal - @opindex Wno-float-equal -diff --git a/gcc/gcc.c b/gcc/gcc.c -index 1af5920..4cfef7f 100644 ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -1017,6 +1017,8 @@ proper position among the other output files. */ - "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \ - "%X %{o*} %{e*} %{N} %{n} %{r}\ - %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \ -+ %{Wno-poison-system-directories:--no-poison-system-directories} \ -+ %{Werror=poison-system-directories:--error-poison-system-directories} \ - %{static:} %{L*} %(mfwrap) %(link_libgcc) " \ - VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \ - %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\ -diff --git a/gcc/incpath.c b/gcc/incpath.c -index ea40f4a..856da41 100644 ---- a/gcc/incpath.c -+++ b/gcc/incpath.c -@@ -26,6 +26,7 @@ - #include "intl.h" - #include "incpath.h" - #include "cppdefault.h" -+#include "diagnostic-core.h" - - /* Microsoft Windows does not natively support inodes. - VMS has non-numeric inodes. */ -@@ -381,6 +382,24 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose) - } - fprintf (stderr, _("End of search list.\n")); - } -+ -+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES -+ if (flag_poison_system_directories) -+ { -+ struct cpp_dir *p; -+ -+ for (p = heads[QUOTE]; p; p = p->next) -+ { -+ if ((!strncmp (p->name, "/usr/include", 12)) -+ || (!strncmp (p->name, "/usr/local/include", 18)) -+ || (!strncmp (p->name, "/usr/X11R6/include", 18))) -+ warning (OPT_Wpoison_system_directories, -+ "include location \"%s\" is unsafe for " -+ "cross-compilation", -+ p->name); -+ } -+ } -+#endif - } - - /* Use given -I paths for #include "..." but not #include <...>, and --- -2.8.2 - diff --git a/aports/cross/gcc-armhf/090_all_pr55930-dependency-tracking.patch b/aports/cross/gcc-armhf/090_all_pr55930-dependency-tracking.patch deleted file mode 100644 index a8743e08..00000000 --- a/aports/cross/gcc-armhf/090_all_pr55930-dependency-tracking.patch +++ /dev/null @@ -1,18 +0,0 @@ -libatomic build failure if configured with --disable-dependency-tracking -load_n.c:115:1: fatal error: opening dependency file .deps/load_1_.lo.Ppo: No such file or directory - -https://bugs.gentoo.org/463463 -http://gcc.gnu.org/PR55930 - ---- a/libatomic/Makefile.in -+++ b/libatomic/Makefile.in -@@ -298,7 +298,8 @@ PAT_N = $(word 2,$(PAT_SPLIT)) - PAT_S = $(word 3,$(PAT_SPLIT)) - IFUNC_DEF = -DIFUNC_ALT=$(PAT_S) - IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS)) --M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo -+@AMDEP_TRUE@M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo -+@AMDEP_FALSE@M_DEPS = - M_SIZE = -DN=$(PAT_N) - M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT)) - M_FILE = $(PAT_BASE)_n.c diff --git a/aports/cross/gcc-armhf/201-cilkrts.patch b/aports/cross/gcc-armhf/201-cilkrts.patch deleted file mode 100644 index 4aac10d6..00000000 --- a/aports/cross/gcc-armhf/201-cilkrts.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 594e3c1ab576daddeb86015efc8b1677020b1878 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 24 Oct 2015 20:39:30 +0000 -Subject: [PATCH 1/6] cilkrts - ---- - libcilkrts/runtime/os-unix.c | 22 +++++++--------------- - 1 file changed, 7 insertions(+), 15 deletions(-) - -diff --git a/libcilkrts/runtime/os-unix.c b/libcilkrts/runtime/os-unix.c -index cb582dd..e43d7d5 100644 ---- a/libcilkrts/runtime/os-unix.c -+++ b/libcilkrts/runtime/os-unix.c -@@ -51,6 +51,7 @@ - #if defined __linux__ - # include - # include -+# include - #elif defined __APPLE__ - # include - // Uses sysconf(_SC_NPROCESSORS_ONLN) in verbose output -@@ -400,28 +401,19 @@ COMMON_SYSDEP void __cilkrts_sleep(void) - - COMMON_SYSDEP void __cilkrts_yield(void) - { --#if __APPLE__ || __FreeBSD__ || __VXWORKS__ -- // On MacOS, call sched_yield to yield quantum. I'm not sure why we -- // don't do this on Linux also. -- sched_yield(); --#elif defined(__DragonFly__) -- // On DragonFly BSD, call sched_yield to yield quantum. -- sched_yield(); --#elif defined(__MIC__) -+#if defined(__MIC__) - // On MIC, pthread_yield() really trashes things. Arch's measurements - // showed that calling _mm_delay_32() (or doing nothing) was a better - // option. Delaying 1024 clock cycles is a reasonable compromise between - // giving up the processor and latency starting up when work becomes - // available - _mm_delay_32(1024); --#elif defined(__ANDROID__) || (defined(__sun__) && defined(__svr4__)) -- // On Android and Solaris, call sched_yield to yield quantum. I'm not -- // sure why we don't do this on Linux also. -- sched_yield(); --#else -- // On Linux, call pthread_yield (which in turn will call sched_yield) -- // to yield quantum. -+#elif defined(__sun__) && !defined(__svr4__) -+ // On old SunOS call pthread_yield to yield a quantum. - pthread_yield(); -+#else -+ // On other platforms call sched_yield to yield a quantum. -+ sched_yield(); - #endif - } - --- -2.8.1 - diff --git a/aports/cross/gcc-armhf/203-libgcc_s.patch b/aports/cross/gcc-armhf/203-libgcc_s.patch deleted file mode 100644 index c74351c7..00000000 --- a/aports/cross/gcc-armhf/203-libgcc_s.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 9e3eab51e518018d9d99b3123598b1e2322a6af3 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 24 Oct 2015 20:09:53 +0000 -Subject: [PATCH 3/6] libgcc_s - ---- - gcc/config/i386/i386.c | 4 ++-- - libgcc/config/i386/cpuinfo.c | 6 +++--- - libgcc/config/i386/t-linux | 2 +- - 3 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 3d044e8..82523e1 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -40269,10 +40269,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, - { - case IX86_BUILTIN_CPU_INIT: - { -- /* Make it call __cpu_indicator_init in libgcc. */ -+ /* Make it call __cpu_indicator_init_local in libgcc.a. */ - tree call_expr, fndecl, type; - type = build_function_type_list (integer_type_node, NULL_TREE); -- fndecl = build_fn_decl ("__cpu_indicator_init", type); -+ fndecl = build_fn_decl ("__cpu_indicator_init_local", type); - call_expr = build_call_expr (fndecl, 0); - return expand_expr (call_expr, target, mode, EXPAND_NORMAL); - } -diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c -index 8c2248d..6c82f15 100644 ---- a/libgcc/config/i386/cpuinfo.c -+++ b/libgcc/config/i386/cpuinfo.c -@@ -485,7 +485,7 @@ __cpu_indicator_init (void) - return 0; - } - --#if defined SHARED && defined USE_ELF_SYMVER --__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0"); --__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0"); -+#ifndef SHARED -+int __cpu_indicator_init_local (void) -+ __attribute__ ((weak, alias ("__cpu_indicator_init"))); - #endif -diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux -index 11bb46e..4f47f7b 100644 ---- a/libgcc/config/i386/t-linux -+++ b/libgcc/config/i386/t-linux -@@ -3,4 +3,4 @@ - # t-slibgcc-elf-ver and t-linux - SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver - --HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER -+HOST_LIBGCC2_CFLAGS += -mlong-double-80 --- -2.8.1 - diff --git a/aports/cross/gcc-armhf/204-linux_libc_has_function.patch b/aports/cross/gcc-armhf/204-linux_libc_has_function.patch deleted file mode 100644 index 2dcedc3a..00000000 --- a/aports/cross/gcc-armhf/204-linux_libc_has_function.patch +++ /dev/null @@ -1,25 +0,0 @@ -From edec78452d693fb524daa9a6efd45c850b27b25c Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Fri, 6 Nov 2015 23:59:20 +0000 -Subject: [PATCH 4/6] linux_libc_has_function - ---- - gcc/config/linux.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gcc/config/linux.c b/gcc/config/linux.c -index 250296b..16c3768 100644 ---- a/gcc/config/linux.c -+++ b/gcc/config/linux.c -@@ -26,7 +26,7 @@ along with GCC; see the file COPYING3. If not see - bool - linux_libc_has_function (enum function_class fn_class) - { -- if (OPTION_GLIBC) -+ if (OPTION_GLIBC || OPTION_MUSL) - return true; - if (OPTION_BIONIC) - if (fn_class == function_c94 --- -2.8.1 - diff --git a/aports/cross/gcc-armhf/205-nopie.patch b/aports/cross/gcc-armhf/205-nopie.patch deleted file mode 100644 index e3da94d1..00000000 --- a/aports/cross/gcc-armhf/205-nopie.patch +++ /dev/null @@ -1,75 +0,0 @@ -From b6015aca9c9cc83739fd0ed637a835119b2c4e34 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 7 Nov 2015 02:08:05 +0000 -Subject: [PATCH 5/6] nopie - ---- - gcc/configure | 27 +++++++++++++++++++++++++++ - gcc/configure.ac | 13 +++++++++++++ - 2 files changed, 40 insertions(+) - -diff --git a/gcc/configure b/gcc/configure -index 1c6e340..7e8b5d6 100755 ---- a/gcc/configure -+++ b/gcc/configure -@@ -29390,6 +29390,33 @@ fi - $as_echo "$gcc_cv_no_pie" >&6; } - if test "$gcc_cv_no_pie" = "yes"; then - NO_PIE_FLAG="-no-pie" -+else -+ # Check if -nopie works. -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -nopie option" >&5 -+$as_echo_n "checking for -nopie option... " >&6; } -+if test "${gcc_cv_nopie+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ saved_LDFLAGS="$LDFLAGS" -+ LDFLAGS="$LDFLAGS -nopie" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+int main(void) {return 0;} -+_ACEOF -+if ac_fn_cxx_try_link "$LINENO"; then : -+ gcc_cv_nopie=yes -+else -+ gcc_cv_nopie=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+ LDFLAGS="$saved_LDFLAGS" -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_nopie" >&5 -+$as_echo "$gcc_cv_nopie" >&6; } -+ if test "$gcc_cv_nopie" = "yes"; then -+ NO_PIE_FLAG="-nopie" -+ fi - fi - - -diff --git a/gcc/configure.ac b/gcc/configure.ac -index 6c1dcd9..0ca7647 100644 ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -6098,6 +6098,19 @@ AC_CACHE_CHECK([for -no-pie option], - LDFLAGS="$saved_LDFLAGS"]) - if test "$gcc_cv_no_pie" = "yes"; then - NO_PIE_FLAG="-no-pie" -+else -+ # Check if -nopie works. -+ AC_CACHE_CHECK([for -nopie option], -+ [gcc_cv_nopie], -+ [saved_LDFLAGS="$LDFLAGS" -+ LDFLAGS="$LDFLAGS -nopie" -+ AC_LINK_IFELSE([int main(void) {return 0;}], -+ [gcc_cv_nopie=yes], -+ [gcc_cv_nopie=no]) -+ LDFLAGS="$saved_LDFLAGS"]) -+ if test "$gcc_cv_nopie" = "yes"; then -+ NO_PIE_FLAG="-nopie" -+ fi - fi - AC_SUBST([NO_PIE_FLAG]) - --- -2.8.1 - diff --git a/aports/cross/gcc-armhf/207-static-pie.patch b/aports/cross/gcc-armhf/207-static-pie.patch deleted file mode 100644 index 9355c584..00000000 --- a/aports/cross/gcc-armhf/207-static-pie.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h -index b0bf40a..d4b56fe 100644 ---- a/gcc/config/gnu-user.h -+++ b/gcc/config/gnu-user.h -@@ -51,10 +51,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - #if defined HAVE_LD_PIE - #define GNU_USER_TARGET_STARTFILE_SPEC \ - "%{!shared: %{pg|p|profile:gcrt1.o%s;: \ -- %{" PIE_SPEC ":Scrt1.o%s} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -- crti.o%s %{static:crtbeginT.o%s;: %{shared:crtbeginS.o%s} \ -+ %{" PIE_SPEC ":%{static:rcrt1.o%s;:Scrt1.o%s}} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -+ crti.o%s %{shared:crtbeginS.o%s;: \ - %{" PIE_SPEC ":crtbeginS.o%s} \ -- %{" NO_PIE_SPEC ":crtbegin.o%s}} \ -+ %{" NO_PIE_SPEC ":%{static:crtbeginT.o%s;:crtbegin.o%s}}} \ - %{fvtable-verify=none:%s; \ - fvtable-verify=preinit:vtv_start_preinit.o%s; \ - fvtable-verify=std:vtv_start.o%s} \ -diff --git a/gcc/gcc.c b/gcc/gcc.c -index 0208d61..731564e 100644 ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -870,7 +870,7 @@ proper position among the other output files. */ - #endif - - #ifdef ENABLE_DEFAULT_PIE --#define NO_PIE_SPEC "no-pie|static" -+#define NO_PIE_SPEC "no-pie" - #define PIE_SPEC NO_PIE_SPEC "|r|shared:;" - #define NO_FPIE1_SPEC "fno-pie" - #define FPIE1_SPEC NO_FPIE1_SPEC ":;" -@@ -916,7 +916,7 @@ proper position among the other output files. */ - #ifndef LINK_PIE_SPEC - #ifdef HAVE_LD_PIE - #ifndef LD_PIE_SPEC --#define LD_PIE_SPEC "-pie" -+#define LD_PIE_SPEC "-pie %{static:--no-dynamic-linker -Bsymbolic}" - #endif - #else - #define LD_PIE_SPEC "" diff --git a/aports/cross/gcc-armhf/300-main-gcc-add-musl-s390x-dynamic-linker.patch b/aports/cross/gcc-armhf/300-main-gcc-add-musl-s390x-dynamic-linker.patch deleted file mode 100644 index 24195787..00000000 --- a/aports/cross/gcc-armhf/300-main-gcc-add-musl-s390x-dynamic-linker.patch +++ /dev/null @@ -1,32 +0,0 @@ -From be841c16dd544553c67faac79bd4cc3cd10a1dc0 Mon Sep 17 00:00:00 2001 -From: "Tuan M. Hoang" -Date: Mon, 21 Nov 2016 01:42:16 +0700 -Subject: [PATCH] main/gcc: add musl s390x dynamic linker - ---- - gcc/config/s390/linux.h | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h -index 1e3ed35..a244214 100644 ---- a/gcc/config/s390/linux.h -+++ b/gcc/config/s390/linux.h -@@ -63,6 +63,15 @@ along with GCC; see the file COPYING3. If not see - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1" - #define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1" - -+#undef MUSL_DYNAMIC_LINKER -+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKER32 -+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKER64 -+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKERX32 -+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-s390x.so.1" -+ - #undef LINK_SPEC - #define LINK_SPEC \ - "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \ --- -2.10.2 - diff --git a/aports/cross/gcc-armhf/310-build-gcj-s390x.patch b/aports/cross/gcc-armhf/310-build-gcj-s390x.patch deleted file mode 100644 index 1e522ee1..00000000 --- a/aports/cross/gcc-armhf/310-build-gcj-s390x.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 697a7ba791fce2ffab2ed723d909a89684019e3d Mon Sep 17 00:00:00 2001 -From: "Tuan M. Hoang" -Date: Sun, 19 Feb 2017 17:03:33 +0000 -Subject: [PATCH] main/gcc : when building gcc-java on s390x, libgcj.so - complains about undefined reference to __data_start. Using - SEARCH_FOR_DATA_START instead solved it. Credit to Andrew Haley at RedHat. - ---- - boehm-gc/include/private/gcconfig.h | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h -index 4ca6a80..a15fff6 100644 ---- a/boehm-gc/include/private/gcconfig.h -+++ b/boehm-gc/include/private/gcconfig.h -@@ -1837,8 +1837,7 @@ - # define OS_TYPE "LINUX" - # define LINUX_STACKBOTTOM - # define DYNAMIC_LOADING -- extern int __data_start[]; --# define DATASTART ((ptr_t)(__data_start)) -+# define SEARCH_FOR_DATA_START - extern int _end[]; - # define DATAEND (_end) - # define CACHE_LINE_SIZE 256 --- -2.11.1 - diff --git a/aports/cross/gcc-armhf/320-libffi-gnulinux.patch b/aports/cross/gcc-armhf/320-libffi-gnulinux.patch deleted file mode 100644 index b3b4fc93..00000000 --- a/aports/cross/gcc-armhf/320-libffi-gnulinux.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/libffi/closures.c.orig b/libffi/closures.c -index 721ff00..22a699c 100644 ---- a/libffi/src/closures.c.orig -+++ b/libffi/src/closures.c -@@ -34,7 +34,7 @@ - #include - - #if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE --# if __gnu_linux__ && !defined(__ANDROID__) -+# if __linux__ && !defined(__ANDROID__) - /* This macro indicates it may be forbidden to map anonymous memory - with both write and execute permission. Code compiled when this - option is defined will attempt to map such pages once, but if it diff --git a/aports/cross/gcc-armhf/ada-aarch64-multiarch.patch b/aports/cross/gcc-armhf/ada-aarch64-multiarch.patch deleted file mode 100644 index ac60b6f6..00000000 --- a/aports/cross/gcc-armhf/ada-aarch64-multiarch.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- gcc-6.4.0/gcc/ada/gcc-interface/Makefile.in.orig -+++ gcc-6.4.0/gcc/ada/gcc-interface/Makefile.in -@@ -2042,13 +2042,8 @@ - system.ads - #else - #include -+#include - #endif - - #ifdef __MINGW32__ ---- gcc-6.1.0.orig/gcc/ada/terminals.c -+++ gcc-6.1.0/gcc/ada/terminals.c -@@ -1068,13 +1068,6 @@ - #include - #include - --/* On some system termio is either absent or including it will disable termios -- (HP-UX) */ --#if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \ -- && !defined (__rtems__) --# include --#endif -- - #include - #include - #include -@@ -1169,7 +1162,7 @@ - char *slave_name = NULL; - - #ifdef USE_GETPT -- master_fd = getpt (); -+ master_fd = posix_openpt (O_RDWR); - #elif defined (USE_OPENPTY) - status = openpty (&master_fd, &slave_fd, NULL, NULL, NULL); - #elif defined (USE_CLONE_DEVICE) diff --git a/aports/cross/gcc-armhf/ada-mips64.patch b/aports/cross/gcc-armhf/ada-mips64.patch deleted file mode 100644 index b7cd3deb..00000000 --- a/aports/cross/gcc-armhf/ada-mips64.patch +++ /dev/null @@ -1,224 +0,0 @@ -From 5bbd6ca3755e2a199de98d2b270d8a6f616aa6a6 Mon Sep 17 00:00:00 2001 -From: Nils Andreas Svee -Date: Thu, 21 Dec 2017 16:46:12 +0100 -Subject: [PATCH] ada-mips64 - ---- - gcc/ada/gcc-interface/Makefile.in | 29 ++++++-- - gcc/ada/system-linux-mips64.ads | 147 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 171 insertions(+), 5 deletions(-) - create mode 100644 gcc/ada/system-linux-mips64.ads - -diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in -index 598b262d9..1844a6962 100644 ---- a/gcc/ada/gcc-interface/Makefile.in -+++ b/gcc/ada/gcc-interface/Makefile.in -@@ -1854,9 +1854,9 @@ ifeq ($(strip $(filter-out cygwin% mingw32% pe,$(target_os))),) - LIBRARY_VERSION := $(LIB_VERSION) - endif - --# Mips Linux --ifeq ($(strip $(filter-out mips linux%,$(target_cpu) $(target_os))),) -- LIBGNAT_TARGET_PAIRS = \ -+# Mips and Mips64 Linux -+ifeq ($(strip $(filter-out mips mips64 linux%,$(target_cpu) $(target_os))),) -+ LIBGNAT_TARGET_PAIRS_COMMON = \ - a-intnam.ads. -- -+-- -- -+-- GNAT was originally developed by the GNAT team at New York University. -- -+-- Extensive contributions were provided by Ada Core Technologies Inc. -- -+-- -- -+------------------------------------------------------------------------------ -+ -+package System is -+ pragma Pure; -+ -- Note that we take advantage of the implementation permission to make -+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada -+ -- 2005, this is Pure in any case (AI-362). -+ -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ -+ type Name is (SYSTEM_NAME_GNAT); -+ System_Name : constant Name := SYSTEM_NAME_GNAT; -+ -+ -- System-Dependent Named Numbers -+ -+ Min_Int : constant := Long_Long_Integer'First; -+ Max_Int : constant := Long_Long_Integer'Last; -+ -+ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; -+ Max_Nonbinary_Modulus : constant := Integer'Last; -+ -+ Max_Base_Digits : constant := Long_Long_Float'Digits; -+ Max_Digits : constant := Long_Long_Float'Digits; -+ -+ Max_Mantissa : constant := 63; -+ Fine_Delta : constant := 2.0 ** (-Max_Mantissa); -+ -+ Tick : constant := 0.000_001; -+ -+ -- Storage-related Declarations -+ -+ type Address is private; -+ pragma Preelaborable_Initialization (Address); -+ Null_Address : constant Address; -+ -+ Storage_Unit : constant := 8; -+ Word_Size : constant := 64; -+ Memory_Size : constant := 2 ** 64; -+ -+ -- Address comparison -+ -+ function "<" (Left, Right : Address) return Boolean; -+ function "<=" (Left, Right : Address) return Boolean; -+ function ">" (Left, Right : Address) return Boolean; -+ function ">=" (Left, Right : Address) return Boolean; -+ function "=" (Left, Right : Address) return Boolean; -+ -+ pragma Import (Intrinsic, "<"); -+ pragma Import (Intrinsic, "<="); -+ pragma Import (Intrinsic, ">"); -+ pragma Import (Intrinsic, ">="); -+ pragma Import (Intrinsic, "="); -+ -+ -- Other System-Dependent Declarations -+ -+ type Bit_Order is (High_Order_First, Low_Order_First); -+ Default_Bit_Order : constant Bit_Order := High_Order_First; -+ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning -+ -+ -- Priority-related Declarations (RM D.1) -+ -+ Max_Priority : constant Positive := 30; -+ Max_Interrupt_Priority : constant Positive := 31; -+ -+ subtype Any_Priority is Integer range 0 .. 31; -+ subtype Priority is Any_Priority range 0 .. 30; -+ subtype Interrupt_Priority is Any_Priority range 31 .. 31; -+ -+ Default_Priority : constant Priority := 15; -+ -+private -+ -+ type Address is mod Memory_Size; -+ Null_Address : constant Address := 0; -+ -+ -------------------------------------- -+ -- System Implementation Parameters -- -+ -------------------------------------- -+ -+ -- These parameters provide information about the target that is used -+ -- by the compiler. They are in the private part of System, where they -+ -- can be accessed using the special circuitry in the Targparm unit -+ -- whose source should be consulted for more detailed descriptions -+ -- of the individual switch values. -+ -+ Backend_Divide_Checks : constant Boolean := False; -+ Backend_Overflow_Checks : constant Boolean := True; -+ Command_Line_Args : constant Boolean := True; -+ Configurable_Run_Time : constant Boolean := False; -+ Denorm : constant Boolean := True; -+ Duration_32_Bits : constant Boolean := False; -+ Exit_Status_Supported : constant Boolean := True; -+ Fractional_Fixed_Ops : constant Boolean := False; -+ Frontend_Layout : constant Boolean := False; -+ Machine_Overflows : constant Boolean := False; -+ Machine_Rounds : constant Boolean := True; -+ Preallocated_Stacks : constant Boolean := False; -+ Signed_Zeros : constant Boolean := True; -+ Stack_Check_Default : constant Boolean := False; -+ Stack_Check_Probes : constant Boolean := True; -+ Stack_Check_Limits : constant Boolean := False; -+ Support_Aggregates : constant Boolean := True; -+ Support_Composite_Assign : constant Boolean := True; -+ Support_Composite_Compare : constant Boolean := True; -+ Support_Long_Shifts : constant Boolean := True; -+ Always_Compatible_Rep : constant Boolean := False; -+ Suppress_Standard_Library : constant Boolean := False; -+ Use_Ada_Main_Program_Name : constant Boolean := False; -+ Frontend_Exceptions : constant Boolean := False; -+ ZCX_By_Default : constant Boolean := True; -+ -+end System; --- -2.15.1 - diff --git a/aports/cross/gcc-armhf/ada-musl.patch b/aports/cross/gcc-armhf/ada-musl.patch deleted file mode 100644 index 464c3d57..00000000 --- a/aports/cross/gcc-armhf/ada-musl.patch +++ /dev/null @@ -1,137 +0,0 @@ -diff -rup gcc-5.1.0/gcc.orig/ada/adaint.c gcc-5.1.0/gcc/ada/adaint.c ---- gcc-5.1.0/gcc.orig/ada/adaint.c 2015-02-20 11:48:57.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/adaint.c 2015-06-02 10:47:51.672767476 +0000 -@@ -70,6 +70,11 @@ - #include - #include - #endif -+ -+#if defined (linux) -+#define _GNU_SOURCE 1 -+#include -+#endif - - #ifdef __PikeOS__ - #define __BSD_VISIBLE 1 -@@ -3057,8 +3062,6 @@ __gnat_lwp_self (void) - return (void *) syscall (__NR_gettid); - } - --#include -- - /* glibc versions earlier than 2.7 do not define the routines to handle - dynamically allocated CPU sets. For these targets, we use the static - versions. */ -@@ -3067,7 +3070,7 @@ __gnat_lwp_self (void) - - /* Dynamic cpu sets */ - --cpu_set_t * -+void * - __gnat_cpu_alloc (size_t count) - { - return CPU_ALLOC (count); -@@ -3080,33 +3083,33 @@ __gnat_cpu_alloc_size (size_t count) - } - - void --__gnat_cpu_free (cpu_set_t *set) -+__gnat_cpu_free (void *set) - { -- CPU_FREE (set); -+ CPU_FREE ((cpu_set_t *) set); - } - - void --__gnat_cpu_zero (size_t count, cpu_set_t *set) -+__gnat_cpu_zero (size_t count, void *set) - { -- CPU_ZERO_S (count, set); -+ CPU_ZERO_S (count, (cpu_set_t *) set); - } - - void --__gnat_cpu_set (int cpu, size_t count, cpu_set_t *set) -+__gnat_cpu_set (int cpu, size_t count, void *set) - { - /* Ada handles CPU numbers starting from 1, while C identifies the first - CPU by a 0, so we need to adjust. */ -- CPU_SET_S (cpu - 1, count, set); -+ CPU_SET_S (cpu - 1, count, (cpu_set_t *) set); - } - - #else /* !CPU_ALLOC */ - - /* Static cpu sets */ - --cpu_set_t * -+void * - __gnat_cpu_alloc (size_t count ATTRIBUTE_UNUSED) - { -- return (cpu_set_t *) xmalloc (sizeof (cpu_set_t)); -+ return xmalloc (sizeof (cpu_set_t)); - } - - size_t -@@ -3116,23 +3119,23 @@ __gnat_cpu_alloc_size (size_t count ATTR - } - - void --__gnat_cpu_free (cpu_set_t *set) -+__gnat_cpu_free (void *set) - { - free (set); - } - - void --__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) -+__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, void *set) - { -- CPU_ZERO (set); -+ CPU_ZERO ((cpu_set_t *) set); - } - - void --__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) -+__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, void *set) - { - /* Ada handles CPU numbers starting from 1, while C identifies the first - CPU by a 0, so we need to adjust. */ -- CPU_SET (cpu - 1, set); -+ CPU_SET (cpu - 1, (cpu_set_t *) set); - } - #endif /* !CPU_ALLOC */ - #endif /* linux */ -diff -rup gcc-5.1.0/gcc.orig/ada/adaint.h gcc-5.1.0/gcc/ada/adaint.h ---- gcc-5.1.0/gcc.orig/ada/adaint.h 2015-01-27 17:20:27.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/adaint.h 2015-06-02 10:47:23.188910894 +0000 -@@ -287,13 +287,11 @@ extern void *__gnat_lwp_self (voi - - /* Routines for interface to required CPU set primitives */ - --#include -- --extern cpu_set_t *__gnat_cpu_alloc (size_t); -+extern void * __gnat_cpu_alloc (size_t); - extern size_t __gnat_cpu_alloc_size (size_t); --extern void __gnat_cpu_free (cpu_set_t *); --extern void __gnat_cpu_zero (size_t, cpu_set_t *); --extern void __gnat_cpu_set (int, size_t, cpu_set_t *); -+extern void __gnat_cpu_free (void *); -+extern void __gnat_cpu_zero (size_t, void *); -+extern void __gnat_cpu_set (int, size_t, void *); - #endif - - #if defined (_WIN32) -diff -rup gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in ---- gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in 2015-04-09 20:29:28.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in 2015-06-02 10:47:23.188910894 +0000 -@@ -1910,7 +1910,7 @@ ifeq ($(strip $(filter-out powerpc% linu - endif - - # ARM linux, GNU eabi --ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),) -+ifeq ($(strip $(filter-out arm% linux-gnueabi% linux-musleabi% linux-muslgnueabi%,$(target_cpu) $(target_os))),) - LIBGNAT_TARGET_PAIRS = \ - a-intnam.ads - # undef __KERNEL__ --# else -+# elif defined(__GLIBC__) - /* Kernels prior to 2.1.1 defined struct sigcontext_struct instead of */ - /* struct sigcontext. libc6 (glibc2) uses "struct sigcontext" in */ - /* prototypes, so we have to include the top-level sigcontext.h to */ ---- gcc-4.8.2/boehm-gc/dyn_load.c.orig 2014-02-17 14:13:09.519850231 +0200 -+++ gcc-4.8.2/boehm-gc/dyn_load.c 2014-02-17 14:14:27.906093514 +0200 -@@ -459,9 +459,7 @@ - /* For glibc 2.2.4+. Unfortunately, it doesn't work for older */ - /* versions. Thanks to Jakub Jelinek for most of the code. */ - --# if (defined(LINUX) || defined (__GLIBC__)) /* Are others OK here, too? */ \ -- && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \ -- || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) -+# if (defined(LINUX) || defined (__GLIBC__)) - - /* We have the header files for a glibc that includes dl_iterate_phdr. */ - /* It may still not be available in the library on the target system. */ ---- gcc-4.8.2/boehm-gc/include/private/gcconfig.h.orig 2014-02-17 14:14:36.026049422 +0200 -+++ gcc-4.8.2/boehm-gc/include/private/gcconfig.h 2014-02-17 14:17:11.345207887 +0200 -@@ -684,7 +684,7 @@ - # ifdef __ELF__ - # define DYNAMIC_LOADING - # include --# if defined(__GLIBC__)&& __GLIBC__>=2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else /* !GLIBC2 */ - extern char **__environ; -@@ -1147,7 +1147,7 @@ - # define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff)) - # endif - # include --# if defined(__GLIBC__) && __GLIBC__ >= 2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else - extern char **__environ; -@@ -1367,7 +1367,7 @@ - # define HBLKSIZE 4096 - # endif - # define USE_GENERIC_PUSH_REGS --# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2 || __GLIBC__ > 2 -+# if 1 - # define LINUX_STACKBOTTOM - # else - # define STACKBOTTOM 0x80000000 -@@ -1858,7 +1858,7 @@ - # ifdef __ELF__ - # define DYNAMIC_LOADING - # include --# if defined(__GLIBC__) && __GLIBC__ >= 2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else - extern char **__environ; diff --git a/aports/cross/gcc-armhf/fix-cxxflags-passing.patch b/aports/cross/gcc-armhf/fix-cxxflags-passing.patch deleted file mode 100644 index 8eb1de77..00000000 --- a/aports/cross/gcc-armhf/fix-cxxflags-passing.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- gcc-4.8.1/Makefile.in.orig -+++ gcc-4.8.1/Makefile.in -@@ -169,6 +169,7 @@ - # built for the build system to override those in BASE_FLAGS_TO_PASSS. - EXTRA_BUILD_FLAGS = \ - CFLAGS="$(CFLAGS_FOR_BUILD)" \ -+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \ - LDFLAGS="$(LDFLAGS_FOR_BUILD)" - - # This is the list of directories to built for the host system. diff --git a/aports/cross/gcc-armhf/fix-gcj-iconv-musl.patch b/aports/cross/gcc-armhf/fix-gcj-iconv-musl.patch deleted file mode 100644 index b0015751..00000000 --- a/aports/cross/gcc-armhf/fix-gcj-iconv-musl.patch +++ /dev/null @@ -1,120 +0,0 @@ ---- gcc-4.8.2/libjava/gnu/gcj/convert/natIconv.cc.orig 2014-02-18 18:46:14.897880526 +0200 -+++ gcc-4.8.2/libjava/gnu/gcj/convert/natIconv.cc 2014-02-18 18:50:08.766613550 +0200 -@@ -24,6 +24,13 @@ - - #ifdef HAVE_ICONV - #include -+#include -+ -+#if __BYTE_ORDER == __BIG_ENDIAN -+#define UCS2_CHARSET "UCS-2BE" -+#else -+#define UCS2_CHARSET "UCS-2LE" -+#endif - - template - static inline size_t -@@ -45,7 +52,7 @@ - _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer); - buffer[len] = '\0'; - -- iconv_t h = iconv_open ("UCS-2", buffer); -+ iconv_t h = iconv_open (UCS2_CHARSET, buffer); - if (h == (iconv_t) -1) - throw new ::java::io::UnsupportedEncodingException (encoding); - -@@ -99,18 +106,6 @@ - throw new ::java::io::CharConversionException (); - } - -- if (iconv_byte_swap) -- { -- size_t max = (old_out - outavail) / sizeof (jchar); -- for (size_t i = 0; i < max; ++i) -- { -- // Byte swap. -- jchar c = (((out[outpos + i] & 0xff) << 8) -- | ((out[outpos + i] >> 8) & 0xff)); -- outbuf[i] = c; -- } -- } -- - inpos += old_in - inavail; - return (old_out - outavail) / sizeof (jchar); - #else /* HAVE_ICONV */ -@@ -145,7 +140,7 @@ - _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer); - buffer[len] = '\0'; - -- iconv_t h = iconv_open (buffer, "UCS-2"); -+ iconv_t h = iconv_open (buffer, UCS2_CHARSET); - if (h == (iconv_t) -1) - throw new ::java::io::UnsupportedEncodingException (encoding); - -@@ -187,20 +182,6 @@ - char *inbuf = (char *) &chars[inpos]; - char *outbuf = (char *) &out[count]; - -- if (iconv_byte_swap) -- { -- // Ugly performance penalty -- don't use losing systems! -- temp_buffer = (jchar *) _Jv_Malloc (inlength * sizeof (jchar)); -- for (int i = 0; i < inlength; ++i) -- { -- // Byte swap. -- jchar c = (((chars[inpos + i] & 0xff) << 8) -- | ((chars[inpos + i] >> 8) & 0xff)); -- temp_buffer[i] = c; -- } -- inbuf = (char *) temp_buffer; -- } -- - size_t loop_old_in = old_in; - while (1) - { -@@ -252,44 +233,7 @@ - jboolean - gnu::gcj::convert::IOConverter::iconv_init (void) - { -- // Some versions of iconv() always return their UCS-2 results in -- // big-endian order, and they also require UCS-2 inputs to be in -- // big-endian order. For instance, glibc 2.1.3 does this. If the -- // UTF-8=>UCS-2 iconv converter has this feature, then we assume -- // that all UCS-2 converters do. (This might not be the best -- // heuristic, but is is all we've got.) -- jboolean result = false; --#ifdef HAVE_ICONV -- iconv_t handle = iconv_open ("UCS-2", "UTF-8"); -- if (handle != (iconv_t) -1) -- { -- jchar c; -- unsigned char in[4]; -- char *inp, *outp; -- size_t inc, outc, r; -- -- // This is the UTF-8 encoding of \ufeff. At least Tru64 UNIX libiconv -- // needs the trailing NUL byte, otherwise iconv fails with EINVAL. -- in[0] = 0xef; -- in[1] = 0xbb; -- in[2] = 0xbf; -- in[3] = 0x00; -- -- inp = (char *) in; -- inc = 4; -- outp = (char *) &c; -- outc = 2; -- -- r = iconv_adapter (iconv, handle, &inp, &inc, &outp, &outc); -- // Conversion must be complete for us to use the result. -- if (r != (size_t) -1 && inc == 0 && outc == 0) -- result = (c != 0xfeff); -- -- // Release iconv handle. -- iconv_close (handle); -- } --#endif /* HAVE_ICONV */ -- return result; -+ return false; - } - - void diff --git a/aports/cross/gcc-armhf/fix-gcj-musl.patch b/aports/cross/gcc-armhf/fix-gcj-musl.patch deleted file mode 100644 index d26f510c..00000000 --- a/aports/cross/gcc-armhf/fix-gcj-musl.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- gcc-4.8.2/libjava/gnu/classpath/natSystemProperties.cc.orig 2014-02-18 10:55:08.617678779 +0200 -+++ gcc-4.8.2/libjava/gnu/classpath/natSystemProperties.cc 2014-02-18 10:56:31.927227453 +0200 -@@ -289,7 +289,7 @@ - // just default to `en_US'. - setlocale (LC_ALL, ""); - char *locale = setlocale (LC_MESSAGES, ""); -- if (locale && strlen (locale) >= 2) -+ if (locale && strlen (locale) >= 2 && (locale[2] == '\0' || locale[2] == '_')) - { - char buf[3]; - buf[2] = '\0'; ---- gcc-4.8.2/libjava/posix-threads.cc.orig 2014-02-18 13:22:01.789933726 +0200 -+++ gcc-4.8.2/libjava/posix-threads.cc 2014-02-18 13:29:50.924058875 +0200 -@@ -657,6 +657,7 @@ - struct sched_param param; - pthread_attr_t attr; - struct starter *info; -+ size_t ss; - - if (data->flags & FLAG_START) - return; -@@ -675,8 +676,25 @@ - // Set stack size if -Xss option was given. - if (gcj::stack_size > 0) - { -- int e = pthread_attr_setstacksize (&attr, gcj::stack_size); -+ ss = gcj::stack_size; -+ } -+ else -+ { -+ int e = pthread_attr_getstacksize (&attr, &ss); -+ if (e != 0) -+ JvFail (strerror (e)); -+ -+ // Request at least 1meg of stack -+ if (ss >= 1024 * 1024) -+ ss = 0; -+ else -+ ss = 1024 * 1024; -+ } -+ -+ if (ss) -+ { -+ int e = pthread_attr_setstacksize (&attr, ss); - if (e != 0) - JvFail (strerror (e)); - } - - info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter)); diff --git a/aports/cross/gcc-armhf/fix-gcj-stdgnu14-link.patch b/aports/cross/gcc-armhf/fix-gcj-stdgnu14-link.patch deleted file mode 100644 index 2b2ce0fa..00000000 --- a/aports/cross/gcc-armhf/fix-gcj-stdgnu14-link.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- gcc-6.1.0/libjava/Makefile.am -+++ gcc-6.1.0/libjava/Makefile.am -@@ -488,10 +488,14 @@ - nat_files = $(nat_source_files:.cc=.lo) - xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) - -+libgcj_la_CPPFLAGS = \ -+ $(AM_CPPFLAGS) \ -+ $(LIBSTDCXX_RAW_CXX_CXXFLAGS) -+ - # Include THREADLIBS here to ensure that the correct version of - # certain linuxthread functions get linked: - ## The mysterious backslash in the grep pattern is consumed by make. --libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ -+libgcj_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ - $(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ - -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL) ---- gcc-6.1.0/libjava/Makefile.in -+++ gcc-6.1.0/libjava/Makefile.in -@@ -1103,9 +1103,13 @@ - nat_files = $(nat_source_files:.cc=.lo) - xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) - -+libgcj_la_CPPFLAGS = \ -+ $(AM_CPPFLAGS) \ -+ $(LIBSTDCXX_RAW_CXX_CXXFLAGS) -+ - # Include THREADLIBS here to ensure that the correct version of - # certain linuxthread functions get linked: --libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ -+libgcj_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ - $(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ - -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL) diff --git a/aports/cross/gcc-armhf/fix-linux-header-use-in-libgcc.patch b/aports/cross/gcc-armhf/fix-linux-header-use-in-libgcc.patch deleted file mode 100644 index 6dad1b2c..00000000 --- a/aports/cross/gcc-armhf/fix-linux-header-use-in-libgcc.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 9cd4503714c4e596818c4ea8e15905c249b7a319 Mon Sep 17 00:00:00 2001 -From: nsz -Date: Thu, 25 Aug 2016 14:08:27 +0000 -Subject: [PATCH] [mips] Fix linux header use in libgcc - -libgcc/ - * config/mips/linux-unwind.h: Use sys/syscall.h. - - - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239759 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - libgcc/ChangeLog | 4 ++++ - libgcc/config/mips/linux-unwind.h | 2 +- - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog -index b78c4b2..99bd2f1 100644 ---- a/libgcc/ChangeLog -+++ b/libgcc/ChangeLog -@@ -1,3 +1,7 @@ -+2016-08-25 Szabolcs Nagy -+ -+ * config/mips/linux-unwind.h: Use sys/syscall.h. -+ - 2016-08-16 Joseph Myers - - PR libgcc/77265 -diff --git a/libgcc/config/mips/linux-unwind.h b/libgcc/config/mips/linux-unwind.h -index bf12de5..4035c121 100644 ---- a/libgcc/config/mips/linux-unwind.h -+++ b/libgcc/config/mips/linux-unwind.h -@@ -27,7 +27,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - state data appropriately. See unwind-dw2.c for the structs. */ - - #include --#include -+#include - - /* The third parameter to the signal handler points to something with - * this structure defined in asm/ucontext.h, but the name clashes with --- -2.9.3 - diff --git a/aports/cross/gcc-armhf/fix-rs6000-pie.patch b/aports/cross/gcc-armhf/fix-rs6000-pie.patch deleted file mode 100644 index 1fbc31a5..00000000 --- a/aports/cross/gcc-armhf/fix-rs6000-pie.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- gcc-6.3.0.orig/gcc/config/rs6000/sysv4.h -+++ gcc-6.3.0/gcc/config/rs6000/sysv4.h -@@ -753,23 +753,42 @@ - #endif - - #ifdef HAVE_LD_PIE --#define STARTFILE_LINUX_SPEC "\ --%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ --%{mnewlib:ecrti.o%s;:crti.o%s} \ --%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ --" CRTOFFLOADBEGIN -+#define STARTFILE_LINUX_SPEC \ -+ "%{!shared: %{pg|p|profile:gcrt1.o%s;: \ -+ %{" PIE_SPEC ":%{static:rcrt1.o%s;:Scrt1.o%s}} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -+ crti.o%s %{shared:crtbeginS.o%s;: \ -+ %{" PIE_SPEC ":crtbeginS.o%s} \ -+ %{" NO_PIE_SPEC ":%{static:crtbeginT.o%s;:crtbegin.o%s}}} \ -+ %{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_start_preinit.o%s; \ -+ fvtable-verify=std:vtv_start.o%s} \ -+ " CRTOFFLOADBEGIN - #else --#define STARTFILE_LINUX_SPEC "\ --%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ --%{mnewlib:ecrti.o%s;:crti.o%s} \ --%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ --" CRTOFFLOADBEGIN -+#define STARTFILE_LINUX_SPEC \ -+ "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ -+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ -+ %{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_start_preinit.o%s; \ -+ fvtable-verify=std:vtv_start.o%s} \ -+ " CRTOFFLOADBEGIN - #endif - --#define ENDFILE_LINUX_SPEC "\ --%{shared|pie:crtendS.o%s;:crtend.o%s} \ --%{mnewlib:ecrtn.o%s;:crtn.o%s} \ --" CRTOFFLOADEND -+#ifdef HAVE_LD_PIE -+#define ENDFILE_LINUX_SPEC \ -+ "%{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_end_preinit.o%s; \ -+ fvtable-verify=std:vtv_end.o%s} \ -+ %{shared:crtendS.o%s;: %{" PIE_SPEC ":crtendS.o%s} \ -+ %{" NO_PIE_SPEC ":crtend.o%s}} crtn.o%s \ -+ " CRTOFFLOADEND -+#else -+#define ENDFILE_LINUX_SPEC \ -+ "%{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_end_preinit.o%s; \ -+ fvtable-verify=std:vtv_end.o%s} \ -+ %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s \ -+ " CRTOFFLOADEND -+#endif - - #define LINK_START_LINUX_SPEC "" - diff --git a/aports/cross/gcc-armhf/gcc-4.8-build-args.patch b/aports/cross/gcc-armhf/gcc-4.8-build-args.patch deleted file mode 100644 index c27e0096..00000000 --- a/aports/cross/gcc-armhf/gcc-4.8-build-args.patch +++ /dev/null @@ -1,41 +0,0 @@ -When cross compiling a target gcc, target flags may be used on the host - -Configure identifies a number of warning flags (WARN_CFLAGS and -WARN_CXXFLAGS) from the $CC value. The cross compiler may be different -from the host compiler and may not support the same set of flags. This -leads to problems such as: - -cc1plus: error: unrecognized command line option "-Wno-narrowing" -cc1plus: error: unrecognized command line option "-Wno-overlength-strings" - -Work around this problem by removing the warning flags from the -BUILD_CXXFLAGS value, in a way similar to the BUILD_CFLAGS. - -Upstream-Status: Pending - -Signed-off-by: Mark Hatle - -Index: gcc-4.8.0/gcc/configure -=================================================================== ---- gcc-4.8.0.orig/gcc/configure -+++ gcc-4.8.0/gcc/configure -@@ -11720,6 +10581,7 @@ STMP_FIXINC=stmp-fixinc - if test x$build != x$host || test "x$coverage_flags" != x - then - BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' -+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' - BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)' - fi - -Index: gcc-4.8.0/gcc/configure.ac -=================================================================== ---- gcc-4.8.0.orig/gcc/configure.ac -+++ gcc-4.8.0/gcc/configure.ac -@@ -1901,6 +1901,7 @@ STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_F - if test x$build != x$host || test "x$coverage_flags" != x - then - BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' -+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' - BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)' - fi - diff --git a/aports/cross/gcc-armhf/gcc-4.9-musl-fortify.patch b/aports/cross/gcc-armhf/gcc-4.9-musl-fortify.patch deleted file mode 100644 index daae954c..00000000 --- a/aports/cross/gcc-armhf/gcc-4.9-musl-fortify.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gcc-4.9.2/gcc/config/linux.h.orig 2015-03-09 13:27:13.289736710 +0000 -+++ gcc-4.9.2/gcc/config/linux.h 2015-03-09 13:29:32.295625046 +0000 -@@ -146,6 +146,8 @@ - - #ifdef NATIVE_SYSTEM_HEADER_DIR - #define INCLUDE_DEFAULTS_MUSL_NATIVE \ -+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 2 }, \ -+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 0 }, \ - { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \ - { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 }, - #else diff --git a/aports/cross/gcc-armhf/gcc-6.1-musl-libssp.patch b/aports/cross/gcc-armhf/gcc-6.1-musl-libssp.patch deleted file mode 100644 index fe5c6143..00000000 --- a/aports/cross/gcc-armhf/gcc-6.1-musl-libssp.patch +++ /dev/null @@ -1,20 +0,0 @@ -Author: Timo Teräs - -Alpine musl package provides libssp_nonshared.a. We link to it unconditionally, -as otherwise we get link failures if some objects are -fstack-protector built -and final link happens with -fno-stack-protector. This seems to be the common -case when bootstrapping gcc, the piepatches do not seem to fully fix the -crosstoolchain and bootstrap sequence wrt. stack-protector flag usage. - ---- gcc-6.1.0/gcc/gcc.c.orig -+++ gcc-6.1.0/gcc/gcc.c -@@ -870,8 +870,7 @@ - - #ifndef LINK_SSP_SPEC - #ifdef TARGET_LIBC_PROVIDES_SSP --#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ -- "|fstack-protector-strong|fstack-protector-explicit:}" -+#define LINK_SSP_SPEC "-lssp_nonshared" - #else - #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ - "|fstack-protector-strong|fstack-protector-explicit" \ diff --git a/aports/cross/gcc-armhf/gcc-pure64-mips.patch b/aports/cross/gcc-armhf/gcc-pure64-mips.patch deleted file mode 100644 index d78f2838..00000000 --- a/aports/cross/gcc-armhf/gcc-pure64-mips.patch +++ /dev/null @@ -1,47 +0,0 @@ -From b8c4e45d052adc247341066f748421743704b481 Mon Sep 17 00:00:00 2001 -From: Nils Andreas Svee -Date: Thu, 21 Dec 2017 03:14:33 +0100 -Subject: [PATCH] Pure 64-bit MIPS - ---- - gcc/config/mips/mips.h | 8 ++++---- - gcc/config/mips/t-linux64 | 6 +++--- - 2 files changed, 7 insertions(+), 7 deletions(-) - -diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h -index 803ab98e7..afd74752f 100644 ---- a/gcc/config/mips/mips.h -+++ b/gcc/config/mips/mips.h -@@ -3330,11 +3330,11 @@ struct GTY(()) machine_function { - /* If we are *not* using multilibs and the default ABI is not ABI_32 we - need to change these from /lib and /usr/lib. */ - #if MIPS_ABI_DEFAULT == ABI_N32 --#define STANDARD_STARTFILE_PREFIX_1 "/lib32/" --#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib32/" -+#define STANDARD_STARTFILE_PREFIX_1 "/lib/" -+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" - #elif MIPS_ABI_DEFAULT == ABI_64 --#define STANDARD_STARTFILE_PREFIX_1 "/lib64/" --#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/" -+#define STANDARD_STARTFILE_PREFIX_1 "/lib/" -+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" - #endif - - /* Load store bonding is not supported by micromips and fix_24k. The -diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64 -index 16c8adf85..bb46204db 100644 ---- a/gcc/config/mips/t-linux64 -+++ b/gcc/config/mips/t-linux64 -@@ -21,6 +21,6 @@ MULTILIB_DIRNAMES = n32 32 64 - MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el) - MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft) - MULTILIB_OSDIRNAMES = \ -- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ -- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ -- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) -+ ../lib \ -+ ../lib32 \ -+ ../lib --- -2.15.1 - diff --git a/aports/cross/gcc-armhf/gcc-pure64.patch b/aports/cross/gcc-armhf/gcc-pure64.patch deleted file mode 100644 index 2c350fe5..00000000 --- a/aports/cross/gcc-armhf/gcc-pure64.patch +++ /dev/null @@ -1,89 +0,0 @@ ---- ./gcc/config/i386/t-linux64.orig 2013-01-14 16:32:37.000000000 +0000 -+++ ./gcc/config/i386/t-linux64 2013-04-22 06:12:32.984439677 +0000 -@@ -34,6 +34,6 @@ - comma=, - MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG)) - MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS))) --MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu) --MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32) ---- ./gcc/config/aarch64/t-aarch64-linux.orig -+++ ./gcc/config/aarch64/t-aarch64-linux -@@ -22,7 +22,7 @@ - LIB1ASMFUNCS = _aarch64_sync_cache_range - - AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be) --MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) -+MULTILIB_OSDIRNAMES = mabi.lp64=../lib - MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu) - - MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32 ---- ./gcc/config/s390/t-linux64.orig -+++ ./gcc/config/s390/t-linux64 -@@ -7,5 +7,5 @@ - MULTILIB_OPTIONS = m64/m31 - MULTILIB_DIRNAMES = 64 32 --MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu) --MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - ---- ./gcc/config/rs6000/t-linux.orig -+++ ./gcc/config/rs6000/t-linux -@@ -2,7 +2,8 @@ - # or soft-float. - ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float))) - ifneq (,$(findstring powerpc64,$(target))) --MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - else - ifneq (,$(findstring spe,$(target))) - MULTIARCH_DIRNAME := powerpc-linux-gnuspe$(if $(findstring 8548,$(with_cpu)),,v1) -@@ -14,7 +15,8 @@ - MULTIARCH_DIRNAME := $(subst -linux,le-linux,$(MULTIARCH_DIRNAME)) - endif - ifneq (,$(findstring powerpc64le,$(target))) --MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES)) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - endif - endif - ---- ./gcc/config/rs6000/t-linux64.orig -+++ ./gcc/config/rs6000/t-linux64 -@@ -28,8 +28,8 @@ - MULTILIB_OPTIONS := m64/m32 - MULTILIB_DIRNAMES := 64 32 - MULTILIB_EXTRA_OPTS := --MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu) --MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - - rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c - $(COMPILE) $< ---- ./gcc/config/rs6000/t-linux64bele.orig -+++ ./gcc/config/rs6000/t-linux64bele -@@ -2,6 +2,6 @@ - - MULTILIB_OPTIONS += mlittle - MULTILIB_DIRNAMES += le --MULTILIB_OSDIRNAMES += $(subst =,.mlittle=,$(subst lible32,lib32le,$(subst lible64,lib64le,$(subst lib,lible,$(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES)))))) --MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mlittle%,$(MULTILIB_OSDIRNAMES))) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN} ---- ./gcc/config/rs6000/t-linux64lebe.orig -+++ ./gcc/config/rs6000/t-linux64lebe -@@ -2,6 +2,6 @@ - - MULTILIB_OPTIONS += mbig - MULTILIB_DIRNAMES += be --MULTILIB_OSDIRNAMES += $(subst =,.mbig=,$(subst libbe32,lib32be,$(subst libbe64,lib64be,$(subst lib,libbe,$(subst le-linux,-linux,$(MULTILIB_OSDIRNAMES)))))) --MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mbig%,$(MULTILIB_OSDIRNAMES))) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN} diff --git a/aports/cross/gcc-armhf/libgcc-always-build-gcceh.a.patch b/aports/cross/gcc-armhf/libgcc-always-build-gcceh.a.patch deleted file mode 100644 index 74ae8973..00000000 --- a/aports/cross/gcc-armhf/libgcc-always-build-gcceh.a.patch +++ /dev/null @@ -1,39 +0,0 @@ -Highly inspired by: - http://landley.net/hg/aboriginal/file/7e0747a665ab/sources/patches/gcc-core-libgcceh.patch - -diff -durN gcc-4.6.0.orig/libgcc/Makefile.in gcc-4.6.0/libgcc/Makefile.in ---- gcc-4.6.0.orig/libgcc/Makefile.in 2011-01-26 05:19:58.000000000 +0100 -+++ gcc-4.6.0/libgcc/Makefile.in 2011-09-12 18:17:12.743718974 +0200 -@@ -772,8 +772,9 @@ - libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT) - endif - -+all: libgcc_eh.a - ifeq ($(enable_shared),yes) --all: libgcc_eh.a libgcc_s$(SHLIB_EXT) -+all: libgcc_s$(SHLIB_EXT) - ifneq ($(LIBUNWIND),) - all: libunwind$(SHLIB_EXT) - endif -@@ -950,10 +951,6 @@ - install-shared: - $(mkinstalldirs) $(DESTDIR)$(inst_libdir) - -- $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ -- chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a -- $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a -- - $(subst @multilib_dir@,$(MULTIDIR),$(subst \ - @shlib_base_name@,libgcc_s,$(subst \ - @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL)))) -@@ -968,6 +965,10 @@ - chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a - $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a - -+ $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ -+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a -+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a -+ - parts="$(INSTALL_PARTS)"; \ - for file in $$parts; do \ - rm -f $(DESTDIR)$(inst_libdir)/$$file; \ diff --git a/aports/cross/gcc-x86_64/0001-i386-Move-struct-ix86_frame-to-machine_function.patch b/aports/cross/gcc-x86_64/0001-i386-Move-struct-ix86_frame-to-machine_function.patch deleted file mode 100644 index ecec2bad..00000000 --- a/aports/cross/gcc-x86_64/0001-i386-Move-struct-ix86_frame-to-machine_function.patch +++ /dev/null @@ -1,241 +0,0 @@ -From b1d2df5090abc9202a7bf2d224ac90de22908d21 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 15 Jan 2018 11:27:24 +0000 -Subject: [PATCH 01/13] i386: Move struct ix86_frame to machine_function - -Make ix86_frame available to i386 code generation. This is needed to -backport the patch set of -mindirect-branch= to mitigate variant #2 of -the speculative execution vulnerabilities on x86 processors identified -by CVE-2017-5715, aka Spectre. - - Backport from mainline - 2017-06-01 Bernd Edlinger - - * config/i386/i386.c (ix86_frame): Moved to ... - * config/i386/i386.h (ix86_frame): Here. - (machine_function): Add frame. - * config/i386/i386.c (ix86_compute_frame_layout): Repace the - frame argument with &cfun->machine->frame. - (ix86_can_use_return_insn_p): Don't pass &frame to - ix86_compute_frame_layout. Copy frame from cfun->machine->frame. - (ix86_can_eliminate): Likewise. - (ix86_expand_prologue): Likewise. - (ix86_expand_epilogue): Likewise. - (ix86_expand_split_stack_prologue): Likewise. ---- - gcc/config/i386/i386.c | 68 ++++++++++---------------------------------------- - gcc/config/i386/i386.h | 53 ++++++++++++++++++++++++++++++++++++++- - 2 files changed, 65 insertions(+), 56 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 8b5faac5129..a1ff32b648b 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -2434,53 +2434,6 @@ struct GTY(()) stack_local_entry { - struct stack_local_entry *next; - }; - --/* Structure describing stack frame layout. -- Stack grows downward: -- -- [arguments] -- <- ARG_POINTER -- saved pc -- -- saved static chain if ix86_static_chain_on_stack -- -- saved frame pointer if frame_pointer_needed -- <- HARD_FRAME_POINTER -- [saved regs] -- <- regs_save_offset -- [padding0] -- -- [saved SSE regs] -- <- sse_regs_save_offset -- [padding1] | -- | <- FRAME_POINTER -- [va_arg registers] | -- | -- [frame] | -- | -- [padding2] | = to_allocate -- <- STACK_POINTER -- */ --struct ix86_frame --{ -- int nsseregs; -- int nregs; -- int va_arg_size; -- int red_zone_size; -- int outgoing_arguments_size; -- -- /* The offsets relative to ARG_POINTER. */ -- HOST_WIDE_INT frame_pointer_offset; -- HOST_WIDE_INT hard_frame_pointer_offset; -- HOST_WIDE_INT stack_pointer_offset; -- HOST_WIDE_INT hfp_save_offset; -- HOST_WIDE_INT reg_save_offset; -- HOST_WIDE_INT sse_reg_save_offset; -- -- /* When save_regs_using_mov is set, emit prologue using -- move instead of push instructions. */ -- bool save_regs_using_mov; --}; -- - /* Which cpu are we scheduling for. */ - enum attr_cpu ix86_schedule; - -@@ -2572,7 +2525,7 @@ static unsigned int ix86_function_arg_boundary (machine_mode, - const_tree); - static rtx ix86_static_chain (const_tree, bool); - static int ix86_function_regparm (const_tree, const_tree); --static void ix86_compute_frame_layout (struct ix86_frame *); -+static void ix86_compute_frame_layout (void); - static bool ix86_expand_vector_init_one_nonzero (bool, machine_mode, - rtx, rtx, int); - static void ix86_add_new_builtins (HOST_WIDE_INT); -@@ -10944,7 +10897,8 @@ ix86_can_use_return_insn_p (void) - if (crtl->args.pops_args && crtl->args.size >= 32768) - return 0; - -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = cfun->machine->frame; - return (frame.stack_pointer_offset == UNITS_PER_WORD - && (frame.nregs + frame.nsseregs) == 0); - } -@@ -11355,8 +11309,8 @@ ix86_can_eliminate (const int from, const int to) - HOST_WIDE_INT - ix86_initial_elimination_offset (int from, int to) - { -- struct ix86_frame frame; -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ struct ix86_frame frame = cfun->machine->frame; - - if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) - return frame.hard_frame_pointer_offset; -@@ -11395,8 +11349,9 @@ ix86_builtin_setjmp_frame_value (void) - /* Fill structure ix86_frame about frame of currently computed function. */ - - static void --ix86_compute_frame_layout (struct ix86_frame *frame) -+ix86_compute_frame_layout (void) - { -+ struct ix86_frame *frame = &cfun->machine->frame; - unsigned HOST_WIDE_INT stack_alignment_needed; - HOST_WIDE_INT offset; - unsigned HOST_WIDE_INT preferred_alignment; -@@ -12702,7 +12657,8 @@ ix86_expand_prologue (void) - m->fs.sp_offset = INCOMING_FRAME_SP_OFFSET; - m->fs.sp_valid = true; - -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = m->frame; - - if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) - { -@@ -13379,7 +13335,8 @@ ix86_expand_epilogue (int style) - bool using_drap; - - ix86_finalize_stack_realign_flags (); -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = m->frame; - - m->fs.sp_valid = (!frame_pointer_needed - || (crtl->sp_is_unchanging -@@ -13876,7 +13833,8 @@ ix86_expand_split_stack_prologue (void) - gcc_assert (flag_split_stack && reload_completed); - - ix86_finalize_stack_realign_flags (); -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = cfun->machine->frame; - allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; - - /* This is the label we will branch to if we have enough stack -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 8113f83c7fd..54144166172 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2427,9 +2427,56 @@ enum avx_u128_state - - #define FASTCALL_PREFIX '@' - -+#ifndef USED_FOR_TARGET -+/* Structure describing stack frame layout. -+ Stack grows downward: -+ -+ [arguments] -+ <- ARG_POINTER -+ saved pc -+ -+ saved static chain if ix86_static_chain_on_stack -+ -+ saved frame pointer if frame_pointer_needed -+ <- HARD_FRAME_POINTER -+ [saved regs] -+ <- regs_save_offset -+ [padding0] -+ -+ [saved SSE regs] -+ <- sse_regs_save_offset -+ [padding1] | -+ | <- FRAME_POINTER -+ [va_arg registers] | -+ | -+ [frame] | -+ | -+ [padding2] | = to_allocate -+ <- STACK_POINTER -+ */ -+struct GTY(()) ix86_frame -+{ -+ int nsseregs; -+ int nregs; -+ int va_arg_size; -+ int red_zone_size; -+ int outgoing_arguments_size; -+ -+ /* The offsets relative to ARG_POINTER. */ -+ HOST_WIDE_INT frame_pointer_offset; -+ HOST_WIDE_INT hard_frame_pointer_offset; -+ HOST_WIDE_INT stack_pointer_offset; -+ HOST_WIDE_INT hfp_save_offset; -+ HOST_WIDE_INT reg_save_offset; -+ HOST_WIDE_INT sse_reg_save_offset; -+ -+ /* When save_regs_using_mov is set, emit prologue using -+ move instead of push instructions. */ -+ bool save_regs_using_mov; -+}; -+ - /* Machine specific frame tracking during prologue/epilogue generation. */ - --#ifndef USED_FOR_TARGET - struct GTY(()) machine_frame_state - { - /* This pair tracks the currently active CFA as reg+offset. When reg -@@ -2475,6 +2522,9 @@ struct GTY(()) machine_function { - int varargs_fpr_size; - int optimize_mode_switching[MAX_386_ENTITIES]; - -+ /* Cached initial frame layout for the current function. */ -+ struct ix86_frame frame; -+ - /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE - has been computed for. */ - int use_fast_prologue_epilogue_nregs; -@@ -2554,6 +2604,7 @@ struct GTY(()) machine_function { - #define ix86_current_function_calls_tls_descriptor \ - (ix86_tls_descriptor_calls_expanded_in_cfun && df_regs_ever_live_p (SP_REG)) - #define ix86_static_chain_on_stack (cfun->machine->static_chain_on_stack) -+#define ix86_red_zone_size (cfun->machine->frame.red_zone_size) - - /* Control behavior of x86_file_start. */ - #define X86_FILE_START_VERSION_DIRECTIVE false --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch b/aports/cross/gcc-x86_64/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch deleted file mode 100644 index 79219e85..00000000 --- a/aports/cross/gcc-x86_64/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch +++ /dev/null @@ -1,69 +0,0 @@ -From b1fc91cda7c15264116f3dde6944ead149123653 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 15 Jan 2018 11:28:44 +0000 -Subject: [PATCH 02/13] i386: Use reference of struct ix86_frame to avoid copy - -When there is no need to make a copy of ix86_frame, we can use reference -of struct ix86_frame to avoid copy. - - Backport from mainline - 2017-11-06 H.J. Lu - - * config/i386/i386.c (ix86_can_use_return_insn_p): Use reference - of struct ix86_frame. - (ix86_initial_elimination_offset): Likewise. - (ix86_expand_split_stack_prologue): Likewise. ---- - gcc/config/i386/i386.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index a1ff32b648b..13ebf107e90 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -10887,7 +10887,6 @@ symbolic_reference_mentioned_p (rtx op) - bool - ix86_can_use_return_insn_p (void) - { -- struct ix86_frame frame; - - if (! reload_completed || frame_pointer_needed) - return 0; -@@ -10898,7 +10897,7 @@ ix86_can_use_return_insn_p (void) - return 0; - - ix86_compute_frame_layout (); -- frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - return (frame.stack_pointer_offset == UNITS_PER_WORD - && (frame.nregs + frame.nsseregs) == 0); - } -@@ -11310,7 +11309,7 @@ HOST_WIDE_INT - ix86_initial_elimination_offset (int from, int to) - { - ix86_compute_frame_layout (); -- struct ix86_frame frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - - if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) - return frame.hard_frame_pointer_offset; -@@ -13821,7 +13820,6 @@ static GTY(()) rtx split_stack_fn_large; - void - ix86_expand_split_stack_prologue (void) - { -- struct ix86_frame frame; - HOST_WIDE_INT allocate; - unsigned HOST_WIDE_INT args_size; - rtx_code_label *label; -@@ -13834,7 +13832,7 @@ ix86_expand_split_stack_prologue (void) - - ix86_finalize_stack_realign_flags (); - ix86_compute_frame_layout (); -- frame = cfun->machine->frame; -+ struct ix86_frame &frame = cfun->machine->frame; - allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; - - /* This is the label we will branch to if we have enough stack --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch b/aports/cross/gcc-x86_64/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch deleted file mode 100644 index 2f293946..00000000 --- a/aports/cross/gcc-x86_64/0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 3e39c0a8053b3e960cf4c3aea3c814e7dc97cfd6 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Sat, 27 Jan 2018 13:10:24 +0000 -Subject: [PATCH 03/13] i386: Use const reference of struct ix86_frame to avoid - copy - -We can use const reference of struct ix86_frame to avoid making a local -copy of ix86_frame. ix86_expand_epilogue makes a local copy of struct -ix86_frame and uses the reg_save_offset field as a local variable. This -patch uses a separate local variable for reg_save_offset. - -Tested on x86-64 with ada. - - Backport from mainline - PR target/83905 - * config/i386/i386.c (ix86_expand_prologue): Use cost reference - of struct ix86_frame. - (ix86_expand_epilogue): Likewise. Add a local variable for - the reg_save_offset field in struct ix86_frame. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257123 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 13ebf107e90..6c98f7581e2 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -12633,7 +12633,6 @@ ix86_expand_prologue (void) - { - struct machine_function *m = cfun->machine; - rtx insn, t; -- struct ix86_frame frame; - HOST_WIDE_INT allocate; - bool int_registers_saved; - bool sse_registers_saved; -@@ -12657,7 +12656,7 @@ ix86_expand_prologue (void) - m->fs.sp_valid = true; - - ix86_compute_frame_layout (); -- frame = m->frame; -+ const struct ix86_frame &frame = cfun->machine->frame; - - if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) - { -@@ -13329,13 +13328,12 @@ ix86_expand_epilogue (int style) - { - struct machine_function *m = cfun->machine; - struct machine_frame_state frame_state_save = m->fs; -- struct ix86_frame frame; - bool restore_regs_via_mov; - bool using_drap; - - ix86_finalize_stack_realign_flags (); - ix86_compute_frame_layout (); -- frame = m->frame; -+ const struct ix86_frame &frame = cfun->machine->frame; - - m->fs.sp_valid = (!frame_pointer_needed - || (crtl->sp_is_unchanging -@@ -13377,11 +13375,13 @@ ix86_expand_epilogue (int style) - + UNITS_PER_WORD); - } - -+ HOST_WIDE_INT reg_save_offset = frame.reg_save_offset; -+ - /* Special care must be taken for the normal return case of a function - using eh_return: the eax and edx registers are marked as saved, but - not restored along this path. Adjust the save location to match. */ - if (crtl->calls_eh_return && style != 2) -- frame.reg_save_offset -= 2 * UNITS_PER_WORD; -+ reg_save_offset -= 2 * UNITS_PER_WORD; - - /* EH_RETURN requires the use of moves to function properly. */ - if (crtl->calls_eh_return) -@@ -13397,11 +13397,11 @@ ix86_expand_epilogue (int style) - else if (TARGET_EPILOGUE_USING_MOVE - && cfun->machine->use_fast_prologue_epilogue - && (frame.nregs > 1 -- || m->fs.sp_offset != frame.reg_save_offset)) -+ || m->fs.sp_offset != reg_save_offset)) - restore_regs_via_mov = true; - else if (frame_pointer_needed - && !frame.nregs -- && m->fs.sp_offset != frame.reg_save_offset) -+ && m->fs.sp_offset != reg_save_offset) - restore_regs_via_mov = true; - else if (frame_pointer_needed - && TARGET_USE_LEAVE -@@ -13439,7 +13439,7 @@ ix86_expand_epilogue (int style) - rtx t; - - if (frame.nregs) -- ix86_emit_restore_regs_using_mov (frame.reg_save_offset, style == 2); -+ ix86_emit_restore_regs_using_mov (reg_save_offset, style == 2); - - /* eh_return epilogues need %ecx added to the stack pointer. */ - if (style == 2) -@@ -13529,19 +13529,19 @@ ix86_expand_epilogue (int style) - epilogues. */ - if (!m->fs.sp_valid - || (TARGET_SEH -- && (m->fs.sp_offset - frame.reg_save_offset -+ && (m->fs.sp_offset - reg_save_offset - >= SEH_MAX_FRAME_SIZE))) - { - pro_epilogue_adjust_stack (stack_pointer_rtx, hard_frame_pointer_rtx, - GEN_INT (m->fs.fp_offset -- - frame.reg_save_offset), -+ - reg_save_offset), - style, false); - } -- else if (m->fs.sp_offset != frame.reg_save_offset) -+ else if (m->fs.sp_offset != reg_save_offset) - { - pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, - GEN_INT (m->fs.sp_offset -- - frame.reg_save_offset), -+ - reg_save_offset), - style, - m->fs.cfa_reg == stack_pointer_rtx); - } --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0004-x86-Add-mindirect-branch.patch b/aports/cross/gcc-x86_64/0004-x86-Add-mindirect-branch.patch deleted file mode 100644 index db5fe2f4..00000000 --- a/aports/cross/gcc-x86_64/0004-x86-Add-mindirect-branch.patch +++ /dev/null @@ -1,2149 +0,0 @@ -From 64da0f4b794672ae14350b09c276422f79f78fc0 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:55 -0800 -Subject: [PATCH 04/13] x86: Add -mindirect-branch= - -Add -mindirect-branch= option to convert indirect call and jump to call -and return thunks. The default is 'keep', which keeps indirect call and -jump unmodified. 'thunk' converts indirect call and jump to call and -return thunk. 'thunk-inline' converts indirect call and jump to inlined -call and return thunk. 'thunk-extern' converts indirect call and jump to -external call and return thunk provided in a separate object file. You -can control this behavior for a specific function by using the function -attribute indirect_branch. - -2 kinds of thunks are geneated. Memory thunk where the function address -is at the top of the stack: - -__x86_indirect_thunk: - call L2 -L1: - pause - lfence - jmp L1 -L2: - lea 8(%rsp), %rsp|lea 4(%esp), %esp - ret - -Indirect jmp via memory, "jmp mem", is converted to - - push memory - jmp __x86_indirect_thunk - -Indirect call via memory, "call mem", is converted to - - jmp L2 -L1: - push [mem] - jmp __x86_indirect_thunk -L2: - call L1 - -Register thunk where the function address is in a register, reg: - -__x86_indirect_thunk_reg: - call L2 -L1: - pause - lfence - jmp L1 -L2: - movq %reg, (%rsp)|movl %reg, (%esp) - ret - -where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di, -(r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15. - -Indirect jmp via register, "jmp reg", is converted to - - jmp __x86_indirect_thunk_reg - -Indirect call via register, "call reg", is converted to - - call __x86_indirect_thunk_reg - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386-opts.h (indirect_branch): New. - * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise. - * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone - with local indirect jump when converting indirect call and jump. - (ix86_set_indirect_branch_type): New. - (ix86_set_current_function): Call ix86_set_indirect_branch_type. - (indirectlabelno): New. - (indirect_thunk_needed): Likewise. - (indirect_thunk_bnd_needed): Likewise. - (indirect_thunks_used): Likewise. - (indirect_thunks_bnd_used): Likewise. - (INDIRECT_LABEL): Likewise. - (indirect_thunk_name): Likewise. - (output_indirect_thunk): Likewise. - (output_indirect_thunk_function): Likewise. - (ix86_output_indirect_branch_via_reg): Likewise. - (ix86_output_indirect_branch_via_push): Likewise. - (ix86_output_indirect_branch): Likewise. - (ix86_output_indirect_jmp): Likewise. - (ix86_code_end): Call output_indirect_thunk_function if needed. - (ix86_output_call_insn): Call ix86_output_indirect_branch if - needed. - (ix86_handle_fndecl_attribute): Handle indirect_branch. - (ix86_attribute_table): Add indirect_branch. - * config/i386/i386.h (machine_function): Add indirect_branch_type - and has_local_indirect_jump. - * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump - to true. - (tablejump): Likewise. - (*indirect_jump): Use ix86_output_indirect_jmp. - (*tablejump_1): Likewise. - (simple_return_indirect_internal): Likewise. - * config/i386/i386.opt (mindirect-branch=): New option. - (indirect_branch): New. - (keep): Likewise. - (thunk): Likewise. - (thunk-inline): Likewise. - (thunk-extern): Likewise. - * doc/extend.texi: Document indirect_branch function attribute. - * doc/invoke.texi: Document -mindirect-branch= option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c: New test. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. ---- - gcc/config/i386/i386-opts.h | 13 + - gcc/config/i386/i386-protos.h | 1 + - gcc/config/i386/i386.c | 639 ++++++++++++++++++++- - gcc/config/i386/i386.h | 7 + - gcc/config/i386/i386.md | 26 +- - gcc/config/i386/i386.opt | 20 + - gcc/doc/extend.texi | 10 + - gcc/doc/invoke.texi | 13 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 20 + - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 20 + - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 21 + - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 21 + - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 17 + - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 18 + - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 44 ++ - .../gcc.target/i386/indirect-thunk-attr-1.c | 23 + - .../gcc.target/i386/indirect-thunk-attr-2.c | 21 + - .../gcc.target/i386/indirect-thunk-attr-3.c | 23 + - .../gcc.target/i386/indirect-thunk-attr-4.c | 22 + - .../gcc.target/i386/indirect-thunk-attr-5.c | 22 + - .../gcc.target/i386/indirect-thunk-attr-6.c | 21 + - .../gcc.target/i386/indirect-thunk-attr-7.c | 44 ++ - .../gcc.target/i386/indirect-thunk-attr-8.c | 42 ++ - .../gcc.target/i386/indirect-thunk-bnd-1.c | 20 + - .../gcc.target/i386/indirect-thunk-bnd-2.c | 21 + - .../gcc.target/i386/indirect-thunk-bnd-3.c | 19 + - .../gcc.target/i386/indirect-thunk-bnd-4.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-1.c | 19 + - .../gcc.target/i386/indirect-thunk-extern-2.c | 19 + - .../gcc.target/i386/indirect-thunk-extern-3.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-4.c | 20 + - .../gcc.target/i386/indirect-thunk-extern-5.c | 16 + - .../gcc.target/i386/indirect-thunk-extern-6.c | 17 + - .../gcc.target/i386/indirect-thunk-extern-7.c | 43 ++ - .../gcc.target/i386/indirect-thunk-inline-1.c | 20 + - .../gcc.target/i386/indirect-thunk-inline-2.c | 20 + - .../gcc.target/i386/indirect-thunk-inline-3.c | 21 + - .../gcc.target/i386/indirect-thunk-inline-4.c | 21 + - .../gcc.target/i386/indirect-thunk-inline-5.c | 17 + - .../gcc.target/i386/indirect-thunk-inline-6.c | 18 + - .../gcc.target/i386/indirect-thunk-inline-7.c | 44 ++ - 41 files changed, 1486 insertions(+), 17 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c - -diff --git a/gcc/config/i386/i386-opts.h b/gcc/config/i386/i386-opts.h -index b7f92e3bea1..cc21152875f 100644 ---- a/gcc/config/i386/i386-opts.h -+++ b/gcc/config/i386/i386-opts.h -@@ -99,4 +99,17 @@ enum stack_protector_guard { - SSP_GLOBAL /* global canary */ - }; - -+/* This is used to mitigate variant #2 of the speculative execution -+ vulnerabilities on x86 processors identified by CVE-2017-5715, aka -+ Spectre. They convert indirect branches and function returns to -+ call and return thunks to avoid speculative execution via indirect -+ call, jmp and ret. */ -+enum indirect_branch { -+ indirect_branch_unset = 0, -+ indirect_branch_keep, -+ indirect_branch_thunk, -+ indirect_branch_thunk_inline, -+ indirect_branch_thunk_extern -+}; -+ - #endif -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index ff47bc15600..eca4cbf0776 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -311,6 +311,7 @@ extern enum attr_cpu ix86_schedule; - #endif - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); -+extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 6c98f7581e2..0b9fc4d3026 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -3662,12 +3662,23 @@ make_pass_stv (gcc::context *ctxt) - return new pass_stv (ctxt); - } - --/* Return true if a red-zone is in use. */ -+/* Return true if a red-zone is in use. We can't use red-zone when -+ there are local indirect jumps, like "indirect_jump" or "tablejump", -+ which jumps to another place in the function, since "call" in the -+ indirect thunk pushes the return address onto stack, destroying -+ red-zone. -+ -+ TODO: If we can reserve the first 2 WORDs, for PUSH and, another -+ for CALL, in red-zone, we can allow local indirect jumps with -+ indirect thunk. */ - - bool - ix86_using_red_zone (void) - { -- return TARGET_RED_ZONE && !TARGET_64BIT_MS_ABI; -+ return (TARGET_RED_ZONE -+ && !TARGET_64BIT_MS_ABI -+ && (!cfun->machine->has_local_indirect_jump -+ || cfun->machine->indirect_branch_type == indirect_branch_keep)); - } - - /* Return a string that documents the current -m options. The caller is -@@ -6350,6 +6361,37 @@ ix86_reset_previous_fndecl (void) - ix86_previous_fndecl = NULL_TREE; - } - -+/* Set the indirect_branch_type field from the function FNDECL. */ -+ -+static void -+ix86_set_indirect_branch_type (tree fndecl) -+{ -+ if (cfun->machine->indirect_branch_type == indirect_branch_unset) -+ { -+ tree attr = lookup_attribute ("indirect_branch", -+ DECL_ATTRIBUTES (fndecl)); -+ if (attr != NULL) -+ { -+ tree args = TREE_VALUE (attr); -+ if (args == NULL) -+ gcc_unreachable (); -+ tree cst = TREE_VALUE (args); -+ if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_keep; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk_inline; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0) -+ cfun->machine->indirect_branch_type = indirect_branch_thunk_extern; -+ else -+ gcc_unreachable (); -+ } -+ else -+ cfun->machine->indirect_branch_type = ix86_indirect_branch; -+ } -+} -+ - /* Establish appropriate back-end context for processing the function - FNDECL. The argument might be NULL to indicate processing at top - level, outside of any function scope. */ -@@ -6360,7 +6402,13 @@ ix86_set_current_function (tree fndecl) - several times in the course of compiling a function, and we don't want to - slow things down too much or call target_reinit when it isn't safe. */ - if (fndecl == ix86_previous_fndecl) -- return; -+ { -+ /* There may be 2 function bodies for the same function FNDECL, -+ one is extern inline and one isn't. */ -+ if (fndecl != NULL_TREE) -+ ix86_set_indirect_branch_type (fndecl); -+ return; -+ } - - tree old_tree; - if (ix86_previous_fndecl == NULL_TREE) -@@ -6377,6 +6425,8 @@ ix86_set_current_function (tree fndecl) - return; - } - -+ ix86_set_indirect_branch_type (fndecl); -+ - tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl); - if (new_tree == NULL_TREE) - new_tree = target_option_default_node; -@@ -10962,6 +11012,220 @@ ix86_setup_frame_addresses (void) - # endif - #endif - -+/* Label count for call and return thunks. It is used to make unique -+ labels in call and return thunks. */ -+static int indirectlabelno; -+ -+/* True if call and return thunk functions are needed. */ -+static bool indirect_thunk_needed = false; -+/* True if call and return thunk functions with the BND prefix are -+ needed. */ -+static bool indirect_thunk_bnd_needed = false; -+ -+/* Bit masks of integer registers, which contain branch target, used -+ by call and return thunks functions. */ -+static int indirect_thunks_used; -+/* Bit masks of integer registers, which contain branch target, used -+ by call and return thunks functions with the BND prefix. */ -+static int indirect_thunks_bnd_used; -+ -+#ifndef INDIRECT_LABEL -+# define INDIRECT_LABEL "LIND" -+#endif -+ -+/* Fills in the label name that should be used for the indirect thunk. */ -+ -+static void -+indirect_thunk_name (char name[32], int regno, bool need_bnd_p) -+{ -+ if (USE_HIDDEN_LINKONCE) -+ { -+ const char *bnd = need_bnd_p ? "_bnd" : ""; -+ if (regno >= 0) -+ { -+ const char *reg_prefix; -+ if (LEGACY_INT_REGNO_P (regno)) -+ reg_prefix = TARGET_64BIT ? "r" : "e"; -+ else -+ reg_prefix = ""; -+ sprintf (name, "__x86_indirect_thunk%s_%s%s", -+ bnd, reg_prefix, reg_names[regno]); -+ } -+ else -+ sprintf (name, "__x86_indirect_thunk%s", bnd); -+ } -+ else -+ { -+ if (regno >= 0) -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITR", regno); -+ } -+ else -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ } -+ } -+} -+ -+/* Output a call and return thunk for indirect branch. If BND_P is -+ true, the BND prefix is needed. If REGNO != -1, the function -+ address is in REGNO and the call and return thunk looks like: -+ -+ call L2 -+ L1: -+ pause -+ jmp L1 -+ L2: -+ mov %REG, (%sp) -+ ret -+ -+ Otherwise, the function address is on the top of stack and the -+ call and return thunk looks like: -+ -+ call L2 -+ L1: -+ pause -+ jmp L1 -+ L2: -+ lea WORD_SIZE(%sp), %sp -+ ret -+ */ -+ -+static void -+output_indirect_thunk (bool need_bnd_p, int regno) -+{ -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Call */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ /* Pause + lfence. */ -+ fprintf (asm_out_file, "\tpause\n\tlfence\n"); -+ -+ /* Jump. */ -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ if (regno >= 0) -+ { -+ /* MOV. */ -+ rtx xops[2]; -+ xops[0] = gen_rtx_MEM (word_mode, stack_pointer_rtx); -+ xops[1] = gen_rtx_REG (word_mode, regno); -+ output_asm_insn ("mov\t{%1, %0|%0, %1}", xops); -+ } -+ else -+ { -+ /* LEA. */ -+ rtx xops[2]; -+ xops[0] = stack_pointer_rtx; -+ xops[1] = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD); -+ output_asm_insn ("lea\t{%E1, %0|%0, %E1}", xops); -+ } -+ -+ if (need_bnd_p) -+ fputs ("\tbnd ret\n", asm_out_file); -+ else -+ fputs ("\tret\n", asm_out_file); -+} -+ -+/* Output a funtion with a call and return thunk for indirect branch. -+ If BND_P is true, the BND prefix is needed. If REGNO != -1, the -+ function address is in REGNO. Otherwise, the function address is -+ on the top of stack. */ -+ -+static void -+output_indirect_thunk_function (bool need_bnd_p, int regno) -+{ -+ char name[32]; -+ tree decl; -+ -+ /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -+ indirect_thunk_name (name, regno, need_bnd_p); -+ decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, -+ get_identifier (name), -+ build_function_type_list (void_type_node, NULL_TREE)); -+ DECL_RESULT (decl) = build_decl (BUILTINS_LOCATION, RESULT_DECL, -+ NULL_TREE, void_type_node); -+ TREE_PUBLIC (decl) = 1; -+ TREE_STATIC (decl) = 1; -+ DECL_IGNORED_P (decl) = 1; -+ -+#if TARGET_MACHO -+ if (TARGET_MACHO) -+ { -+ switch_to_section (darwin_sections[picbase_thunk_section]); -+ fputs ("\t.weak_definition\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ fputs ("\n\t.private_extern\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ putc ('\n', asm_out_file); -+ ASM_OUTPUT_LABEL (asm_out_file, name); -+ DECL_WEAK (decl) = 1; -+ } -+ else -+#endif -+ if (USE_HIDDEN_LINKONCE) -+ { -+ cgraph_node::create (decl)->set_comdat_group (DECL_ASSEMBLER_NAME (decl)); -+ -+ targetm.asm_out.unique_section (decl, 0); -+ switch_to_section (get_named_section (decl, NULL, 0)); -+ -+ targetm.asm_out.globalize_label (asm_out_file, name); -+ fputs ("\t.hidden\t", asm_out_file); -+ assemble_name (asm_out_file, name); -+ putc ('\n', asm_out_file); -+ ASM_DECLARE_FUNCTION_NAME (asm_out_file, name, decl); -+ } -+ else -+ { -+ switch_to_section (text_section); -+ ASM_OUTPUT_LABEL (asm_out_file, name); -+ } -+ -+ DECL_INITIAL (decl) = make_node (BLOCK); -+ current_function_decl = decl; -+ allocate_struct_function (decl, false); -+ init_function_start (decl); -+ /* We're about to hide the function body from callees of final_* by -+ emitting it directly; tell them we're a thunk, if they care. */ -+ cfun->is_thunk = true; -+ first_function_block_is_cold = false; -+ /* Make sure unwind info is emitted for the thunk if needed. */ -+ final_start_function (emit_barrier (), asm_out_file, 1); -+ -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ final_end_function (); -+ init_insn_lengths (); -+ free_after_compilation (cfun); -+ set_cfun (NULL); -+ current_function_decl = NULL; -+} -+ - static int pic_labels_used; - - /* Fills in the label name that should be used for a pc thunk for -@@ -10988,11 +11252,32 @@ ix86_code_end (void) - rtx xops[2]; - int regno; - -+ if (indirect_thunk_needed) -+ output_indirect_thunk_function (false, -1); -+ if (indirect_thunk_bnd_needed) -+ output_indirect_thunk_function (true, -1); -+ -+ for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) -+ { -+ int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; -+ if ((indirect_thunks_used & (1 << i))) -+ output_indirect_thunk_function (false, regno); -+ -+ if ((indirect_thunks_bnd_used & (1 << i))) -+ output_indirect_thunk_function (true, regno); -+ } -+ - for (regno = AX_REG; regno <= SP_REG; regno++) - { - char name[32]; - tree decl; - -+ if ((indirect_thunks_used & (1 << regno))) -+ output_indirect_thunk_function (false, regno); -+ -+ if ((indirect_thunks_bnd_used & (1 << regno))) -+ output_indirect_thunk_function (true, regno); -+ - if (!(pic_labels_used & (1 << regno))) - continue; - -@@ -27369,12 +27654,292 @@ ix86_nopic_noplt_attribute_p (rtx call_op) - return false; - } - -+/* Output indirect branch via a call and return thunk. CALL_OP is a -+ register which contains the branch target. XASM is the assembly -+ template for CALL_OP. Branch is a tail call if SIBCALL_P is true. -+ A normal call is converted to: -+ -+ call __x86_indirect_thunk_reg -+ -+ and a tail call is converted to: -+ -+ jmp __x86_indirect_thunk_reg -+ */ -+ -+static void -+ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p) -+{ -+ char thunk_name_buf[32]; -+ char *thunk_name; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ int regno = REGNO (call_op); -+ -+ if (cfun->machine->indirect_branch_type -+ != indirect_branch_thunk_inline) -+ { -+ if (cfun->machine->indirect_branch_type == indirect_branch_thunk) -+ { -+ int i = regno; -+ if (i >= FIRST_REX_INT_REG) -+ i -= (FIRST_REX_INT_REG - LAST_INT_REG - 1); -+ if (need_bnd_p) -+ indirect_thunks_bnd_used |= 1 << i; -+ else -+ indirect_thunks_used |= 1 << i; -+ } -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ thunk_name = thunk_name_buf; -+ } -+ else -+ thunk_name = NULL; -+ -+ if (sibcall_p) -+ { -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ } -+ else -+ { -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd call\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tcall\t%s\n", thunk_name); -+ return; -+ } -+ -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Jump. */ -+ if (need_bnd_p) -+ fputs ("\tbnd jmp\t", asm_out_file); -+ else -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ /* Call. */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ } -+} -+ -+/* Output indirect branch via a call and return thunk. CALL_OP is -+ the branch target. XASM is the assembly template for CALL_OP. -+ Branch is a tail call if SIBCALL_P is true. A normal call is -+ converted to: -+ -+ jmp L2 -+ L1: -+ push CALL_OP -+ jmp __x86_indirect_thunk -+ L2: -+ call L1 -+ -+ and a tail call is converted to: -+ -+ push CALL_OP -+ jmp __x86_indirect_thunk -+ */ -+ -+static void -+ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm, -+ bool sibcall_p) -+{ -+ char thunk_name_buf[32]; -+ char *thunk_name; -+ char push_buf[64]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ int regno = -1; -+ -+ if (cfun->machine->indirect_branch_type -+ != indirect_branch_thunk_inline) -+ { -+ if (cfun->machine->indirect_branch_type == indirect_branch_thunk) -+ { -+ if (need_bnd_p) -+ indirect_thunk_bnd_needed = true; -+ else -+ indirect_thunk_needed = true; -+ } -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ thunk_name = thunk_name_buf; -+ } -+ else -+ thunk_name = NULL; -+ -+ snprintf (push_buf, sizeof (push_buf), "push{%c}\t%s", -+ TARGET_64BIT ? 'q' : 'l', xasm); -+ -+ if (sibcall_p) -+ { -+ output_asm_insn (push_buf, &call_op); -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ } -+ else -+ { -+ char indirectlabel1[32]; -+ char indirectlabel2[32]; -+ -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, -+ INDIRECT_LABEL, -+ indirectlabelno++); -+ -+ /* Jump. */ -+ if (need_bnd_p) -+ fputs ("\tbnd jmp\t", asm_out_file); -+ else -+ fputs ("\tjmp\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel2); -+ fputc ('\n', asm_out_file); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); -+ -+ /* An external function may be called via GOT, instead of PLT. */ -+ if (MEM_P (call_op)) -+ { -+ struct ix86_address parts; -+ rtx addr = XEXP (call_op, 0); -+ if (ix86_decompose_address (addr, &parts) -+ && parts.base == stack_pointer_rtx) -+ { -+ /* Since call will adjust stack by -UNITS_PER_WORD, -+ we must convert "disp(stack, index, scale)" to -+ "disp+UNITS_PER_WORD(stack, index, scale)". */ -+ if (parts.index) -+ { -+ addr = gen_rtx_MULT (Pmode, parts.index, -+ GEN_INT (parts.scale)); -+ addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, -+ addr); -+ } -+ else -+ addr = stack_pointer_rtx; -+ -+ rtx disp; -+ if (parts.disp != NULL_RTX) -+ disp = plus_constant (Pmode, parts.disp, -+ UNITS_PER_WORD); -+ else -+ disp = GEN_INT (UNITS_PER_WORD); -+ -+ addr = gen_rtx_PLUS (Pmode, addr, disp); -+ call_op = gen_rtx_MEM (GET_MODE (call_op), addr); -+ } -+ } -+ -+ output_asm_insn (push_buf, &call_op); -+ -+ if (thunk_name != NULL) -+ { -+ if (need_bnd_p) -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ else -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); -+ -+ /* Call. */ -+ if (need_bnd_p) -+ fputs ("\tbnd call\t", asm_out_file); -+ else -+ fputs ("\tcall\t", asm_out_file); -+ assemble_name_raw (asm_out_file, indirectlabel1); -+ fputc ('\n', asm_out_file); -+ } -+} -+ -+/* Output indirect branch via a call and return thunk. CALL_OP is -+ the branch target. XASM is the assembly template for CALL_OP. -+ Branch is a tail call if SIBCALL_P is true. */ -+ -+static void -+ix86_output_indirect_branch (rtx call_op, const char *xasm, -+ bool sibcall_p) -+{ -+ if (REG_P (call_op)) -+ ix86_output_indirect_branch_via_reg (call_op, sibcall_p); -+ else -+ ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p); -+} -+/* Output indirect jump. CALL_OP is the jump target. Jump is a -+ function return if RET_P is true. */ -+ -+const char * -+ix86_output_indirect_jmp (rtx call_op, bool ret_p) -+{ -+ if (cfun->machine->indirect_branch_type != indirect_branch_keep) -+ { -+ /* We can't have red-zone if this isn't a function return since -+ "call" in the indirect thunk pushes the return address onto -+ stack, destroying red-zone. */ -+ if (!ret_p && ix86_red_zone_size != 0) -+ gcc_unreachable (); -+ -+ ix86_output_indirect_branch (call_op, "%0", true); -+ return ""; -+ } -+ else -+ return "%!jmp\t%A0"; -+} -+ - /* Output the assembly for a call instruction. */ - - const char * - ix86_output_call_insn (rtx_insn *insn, rtx call_op) - { - bool direct_p = constant_call_address_operand (call_op, VOIDmode); -+ bool output_indirect_p -+ = (!TARGET_SEH -+ && cfun->machine->indirect_branch_type != indirect_branch_keep); - bool seh_nop_p = false; - const char *xasm; - -@@ -27383,7 +27948,13 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - if (direct_p) - { - if (ix86_nopic_noplt_attribute_p (call_op)) -- xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ { -+ direct_p = false; -+ if (output_indirect_p) -+ xasm = "{%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ else -+ xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ } - else - xasm = "%!jmp\t%P0"; - } -@@ -27392,9 +27963,17 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - else if (TARGET_SEH) - xasm = "%!rex.W jmp\t%A0"; - else -- xasm = "%!jmp\t%A0"; -+ { -+ if (output_indirect_p) -+ xasm = "%0"; -+ else -+ xasm = "%!jmp\t%A0"; -+ } - -- output_asm_insn (xasm, &call_op); -+ if (output_indirect_p && !direct_p) -+ ix86_output_indirect_branch (call_op, xasm, true); -+ else -+ output_asm_insn (xasm, &call_op); - return ""; - } - -@@ -27431,14 +28010,28 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op) - if (direct_p) - { - if (ix86_nopic_noplt_attribute_p (call_op)) -- xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ { -+ direct_p = false; -+ if (output_indirect_p) -+ xasm = "{%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ else -+ xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}"; -+ } - else - xasm = "%!call\t%P0"; - } - else -- xasm = "%!call\t%A0"; -+ { -+ if (output_indirect_p) -+ xasm = "%0"; -+ else -+ xasm = "%!call\t%A0"; -+ } - -- output_asm_insn (xasm, &call_op); -+ if (output_indirect_p && !direct_p) -+ ix86_output_indirect_branch (call_op, xasm, false); -+ else -+ output_asm_insn (xasm, &call_op); - - if (seh_nop_p) - return "nop"; -@@ -44836,7 +45429,7 @@ ix86_handle_struct_attribute (tree *node, tree name, tree, int, - } - - static tree --ix86_handle_fndecl_attribute (tree *node, tree name, tree, int, -+ix86_handle_fndecl_attribute (tree *node, tree name, tree args, int, - bool *no_add_attrs) - { - if (TREE_CODE (*node) != FUNCTION_DECL) -@@ -44845,6 +45438,29 @@ ix86_handle_fndecl_attribute (tree *node, tree name, tree, int, - name); - *no_add_attrs = true; - } -+ -+ if (is_attribute_p ("indirect_branch", name)) -+ { -+ tree cst = TREE_VALUE (args); -+ if (TREE_CODE (cst) != STRING_CST) -+ { -+ warning (OPT_Wattributes, -+ "%qE attribute requires a string constant argument", -+ name); -+ *no_add_attrs = true; -+ } -+ else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0) -+ { -+ warning (OPT_Wattributes, -+ "argument to %qE attribute is not " -+ "(keep|thunk|thunk-inline|thunk-extern)", name); -+ *no_add_attrs = true; -+ } -+ } -+ - return NULL_TREE; - } - -@@ -49072,6 +49688,9 @@ static const struct attribute_spec ix86_attribute_table[] = - false }, - { "callee_pop_aggregate_return", 1, 1, false, true, true, - ix86_handle_callee_pop_aggregate_return, true }, -+ { "indirect_branch", 1, 1, true, false, false, -+ ix86_handle_fndecl_attribute, false }, -+ - /* End element. */ - { NULL, 0, 0, false, false, false, NULL, false } - }; -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 54144166172..9dccdb0351e 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2572,6 +2572,13 @@ struct GTY(()) machine_function { - /* If true, it is safe to not save/restore DRAP register. */ - BOOL_BITFIELD no_drap_save_restore : 1; - -+ /* How to generate indirec branch. */ -+ ENUM_BITFIELD(indirect_branch) indirect_branch_type : 3; -+ -+ /* If true, the current function has local indirect jumps, like -+ "indirect_jump" or "tablejump". */ -+ BOOL_BITFIELD has_local_indirect_jump : 1; -+ - /* If true, there is register available for argument passing. This - is used only in ix86_function_ok_for_sibcall by 32-bit to determine - if there is scratch register available for indirect sibcall. In -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index d2bfe314f71..153e1622b2d 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11807,13 +11807,18 @@ - { - if (TARGET_X32) - operands[0] = convert_memory_address (word_mode, operands[0]); -+ cfun->machine->has_local_indirect_jump = true; - }) - - (define_insn "*indirect_jump" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))] - "" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], false);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -@@ -11856,14 +11861,19 @@ - - if (TARGET_X32) - operands[0] = convert_memory_address (word_mode, operands[0]); -+ cfun->machine->has_local_indirect_jump = true; - }) - - (define_insn "*tablejump_1" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw")) - (use (label_ref (match_operand 1)))] - "" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], false);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -@@ -12520,8 +12530,12 @@ - [(simple_return) - (use (match_operand:SI 0 "register_operand" "r"))] - "reload_completed" -- "%!jmp\t%A0" -- [(set_attr "type" "ibr") -+ "* return ix86_output_indirect_jmp (operands[0], true);" -+ [(set (attr "type") -+ (if_then_else (match_test "(cfun->machine->indirect_branch_type -+ != indirect_branch_keep)") -+ (const_string "multi") -+ (const_string "ibr"))) - (set_attr "length_immediate" "0") - (set_attr "maybe_prefix_bnd" "1")]) - -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index f304b621e6a..5ffa3349a30 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -897,3 +897,23 @@ Enum(stack_protector_guard) String(global) Value(SSP_GLOBAL) - mmitigate-rop - Target Var(flag_mitigate_rop) Init(0) - Attempt to avoid generating instruction sequences containing ret bytes. -+ -+mindirect-branch= -+Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_indirect_branch) Init(indirect_branch_keep) -+Convert indirect call and jump to call and return thunks. -+ -+Enum -+Name(indirect_branch) Type(enum indirect_branch) -+Known indirect branch choices (for use with the -mindirect-branch= option): -+ -+EnumValue -+Enum(indirect_branch) String(keep) Value(indirect_branch_keep) -+ -+EnumValue -+Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk) -+ -+EnumValue -+Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) -+ -+EnumValue -+Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 8cc4f7e1f6a..8668dae9e99 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -5419,6 +5419,16 @@ Specify which floating-point unit to use. You must specify the - @code{target("fpmath=sse,387")} option as - @code{target("fpmath=sse+387")} because the comma would separate - different options. -+ -+@item indirect_branch("@var{choice}") -+@cindex @code{indirect_branch} function attribute, x86 -+On x86 targets, the @code{indirect_branch} attribute causes the compiler -+to convert indirect call and jump with @var{choice}. @samp{keep} -+keeps indirect call and jump unmodified. @samp{thunk} converts indirect -+call and jump to call and return thunk. @samp{thunk-inline} converts -+indirect call and jump to inlined call and return thunk. -+@samp{thunk-extern} converts indirect call and jump to external call -+and return thunk provided in a separate object file. - @end table - - On the x86, the inliner does not inline a -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 1d3a824d7b8..6f60339a56a 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1169,7 +1169,7 @@ See RS/6000 and PowerPC Options. - -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol ---mmitigate-rop} -+-mmitigate-rop -mindirect-branch=@var{choice}} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24230,6 +24230,17 @@ opcodes, to mitigate against certain forms of attack. At the moment, - this option is limited in what it can do and should not be relied - on to provide serious protection. - -+@item -mindirect-branch=@var{choice} -+@opindex -mindirect-branch -+Convert indirect call and jump with @var{choice}. The default is -+@samp{keep}, which keeps indirect call and jump unmodified. -+@samp{thunk} converts indirect call and jump to call and return thunk. -+@samp{thunk-inline} converts indirect call and jump to inlined call -+and return thunk. @samp{thunk-extern} converts indirect call and jump -+to external call and return thunk provided in a separate object file. -+You can control this behavior for a specific function by using the -+function attribute @code{indirect_branch}. @xref{Function Attributes}. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -new file mode 100644 -index 00000000000..d983e1c3e26 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -new file mode 100644 -index 00000000000..58f09b42d8a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -new file mode 100644 -index 00000000000..f20d35c19b6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -new file mode 100644 -index 00000000000..0eff8fb658a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -new file mode 100644 -index 00000000000..a25b20dd808 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -new file mode 100644 -index 00000000000..cff114a6c29 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -new file mode 100644 -index 00000000000..afdb6007986 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -new file mode 100644 -index 00000000000..d64d978b699 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+extern void male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk"))); -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -new file mode 100644 -index 00000000000..93067454d3d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk"))) -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -new file mode 100644 -index 00000000000..97744d65729 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+extern int male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk-inline"))); -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -new file mode 100644 -index 00000000000..bfce3ea5cb2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk-inline"))) -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -new file mode 100644 -index 00000000000..0833606046b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+extern int male_indirect_jump (long) -+ __attribute__ ((indirect_branch("thunk-extern"))); -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -new file mode 100644 -index 00000000000..2eba0fbd9b2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -new file mode 100644 -index 00000000000..f58427eae11 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -new file mode 100644 -index 00000000000..564ed39547c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -@@ -0,0 +1,42 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+__attribute__ ((indirect_branch("keep"))) -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -new file mode 100644 -index 00000000000..50fbee20a5a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+void (*dispatch) (char *); -+char buf[10]; -+ -+void -+foo (void) -+{ -+ dispatch (buf); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -new file mode 100644 -index 00000000000..2976e67adce ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile { target { ! x32 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+void (*dispatch) (char *); -+char buf[10]; -+ -+int -+foo (void) -+{ -+ dispatch (buf); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -new file mode 100644 -index 00000000000..da4bc98ef23 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+ -+void bar (char *); -+char buf[10]; -+ -+void -+foo (void) -+{ -+ bar (buf); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -new file mode 100644 -index 00000000000..c64d12ef989 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+ -+void bar (char *); -+char buf[10]; -+ -+int -+foo (void) -+{ -+ bar (buf); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "bnd ret" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -new file mode 100644 -index 00000000000..49f27b49465 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -new file mode 100644 -index 00000000000..a1e3eb6fc74 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -new file mode 100644 -index 00000000000..395634e7e5c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -new file mode 100644 -index 00000000000..fd3f63379a1 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -new file mode 100644 -index 00000000000..ba2f92b6f34 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -0,0 +1,16 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -new file mode 100644 -index 00000000000..0c5a2d472c6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -new file mode 100644 -index 00000000000..665252327aa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -0,0 +1,43 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -new file mode 100644 -index 00000000000..68c0ff713b3 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -new file mode 100644 -index 00000000000..e2da1fcb683 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -new file mode 100644 -index 00000000000..244fec708d6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -new file mode 100644 -index 00000000000..107ebe32f54 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -0,0 +1,21 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch[256]; -+ -+int -+male_indirect_jump (long offset) -+{ -+ dispatch[offset](offset); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -new file mode 100644 -index 00000000000..17b04ef2229 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -0,0 +1,17 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+ -+extern void bar (void); -+ -+void -+foo (void) -+{ -+ bar (); -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -new file mode 100644 -index 00000000000..d9eb11285aa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile { target *-*-linux* } } */ -+/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+ -+extern void bar (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -new file mode 100644 -index 00000000000..d02b1dcb1b9 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -0,0 +1,44 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+void func0 (void); -+void func1 (void); -+void func2 (void); -+void func3 (void); -+void func4 (void); -+void func4 (void); -+void func5 (void); -+ -+void -+bar (int i) -+{ -+ switch (i) -+ { -+ default: -+ func0 (); -+ break; -+ case 1: -+ func1 (); -+ break; -+ case 2: -+ func2 (); -+ break; -+ case 3: -+ func3 (); -+ break; -+ case 4: -+ func4 (); -+ break; -+ case 5: -+ func5 (); -+ break; -+ } -+} -+ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0005-x86-Add-mfunction-return.patch b/aports/cross/gcc-x86_64/0005-x86-Add-mfunction-return.patch deleted file mode 100644 index f311d067..00000000 --- a/aports/cross/gcc-x86_64/0005-x86-Add-mfunction-return.patch +++ /dev/null @@ -1,1565 +0,0 @@ -From 3b946bffc536481a484d9a2b98b829f3d71b5519 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 05/13] x86: Add -mfunction-return= - -Add -mfunction-return= option to convert function return to call and -return thunks. The default is 'keep', which keeps function return -unmodified. 'thunk' converts function return to call and return thunk. -'thunk-inline' converts function return to inlined call and return thunk. -'thunk-extern' converts function return to external call and return -thunk provided in a separate object file. You can control this behavior -for a specific function by using the function attribute function_return. - -Function return thunk is the same as memory thunk for -mindirect-branch= -where the return address is at the top of the stack: - -__x86_return_thunk: - call L2 -L1: - pause - lfence - jmp L1 -L2: - lea 8(%rsp), %rsp|lea 4(%esp), %esp - ret - -and function return becomes - - jmp __x86_return_thunk - --mindirect-branch= tests are updated with -mfunction-return=keep to -avoid false test failures when -mfunction-return=thunk is added to -RUNTESTFLAGS for "make check". - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386-protos.h (ix86_output_function_return): New. - * config/i386/i386.c (ix86_set_indirect_branch_type): Also - set function_return_type. - (indirect_thunk_name): Add ret_p to indicate thunk for function - return. - (output_indirect_thunk_function): Pass false to - indirect_thunk_name. - (ix86_output_indirect_branch_via_reg): Likewise. - (ix86_output_indirect_branch_via_push): Likewise. - (output_indirect_thunk_function): Create alias for function - return thunk if regno < 0. - (ix86_output_function_return): New function. - (ix86_handle_fndecl_attribute): Handle function_return. - (ix86_attribute_table): Add function_return. - * config/i386/i386.h (machine_function): Add - function_return_type. - * config/i386/i386.md (simple_return_internal): Use - ix86_output_function_return. - (simple_return_internal_long): Likewise. - * config/i386/i386.opt (mfunction-return=): New option. - (indirect_branch): Mention -mfunction-return=. - * doc/extend.texi: Document function_return function attribute. - * doc/invoke.texi: Document -mfunction-return= option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c (dg-options): Add - -mfunction-return=keep. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-1.c: New test. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-16.c: Likewise. - * gcc.target/i386/ret-thunk-2.c: Likewise. - * gcc.target/i386/ret-thunk-3.c: Likewise. - * gcc.target/i386/ret-thunk-4.c: Likewise. - * gcc.target/i386/ret-thunk-5.c: Likewise. - * gcc.target/i386/ret-thunk-6.c: Likewise. - * gcc.target/i386/ret-thunk-7.c: Likewise. - * gcc.target/i386/ret-thunk-8.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - -i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO - -ASM_OUTPUT_DEF isn't defined for TARGET_MACHO. Use ASM_OUTPUT_LABEL to -generate the __x86_return_thunk label, instead of the set directive. -Update testcase to remove the __x86_return_thunk label check. Since --fno-pic is ignored on Darwin, update testcases to sscan or "push" -only on Linux. - -gcc/ - - Backport from mainline - 2018-01-15 H.J. Lu - - PR target/83839 - * config/i386/i386.c (output_indirect_thunk_function): Use - ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO - for __x86.return_thunk. - -gcc/testsuite/ - - Backport from mainline - 2018-01-15 H.J. Lu - - PR target/83839 - * gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on - Linux. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-register-1.c: Likewise. - * gcc.target/i386/indirect-thunk-register-3.c: Likewise. - * gcc.target/i386/indirect-thunk-register-4.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Don't check the - __x86_return_thunk label. - Scan for "push" only for Linux. ---- - gcc/config/i386/i386-protos.h | 1 + - gcc/config/i386/i386.c | 152 +++++++++++++++++++-- - gcc/config/i386/i386.h | 3 + - gcc/config/i386/i386.md | 9 +- - gcc/config/i386/i386.opt | 6 +- - gcc/doc/extend.texi | 9 ++ - gcc/doc/invoke.texi | 14 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 4 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-5.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-6.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-attr-8.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-extern-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-7.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-1.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 4 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-7.c | 4 +- - gcc/testsuite/gcc.target/i386/ret-thunk-1.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 23 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 23 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 22 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-16.c | 18 +++ - gcc/testsuite/gcc.target/i386/ret-thunk-2.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-3.c | 12 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-4.c | 12 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-5.c | 15 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-6.c | 14 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-7.c | 13 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-8.c | 14 ++ - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 24 ++++ - 56 files changed, 516 insertions(+), 74 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-11.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-12.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-13.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-14.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-15.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-16.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-3.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-4.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-5.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-6.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-7.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-9.c - -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index eca4cbf0776..620d70ef9f6 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -312,6 +312,7 @@ extern enum attr_cpu ix86_schedule; - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); - extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); -+extern const char * ix86_output_function_return (bool long_p); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 0b9fc4d3026..34e26a3a3c7 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -6390,6 +6390,31 @@ ix86_set_indirect_branch_type (tree fndecl) - else - cfun->machine->indirect_branch_type = ix86_indirect_branch; - } -+ -+ if (cfun->machine->function_return_type == indirect_branch_unset) -+ { -+ tree attr = lookup_attribute ("function_return", -+ DECL_ATTRIBUTES (fndecl)); -+ if (attr != NULL) -+ { -+ tree args = TREE_VALUE (attr); -+ if (args == NULL) -+ gcc_unreachable (); -+ tree cst = TREE_VALUE (args); -+ if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0) -+ cfun->machine->function_return_type = indirect_branch_keep; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk_inline; -+ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0) -+ cfun->machine->function_return_type = indirect_branch_thunk_extern; -+ else -+ gcc_unreachable (); -+ } -+ else -+ cfun->machine->function_return_type = ix86_function_return; -+ } - } - - /* Establish appropriate back-end context for processing the function -@@ -11036,8 +11061,12 @@ static int indirect_thunks_bnd_used; - /* Fills in the label name that should be used for the indirect thunk. */ - - static void --indirect_thunk_name (char name[32], int regno, bool need_bnd_p) -+indirect_thunk_name (char name[32], int regno, bool need_bnd_p, -+ bool ret_p) - { -+ if (regno >= 0 && ret_p) -+ gcc_unreachable (); -+ - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -@@ -11052,7 +11081,10 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p) - bnd, reg_prefix, reg_names[regno]); - } - else -- sprintf (name, "__x86_indirect_thunk%s", bnd); -+ { -+ const char *ret = ret_p ? "return" : "indirect"; -+ sprintf (name, "__x86_%s_thunk%s", ret, bnd); -+ } - } - else - { -@@ -11065,10 +11097,20 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p) - } - else - { -- if (need_bnd_p) -- ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ if (ret_p) -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LRTB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LRT", 0); -+ } - else -- ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ { -+ if (need_bnd_p) -+ ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); -+ else -+ ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); -+ } - } - } - } -@@ -11163,7 +11205,7 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - tree decl; - - /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -- indirect_thunk_name (name, regno, need_bnd_p); -+ indirect_thunk_name (name, regno, need_bnd_p, false); - decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, - get_identifier (name), - build_function_type_list (void_type_node, NULL_TREE)); -@@ -11206,6 +11248,36 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -+ if (regno < 0) -+ { -+ /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ -+ char alias[32]; -+ -+ indirect_thunk_name (alias, regno, need_bnd_p, true); -+#if TARGET_MACHO -+ if (TARGET_MACHO) -+ { -+ fputs ("\t.weak_definition\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ fputs ("\n\t.private_extern\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ ASM_OUTPUT_LABEL (asm_out_file, alias); -+ } -+#else -+ ASM_OUTPUT_DEF (asm_out_file, alias, name); -+ if (USE_HIDDEN_LINKONCE) -+ { -+ fputs ("\t.globl\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ fputs ("\t.hidden\t", asm_out_file); -+ assemble_name (asm_out_file, alias); -+ putc ('\n', asm_out_file); -+ } -+#endif -+ } -+ - DECL_INITIAL (decl) = make_node (BLOCK); - current_function_decl = decl; - allocate_struct_function (decl, false); -@@ -27687,7 +27759,7 @@ ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p) - else - indirect_thunks_used |= 1 << i; - } -- indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false); - thunk_name = thunk_name_buf; - } - else -@@ -27796,7 +27868,7 @@ ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm, - else - indirect_thunk_needed = true; - } -- indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); -+ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false); - thunk_name = thunk_name_buf; - } - else -@@ -27931,6 +28003,46 @@ ix86_output_indirect_jmp (rtx call_op, bool ret_p) - return "%!jmp\t%A0"; - } - -+/* Output function return. CALL_OP is the jump target. Add a REP -+ prefix to RET if LONG_P is true and function return is kept. */ -+ -+const char * -+ix86_output_function_return (bool long_p) -+{ -+ if (cfun->machine->function_return_type != indirect_branch_keep) -+ { -+ char thunk_name[32]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ -+ if (cfun->machine->function_return_type -+ != indirect_branch_thunk_inline) -+ { -+ bool need_thunk = (cfun->machine->function_return_type -+ == indirect_branch_thunk); -+ indirect_thunk_name (thunk_name, -1, need_bnd_p, true); -+ if (need_bnd_p) -+ { -+ indirect_thunk_bnd_needed |= need_thunk; -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ } -+ else -+ { -+ indirect_thunk_needed |= need_thunk; -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ } -+ else -+ output_indirect_thunk (need_bnd_p, -1); -+ -+ return ""; -+ } -+ -+ if (!long_p || ix86_bnd_prefixed_insn_p (current_output_insn)) -+ return "%!ret"; -+ -+ return "rep%; ret"; -+} -+ - /* Output the assembly for a call instruction. */ - - const char * -@@ -45461,6 +45573,28 @@ ix86_handle_fndecl_attribute (tree *node, tree name, tree args, int, - } - } - -+ if (is_attribute_p ("function_return", name)) -+ { -+ tree cst = TREE_VALUE (args); -+ if (TREE_CODE (cst) != STRING_CST) -+ { -+ warning (OPT_Wattributes, -+ "%qE attribute requires a string constant argument", -+ name); -+ *no_add_attrs = true; -+ } -+ else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0 -+ && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0) -+ { -+ warning (OPT_Wattributes, -+ "argument to %qE attribute is not " -+ "(keep|thunk|thunk-inline|thunk-extern)", name); -+ *no_add_attrs = true; -+ } -+ } -+ - return NULL_TREE; - } - -@@ -49690,6 +49824,8 @@ static const struct attribute_spec ix86_attribute_table[] = - ix86_handle_callee_pop_aggregate_return, true }, - { "indirect_branch", 1, 1, true, false, false, - ix86_handle_fndecl_attribute, false }, -+ { "function_return", 1, 1, true, false, false, -+ ix86_handle_fndecl_attribute, false }, - - /* End element. */ - { NULL, 0, 0, false, false, false, NULL, false } -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 9dccdb0351e..b34bc117c34 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2579,6 +2579,9 @@ struct GTY(()) machine_function { - "indirect_jump" or "tablejump". */ - BOOL_BITFIELD has_local_indirect_jump : 1; - -+ /* How to generate function return. */ -+ ENUM_BITFIELD(indirect_branch) function_return_type : 3; -+ - /* If true, there is register available for argument passing. This - is used only in ix86_function_ok_for_sibcall by 32-bit to determine - if there is scratch register available for indirect sibcall. In -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 153e1622b2d..2da671e9f2d 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -12489,7 +12489,7 @@ - (define_insn "simple_return_internal" - [(simple_return)] - "reload_completed" -- "%!ret" -+ "* return ix86_output_function_return (false);" - [(set_attr "length" "1") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "0") -@@ -12503,12 +12503,7 @@ - [(simple_return) - (unspec [(const_int 0)] UNSPEC_REP)] - "reload_completed" --{ -- if (ix86_bnd_prefixed_insn_p (insn)) -- return "%!ret"; -- -- return "rep%; ret"; --} -+ "* return ix86_output_function_return (true);" - [(set_attr "length" "2") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "0") -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index 5ffa3349a30..ad5916fb643 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -902,9 +902,13 @@ mindirect-branch= - Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_indirect_branch) Init(indirect_branch_keep) - Convert indirect call and jump to call and return thunks. - -+mfunction-return= -+Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_function_return) Init(indirect_branch_keep) -+Convert function return to call and return thunk. -+ - Enum - Name(indirect_branch) Type(enum indirect_branch) --Known indirect branch choices (for use with the -mindirect-branch= option): -+Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options): - - EnumValue - Enum(indirect_branch) String(keep) Value(indirect_branch_keep) -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 8668dae9e99..2cb6bd1ef3e 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -5429,6 +5429,15 @@ call and jump to call and return thunk. @samp{thunk-inline} converts - indirect call and jump to inlined call and return thunk. - @samp{thunk-extern} converts indirect call and jump to external call - and return thunk provided in a separate object file. -+ -+@item function_return("@var{choice}") -+@cindex @code{function_return} function attribute, x86 -+On x86 targets, the @code{function_return} attribute causes the compiler -+to convert function return with @var{choice}. @samp{keep} keeps function -+return unmodified. @samp{thunk} converts function return to call and -+return thunk. @samp{thunk-inline} converts function return to inlined -+call and return thunk. @samp{thunk-extern} converts function return to -+external call and return thunk provided in a separate object file. - @end table - - On the x86, the inliner does not inline a -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 6f60339a56a..337a761015a 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1169,7 +1169,8 @@ See RS/6000 and PowerPC Options. - -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol ---mmitigate-rop -mindirect-branch=@var{choice}} -+-mmitigate-rop -mindirect-branch=@var{choice} @gol -+-mfunction-return=@var{choice}} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24241,6 +24242,17 @@ to external call and return thunk provided in a separate object file. - You can control this behavior for a specific function by using the - function attribute @code{indirect_branch}. @xref{Function Attributes}. - -+@item -mfunction-return=@var{choice} -+@opindex -mfunction-return -+Convert function return with @var{choice}. The default is @samp{keep}, -+which keeps function return unmodified. @samp{thunk} converts function -+return to call and return thunk. @samp{thunk-inline} converts function -+return to inlined call and return thunk. @samp{thunk-extern} converts -+function return to external call and return thunk provided in a separate -+object file. You can control this behavior for a specific function by -+using the function attribute @code{function_return}. -+@xref{Function Attributes}. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index d983e1c3e26..e365ef5698a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index 58f09b42d8a..05a51ad9157 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index f20d35c19b6..3c0d4c39f0b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 0eff8fb658a..14d4ef6dd98 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index a25b20dd808..b4836c38d6c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index cff114a6c29..1f06bd1af74 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index afdb6007986..bc6b47a636e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index d64d978b699..2257be3affa 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index 93067454d3d..e9cfdc5879e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index 97744d65729..f938db050f7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index bfce3ea5cb2..4e58599692a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -13,7 +13,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index 0833606046b..b8d50249d8b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -14,7 +14,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index 2eba0fbd9b2..455adabfe0e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -13,7 +13,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index f58427eae11..4595b841ec0 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -36,7 +36,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -index 564ed39547c..d730d31bda1 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index 50fbee20a5a..5e3e118e9bd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -@@ -10,7 +10,7 @@ foo (void) - dispatch (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index 2976e67adce..2801aa4192e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -@@ -11,7 +11,7 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ - /* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index da4bc98ef23..70b4fb36eea 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index c64d12ef989..3baf03ee77c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index 49f27b49465..edeb264218c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index a1e3eb6fc74..1d00413a76a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index 395634e7e5c..06ebf1c9063 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index fd3f63379a1..1c8f9446636 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index ba2f92b6f34..21740ac5b7f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index 0c5a2d472c6..a77c1f470b8 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index 665252327aa..86e9fd1f1e4 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 68c0ff713b3..3ecde878867 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index e2da1fcb683..df32a19a2b5 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 244fec708d6..9540996de01 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index 107ebe32f54..f3db6e2441f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index 17b04ef2229..0f687c3b027 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index d9eb11285aa..b27c6fc96a2 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index d02b1dcb1b9..764a375fc37 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - void func0 (void); - void func1 (void); -@@ -35,7 +35,7 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-1.c b/gcc/testsuite/gcc.target/i386/ret-thunk-1.c -new file mode 100644 -index 00000000000..7223f67ba5e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-1.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -new file mode 100644 -index 00000000000..3a6727b5c54 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -new file mode 100644 -index 00000000000..b8f68188313 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -0,0 +1,23 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -new file mode 100644 -index 00000000000..01b0a02f80b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -new file mode 100644 -index 00000000000..4b497b5f8af ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+ -+extern void (*bar) (void); -+extern int foo (void) __attribute__ ((function_return("thunk"))); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -new file mode 100644 -index 00000000000..4ae4c44a3fd ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("thunk-inline"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -new file mode 100644 -index 00000000000..5b5bc765a7e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("thunk-extern"), indirect_branch("thunk"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-16.c b/gcc/testsuite/gcc.target/i386/ret-thunk-16.c -new file mode 100644 -index 00000000000..a16cad16aaa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-16.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk-extern -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+__attribute__ ((function_return("keep"), indirect_branch("keep"))) -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler-not "__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-2.c b/gcc/testsuite/gcc.target/i386/ret-thunk-2.c -new file mode 100644 -index 00000000000..c6659e3ad09 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-2.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-3.c b/gcc/testsuite/gcc.target/i386/ret-thunk-3.c -new file mode 100644 -index 00000000000..0f7f388f459 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-3.c -@@ -0,0 +1,12 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-4.c b/gcc/testsuite/gcc.target/i386/ret-thunk-4.c -new file mode 100644 -index 00000000000..9ae37e835a0 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-4.c -@@ -0,0 +1,12 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-5.c b/gcc/testsuite/gcc.target/i386/ret-thunk-5.c -new file mode 100644 -index 00000000000..4bd0d2a27bc ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-5.c -@@ -0,0 +1,15 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+extern void foo (void) __attribute__ ((function_return("thunk"))); -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-6.c b/gcc/testsuite/gcc.target/i386/ret-thunk-6.c -new file mode 100644 -index 00000000000..053841f6f7d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-6.c -@@ -0,0 +1,14 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+__attribute__ ((function_return("thunk-inline"))) -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-7.c b/gcc/testsuite/gcc.target/i386/ret-thunk-7.c -new file mode 100644 -index 00000000000..262e6780112 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-7.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=keep" } */ -+ -+__attribute__ ((function_return("thunk-extern"))) -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-8.c b/gcc/testsuite/gcc.target/i386/ret-thunk-8.c -new file mode 100644 -index 00000000000..c1658e96673 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-8.c -@@ -0,0 +1,14 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+extern void foo (void) __attribute__ ((function_return("keep"))); -+ -+void -+foo (void) -+{ -+} -+ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -new file mode 100644 -index 00000000000..fa24a1f7365 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -0,0 +1,24 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ -+ -+extern void (*bar) (void); -+ -+int -+foo (void) -+{ -+ bar (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ -+/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0006-x86-Add-mindirect-branch-register.patch b/aports/cross/gcc-x86_64/0006-x86-Add-mindirect-branch-register.patch deleted file mode 100644 index 111e6e43..00000000 --- a/aports/cross/gcc-x86_64/0006-x86-Add-mindirect-branch-register.patch +++ /dev/null @@ -1,941 +0,0 @@ -From 61bb7f0e152ce5be700a44007d036ea0de4b254d Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 06/13] x86: Add -mindirect-branch-register - -Add -mindirect-branch-register to force indirect branch via register. -This is implemented by disabling patterns of indirect branch via memory, -similar to TARGET_X32. - --mindirect-branch= and -mfunction-return= tests are updated with --mno-indirect-branch-register to avoid false test failures when --mindirect-branch-register is added to RUNTESTFLAGS for "make check". - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/constraints.md (Bs): Disallow memory operand for - -mindirect-branch-register. - (Bw): Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - * config/i386/i386.md (indirect_jump): Call convert_memory_address - for -mindirect-branch-register. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Disallow peepholes of indirect call and jump via memory for - -mindirect-branch-register. - (*call_pop): Replace m with Bw. - (*call_value_pop): Likewise. - (*sibcall_pop_memory): Replace m with Bs. - * config/i386/i386.opt (mindirect-branch-register): New option. - * doc/invoke.texi: Document -mindirect-branch-register option. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-1.c (dg-options): Add - -mno-indirect-branch-register. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - * gcc.target/i386/indirect-thunk-register-1.c: New test. - * gcc.target/i386/indirect-thunk-register-2.c: Likewise. - * gcc.target/i386/indirect-thunk-register-3.c: Likewise. - -i386: Rename to ix86_indirect_branch_register - -Rename the variable for -mindirect-branch-register to -ix86_indirect_branch_register to match the command-line option name. - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/constraints.md (Bs): Replace - ix86_indirect_branch_thunk_register with - ix86_indirect_branch_register. - (Bw): Likewise. - * config/i386/i386.md (indirect_jump): Likewise. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Peepholes of indirect call and jump via memory: Likewise. - * config/i386/i386.opt: Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - -x86: Rewrite ix86_indirect_branch_register logic - -Rewrite ix86_indirect_branch_register logic with - -(and (not (match_test "ix86_indirect_branch_register")) - (original condition before r256662)) - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/predicates.md (constant_call_address_operand): - Rewrite ix86_indirect_branch_register logic. - (sibcall_insn_operand): Likewise. - -Don't check ix86_indirect_branch_register for GOT operand - -Since GOT_memory_operand and GOT32_symbol_operand are simple pattern -matches, don't check ix86_indirect_branch_register here. If needed, --mindirect-branch= will convert indirect branch via GOT slot to a call -and return thunk. - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/constraints.md (Bs): Update - ix86_indirect_branch_register check. Don't check - ix86_indirect_branch_register with GOT_memory_operand. - (Bw): Likewise. - * config/i386/predicates.md (GOT_memory_operand): Don't check - ix86_indirect_branch_register here. - (GOT32_symbol_operand): Likewise. - -i386: Rewrite indirect_branch_operand logic - - Backport from mainline - 2018-01-15 H.J. Lu - - * config/i386/predicates.md (indirect_branch_operand): Rewrite - ix86_indirect_branch_register logic. ---- - gcc/config/i386/constraints.md | 6 ++-- - gcc/config/i386/i386.md | 34 ++++++++++++++-------- - gcc/config/i386/i386.opt | 4 +++ - gcc/config/i386/predicates.md | 21 +++++++------ - gcc/doc/invoke.texi | 6 +++- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 2 +- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-attr-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-extern-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-6.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-7.c | 2 +- - .../gcc.target/i386/indirect-thunk-register-1.c | 22 ++++++++++++++ - .../gcc.target/i386/indirect-thunk-register-2.c | 20 +++++++++++++ - .../gcc.target/i386/indirect-thunk-register-3.c | 19 ++++++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 2 +- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 2 +- - 47 files changed, 147 insertions(+), 63 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c - -diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md -index 1a4c701ad13..9204c8e8487 100644 ---- a/gcc/config/i386/constraints.md -+++ b/gcc/config/i386/constraints.md -@@ -172,14 +172,16 @@ - - (define_constraint "Bs" - "@internal Sibcall memory operand." -- (ior (and (not (match_test "TARGET_X32")) -+ (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") - (match_operand 0 "GOT_memory_operand")))) - - (define_constraint "Bw" - "@internal Call memory operand." -- (ior (and (not (match_test "TARGET_X32")) -+ (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") - (match_operand 0 "GOT_memory_operand")))) -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 2da671e9f2d..05a88fff356 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11805,7 +11805,7 @@ - [(set (pc) (match_operand 0 "indirect_branch_operand"))] - "" - { -- if (TARGET_X32) -+ if (TARGET_X32 || ix86_indirect_branch_register) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -11859,7 +11859,7 @@ - OPTAB_DIRECT); - } - -- if (TARGET_X32) -+ if (TARGET_X32 || ix86_indirect_branch_register) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -12048,7 +12048,7 @@ - [(call (mem:QI (match_operand:W 0 "memory_operand" "m")) - (match_operand 1)) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32" -+ "!TARGET_X32 && !ix86_indirect_branch_register" - "* return ix86_output_call_insn (insn, operands[0]);" - [(set_attr "type" "call")]) - -@@ -12057,7 +12057,9 @@ - (match_operand:W 1 "memory_operand")) - (call (mem:QI (match_dup 0)) - (match_operand 3))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" - [(parallel [(call (mem:QI (match_dup 1)) -@@ -12070,7 +12072,9 @@ - (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) - (call (mem:QI (match_dup 0)) - (match_operand 3))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" - [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) -@@ -12092,7 +12096,7 @@ - }) - - (define_insn "*call_pop" -- [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lmBz")) -+ [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lBwBz")) - (match_operand 1)) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -@@ -12112,7 +12116,7 @@ - [(set_attr "type" "call")]) - - (define_insn "*sibcall_pop_memory" -- [(call (mem:QI (match_operand:SI 0 "memory_operand" "m")) -+ [(call (mem:QI (match_operand:SI 0 "memory_operand" "Bs")) - (match_operand 1)) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -@@ -12166,7 +12170,9 @@ - [(set (match_operand:W 0 "register_operand") - (match_operand:W 1 "memory_operand")) - (set (pc) (match_dup 0))] -- "!TARGET_X32 && peep2_reg_dead_p (2, operands[0])" -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && peep2_reg_dead_p (2, operands[0])" - [(set (pc) (match_dup 1))]) - - ;; Call subroutine, returning value in operand 0 -@@ -12244,7 +12250,7 @@ - (call (mem:QI (match_operand:W 1 "memory_operand" "m")) - (match_operand 2))) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32" -+ "!TARGET_X32 && !ix86_indirect_branch_register" - "* return ix86_output_call_insn (insn, operands[1]);" - [(set_attr "type" "callv")]) - -@@ -12254,7 +12260,9 @@ - (set (match_operand 2) - (call (mem:QI (match_dup 0)) - (match_operand 3)))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" - [(parallel [(set (match_dup 2) -@@ -12269,7 +12277,9 @@ - (set (match_operand 2) - (call (mem:QI (match_dup 0)) - (match_operand 3)))] -- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2)) -+ "!TARGET_X32 -+ && !ix86_indirect_branch_register -+ && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" - [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) -@@ -12294,7 +12304,7 @@ - - (define_insn "*call_value_pop" - [(set (match_operand 0) -- (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lmBz")) -+ (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lBwBz")) - (match_operand 2))) - (set (reg:SI SP_REG) - (plus:SI (reg:SI SP_REG) -diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt -index ad5916fb643..a97f84f68f2 100644 ---- a/gcc/config/i386/i386.opt -+++ b/gcc/config/i386/i386.opt -@@ -921,3 +921,7 @@ Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) - - EnumValue - Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) -+ -+mindirect-branch-register -+Target Report Var(ix86_indirect_branch_register) Init(0) -+Force indirect call and jump via register. -diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md -index 93dda7bb0e7..d1f0a7dbf61 100644 ---- a/gcc/config/i386/predicates.md -+++ b/gcc/config/i386/predicates.md -@@ -593,7 +593,8 @@ - ;; Test for a valid operand for indirect branch. - (define_predicate "indirect_branch_operand" - (ior (match_operand 0 "register_operand") -- (and (not (match_test "TARGET_X32")) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")))) - - ;; Return true if OP is a memory operands that can be used in sibcalls. -@@ -636,20 +637,22 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "call_register_no_elim_operand") -- (ior (and (not (match_test "TARGET_X32")) -- (match_operand 0 "memory_operand")) -- (and (match_test "TARGET_X32 && Pmode == DImode") -- (match_operand 0 "GOT_memory_operand"))))) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_X32")) -+ (match_operand 0 "memory_operand")) -+ (and (match_test "TARGET_X32 && Pmode == DImode") -+ (match_operand 0 "GOT_memory_operand")))))) - - ;; Similarly, but for tail calls, in which we cannot allow memory references. - (define_special_predicate "sibcall_insn_operand" - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "register_no_elim_operand") -- (ior (and (not (match_test "TARGET_X32")) -- (match_operand 0 "sibcall_memory_operand")) -- (and (match_test "TARGET_X32 && Pmode == DImode") -- (match_operand 0 "GOT_memory_operand"))))) -+ (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_X32")) -+ (match_operand 0 "sibcall_memory_operand")) -+ (and (match_test "TARGET_X32 && Pmode == DImode") -+ (match_operand 0 "GOT_memory_operand")))))) - - ;; Return true if OP is a 32-bit GOT symbol operand. - (define_predicate "GOT32_symbol_operand" -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 337a761015a..94374661f2d 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1170,7 +1170,7 @@ See RS/6000 and PowerPC Options. - -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol - -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol - -mmitigate-rop -mindirect-branch=@var{choice} @gol ---mfunction-return=@var{choice}} -+-mfunction-return=@var{choice} -mindirect-branch-register} - - @emph{x86 Windows Options} - @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol -@@ -24253,6 +24253,10 @@ object file. You can control this behavior for a specific function by - using the function attribute @code{function_return}. - @xref{Function Attributes}. - -+@item -mindirect-branch-register -+@opindex -mindirect-branch-register -+Force indirect call and jump via register. -+ - @end table - - These @samp{-m} switches are supported in addition to the above -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index e365ef5698a..60d09881a99 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index 05a51ad9157..aac75163794 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index 3c0d4c39f0b..9e24a385387 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 14d4ef6dd98..127b5d94523 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index b4836c38d6c..fcaa18d10b7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index 1f06bd1af74..e4649283d10 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index bc6b47a636e..17c2d0faf88 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index 2257be3affa..9194ccf3cbc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index e9cfdc5879e..e51f261a612 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index f938db050f7..4aeec1833cd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index 4e58599692a..ac0e5999f63 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index b8d50249d8b..573cf1ef09e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index 455adabfe0e..b2b37fc6e2e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index 4595b841ec0..4a43e199931 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index 5e3e118e9bd..ac84ab623fa 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index 2801aa4192e..ce655e8be1c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { ! x32 } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ - - void (*dispatch) (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index 70b4fb36eea..d34485a0010 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index 3baf03ee77c..0e19830de4d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target { *-*-linux* && { ! x32 } } } } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fpic -fno-plt" } */ - - void bar (char *); - char buf[10]; -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index edeb264218c..579441f250e 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index 1d00413a76a..c92e6f2b02d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index 06ebf1c9063..d9964c25bbd 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index 1c8f9446636..d4dca4dc5fe 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index 21740ac5b7f..5c07e02df6a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index a77c1f470b8..3eb440693a0 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-extern" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index 86e9fd1f1e4..aece9383697 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 3ecde878867..3aba5e8c81f 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index df32a19a2b5..0f0181d6672 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 9540996de01..2eef6f35a75 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index f3db6e2441f..e825a10f14c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - typedef void (*dispatch_t)(long offset); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index 0f687c3b027..c6d77e10352 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index b27c6fc96a2..6454827b780 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -1,5 +1,5 @@ - /* { dg-do compile { target *-*-linux* } } */ --/* { dg-options "-O2 -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fpic -fno-plt -mindirect-branch=thunk-inline" } */ - - extern void bar (void); - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index 764a375fc37..c67066cf197 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - void func0 (void); - void func1 (void); -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c -new file mode 100644 -index 00000000000..7d396a31953 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c -@@ -0,0 +1,22 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk\n" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk_bnd\n" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c -new file mode 100644 -index 00000000000..e7e616bb271 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c -new file mode 100644 -index 00000000000..5320e923be2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c -@@ -0,0 +1,19 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -mindirect-branch-register -fno-pic" } */ -+ -+typedef void (*dispatch_t)(long offset); -+ -+dispatch_t dispatch; -+ -+void -+male_indirect_jump (long offset) -+{ -+ dispatch(offset); -+} -+ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -+/* { dg-final { scan-assembler-not {\t(pause|pause|nop)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -index 3a6727b5c54..e6fea84a4d9 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -index b8f68188313..e239ec4542f 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -index 01b0a02f80b..fa3181303c9 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -index 4b497b5f8af..fd5b41fdd3f 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ - - extern void (*bar) (void); - extern int foo (void) __attribute__ ((function_return("thunk"))); -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -index 4ae4c44a3fd..d606373ead1 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -index 5b5bc765a7e..75e45e226b8 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ - - extern void (*bar) (void); - -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index fa24a1f7365..d1db41cc128 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -1,5 +1,5 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ -+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ - - extern void (*bar) (void); - --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0007-x86-Add-V-register-operand-modifier.patch b/aports/cross/gcc-x86_64/0007-x86-Add-V-register-operand-modifier.patch deleted file mode 100644 index f75b2133..00000000 --- a/aports/cross/gcc-x86_64/0007-x86-Add-V-register-operand-modifier.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 92308185917678406afee3c165ea5e71b53b3cc1 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 6 Jan 2018 22:29:56 -0800 -Subject: [PATCH 07/13] x86: Add 'V' register operand modifier - -Add 'V', a special modifier which prints the name of the full integer -register without '%'. For - -extern void (*func_p) (void); - -void -foo (void) -{ - asm ("call __x86_indirect_thunk_%V0" : : "a" (func_p)); -} - -it generates: - -foo: - movq func_p(%rip), %rax - call __x86_indirect_thunk_rax - ret - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386.c (print_reg): Print the name of the full - integer register without '%'. - (ix86_print_operand): Handle 'V'. - * doc/extend.texi: Document 'V' modifier. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-register-4.c: New test. ---- - gcc/config/i386/i386.c | 13 ++++++++++++- - gcc/doc/extend.texi | 3 +++ - gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c | 13 +++++++++++++ - 3 files changed, 28 insertions(+), 1 deletion(-) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 34e26a3a3c7..eeca7e5e490 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -16869,6 +16869,7 @@ put_condition_code (enum rtx_code code, machine_mode mode, bool reverse, - If CODE is 'h', pretend the reg is the 'high' byte register. - If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op. - If CODE is 'd', duplicate the operand for AVX instruction. -+ If CODE is 'V', print naked full integer register name without %. - */ - - void -@@ -16879,7 +16880,7 @@ print_reg (rtx x, int code, FILE *file) - unsigned int regno; - bool duplicated; - -- if (ASSEMBLER_DIALECT == ASM_ATT) -+ if (ASSEMBLER_DIALECT == ASM_ATT && code != 'V') - putc ('%', file); - - if (x == pc_rtx) -@@ -16922,6 +16923,14 @@ print_reg (rtx x, int code, FILE *file) - && regno != FPSR_REG - && regno != FPCR_REG); - -+ if (code == 'V') -+ { -+ if (GENERAL_REGNO_P (regno)) -+ msize = GET_MODE_SIZE (word_mode); -+ else -+ error ("'V' modifier on non-integer register"); -+ } -+ - duplicated = code == 'd' && TARGET_AVX; - - switch (msize) -@@ -17035,6 +17044,7 @@ print_reg (rtx x, int code, FILE *file) - & -- print some in-use local-dynamic symbol name. - H -- print a memory address offset by 8; used for sse high-parts - Y -- print condition for XOP pcom* instruction. -+ V -- print naked full integer register name without %. - + -- print a branch hint as 'cs' or 'ds' prefix - ; -- print a semicolon (after prefixes due to bug in older gas). - ~ -- print "i" if TARGET_AVX2, "f" otherwise. -@@ -17259,6 +17269,7 @@ ix86_print_operand (FILE *file, rtx x, int code) - case 'X': - case 'P': - case 'p': -+ case 'V': - break; - - case 's': -diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi -index 2cb6bd1ef3e..76ba1d4f913 100644 ---- a/gcc/doc/extend.texi -+++ b/gcc/doc/extend.texi -@@ -8511,6 +8511,9 @@ The table below shows the list of supported modifiers and their effects. - @tab @code{2} - @end multitable - -+@code{V} is a special modifier which prints the name of the full integer -+register without @code{%}. -+ - @anchor{x86floatingpointasmoperands} - @subsubsection x86 Floating-Point @code{asm} Operands - -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c -new file mode 100644 -index 00000000000..f0cd9b75be8 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -mindirect-branch=keep -fno-pic" } */ -+ -+extern void (*func_p) (void); -+ -+void -+foo (void) -+{ -+ asm("call __x86_indirect_thunk_%V0" : : "a" (func_p)); -+} -+ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_eax" { target ia32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_rax" { target { ! ia32 } } } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch b/aports/cross/gcc-x86_64/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch deleted file mode 100644 index 73a58bf8..00000000 --- a/aports/cross/gcc-x86_64/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch +++ /dev/null @@ -1,299 +0,0 @@ -From 087b12213a5b4b8654c70320c671bb05c1b1b012 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Sat, 13 Jan 2018 18:01:54 -0800 -Subject: [PATCH 08/13] x86: Disallow -mindirect-branch=/-mfunction-return= - with -mcmodel=large - -Since the thunk function may not be reachable in large code model, --mcmodel=large is incompatible with -mindirect-branch=thunk, --mindirect-branch=thunk-extern, -mfunction-return=thunk and --mfunction-return=thunk-extern. Issue an error when they are used with --mcmodel=large. - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * config/i386/i386.c (ix86_set_indirect_branch_type): Disallow - -mcmodel=large with -mindirect-branch=thunk, - -mindirect-branch=thunk-extern, -mfunction-return=thunk and - -mfunction-return=thunk-extern. - * doc/invoke.texi: Document -mcmodel=large is incompatible with - -mindirect-branch=thunk, -mindirect-branch=thunk-extern, - -mfunction-return=thunk and -mfunction-return=thunk-extern. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu - - * gcc.target/i386/indirect-thunk-10.c: New test. - * gcc.target/i386/indirect-thunk-8.c: Likewise. - * gcc.target/i386/indirect-thunk-9.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-10.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-11.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-9.c: Likewise. - * gcc.target/i386/ret-thunk-17.c: Likewise. - * gcc.target/i386/ret-thunk-18.c: Likewise. - * gcc.target/i386/ret-thunk-19.c: Likewise. - * gcc.target/i386/ret-thunk-20.c: Likewise. - * gcc.target/i386/ret-thunk-21.c: Likewise. ---- - gcc/config/i386/i386.c | 26 ++++++++++++++++++++++ - gcc/doc/invoke.texi | 11 +++++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-10.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-8.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-9.c | 7 ++++++ - .../gcc.target/i386/indirect-thunk-attr-10.c | 9 ++++++++ - .../gcc.target/i386/indirect-thunk-attr-11.c | 9 ++++++++ - .../gcc.target/i386/indirect-thunk-attr-9.c | 9 ++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-17.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-18.c | 8 +++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-19.c | 8 +++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-20.c | 9 ++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-21.c | 9 ++++++++ - 13 files changed, 126 insertions(+) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-9.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-17.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-18.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-19.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-20.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-21.c - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index eeca7e5e490..9c038bee000 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -6389,6 +6389,19 @@ ix86_set_indirect_branch_type (tree fndecl) - } - else - cfun->machine->indirect_branch_type = ix86_indirect_branch; -+ -+ /* -mcmodel=large is not compatible with -mindirect-branch=thunk -+ nor -mindirect-branch=thunk-extern. */ -+ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) -+ && ((cfun->machine->indirect_branch_type -+ == indirect_branch_thunk_extern) -+ || (cfun->machine->indirect_branch_type -+ == indirect_branch_thunk))) -+ error ("%<-mindirect-branch=%s%> and %<-mcmodel=large%> are not " -+ "compatible", -+ ((cfun->machine->indirect_branch_type -+ == indirect_branch_thunk_extern) -+ ? "thunk-extern" : "thunk")); - } - - if (cfun->machine->function_return_type == indirect_branch_unset) -@@ -6414,6 +6427,19 @@ ix86_set_indirect_branch_type (tree fndecl) - } - else - cfun->machine->function_return_type = ix86_function_return; -+ -+ /* -mcmodel=large is not compatible with -mfunction-return=thunk -+ nor -mfunction-return=thunk-extern. */ -+ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) -+ && ((cfun->machine->function_return_type -+ == indirect_branch_thunk_extern) -+ || (cfun->machine->function_return_type -+ == indirect_branch_thunk))) -+ error ("%<-mfunction-return=%s%> and %<-mcmodel=large%> are not " -+ "compatible", -+ ((cfun->machine->function_return_type -+ == indirect_branch_thunk_extern) -+ ? "thunk-extern" : "thunk")); - } - } - -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 94374661f2d..1dee495c86b 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -24242,6 +24242,11 @@ to external call and return thunk provided in a separate object file. - You can control this behavior for a specific function by using the - function attribute @code{indirect_branch}. @xref{Function Attributes}. - -+Note that @option{-mcmodel=large} is incompatible with -+@option{-mindirect-branch=thunk} nor -+@option{-mindirect-branch=thunk-extern} since the thunk function may -+not be reachable in large code model. -+ - @item -mfunction-return=@var{choice} - @opindex -mfunction-return - Convert function return with @var{choice}. The default is @samp{keep}, -@@ -24253,6 +24258,12 @@ object file. You can control this behavior for a specific function by - using the function attribute @code{function_return}. - @xref{Function Attributes}. - -+Note that @option{-mcmodel=large} is incompatible with -+@option{-mfunction-return=thunk} nor -+@option{-mfunction-return=thunk-extern} since the thunk function may -+not be reachable in large code model. -+ -+ - @item -mindirect-branch-register - @opindex -mindirect-branch-register - Force indirect call and jump via register. -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c -new file mode 100644 -index 00000000000..a0674bd2363 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c -new file mode 100644 -index 00000000000..7a80a8986e8 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c -new file mode 100644 -index 00000000000..d4d45c5114d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c -new file mode 100644 -index 00000000000..3a2aeaddbc5 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c -new file mode 100644 -index 00000000000..8e52f032b6c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk-inline"))) -+void -+bar (void) -+{ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c -new file mode 100644 -index 00000000000..bdaa4f6911b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk"))) -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-17.c b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c -new file mode 100644 -index 00000000000..0605e2c6542 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-18.c b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c -new file mode 100644 -index 00000000000..307019dc242 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c -@@ -0,0 +1,8 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-19.c b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c -new file mode 100644 -index 00000000000..772617f4010 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c -@@ -0,0 +1,8 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+ -+__attribute__ ((function_return("thunk"))) -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-20.c b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c -new file mode 100644 -index 00000000000..1e9f9bd5a66 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((function_return("thunk-extern"))) -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-21.c b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c -new file mode 100644 -index 00000000000..eea07f7abe1 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((function_return("thunk-inline"))) -+void -+bar (void) -+{ -+} --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch b/aports/cross/gcc-x86_64/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch deleted file mode 100644 index f33946c1..00000000 --- a/aports/cross/gcc-x86_64/0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch +++ /dev/null @@ -1,121 +0,0 @@ -From 07857bd9fb9ccab67a932ad9df3e53f3f0c2c617 Mon Sep 17 00:00:00 2001 -From: uros -Date: Thu, 25 Jan 2018 19:39:01 +0000 -Subject: [PATCH 09/13] Use INVALID_REGNUM in indirect thunk processing - - Backport from mainline - 2018-01-17 Uros Bizjak - - * config/i386/i386.c (indirect_thunk_name): Declare regno - as unsigned int. Compare regno with INVALID_REGNUM. - (output_indirect_thunk): Ditto. - (output_indirect_thunk_function): Ditto. - (ix86_code_end): Declare regno as unsigned int. Use INVALID_REGNUM - in the call to output_indirect_thunk_function. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257067 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 30 +++++++++++++++--------------- - 1 file changed, 15 insertions(+), 15 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 9c038bee000..40126579c22 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11087,16 +11087,16 @@ static int indirect_thunks_bnd_used; - /* Fills in the label name that should be used for the indirect thunk. */ - - static void --indirect_thunk_name (char name[32], int regno, bool need_bnd_p, -- bool ret_p) -+indirect_thunk_name (char name[32], unsigned int regno, -+ bool need_bnd_p, bool ret_p) - { -- if (regno >= 0 && ret_p) -+ if (regno != INVALID_REGNUM && ret_p) - gcc_unreachable (); - - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - const char *reg_prefix; - if (LEGACY_INT_REGNO_P (regno)) -@@ -11114,7 +11114,7 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p, - } - else - { -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - if (need_bnd_p) - ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno); -@@ -11166,7 +11166,7 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p, - */ - - static void --output_indirect_thunk (bool need_bnd_p, int regno) -+output_indirect_thunk (bool need_bnd_p, unsigned int regno) - { - char indirectlabel1[32]; - char indirectlabel2[32]; -@@ -11196,7 +11196,7 @@ output_indirect_thunk (bool need_bnd_p, int regno) - - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); - -- if (regno >= 0) -+ if (regno != INVALID_REGNUM) - { - /* MOV. */ - rtx xops[2]; -@@ -11220,12 +11220,12 @@ output_indirect_thunk (bool need_bnd_p, int regno) - } - - /* Output a funtion with a call and return thunk for indirect branch. -- If BND_P is true, the BND prefix is needed. If REGNO != -1, the -- function address is in REGNO. Otherwise, the function address is -+ If BND_P is true, the BND prefix is needed. If REGNO != INVALID_REGNUM, -+ the function address is in REGNO. Otherwise, the function address is - on the top of stack. */ - - static void --output_indirect_thunk_function (bool need_bnd_p, int regno) -+output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - { - char name[32]; - tree decl; -@@ -11274,7 +11274,7 @@ output_indirect_thunk_function (bool need_bnd_p, int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -- if (regno < 0) -+ if (regno == INVALID_REGNUM) - { - /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ - char alias[32]; -@@ -11348,16 +11348,16 @@ static void - ix86_code_end (void) - { - rtx xops[2]; -- int regno; -+ unsigned int regno; - - if (indirect_thunk_needed) -- output_indirect_thunk_function (false, -1); -+ output_indirect_thunk_function (false, INVALID_REGNUM); - if (indirect_thunk_bnd_needed) -- output_indirect_thunk_function (true, -1); -+ output_indirect_thunk_function (true, INVALID_REGNUM); - - for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) - { -- int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; -+ unsigned int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; - if ((indirect_thunks_used & (1 << i))) - output_indirect_thunk_function (false, regno); - --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch b/aports/cross/gcc-x86_64/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch deleted file mode 100644 index 08593c2b..00000000 --- a/aports/cross/gcc-x86_64/0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 3815e98f0f46b6c4c41e6810bad987bd083691aa Mon Sep 17 00:00:00 2001 -From: hjl -Date: Fri, 2 Feb 2018 16:47:02 +0000 -Subject: [PATCH 10/13] i386: Pass INVALID_REGNUM as invalid register number - - Backport from mainline - * config/i386/i386.c (ix86_output_function_return): Pass - INVALID_REGNUM, instead of -1, as invalid register number to - indirect_thunk_name and output_indirect_thunk. - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@257341 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - gcc/config/i386/i386.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 40126579c22..66502ee6da6 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -28056,7 +28056,8 @@ ix86_output_function_return (bool long_p) - { - bool need_thunk = (cfun->machine->function_return_type - == indirect_branch_thunk); -- indirect_thunk_name (thunk_name, -1, need_bnd_p, true); -+ indirect_thunk_name (thunk_name, INVALID_REGNUM, need_bnd_p, -+ true); - if (need_bnd_p) - { - indirect_thunk_bnd_needed |= need_thunk; -@@ -28069,7 +28070,7 @@ ix86_output_function_return (bool long_p) - } - } - else -- output_indirect_thunk (need_bnd_p, -1); -+ output_indirect_thunk (need_bnd_p, INVALID_REGNUM); - - return ""; - } --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0011-i386-Update-mfunction-return-for-return-with-pop.patch b/aports/cross/gcc-x86_64/0011-i386-Update-mfunction-return-for-return-with-pop.patch deleted file mode 100644 index 3d528395..00000000 --- a/aports/cross/gcc-x86_64/0011-i386-Update-mfunction-return-for-return-with-pop.patch +++ /dev/null @@ -1,456 +0,0 @@ -From 771535dec733e4b85924f00a3a94c29683d614e5 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 26 Feb 2018 15:29:30 +0000 -Subject: [PATCH 11/13] i386: Update -mfunction-return= for return with pop - -When -mfunction-return= is used, simple_return_pop_internal should pop -return address into ECX register, adjust stack by bytes to pop from stack -and jump to the return thunk via ECX register. - -Revision 257992 removed the bool argument from ix86_output_indirect_jmp. -Update comments to reflect it. - -Tested on i686 and x86-64. - -gcc/ - - Backport from mainline - 2018-02-26 H.J. Lu - - * config/i386/i386.c (ix86_output_indirect_jmp): Update comments. - - 2018-02-26 H.J. Lu - - PR target/84530 - * config/i386/i386-protos.h (ix86_output_indirect_jmp): Remove - the bool argument. - (ix86_output_indirect_function_return): New prototype. - (ix86_split_simple_return_pop_internal): Likewise. - * config/i386/i386.c (indirect_return_via_cx): New. - (indirect_return_via_cx_bnd): Likewise. - (indirect_thunk_name): Handle return va CX_REG. - (output_indirect_thunk_function): Create alias for - __x86_return_thunk_[re]cx and __x86_return_thunk_[re]cx_bnd. - (ix86_output_indirect_jmp): Remove the bool argument. - (ix86_output_indirect_function_return): New function. - (ix86_split_simple_return_pop_internal): Likewise. - * config/i386/i386.md (*indirect_jump): Don't pass false - to ix86_output_indirect_jmp. - (*tablejump_1): Likewise. - (simple_return_pop_internal): Change it to define_insn_and_split. - Call ix86_split_simple_return_pop_internal to split it for - -mfunction-return=. - (simple_return_indirect_internal): Call - ix86_output_indirect_function_return instead of - ix86_output_indirect_jmp. - -gcc/testsuite/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84530 - * gcc.target/i386/ret-thunk-22.c: New test. - * gcc.target/i386/ret-thunk-23.c: Likewise. - * gcc.target/i386/ret-thunk-24.c: Likewise. - * gcc.target/i386/ret-thunk-25.c: Likewise. - * gcc.target/i386/ret-thunk-26.c: Likewise. ---- - gcc/config/i386/i386-protos.h | 4 +- - gcc/config/i386/i386.c | 127 +++++++++++++++++++++++---- - gcc/config/i386/i386.md | 11 ++- - gcc/testsuite/gcc.target/i386/ret-thunk-22.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-23.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-24.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-25.c | 15 ++++ - gcc/testsuite/gcc.target/i386/ret-thunk-26.c | 40 +++++++++ - 8 files changed, 222 insertions(+), 20 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-22.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-23.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-24.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-25.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-26.c - -diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h -index 620d70ef9f6..c7a0ccb58d3 100644 ---- a/gcc/config/i386/i386-protos.h -+++ b/gcc/config/i386/i386-protos.h -@@ -311,8 +311,10 @@ extern enum attr_cpu ix86_schedule; - #endif - - extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); --extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); -+extern const char * ix86_output_indirect_jmp (rtx call_op); - extern const char * ix86_output_function_return (bool long_p); -+extern const char * ix86_output_indirect_function_return (rtx ret_op); -+extern void ix86_split_simple_return_pop_internal (rtx); - extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load, - enum machine_mode mode); - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 66502ee6da6..21c3c18bd3c 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11080,6 +11080,12 @@ static int indirect_thunks_used; - by call and return thunks functions with the BND prefix. */ - static int indirect_thunks_bnd_used; - -+/* True if return thunk function via CX is needed. */ -+static bool indirect_return_via_cx; -+/* True if return thunk function via CX with the BND prefix is -+ needed. */ -+static bool indirect_return_via_cx_bnd; -+ - #ifndef INDIRECT_LABEL - # define INDIRECT_LABEL "LIND" - #endif -@@ -11090,12 +11096,13 @@ static void - indirect_thunk_name (char name[32], unsigned int regno, - bool need_bnd_p, bool ret_p) - { -- if (regno != INVALID_REGNUM && ret_p) -+ if (regno != INVALID_REGNUM && regno != CX_REG && ret_p) - gcc_unreachable (); - - if (USE_HIDDEN_LINKONCE) - { - const char *bnd = need_bnd_p ? "_bnd" : ""; -+ const char *ret = ret_p ? "return" : "indirect"; - if (regno != INVALID_REGNUM) - { - const char *reg_prefix; -@@ -11103,14 +11110,11 @@ indirect_thunk_name (char name[32], unsigned int regno, - reg_prefix = TARGET_64BIT ? "r" : "e"; - else - reg_prefix = ""; -- sprintf (name, "__x86_indirect_thunk%s_%s%s", -- bnd, reg_prefix, reg_names[regno]); -+ sprintf (name, "__x86_%s_thunk%s_%s%s", -+ ret, bnd, reg_prefix, reg_names[regno]); - } - else -- { -- const char *ret = ret_p ? "return" : "indirect"; -- sprintf (name, "__x86_%s_thunk%s", ret, bnd); -- } -+ sprintf (name, "__x86_%s_thunk%s", ret, bnd); - } - else - { -@@ -11274,9 +11278,23 @@ output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -+ /* Create alias for __x86_return_thunk/__x86_return_thunk_bnd or -+ __x86_return_thunk_ecx/__x86_return_thunk_ecx_bnd. */ -+ bool need_alias; - if (regno == INVALID_REGNUM) -+ need_alias = true; -+ else if (regno == CX_REG) -+ { -+ if (need_bnd_p) -+ need_alias = indirect_return_via_cx_bnd; -+ else -+ need_alias = indirect_return_via_cx; -+ } -+ else -+ need_alias = false; -+ -+ if (need_alias) - { -- /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ - char alias[32]; - - indirect_thunk_name (alias, regno, need_bnd_p, true); -@@ -28019,18 +28037,17 @@ ix86_output_indirect_branch (rtx call_op, const char *xasm, - else - ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p); - } --/* Output indirect jump. CALL_OP is the jump target. Jump is a -- function return if RET_P is true. */ -+ -+/* Output indirect jump. CALL_OP is the jump target. */ - - const char * --ix86_output_indirect_jmp (rtx call_op, bool ret_p) -+ix86_output_indirect_jmp (rtx call_op) - { - if (cfun->machine->indirect_branch_type != indirect_branch_keep) - { -- /* We can't have red-zone if this isn't a function return since -- "call" in the indirect thunk pushes the return address onto -- stack, destroying red-zone. */ -- if (!ret_p && ix86_red_zone_size != 0) -+ /* We can't have red-zone since "call" in the indirect thunk -+ pushes the return address onto stack, destroying red-zone. */ -+ if (ix86_red_zone_size != 0) - gcc_unreachable (); - - ix86_output_indirect_branch (call_op, "%0", true); -@@ -28081,6 +28098,86 @@ ix86_output_function_return (bool long_p) - return "rep%; ret"; - } - -+/* Output indirect function return. RET_OP is the function return -+ target. */ -+ -+const char * -+ix86_output_indirect_function_return (rtx ret_op) -+{ -+ if (cfun->machine->function_return_type != indirect_branch_keep) -+ { -+ char thunk_name[32]; -+ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); -+ unsigned int regno = REGNO (ret_op); -+ gcc_assert (regno == CX_REG); -+ -+ if (cfun->machine->function_return_type -+ != indirect_branch_thunk_inline) -+ { -+ bool need_thunk = (cfun->machine->function_return_type -+ == indirect_branch_thunk); -+ indirect_thunk_name (thunk_name, regno, need_bnd_p, true); -+ if (need_bnd_p) -+ { -+ if (need_thunk) -+ { -+ indirect_return_via_cx_bnd = true; -+ indirect_thunks_bnd_used |= 1 << CX_REG; -+ } -+ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); -+ } -+ else -+ { -+ if (need_thunk) -+ { -+ indirect_return_via_cx = true; -+ indirect_thunks_used |= 1 << CX_REG; -+ } -+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); -+ } -+ } -+ else -+ output_indirect_thunk (need_bnd_p, regno); -+ -+ return ""; -+ } -+ else -+ return "%!jmp\t%A0"; -+} -+ -+/* Split simple return with popping POPC bytes from stack to indirect -+ branch with stack adjustment . */ -+ -+void -+ix86_split_simple_return_pop_internal (rtx popc) -+{ -+ struct machine_function *m = cfun->machine; -+ rtx ecx = gen_rtx_REG (SImode, CX_REG); -+ rtx_insn *insn; -+ -+ /* There is no "pascal" calling convention in any 64bit ABI. */ -+ gcc_assert (!TARGET_64BIT); -+ -+ insn = emit_insn (gen_pop (ecx)); -+ m->fs.cfa_offset -= UNITS_PER_WORD; -+ m->fs.sp_offset -= UNITS_PER_WORD; -+ -+ rtx x = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD); -+ x = gen_rtx_SET (stack_pointer_rtx, x); -+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x); -+ add_reg_note (insn, REG_CFA_REGISTER, gen_rtx_SET (ecx, pc_rtx)); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ -+ x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, popc); -+ x = gen_rtx_SET (stack_pointer_rtx, x); -+ insn = emit_insn (x); -+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ -+ /* Now return address is in ECX. */ -+ emit_jump_insn (gen_simple_return_indirect_internal (ecx)); -+} -+ - /* Output the assembly for a call instruction. */ - - const char * -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 05a88fff356..857466a6361 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11813,7 +11813,7 @@ - (define_insn "*indirect_jump" - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))] - "" -- "* return ix86_output_indirect_jmp (operands[0], false);" -+ "* return ix86_output_indirect_jmp (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -@@ -11868,7 +11868,7 @@ - [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw")) - (use (label_ref (match_operand 1)))] - "" -- "* return ix86_output_indirect_jmp (operands[0], false);" -+ "* return ix86_output_indirect_jmp (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -@@ -12520,11 +12520,14 @@ - (set_attr "prefix_rep" "1") - (set_attr "modrm" "0")]) - --(define_insn "simple_return_pop_internal" -+(define_insn_and_split "simple_return_pop_internal" - [(simple_return) - (use (match_operand:SI 0 "const_int_operand"))] - "reload_completed" - "%!ret\t%0" -+ "&& cfun->machine->function_return_type != indirect_branch_keep" -+ [(const_int 0)] -+ "ix86_split_simple_return_pop_internal (operands[0]); DONE;" - [(set_attr "length" "3") - (set_attr "atom_unit" "jeu") - (set_attr "length_immediate" "2") -@@ -12535,7 +12538,7 @@ - [(simple_return) - (use (match_operand:SI 0 "register_operand" "r"))] - "reload_completed" -- "* return ix86_output_indirect_jmp (operands[0], true);" -+ "* return ix86_output_indirect_function_return (operands[0]);" - [(set (attr "type") - (if_then_else (match_test "(cfun->machine->indirect_branch_type - != indirect_branch_keep)") -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-22.c b/gcc/testsuite/gcc.target/i386/ret-thunk-22.c -new file mode 100644 -index 00000000000..89e086de97b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-22.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-23.c b/gcc/testsuite/gcc.target/i386/ret-thunk-23.c -new file mode 100644 -index 00000000000..43f0ccaa854 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-23.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not {\tpause} } } */ -+/* { dg-final { scan-assembler-not {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-24.c b/gcc/testsuite/gcc.target/i386/ret-thunk-24.c -new file mode 100644 -index 00000000000..8729e35147e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-24.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-25.c b/gcc/testsuite/gcc.target/i386/ret-thunk-25.c -new file mode 100644 -index 00000000000..f73553c9a9f ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-25.c -@@ -0,0 +1,15 @@ -+/* PR target/r84530 */ -+/* { dg-do compile { target ia32 } } */ -+/* { dg-options "-O2 -mfunction-return=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ -+ -+struct s { _Complex unsigned short x; }; -+struct s gs = { 100 + 200i }; -+struct s __attribute__((noinline)) foo (void) { return gs; } -+ -+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */ -+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_bnd_ecx" } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler {\tpause} } } */ -+/* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-26.c b/gcc/testsuite/gcc.target/i386/ret-thunk-26.c -new file mode 100644 -index 00000000000..9144e988735 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-26.c -@@ -0,0 +1,40 @@ -+/* PR target/r84530 */ -+/* { dg-do run } */ -+/* { dg-options "-Os -mfunction-return=thunk" } */ -+ -+struct S { int i; }; -+__attribute__((const, noinline, noclone)) -+struct S foo (int x) -+{ -+ struct S s; -+ s.i = x; -+ return s; -+} -+ -+int a[2048], b[2048], c[2048], d[2048]; -+struct S e[2048]; -+ -+__attribute__((noinline, noclone)) void -+bar (void) -+{ -+ int i; -+ for (i = 0; i < 1024; i++) -+ { -+ e[i] = foo (i); -+ a[i+2] = a[i] + a[i+1]; -+ b[10] = b[10] + i; -+ c[i] = c[2047 - i]; -+ d[i] = d[i + 1]; -+ } -+} -+ -+int -+main () -+{ -+ int i; -+ bar (); -+ for (i = 0; i < 1024; i++) -+ if (e[i].i != i) -+ __builtin_abort (); -+ return 0; -+} --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch b/aports/cross/gcc-x86_64/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch deleted file mode 100644 index 1bd6134c..00000000 --- a/aports/cross/gcc-x86_64/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch +++ /dev/null @@ -1,1003 +0,0 @@ -From a34d0b92e2c81792bd1f27e872c4c97a2df6861c Mon Sep 17 00:00:00 2001 -From: hjl -Date: Mon, 26 Feb 2018 17:00:46 +0000 -Subject: [PATCH 12/13] i386: Add TARGET_INDIRECT_BRANCH_REGISTER - -For - ---- -struct C { - virtual ~C(); - virtual void f(); -}; - -void -f (C *p) -{ - p->f(); - p->f(); -} ---- - --mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates: - -_Z1fP1C: -.LFB0: - .cfi_startproc - pushq %rbx - .cfi_def_cfa_offset 16 - .cfi_offset 3, -16 - movq (%rdi), %rax - movq %rdi, %rbx - jmp .LIND1 -.LIND0: - pushq 16(%rax) - jmp __x86_indirect_thunk -.LIND1: - call .LIND0 - movq (%rbx), %rax - movq %rbx, %rdi - popq %rbx - .cfi_def_cfa_offset 8 - movq 16(%rax), %rax - jmp __x86_indirect_thunk_rax - .cfi_endproc - -x86-64 is supposed to have asynchronous unwind tables by default, but -there is nothing that reflects the change in the (relative) frame -address after .LIND0. That region really has to be moved outside of -the .cfi_startproc/.cfi_endproc bracket. - -This patch adds TARGET_INDIRECT_BRANCH_REGISTER to force indirect -branch via register whenever -mindirect-branch= is used. Now, --mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates: - -_Z1fP1C: -.LFB0: - .cfi_startproc - pushq %rbx - .cfi_def_cfa_offset 16 - .cfi_offset 3, -16 - movq (%rdi), %rax - movq %rdi, %rbx - movq 16(%rax), %rax - call __x86_indirect_thunk_rax - movq (%rbx), %rax - movq %rbx, %rdi - popq %rbx - .cfi_def_cfa_offset 8 - movq 16(%rax), %rax - jmp __x86_indirect_thunk_rax - .cfi_endproc - -so that "-mindirect-branch=thunk-extern" is equivalent to -"-mindirect-branch=thunk-extern -mindirect-branch-register", which is -used by Linux kernel. - -gcc/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84039 - * config/i386/constraints.md (Bs): Replace - ix86_indirect_branch_register with - TARGET_INDIRECT_BRANCH_REGISTER. - (Bw): Likewise. - * config/i386/i386.md (indirect_jump): Likewise. - (tablejump): Likewise. - (*sibcall_memory): Likewise. - (*sibcall_value_memory): Likewise. - Peepholes of indirect call and jump via memory: Likewise. - (*sibcall_GOT_32): Disallowed for TARGET_INDIRECT_BRANCH_REGISTER. - (*sibcall_value_GOT_32): Likewise. - * config/i386/predicates.md (indirect_branch_operand): Likewise. - (GOT_memory_operand): Likewise. - (call_insn_operand): Likewise. - (sibcall_insn_operand): Likewise. - (GOT32_symbol_operand): Likewise. - * config/i386/i386.h (TARGET_INDIRECT_BRANCH_REGISTER): New. - -gcc/testsuite/ - - Backport from mainline - 2018-02-26 H.J. Lu - - PR target/84039 - * gcc.target/i386/indirect-thunk-1.c: Updated. - * gcc.target/i386/indirect-thunk-2.c: Likewise. - * gcc.target/i386/indirect-thunk-3.c: Likewise. - * gcc.target/i386/indirect-thunk-4.c: Likewise. - * gcc.target/i386/indirect-thunk-5.c: Likewise. - * gcc.target/i386/indirect-thunk-6.c: Likewise. - * gcc.target/i386/indirect-thunk-7.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. - * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. - * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. - * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. - * gcc.target/i386/ret-thunk-9.c: Likewise. - * gcc.target/i386/ret-thunk-10.c: Likewise. - * gcc.target/i386/ret-thunk-11.c: Likewise. - * gcc.target/i386/ret-thunk-12.c: Likewise. - * gcc.target/i386/ret-thunk-13.c: Likewise. - * gcc.target/i386/ret-thunk-14.c: Likewise. - * gcc.target/i386/ret-thunk-15.c: Likewise. ---- - gcc/config/i386/constraints.md | 4 ++-- - gcc/config/i386/i386.h | 5 ++++ - gcc/config/i386/i386.md | 28 +++++++++++++--------- - gcc/config/i386/predicates.md | 6 ++--- - gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 5 ++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 6 +++-- - gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 12 ++++++---- - gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-1.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-2.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-attr-3.c | 3 +-- - .../gcc.target/i386/indirect-thunk-attr-4.c | 3 +-- - .../gcc.target/i386/indirect-thunk-attr-5.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-attr-6.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-attr-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-bnd-1.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-bnd-2.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-bnd-3.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-bnd-4.c | 7 +++--- - .../gcc.target/i386/indirect-thunk-extern-1.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-extern-2.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-extern-3.c | 9 ++++--- - .../gcc.target/i386/indirect-thunk-extern-4.c | 6 ++--- - .../gcc.target/i386/indirect-thunk-extern-5.c | 6 +++-- - .../gcc.target/i386/indirect-thunk-extern-6.c | 8 +++---- - .../gcc.target/i386/indirect-thunk-extern-7.c | 5 ++-- - .../gcc.target/i386/indirect-thunk-inline-1.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-2.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-3.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-4.c | 2 +- - .../gcc.target/i386/indirect-thunk-inline-5.c | 3 ++- - .../gcc.target/i386/indirect-thunk-inline-6.c | 3 ++- - .../gcc.target/i386/indirect-thunk-inline-7.c | 4 ++-- - gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 9 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 9 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 8 +++---- - gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 5 ++-- - gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 7 +++--- - gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 7 +++--- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 13 ++++------ - 43 files changed, 128 insertions(+), 141 deletions(-) - -diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md -index 9204c8e8487..ef684a95497 100644 ---- a/gcc/config/i386/constraints.md -+++ b/gcc/config/i386/constraints.md -@@ -172,7 +172,7 @@ - - (define_constraint "Bs" - "@internal Sibcall memory operand." -- (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -@@ -180,7 +180,7 @@ - - (define_constraint "Bw" - "@internal Call memory operand." -- (ior (and (not (match_test "ix86_indirect_branch_register")) -+ (ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index b34bc117c34..1816d710f4e 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2676,6 +2676,11 @@ extern void debug_dispatch_window (int); - #define TARGET_RECIP_VEC_DIV ((recip_mask & RECIP_MASK_VEC_DIV) != 0) - #define TARGET_RECIP_VEC_SQRT ((recip_mask & RECIP_MASK_VEC_SQRT) != 0) - -+ -+#define TARGET_INDIRECT_BRANCH_REGISTER \ -+ (ix86_indirect_branch_register \ -+ || cfun->machine->indirect_branch_type != indirect_branch_keep) -+ - #define IX86_HLE_ACQUIRE (1 << 16) - #define IX86_HLE_RELEASE (1 << 17) - -diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md -index 857466a6361..6a6dc26799c 100644 ---- a/gcc/config/i386/i386.md -+++ b/gcc/config/i386/i386.md -@@ -11805,7 +11805,7 @@ - [(set (pc) (match_operand 0 "indirect_branch_operand"))] - "" - { -- if (TARGET_X32 || ix86_indirect_branch_register) -+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -11859,7 +11859,7 @@ - OPTAB_DIRECT); - } - -- if (TARGET_X32 || ix86_indirect_branch_register) -+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER) - operands[0] = convert_memory_address (word_mode, operands[0]); - cfun->machine->has_local_indirect_jump = true; - }) -@@ -12029,7 +12029,10 @@ - (match_operand:SI 0 "register_no_elim_operand" "U") - (match_operand:SI 1 "GOT32_symbol_operand")))) - (match_operand 2))] -- "!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)" -+ "!TARGET_MACHO -+ && !TARGET_64BIT -+ && !TARGET_INDIRECT_BRANCH_REGISTER -+ && SIBLING_CALL_P (insn)" - { - rtx fnaddr = gen_rtx_PLUS (Pmode, operands[0], operands[1]); - fnaddr = gen_const_mem (Pmode, fnaddr); -@@ -12048,7 +12051,7 @@ - [(call (mem:QI (match_operand:W 0 "memory_operand" "m")) - (match_operand 1)) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32 && !ix86_indirect_branch_register" -+ "!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER" - "* return ix86_output_call_insn (insn, operands[0]);" - [(set_attr "type" "call")]) - -@@ -12058,7 +12061,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" -@@ -12073,7 +12076,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" -@@ -12171,7 +12174,7 @@ - (match_operand:W 1 "memory_operand")) - (set (pc) (match_dup 0))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && peep2_reg_dead_p (2, operands[0])" - [(set (pc) (match_dup 1))]) - -@@ -12229,7 +12232,10 @@ - (match_operand:SI 1 "register_no_elim_operand" "U") - (match_operand:SI 2 "GOT32_symbol_operand")))) - (match_operand 3)))] -- "!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)" -+ "!TARGET_MACHO -+ && !TARGET_64BIT -+ && !TARGET_INDIRECT_BRANCH_REGISTER -+ && SIBLING_CALL_P (insn)" - { - rtx fnaddr = gen_rtx_PLUS (Pmode, operands[1], operands[2]); - fnaddr = gen_const_mem (Pmode, fnaddr); -@@ -12250,7 +12256,7 @@ - (call (mem:QI (match_operand:W 1 "memory_operand" "m")) - (match_operand 2))) - (unspec [(const_int 0)] UNSPEC_PEEPSIB)] -- "!TARGET_X32 && !ix86_indirect_branch_register" -+ "!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER" - "* return ix86_output_call_insn (insn, operands[1]);" - [(set_attr "type" "callv")]) - -@@ -12261,7 +12267,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3)))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (1)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))" -@@ -12278,7 +12284,7 @@ - (call (mem:QI (match_dup 0)) - (match_operand 3)))] - "!TARGET_X32 -- && !ix86_indirect_branch_register -+ && !TARGET_INDIRECT_BRANCH_REGISTER - && SIBLING_CALL_P (peep2_next_insn (2)) - && !reg_mentioned_p (operands[0], - CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))" -diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md -index d1f0a7dbf61..5f8a98faead 100644 ---- a/gcc/config/i386/predicates.md -+++ b/gcc/config/i386/predicates.md -@@ -593,7 +593,7 @@ - ;; Test for a valid operand for indirect branch. - (define_predicate "indirect_branch_operand" - (ior (match_operand 0 "register_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")))) - -@@ -637,7 +637,7 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "call_register_no_elim_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (ior (and (not (match_test "TARGET_X32")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -@@ -648,7 +648,7 @@ - (ior (match_test "constant_call_address_operand - (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "register_no_elim_operand") -- (and (not (match_test "ix86_indirect_branch_register")) -+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER")) - (ior (and (not (match_test "TARGET_X32")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode") -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -index 60d09881a99..6e94d2c4865 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -index aac75163794..3c467078964 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -index 9e24a385387..2c7fb52b59d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -index 127b5d94523..0d3f895009d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -index fcaa18d10b7..fb26c005e80 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c -@@ -9,8 +9,10 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -index e4649283d10..aa03fbd8446 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c -@@ -10,9 +10,13 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 { target x32 } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -index 17c2d0faf88..3c72036dbaf 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c -@@ -35,9 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -index 9194ccf3cbc..7106407b83d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c -@@ -14,9 +14,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -index e51f261a612..27c7e5b029b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -index 4aeec1833cd..89a2bac8403 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c -@@ -14,10 +14,9 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ - /* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -index ac0e5999f63..3eb83c3779a 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c -@@ -13,10 +13,9 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ - /* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -index 573cf1ef09e..0098dd1133d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c -@@ -14,9 +14,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -index b2b37fc6e2e..ece8de15a4b 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c -@@ -13,9 +13,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -index 4a43e199931..d53fc887dcc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c -@@ -36,9 +36,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -index ac84ab623fa..73d16baddc7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c -@@ -10,9 +10,9 @@ foo (void) - dispatch (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -index ce655e8be1c..856751ac224 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c -@@ -11,10 +11,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -index d34485a0010..42312f65588 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c -@@ -10,8 +10,9 @@ foo (void) - bar (buf); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -index 0e19830de4d..c8ca102c8df 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c -@@ -11,10 +11,9 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 2 } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 1 } } */ - /* { dg-final { scan-assembler "bnd ret" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ - /* { dg-final { scan-assembler {\tlfence} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -index 579441f250e..c09dd0afd2d 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -index c92e6f2b02d..826425a5115 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c -@@ -11,9 +11,8 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -index d9964c25bbd..385626850a2 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c -@@ -12,9 +12,8 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -index d4dca4dc5fe..1ae49b137ca 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c -@@ -12,9 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -index 5c07e02df6a..53282390977 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c -@@ -9,8 +9,10 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -index 3eb440693a0..8ae43482d0c 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c -@@ -10,8 +10,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ --/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 } } */ --/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -index aece9383697..2b9a33e93dc 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c -@@ -35,9 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ - /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -index 3aba5e8c81f..869d9040838 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch(offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -index 0f0181d6672..c5c16ed8bd8 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c -@@ -11,7 +11,7 @@ male_indirect_jump (long offset) - dispatch[offset](offset); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -index 2eef6f35a75..4a63ebed8ab 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -index e825a10f14c..a395ffca018 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c -@@ -12,7 +12,7 @@ male_indirect_jump (long offset) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -index c6d77e10352..21cbfd39582 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c -@@ -9,7 +9,8 @@ foo (void) - bar (); - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -index 6454827b780..d1300f18dc7 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c -@@ -10,7 +10,8 @@ foo (void) - return 0; - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */ -+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -index c67066cf197..ea009245a58 100644 ---- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c -@@ -35,8 +35,8 @@ bar (int i) - } - } - --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%(r|e)ax" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler {\tpause} } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -index e6fea84a4d9..af9023af613 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c -@@ -15,9 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -index e239ec4542f..ba467c59b36 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c -@@ -15,9 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -index fa3181303c9..43e57cac2c3 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c -@@ -15,8 +15,6 @@ foo (void) - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -index fd5b41fdd3f..55f156c4376 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c -@@ -14,9 +14,8 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ - /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */ - /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */ - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */ --/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -index d606373ead1..1c790436a53 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c -@@ -16,7 +16,6 @@ foo (void) - /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -index 75e45e226b8..58aba319cba 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c -@@ -16,7 +16,6 @@ foo (void) - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler-times {\tpause} 1 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index d1db41cc128..d2df8b874e0 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -14,11 +14,8 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ --/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */ --/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ --/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ --/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */ --/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */ --/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ --/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ -+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ -+/* { dg-final { scan-assembler-times {\tpause} 2 } } */ -+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ -+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ -+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch b/aports/cross/gcc-x86_64/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch deleted file mode 100644 index d846ac77..00000000 --- a/aports/cross/gcc-x86_64/0013-i386-Don-t-generate-alias-for-function-return-thunk.patch +++ /dev/null @@ -1,225 +0,0 @@ -From e7fbaebc8ff650df76f43e92cb9ca59d5174ebe7 Mon Sep 17 00:00:00 2001 -From: hjl -Date: Thu, 15 Mar 2018 17:54:40 +0000 -Subject: [PATCH 13/13] i386: Don't generate alias for function return thunk - -Function return thunks shouldn't be aliased to indirect branch thunks -since indirect branch thunks are placed in COMDAT section and a COMDAT -section with indirect branch may not have function return thunk. This -patch generates function return thunks directly. - -gcc/ - - Backport from mainline - PR target/84574 - * config/i386/i386.c (indirect_thunk_needed): Update comments. - (indirect_thunk_bnd_needed): Likewise. - (indirect_thunks_used): Likewise. - (indirect_thunks_bnd_used): Likewise. - (indirect_return_needed): New. - (indirect_return_bnd_needed): Likewise. - (output_indirect_thunk_function): Add a bool argument for - function return. - (output_indirect_thunk_function): Don't generate alias for - function return thunk. - (ix86_code_end): Call output_indirect_thunk_function to generate - function return thunks. - (ix86_output_function_return): Set indirect_return_bnd_needed - and indirect_return_needed instead of indirect_thunk_bnd_needed - and indirect_thunk_needed. - -gcc/testsuite/ - - Backport from mainline - PR target/84574 - * gcc.target/i386/ret-thunk-9.c: Expect __x86_return_thunk - label instead of __x86_indirect_thunk label. ---- - gcc/config/i386/i386.c | 92 ++++++++++------------------- - gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 2 +- - 2 files changed, 33 insertions(+), 61 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 21c3c18bd3c..f4cd1c6f4e9 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -11067,19 +11067,23 @@ ix86_setup_frame_addresses (void) - labels in call and return thunks. */ - static int indirectlabelno; - --/* True if call and return thunk functions are needed. */ -+/* True if call thunk function is needed. */ - static bool indirect_thunk_needed = false; --/* True if call and return thunk functions with the BND prefix are -- needed. */ -+/* True if call thunk function with the BND prefix is needed. */ - static bool indirect_thunk_bnd_needed = false; - - /* Bit masks of integer registers, which contain branch target, used -- by call and return thunks functions. */ -+ by call thunk functions. */ - static int indirect_thunks_used; - /* Bit masks of integer registers, which contain branch target, used -- by call and return thunks functions with the BND prefix. */ -+ by call thunk functions with the BND prefix. */ - static int indirect_thunks_bnd_used; - -+/* True if return thunk function is needed. */ -+static bool indirect_return_needed = false; -+/* True if return thunk function with the BND prefix is needed. */ -+static bool indirect_return_bnd_needed = false; -+ - /* True if return thunk function via CX is needed. */ - static bool indirect_return_via_cx; - /* True if return thunk function via CX with the BND prefix is -@@ -11226,16 +11230,18 @@ output_indirect_thunk (bool need_bnd_p, unsigned int regno) - /* Output a funtion with a call and return thunk for indirect branch. - If BND_P is true, the BND prefix is needed. If REGNO != INVALID_REGNUM, - the function address is in REGNO. Otherwise, the function address is -- on the top of stack. */ -+ on the top of stack. Thunk is used for function return if RET_P is -+ true. */ - - static void --output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) -+output_indirect_thunk_function (bool need_bnd_p, unsigned int regno, -+ bool ret_p) - { - char name[32]; - tree decl; - - /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ -- indirect_thunk_name (name, regno, need_bnd_p, false); -+ indirect_thunk_name (name, regno, need_bnd_p, ret_p); - decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, - get_identifier (name), - build_function_type_list (void_type_node, NULL_TREE)); -@@ -11278,50 +11284,6 @@ output_indirect_thunk_function (bool need_bnd_p, unsigned int regno) - ASM_OUTPUT_LABEL (asm_out_file, name); - } - -- /* Create alias for __x86_return_thunk/__x86_return_thunk_bnd or -- __x86_return_thunk_ecx/__x86_return_thunk_ecx_bnd. */ -- bool need_alias; -- if (regno == INVALID_REGNUM) -- need_alias = true; -- else if (regno == CX_REG) -- { -- if (need_bnd_p) -- need_alias = indirect_return_via_cx_bnd; -- else -- need_alias = indirect_return_via_cx; -- } -- else -- need_alias = false; -- -- if (need_alias) -- { -- char alias[32]; -- -- indirect_thunk_name (alias, regno, need_bnd_p, true); --#if TARGET_MACHO -- if (TARGET_MACHO) -- { -- fputs ("\t.weak_definition\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- fputs ("\n\t.private_extern\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- ASM_OUTPUT_LABEL (asm_out_file, alias); -- } --#else -- ASM_OUTPUT_DEF (asm_out_file, alias, name); -- if (USE_HIDDEN_LINKONCE) -- { -- fputs ("\t.globl\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- fputs ("\t.hidden\t", asm_out_file); -- assemble_name (asm_out_file, alias); -- putc ('\n', asm_out_file); -- } --#endif -- } -- - DECL_INITIAL (decl) = make_node (BLOCK); - current_function_decl = decl; - allocate_struct_function (decl, false); -@@ -11368,19 +11330,29 @@ ix86_code_end (void) - rtx xops[2]; - unsigned int regno; - -+ if (indirect_return_needed) -+ output_indirect_thunk_function (false, INVALID_REGNUM, true); -+ if (indirect_return_bnd_needed) -+ output_indirect_thunk_function (true, INVALID_REGNUM, true); -+ -+ if (indirect_return_via_cx) -+ output_indirect_thunk_function (false, CX_REG, true); -+ if (indirect_return_via_cx_bnd) -+ output_indirect_thunk_function (true, CX_REG, true); -+ - if (indirect_thunk_needed) -- output_indirect_thunk_function (false, INVALID_REGNUM); -+ output_indirect_thunk_function (false, INVALID_REGNUM, false); - if (indirect_thunk_bnd_needed) -- output_indirect_thunk_function (true, INVALID_REGNUM); -+ output_indirect_thunk_function (true, INVALID_REGNUM, false); - - for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) - { - unsigned int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; - if ((indirect_thunks_used & (1 << i))) -- output_indirect_thunk_function (false, regno); -+ output_indirect_thunk_function (false, regno, false); - - if ((indirect_thunks_bnd_used & (1 << i))) -- output_indirect_thunk_function (true, regno); -+ output_indirect_thunk_function (true, regno, false); - } - - for (regno = AX_REG; regno <= SP_REG; regno++) -@@ -11389,10 +11361,10 @@ ix86_code_end (void) - tree decl; - - if ((indirect_thunks_used & (1 << regno))) -- output_indirect_thunk_function (false, regno); -+ output_indirect_thunk_function (false, regno, false); - - if ((indirect_thunks_bnd_used & (1 << regno))) -- output_indirect_thunk_function (true, regno); -+ output_indirect_thunk_function (true, regno, false); - - if (!(pic_labels_used & (1 << regno))) - continue; -@@ -28077,12 +28049,12 @@ ix86_output_function_return (bool long_p) - true); - if (need_bnd_p) - { -- indirect_thunk_bnd_needed |= need_thunk; -+ indirect_return_bnd_needed |= need_thunk; - fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); - } - else - { -- indirect_thunk_needed |= need_thunk; -+ indirect_return_needed |= need_thunk; - fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); - } - } -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -index d2df8b874e0..eee230ca2f6 100644 ---- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c -@@ -13,7 +13,7 @@ foo (void) - /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ - /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ - /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ --/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ -+/* { dg-final { scan-assembler "__x86_return_thunk:" } } */ - /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */ - /* { dg-final { scan-assembler-times {\tpause} 2 } } */ - /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ --- -2.16.3 - diff --git a/aports/cross/gcc-x86_64/001_all_default-ssp-strong.patch b/aports/cross/gcc-x86_64/001_all_default-ssp-strong.patch deleted file mode 100644 index 95949eb0..00000000 --- a/aports/cross/gcc-x86_64/001_all_default-ssp-strong.patch +++ /dev/null @@ -1,215 +0,0 @@ -# DP: Turn on -fstack-protector by default for C, C++, ObjC, ObjC++. -# DP: Build libgcc using -fno-stack-protector. - ---- - gcc/Makefile.in | 2 ++ - gcc/cp/lang-specs.h | 6 +++--- - gcc/doc/invoke.texi | 4 ++++ - gcc/gcc.c | 18 ++++++++++++++---- - gcc/objc/lang-specs.h | 10 +++++----- - gcc/objcp/lang-specs.h | 8 ++++---- - 6 files changed, 32 insertions(+), 16 deletions(-) - -Index: b/gcc/gcc.c -=================================================================== ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -858,6 +858,14 @@ proper position among the other output f - #define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G" - #endif - -+#ifndef SSP_DEFAULT_SPEC -+#ifdef TARGET_LIBC_PROVIDES_SSP -+#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!ffreestanding:%{!nostdlib:%{!fstack-protector:-fstack-protector-strong}}}}}" -+#else -+#define SSP_DEFAULT_SPEC "" -+#endif -+#endif -+ - #ifndef LINK_SSP_SPEC - #ifdef TARGET_LIBC_PROVIDES_SSP - #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ -@@ -1057,6 +1065,7 @@ static const char *cc1_spec = CC1_SPEC; - static const char *cc1plus_spec = CC1PLUS_SPEC; - static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC; - static const char *link_ssp_spec = LINK_SSP_SPEC; -+static const char *ssp_default_spec = SSP_DEFAULT_SPEC; - static const char *asm_spec = ASM_SPEC; - static const char *asm_final_spec = ASM_FINAL_SPEC; - static const char *link_spec = LINK_SPEC; -@@ -1112,7 +1121,7 @@ static const char *cpp_unique_options = - static const char *cpp_options = - "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\ - %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\ -- %{undef} %{save-temps*:-fpch-preprocess}"; -+ %{undef} %{save-temps*:-fpch-preprocess} %(ssp_default)"; - - /* This contains cpp options which are not passed when the preprocessor - output will be used by another program. */ -@@ -1301,9 +1310,9 @@ static const struct compiler default_com - %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \ - %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\ - cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \ -- %(cc1_options)}\ -+ %(cc1_options) %(ssp_default)}\ - %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\ -- cc1 %(cpp_unique_options) %(cc1_options)}}}\ -+ cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 1}, - {"-", - "%{!E:%e-E or -x required when input is from standard input}\ -@@ -1328,7 +1337,7 @@ static const struct compiler default_com - %W{o*:--output-pch=%*}}%V}}}}}}}", 0, 0, 0}, - {".i", "@cpp-output", 0, 0, 0}, - {"@cpp-output", -- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -+ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(ssp_default) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {".s", "@assembler", 0, 0, 0}, - {"@assembler", - "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0}, -@@ -1560,6 +1569,7 @@ static struct spec_list static_specs[] = - INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec), - INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec), - INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec), -+ INIT_STATIC_SPEC ("ssp_default", &ssp_default_spec), - INIT_STATIC_SPEC ("endfile", &endfile_spec), - INIT_STATIC_SPEC ("link", &link_spec), - INIT_STATIC_SPEC ("lib", &lib_spec), -Index: b/gcc/cp/lang-specs.h -=================================================================== ---- a/gcc/cp/lang-specs.h -+++ b/gcc/cp/lang-specs.h -@@ -46,7 +46,7 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\ - cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:-o %g.s \ - %{!fdump-ada-spec*:%{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}}%V}}}}", -@@ -58,11 +58,11 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\ - cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {".ii", "@c++-cpp-output", 0, 0, 0}, - {"@c++-cpp-output", - "%{!M:%{!MM:%{!E:\ -- cc1plus -fpreprocessed %i %(cc1_options) %2\ -+ cc1plus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/params.def -=================================================================== ---- a/gcc/params.def -+++ b/gcc/params.def -@@ -673,7 +673,7 @@ DEFPARAM (PARAM_INTEGER_SHARE_LIMIT, - DEFPARAM (PARAM_SSP_BUFFER_SIZE, - "ssp-buffer-size", - "The lower bound for a buffer to be considered for stack smashing protection.", -- 8, 1, 0) -+ 4, 1, 0) - - DEFPARAM (PARAM_MIN_SIZE_FOR_STACK_SHARING, - "min-size-for-stack-sharing", -Index: b/gcc/objc/lang-specs.h -=================================================================== ---- a/gcc/objc/lang-specs.h -+++ b/gcc/objc/lang-specs.h -@@ -29,9 +29,9 @@ along with GCC; see the file COPYING3. - %{traditional|traditional-cpp:\ - %eGNU Objective C no longer supports traditional compilation}\ - %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\ -- cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\ -+ cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}\ - %{!save-temps*:%{!no-integrated-cpp:\ -- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\ -+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objective-c-header", - "%{E|M|MM:cc1obj -E %{traditional|traditional-cpp:-traditional-cpp}\ -@@ -40,18 +40,18 @@ along with GCC; see the file COPYING3. - %{traditional|traditional-cpp:\ - %eGNU Objective C no longer supports traditional compilation}\ - %{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\ -- cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ cc1obj -fpreprocessed %b.mi %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - -o %g.s %{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}%V}\ - %{!save-temps*:%{!no-integrated-cpp:\ -- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - -o %g.s %{!o*:--output-pch=%i.gch}\ - %W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0}, - {".mi", "@objective-c-cpp-output", 0, 0, 0}, - {"@objective-c-cpp-output", -- "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objc-cpp-output", - "%nobjc-cpp-output is deprecated; please use objective-c-cpp-output instead\n\ -- %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\ -+ %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/objcp/lang-specs.h -=================================================================== ---- a/gcc/objcp/lang-specs.h -+++ b/gcc/objcp/lang-specs.h -@@ -36,7 +36,7 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\ - cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - -o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {"@objective-c++", -@@ -46,16 +46,16 @@ along with GCC; see the file COPYING3. - %(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\ - cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\ - %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\ -- %(cc1_options) %2\ -+ %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", - CPLUSPLUS_CPP_SPEC, 0, 0}, - {".mii", "@objective-c++-cpp-output", 0, 0, 0}, - {"@objective-c++-cpp-output", - "%{!M:%{!MM:%{!E:\ -- cc1objplus -fpreprocessed %i %(cc1_options) %2\ -+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, - {"@objc++-cpp-output", - "%nobjc++-cpp-output is deprecated; please use objective-c++-cpp-output instead\n\ - %{!M:%{!MM:%{!E:\ -- cc1objplus -fpreprocessed %i %(cc1_options) %2\ -+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\ - %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -9247,6 +9247,9 @@ - The minimum size of variables taking part in stack slot sharing when not - optimizing. The default value is 32. - -+The Alpine Linux default is "4", to increase -+the number of functions protected by the stack protector. -+ - @item max-jump-thread-duplication-stmts - Maximum number of statements allowed in a block that needs to be - duplicated when threading jumps. -@@ -10185,6 +10188,11 @@ - Like @option{-fstack-protector} but includes additional functions to - be protected --- those that have local array definitions, or have - references to local frame addresses. -+ -+NOTE: In Alpine Linux, -+@option{-fstack-protector-strong} is enabled by default for C, -+C++, ObjC, ObjC++, if none of @option{-fno-stack-protector}, -+@option{-nostdlib}, nor @option{-ffreestanding} are found. - - @item -fstack-protector-explicit - @opindex fstack-protector-explicit diff --git a/aports/cross/gcc-x86_64/002_all_default-relro.patch b/aports/cross/gcc-x86_64/002_all_default-relro.patch deleted file mode 100644 index c461017d..00000000 --- a/aports/cross/gcc-x86_64/002_all_default-relro.patch +++ /dev/null @@ -1,33 +0,0 @@ -# Turn on -Wl,-z,relro,-z,now by default. - ---- - gcc/doc/invoke.texi | 3 +++ - gcc/gcc.c | 1 + - 2 files changed, 4 insertions(+), 0 deletions(-) - -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -11424,6 +11424,9 @@ For example, @option{-Wl,-Map,output.map - linker. When using the GNU linker, you can also get the same effect with - @option{-Wl,-Map=output.map}. - -+NOTE: In Alpine Linux, for LDFLAGS, the option -+@option{-Wl,-z,relro,now} is used. To disable, use @option{-Wl,-z,norelro}. -+ - @item -u @var{symbol} - @opindex u - Pretend the symbol @var{symbol} is undefined, to force linking of -Index: b/gcc/gcc.c -=================================================================== ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -890,6 +890,7 @@ proper position among the other output f - "%{flto|flto=*:% 0 - ---- - gcc/doc/invoke.texi | 6 ++++++ - gcc/c-family/c-cppbuiltin.c | 3 + - 2 files changed, 9 insertions(+), 0 deletions(-) - -Index: b/gcc/doc/invoke.texi -=================================================================== ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -7840,6 +7840,12 @@ also turns on the following optimization - Please note the warning under @option{-fgcse} about - invoking @option{-O2} on programs that use computed gotos. - -+NOTE: In Alpine Linux, @option{-D_FORTIFY_SOURCE=2} is -+set by default, and is activated when @option{-O} is set to 2 or higher. -+This enables additional compile-time and run-time checks for several libc -+functions. To disable, specify either @option{-U_FORTIFY_SOURCE} or -+@option{-D_FORTIFY_SOURCE=0}. -+ - @item -O3 - @opindex O3 - Optimize yet more. @option{-O3} turns on all optimizations specified -Index: b/gcc/c-family/c-cppbuiltin.c -=================================================================== ---- a/gcc/c-family/c-cppbuiltin.c -+++ b/gcc/c-family/c-cppbuiltin.c -@@ -1176,6 +1176,10 @@ c_cpp_builtins (cpp_reader *pfile) - builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0); - builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0); - -+ /* Fortify Source enabled by default for optimization levels > 0 */ -+ if (optimize) -+ builtin_define_with_int_value ("_FORTIFY_SOURCE", 2); -+ - /* Misc. */ - if (flag_gnu89_inline) - cpp_define (pfile, "__GNUC_GNU_INLINE__"); diff --git a/aports/cross/gcc-x86_64/005_all_default-as-needed.patch b/aports/cross/gcc-x86_64/005_all_default-as-needed.patch deleted file mode 100644 index ee4f7962..00000000 --- a/aports/cross/gcc-x86_64/005_all_default-as-needed.patch +++ /dev/null @@ -1,241 +0,0 @@ -# DP: On linux targets pass --as-needed by default to the linker, but always -# DP: link the sanitizer libraries with --no-as-needed. - ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -568,8 +568,11 @@ proper position among the other output f - #ifdef LIBTSAN_EARLY_SPEC - #define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS - #elif defined(HAVE_LD_STATIC_DYNAMIC) --#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \ -- "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ -+#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \ -+ " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ -+ " -ltsan " \ -+ " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ -+ " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ - STATIC_LIBTSAN_LIBS - #else - #define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS ---- a/gcc/config/gnu-user.h -+++ b/gcc/config/gnu-user.h -@@ -124,13 +124,13 @@ - #define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \ - "%{static-libasan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}" -+ LD_DYNAMIC_OPTION "}}%{!static-libasan:%{!fuse-ld=gold:--push-state} --no-as-needed -lasan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #undef LIBTSAN_EARLY_SPEC - #define LIBTSAN_EARLY_SPEC "%{static-libtsan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}" -+ LD_DYNAMIC_OPTION "}}%{!static-libtsan:%{!fuse-ld=gold:--push-state} --no-as-needed -ltsan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #undef LIBLSAN_EARLY_SPEC - #define LIBLSAN_EARLY_SPEC "%{static-liblsan:%{!shared:" \ - LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \ -- LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan}" -+ LD_DYNAMIC_OPTION "}}%{!static-liblsan:%{!fuse-ld=gold:--push-state} --no-as-needed -llsan %{fuse-ld=gold:--as-needed;:--pop-state}}" - #endif -Index: b/gcc/config/aarch64/aarch64-linux.h -=================================================================== ---- a/gcc/config/aarch64/aarch64-linux.h -+++ b/gcc/config/aarch64/aarch64-linux.h -@@ -36,5 +36,6 @@ - - #define LINUX_TARGET_LINK_SPEC "%{h*} \ -+ --as-needed \ - %{static:-Bstatic} \ - %{shared:-shared} \ - %{symbolic:-Bsymbolic} \ -Index: b/gcc/config/ia64/linux.h -=================================================================== ---- a/gcc/config/ia64/linux.h -+++ b/gcc/config/ia64/linux.h -@@ -58,7 +58,7 @@ do { \ - #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2" - - #undef LINK_SPEC --#define LINK_SPEC "\ -+#define LINK_SPEC " --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/sparc/linux.h -=================================================================== ---- a/gcc/config/sparc/linux.h -+++ b/gcc/config/sparc/linux.h -@@ -86,7 +86,7 @@ extern const char *host_detect_local_cpu - #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" - - #undef LINK_SPEC --#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \ -+#define LINK_SPEC "-m elf32_sparc --as-needed %{shared:-shared} \ - %{!mno-relax:%{!r:-relax}} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/s390/linux.h -=================================================================== ---- a/gcc/config/s390/linux.h -+++ b/gcc/config/s390/linux.h -@@ -65,7 +65,7 @@ along with GCC; see the file COPYING3. - - #undef LINK_SPEC - #define LINK_SPEC \ -- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \ -+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{static:-static} \ -Index: b/gcc/config/rs6000/linux64.h -=================================================================== ---- a/gcc/config/rs6000/linux64.h -+++ b/gcc/config/rs6000/linux64.h -@@ -466,12 +466,12 @@ extern int dot_symbols; - " -m elf64ppc") - #endif - --#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \ - %(link_os_extra_spec32)" - --#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \ - %(link_os_extra_spec64)" -Index: b/gcc/config/rs6000/sysv4.h -=================================================================== ---- a/gcc/config/rs6000/sysv4.h -+++ b/gcc/config/rs6000/sysv4.h -@@ -784,7 +784,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF - CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \ - MUSL_DYNAMIC_LINKER) - --#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ -+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --as-needed %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" - -Index: b/gcc/config/i386/gnu-user64.h -=================================================================== ---- a/gcc/config/i386/gnu-user64.h -+++ b/gcc/config/i386/gnu-user64.h -@@ -57,5 +57,6 @@ see the files COPYING3 and COPYING.RUNTI - %{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \ - %{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \ -+ --as-needed \ - %{shared:-shared} \ - %{!shared: \ - %{!static: \ -Index: b/gcc/config/i386/gnu-user.h -=================================================================== ---- a/gcc/config/i386/gnu-user.h -+++ b/gcc/config/i386/gnu-user.h -@@ -74,7 +74,7 @@ along with GCC; see the file COPYING3. - { "link_emulation", GNU_USER_LINK_EMULATION },\ - { "dynamic_linker", GNU_USER_DYNAMIC_LINKER } - --#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ -+#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --as-needed %{shared:-shared} \ - %{!shared: \ - %{!static: \ - %{rdynamic:-export-dynamic} \ -Index: b/gcc/config/alpha/linux-elf.h -=================================================================== ---- a/gcc/config/alpha/linux-elf.h -+++ b/gcc/config/alpha/linux-elf.h -@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. - - #define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER - --#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ -+#define LINK_SPEC "-m elf64alpha --as-needed %{G*} %{relax:-relax} \ - %{O*:-O3} %{!O*:-O1} \ - %{shared:-shared} \ - %{!shared: \ -Index: b/gcc/config/arm/linux-elf.h -=================================================================== ---- a/gcc/config/arm/linux-elf.h -+++ b/gcc/config/arm/linux-elf.h -@@ -73,5 +73,6 @@ - %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \ - -X \ -+ --as-needed \ - %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ - SUBTARGET_EXTRA_LINK_SPEC - -Index: b/gcc/config/mips/gnu-user.h -=================================================================== ---- a/gcc/config/mips/gnu-user.h -+++ b/gcc/config/mips/gnu-user.h -@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. - #undef GNU_USER_TARGET_LINK_SPEC - #define GNU_USER_TARGET_LINK_SPEC "\ - %{G*} %{EB} %{EL} %{mips*} %{shared} \ -+ -as-needed \ - %{!shared: \ - %{!static: \ - %{rdynamic:-export-dynamic} \ -Index: b/libjava/Makefile.am -=================================================================== ---- a/libjava/Makefile.am -+++ b/libjava/Makefile.am -@@ -627,14 +631,14 @@ - rm .libs/libgcj_bc.so; \ - mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm .libs/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 - - ## This rule creates the libgcj_bc library that is actually installed. - install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp) - $(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \ -- $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -+ $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -Wl,--no-as-needed -lgcj - - ## Note that property_files is defined in sources.am. - propertyo_files = $(patsubst classpath/resource/%,%,$(addsuffix .lo,$(property_files))) -@@ -762,7 +766,7 @@ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la; - -Index: b/libjava/Makefile.in -=================================================================== ---- a/libjava/Makefile.in -+++ b/libjava/Makefile.in -@@ -10644,13 +10648,13 @@ - rm .libs/libgcj_bc.so; \ - mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ -- -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+ -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - rm .libs/libgcj_bc.so.1; \ - $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 - - install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp) - $(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \ -- $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -+ $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -Wl,--no-as-needed -lgcj - - $(propertyo_files): %.lo: classpath/resource/% - $(mkinstalldirs) `dirname $@`; \ -@@ -12494,7 +12498,7 @@ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - @USE_LIBGCJ_BC_TRUE@ mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ - @USE_LIBGCJ_BC_TRUE@ $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ --@USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ -+@USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - @USE_LIBGCJ_BC_TRUE@ $(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la; - diff --git a/aports/cross/gcc-x86_64/011_all_default-warn-format-security.patch b/aports/cross/gcc-x86_64/011_all_default-warn-format-security.patch deleted file mode 100644 index a58383a8..00000000 --- a/aports/cross/gcc-x86_64/011_all_default-warn-format-security.patch +++ /dev/null @@ -1,43 +0,0 @@ -Enable -Wformat and -Wformat-security by default. - - ---- a/gcc/c-family/c.opt -+++ b/gcc/c-family/c.opt -@@ -412,7 +412,7 @@ C ObjC C++ ObjC++ Var(warn_format_nonliteral) Warning LangEnabledBy(C ObjC C++ O - Warn about format strings that are not literals - - Wformat-security --C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) -+C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) - Warn about possible security problems with format functions - - Wformat-y2k -@@ -424,7 +424,7 @@ C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy(C ObjC C++ - Warn about zero-length formats - - Wformat= --C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) -+C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) - Warn about printf/scanf/strftime/strfmon format string anomalies - - Wignored-qualifiers ---- a/gcc/doc/gcc.info -+++ b/gcc/doc/gcc.info -@@ -3451,6 +3451,8 @@ compiler warns that an unrecognized option is present. - '-Wno-format-contains-nul', '-Wno-format-extra-args', and - '-Wno-format-zero-length'. '-Wformat' is enabled by '-Wall'. - -+ This option is enabled by default in Alpine Linux. -+ - '-Wno-format-contains-nul' - If '-Wformat' is specified, do not warn about format strings - that contain NUL bytes. -@@ -3496,6 +3498,8 @@ compiler warns that an unrecognized option is present. - future warnings may be added to '-Wformat-security' that are - not included in '-Wformat-nonliteral'.) - -+ This option is enabled by default in Alpine Linux. -+ - '-Wformat-y2k' - If '-Wformat' is specified, also warn about 'strftime' formats - that may yield only a two-digit year. diff --git a/aports/cross/gcc-x86_64/012_all_default-warn-trampolines.patch b/aports/cross/gcc-x86_64/012_all_default-warn-trampolines.patch deleted file mode 100644 index 9ab4378d..00000000 --- a/aports/cross/gcc-x86_64/012_all_default-warn-trampolines.patch +++ /dev/null @@ -1,25 +0,0 @@ -Enable -Wtrampolines by default. - - ---- a/gcc/common.opt -+++ b/gcc/common.opt -@@ -648,7 +648,7 @@ Common Var(warn_system_headers) Warning - Do not suppress warnings from system headers - - Wtrampolines --Common Var(warn_trampolines) Warning -+Common Var(warn_trampolines) Init(1) Warning - Warn whenever a trampoline is generated - - Wtype-limits ---- a/gcc/doc/gcc.info -+++ b/gcc/doc/gcc.info -@@ -4021,6 +4021,8 @@ compiler warns that an unrecognized option is present. - and thus requires the stack to be made executable in order for the - program to work properly. - -+ This warning is enabled by default in Gentoo. -+ - '-Wfloat-equal' - Warn if floating-point values are used in equality comparisons. - diff --git a/aports/cross/gcc-x86_64/020_all_msgfmt-libstdc++-link.patch b/aports/cross/gcc-x86_64/020_all_msgfmt-libstdc++-link.patch deleted file mode 100644 index a70ea50a..00000000 --- a/aports/cross/gcc-x86_64/020_all_msgfmt-libstdc++-link.patch +++ /dev/null @@ -1,39 +0,0 @@ -Ensure that msgfmt doesn't encounter problems during gcc bootstrapping. - -Solves error messages like the following: - -msgfmt: /var/tmp/portage/sys-devel/gcc-4.1.2/work/build/./gcc/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libstdc++.so.6) - -The libgcc_s.so used during build doesn't satisfy the needs of the -libstdc++.so that msgfmt is linked against. On the other hand, msgfmt -is used as a stand-alone application here, and what library it uses -behind the scenes is of no concern to the gcc build process. -Therefore, simply invoking it "as usual", i.e. without any special -library path, will make it work as expected here. - -2011-09-19 Martin von Gagern - -References: -https://bugs.gentoo.org/372377 -https://bugs.gentoo.org/295480 - ---- gcc-4.1.2.orig/libstdc++-v3/po/Makefile.am -+++ gcc-4.1.2/libstdc++-v3/po/Makefile.am -@@ -39,6 +39,7 @@ MSGFMT = msgfmt - EXTRA_DIST = string_literals.cc POTFILES.in $(PACKAGE).pot $(LOCALE_IN) - - .po.mo: -+ env --unset=LD_LIBRARY_PATH \ - $(MSGFMT) -o $@ $< - - all-local: all-local-$(USE_NLS) ---- gcc-4.1.2.orig/libstdc++-v3/po/Makefile.in -+++ gcc-4.1.2/libstdc++-v3/po/Makefile.in -@@ -419,6 +419,7 @@ uninstall-am: uninstall-info-am - - - .po.mo: -+ env --unset=LD_LIBRARY_PATH \ - $(MSGFMT) -o $@ $< - - all-local: all-local-$(USE_NLS) diff --git a/aports/cross/gcc-x86_64/050_all_libiberty-asprintf.patch b/aports/cross/gcc-x86_64/050_all_libiberty-asprintf.patch deleted file mode 100644 index bee0c4c2..00000000 --- a/aports/cross/gcc-x86_64/050_all_libiberty-asprintf.patch +++ /dev/null @@ -1,18 +0,0 @@ -2008-07-25 Magnus Granberg - - * include/libiberty.h (asprintf): Don't declare if defined as a macro - ---- a/include/libiberty.h -+++ b/include/libiberty.h -@@ -609,8 +609,11 @@ extern int pwait (int, int *, int); - /* Like sprintf but provides a pointer to malloc'd storage, which must - be freed by the caller. */ - -+/* asprintf may be declared as a macro by glibc with __USE_FORTIFY_LEVEL. */ -+#ifndef asprintf - extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; - #endif -+#endif - - #if !HAVE_DECL_VASPRINTF - /* Like vsprintf but provides a pointer to malloc'd storage, which diff --git a/aports/cross/gcc-x86_64/051_all_libiberty-pic.patch b/aports/cross/gcc-x86_64/051_all_libiberty-pic.patch deleted file mode 100644 index b6160a73..00000000 --- a/aports/cross/gcc-x86_64/051_all_libiberty-pic.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/libiberty/Makefile.in -+++ b/libiberty/Makefile.in -@@ -246,6 +246,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) - $(AR) $(AR_FLAGS) $(TARGETLIB) \ - $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \ - $(RANLIB) $(TARGETLIB); \ -+ cp $(TARGETLIB) ../ ; \ - cd ..; \ - else true; fi - diff --git a/aports/cross/gcc-x86_64/053_all_libitm-no-fortify-source.patch b/aports/cross/gcc-x86_64/053_all_libitm-no-fortify-source.patch deleted file mode 100644 index 5ab15afc..00000000 --- a/aports/cross/gcc-x86_64/053_all_libitm-no-fortify-source.patch +++ /dev/null @@ -1,27 +0,0 @@ -https://bugs.gentoo.org/508852 -https://gcc.gnu.org/PR61164 - -2014-04-27 Magnus Granberg - - #508852 - * libitm/configure.tgt: Disable FORTIFY - ---- a/libitm/configure.tgt -+++ b/libitm/configure.tgt -@@ -43,6 +43,16 @@ if test "$gcc_cv_have_tls" = yes ; then - esac - fi - -+# FIXME: error: inlining failed in call to always_inline -+# ‘int vfprintf(FILE*, const char*, __va_list_tag*)’ -+# : function body can be overwritten at link time -+# Disable Fortify in libitm for now. #508852 -+case "${target}" in -+ *-*-linux*) -+ XCFLAGS="${XCFLAGS} -U_FORTIFY_SOURCE" -+ ;; -+esac -+ - # Map the target cpu to an ARCH sub-directory. At the same time, - # work out any special compilation flags as necessary. - case "${target_cpu}" in diff --git a/aports/cross/gcc-x86_64/067_all_gcc-poison-system-directories.patch b/aports/cross/gcc-x86_64/067_all_gcc-poison-system-directories.patch deleted file mode 100644 index 10367161..00000000 --- a/aports/cross/gcc-x86_64/067_all_gcc-poison-system-directories.patch +++ /dev/null @@ -1,194 +0,0 @@ -http://cgit.openembedded.org/openembedded-core/plain/meta/recipes-devtools/gcc/gcc-6.1/0010-gcc-poison-system-directories.patch - -From d76250323dad69212c958e4857a98d99ab51a39e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Fri, 29 Mar 2013 08:59:00 +0400 -Subject: [PATCH 10/46] gcc: poison-system-directories - -Signed-off-by: Khem Raj - -Upstream-Status: Inappropriate [distribution: codesourcery] ---- - gcc/common.opt | 4 ++++ - gcc/config.in | 6 ++++++ - gcc/configure | 16 ++++++++++++++++ - gcc/configure.ac | 10 ++++++++++ - gcc/doc/invoke.texi | 9 +++++++++ - gcc/gcc.c | 2 ++ - gcc/incpath.c | 19 +++++++++++++++++++ - 7 files changed, 66 insertions(+) - -diff --git a/gcc/common.opt b/gcc/common.opt -index 67048db..733185c 100644 ---- a/gcc/common.opt -+++ b/gcc/common.opt -@@ -659,6 +659,10 @@ Wreturn-local-addr - Common Var(warn_return_local_addr) Init(1) Warning - Warn about returning a pointer/reference to a local or temporary variable. - -+Wpoison-system-directories -+Common Var(flag_poison_system_directories) Init(1) Warning -+Warn for -I and -L options using system directories if cross compiling -+ - Wshadow - Common Var(warn_shadow) Warning - Warn when one local variable shadows another. -diff --git a/gcc/config.in b/gcc/config.in -index 115cb61..105b30f 100644 ---- a/gcc/config.in -+++ b/gcc/config.in -@@ -187,6 +187,12 @@ - #endif - - -+/* Define to warn for use of native system header directories */ -+#ifndef USED_FOR_TARGET -+#undef ENABLE_POISON_SYSTEM_DIRECTORIES -+#endif -+ -+ - /* Define if you want all operations on RTL (the basic data structure of the - optimizer and back end) to be checked for dynamic type safety at runtime. - This is quite expensive. */ -diff --git a/gcc/configure b/gcc/configure -index 1c6e340..8f83152 100755 ---- a/gcc/configure -+++ b/gcc/configure -@@ -942,6 +942,7 @@ with_system_zlib - enable_maintainer_mode - enable_link_mutex - enable_version_specific_runtime_libs -+enable_poison_system_directories - enable_plugin - enable_host_shared - enable_libquadmath_support -@@ -1681,6 +1682,8 @@ Optional Features: - --enable-version-specific-runtime-libs - specify that runtime libraries should be installed - in a compiler-specific directory -+ --enable-poison-system-directories -+ warn for use of native system header directories - --enable-plugin enable plugin support - --enable-host-shared build host code as shared libraries - --disable-libquadmath-support -@@ -28908,6 +28911,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then : - fi - - -+# Check whether --enable-poison-system-directories was given. -+if test "${enable_poison_system_directories+set}" = set; then : -+ enableval=$enable_poison_system_directories; -+else -+ enable_poison_system_directories=no -+fi -+ -+if test "x${enable_poison_system_directories}" = "xyes"; then -+ -+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h -+ -+fi -+ - # Substitute configuration variables - - -diff --git a/gcc/configure.ac b/gcc/configure.ac -index 6c1dcd9..0fccaef 100644 ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -5861,6 +5861,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs, - [specify that runtime libraries should be - installed in a compiler-specific directory])]) - -+AC_ARG_ENABLE([poison-system-directories], -+ AS_HELP_STRING([--enable-poison-system-directories], -+ [warn for use of native system header directories]),, -+ [enable_poison_system_directories=no]) -+if test "x${enable_poison_system_directories}" = "xyes"; then -+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES], -+ [1], -+ [Define to warn for use of native system header directories]) -+fi -+ - # Substitute configuration variables - AC_SUBST(subdirs) - AC_SUBST(srcdir) -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 821f8fd..8bb49e7 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -284,6 +284,7 @@ Objective-C and Objective-C++ Dialects}. - -Wparentheses -Wno-pedantic-ms-format @gol - -Wplacement-new -Wplacement-new=@var{n} @gol - -Wpointer-arith -Wno-pointer-to-int-cast @gol -+-Wno-poison-system-directories @gol - -Wno-pragmas -Wredundant-decls -Wno-return-local-addr @gol - -Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar @gol - -Wshift-overflow -Wshift-overflow=@var{n} @gol -@@ -4723,6 +4724,14 @@ made up of data only and thus requires no special treatment. But, for - most targets, it is made up of code and thus requires the stack to be - made executable in order for the program to work properly. - -+@item -Wno-poison-system-directories -+@opindex Wno-poison-system-directories -+Do not warn for @option{-I} or @option{-L} options using system -+directories such as @file{/usr/include} when cross compiling. This -+option is intended for use in chroot environments when such -+directories contain the correct headers and libraries for the target -+system rather than the host. -+ - @item -Wfloat-equal - @opindex Wfloat-equal - @opindex Wno-float-equal -diff --git a/gcc/gcc.c b/gcc/gcc.c -index 1af5920..4cfef7f 100644 ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -1017,6 +1017,8 @@ proper position among the other output files. */ - "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \ - "%X %{o*} %{e*} %{N} %{n} %{r}\ - %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \ -+ %{Wno-poison-system-directories:--no-poison-system-directories} \ -+ %{Werror=poison-system-directories:--error-poison-system-directories} \ - %{static:} %{L*} %(mfwrap) %(link_libgcc) " \ - VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \ - %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\ -diff --git a/gcc/incpath.c b/gcc/incpath.c -index ea40f4a..856da41 100644 ---- a/gcc/incpath.c -+++ b/gcc/incpath.c -@@ -26,6 +26,7 @@ - #include "intl.h" - #include "incpath.h" - #include "cppdefault.h" -+#include "diagnostic-core.h" - - /* Microsoft Windows does not natively support inodes. - VMS has non-numeric inodes. */ -@@ -381,6 +382,24 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose) - } - fprintf (stderr, _("End of search list.\n")); - } -+ -+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES -+ if (flag_poison_system_directories) -+ { -+ struct cpp_dir *p; -+ -+ for (p = heads[QUOTE]; p; p = p->next) -+ { -+ if ((!strncmp (p->name, "/usr/include", 12)) -+ || (!strncmp (p->name, "/usr/local/include", 18)) -+ || (!strncmp (p->name, "/usr/X11R6/include", 18))) -+ warning (OPT_Wpoison_system_directories, -+ "include location \"%s\" is unsafe for " -+ "cross-compilation", -+ p->name); -+ } -+ } -+#endif - } - - /* Use given -I paths for #include "..." but not #include <...>, and --- -2.8.2 - diff --git a/aports/cross/gcc-x86_64/090_all_pr55930-dependency-tracking.patch b/aports/cross/gcc-x86_64/090_all_pr55930-dependency-tracking.patch deleted file mode 100644 index a8743e08..00000000 --- a/aports/cross/gcc-x86_64/090_all_pr55930-dependency-tracking.patch +++ /dev/null @@ -1,18 +0,0 @@ -libatomic build failure if configured with --disable-dependency-tracking -load_n.c:115:1: fatal error: opening dependency file .deps/load_1_.lo.Ppo: No such file or directory - -https://bugs.gentoo.org/463463 -http://gcc.gnu.org/PR55930 - ---- a/libatomic/Makefile.in -+++ b/libatomic/Makefile.in -@@ -298,7 +298,8 @@ PAT_N = $(word 2,$(PAT_SPLIT)) - PAT_S = $(word 3,$(PAT_SPLIT)) - IFUNC_DEF = -DIFUNC_ALT=$(PAT_S) - IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS)) --M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo -+@AMDEP_TRUE@M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo -+@AMDEP_FALSE@M_DEPS = - M_SIZE = -DN=$(PAT_N) - M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT)) - M_FILE = $(PAT_BASE)_n.c diff --git a/aports/cross/gcc-x86_64/201-cilkrts.patch b/aports/cross/gcc-x86_64/201-cilkrts.patch deleted file mode 100644 index 4aac10d6..00000000 --- a/aports/cross/gcc-x86_64/201-cilkrts.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 594e3c1ab576daddeb86015efc8b1677020b1878 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 24 Oct 2015 20:39:30 +0000 -Subject: [PATCH 1/6] cilkrts - ---- - libcilkrts/runtime/os-unix.c | 22 +++++++--------------- - 1 file changed, 7 insertions(+), 15 deletions(-) - -diff --git a/libcilkrts/runtime/os-unix.c b/libcilkrts/runtime/os-unix.c -index cb582dd..e43d7d5 100644 ---- a/libcilkrts/runtime/os-unix.c -+++ b/libcilkrts/runtime/os-unix.c -@@ -51,6 +51,7 @@ - #if defined __linux__ - # include - # include -+# include - #elif defined __APPLE__ - # include - // Uses sysconf(_SC_NPROCESSORS_ONLN) in verbose output -@@ -400,28 +401,19 @@ COMMON_SYSDEP void __cilkrts_sleep(void) - - COMMON_SYSDEP void __cilkrts_yield(void) - { --#if __APPLE__ || __FreeBSD__ || __VXWORKS__ -- // On MacOS, call sched_yield to yield quantum. I'm not sure why we -- // don't do this on Linux also. -- sched_yield(); --#elif defined(__DragonFly__) -- // On DragonFly BSD, call sched_yield to yield quantum. -- sched_yield(); --#elif defined(__MIC__) -+#if defined(__MIC__) - // On MIC, pthread_yield() really trashes things. Arch's measurements - // showed that calling _mm_delay_32() (or doing nothing) was a better - // option. Delaying 1024 clock cycles is a reasonable compromise between - // giving up the processor and latency starting up when work becomes - // available - _mm_delay_32(1024); --#elif defined(__ANDROID__) || (defined(__sun__) && defined(__svr4__)) -- // On Android and Solaris, call sched_yield to yield quantum. I'm not -- // sure why we don't do this on Linux also. -- sched_yield(); --#else -- // On Linux, call pthread_yield (which in turn will call sched_yield) -- // to yield quantum. -+#elif defined(__sun__) && !defined(__svr4__) -+ // On old SunOS call pthread_yield to yield a quantum. - pthread_yield(); -+#else -+ // On other platforms call sched_yield to yield a quantum. -+ sched_yield(); - #endif - } - --- -2.8.1 - diff --git a/aports/cross/gcc-x86_64/203-libgcc_s.patch b/aports/cross/gcc-x86_64/203-libgcc_s.patch deleted file mode 100644 index c74351c7..00000000 --- a/aports/cross/gcc-x86_64/203-libgcc_s.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 9e3eab51e518018d9d99b3123598b1e2322a6af3 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 24 Oct 2015 20:09:53 +0000 -Subject: [PATCH 3/6] libgcc_s - ---- - gcc/config/i386/i386.c | 4 ++-- - libgcc/config/i386/cpuinfo.c | 6 +++--- - libgcc/config/i386/t-linux | 2 +- - 3 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 3d044e8..82523e1 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -40269,10 +40269,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, - { - case IX86_BUILTIN_CPU_INIT: - { -- /* Make it call __cpu_indicator_init in libgcc. */ -+ /* Make it call __cpu_indicator_init_local in libgcc.a. */ - tree call_expr, fndecl, type; - type = build_function_type_list (integer_type_node, NULL_TREE); -- fndecl = build_fn_decl ("__cpu_indicator_init", type); -+ fndecl = build_fn_decl ("__cpu_indicator_init_local", type); - call_expr = build_call_expr (fndecl, 0); - return expand_expr (call_expr, target, mode, EXPAND_NORMAL); - } -diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c -index 8c2248d..6c82f15 100644 ---- a/libgcc/config/i386/cpuinfo.c -+++ b/libgcc/config/i386/cpuinfo.c -@@ -485,7 +485,7 @@ __cpu_indicator_init (void) - return 0; - } - --#if defined SHARED && defined USE_ELF_SYMVER --__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0"); --__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0"); -+#ifndef SHARED -+int __cpu_indicator_init_local (void) -+ __attribute__ ((weak, alias ("__cpu_indicator_init"))); - #endif -diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux -index 11bb46e..4f47f7b 100644 ---- a/libgcc/config/i386/t-linux -+++ b/libgcc/config/i386/t-linux -@@ -3,4 +3,4 @@ - # t-slibgcc-elf-ver and t-linux - SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver - --HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER -+HOST_LIBGCC2_CFLAGS += -mlong-double-80 --- -2.8.1 - diff --git a/aports/cross/gcc-x86_64/204-linux_libc_has_function.patch b/aports/cross/gcc-x86_64/204-linux_libc_has_function.patch deleted file mode 100644 index 2dcedc3a..00000000 --- a/aports/cross/gcc-x86_64/204-linux_libc_has_function.patch +++ /dev/null @@ -1,25 +0,0 @@ -From edec78452d693fb524daa9a6efd45c850b27b25c Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Fri, 6 Nov 2015 23:59:20 +0000 -Subject: [PATCH 4/6] linux_libc_has_function - ---- - gcc/config/linux.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gcc/config/linux.c b/gcc/config/linux.c -index 250296b..16c3768 100644 ---- a/gcc/config/linux.c -+++ b/gcc/config/linux.c -@@ -26,7 +26,7 @@ along with GCC; see the file COPYING3. If not see - bool - linux_libc_has_function (enum function_class fn_class) - { -- if (OPTION_GLIBC) -+ if (OPTION_GLIBC || OPTION_MUSL) - return true; - if (OPTION_BIONIC) - if (fn_class == function_c94 --- -2.8.1 - diff --git a/aports/cross/gcc-x86_64/205-nopie.patch b/aports/cross/gcc-x86_64/205-nopie.patch deleted file mode 100644 index e3da94d1..00000000 --- a/aports/cross/gcc-x86_64/205-nopie.patch +++ /dev/null @@ -1,75 +0,0 @@ -From b6015aca9c9cc83739fd0ed637a835119b2c4e34 Mon Sep 17 00:00:00 2001 -From: Szabolcs Nagy -Date: Sat, 7 Nov 2015 02:08:05 +0000 -Subject: [PATCH 5/6] nopie - ---- - gcc/configure | 27 +++++++++++++++++++++++++++ - gcc/configure.ac | 13 +++++++++++++ - 2 files changed, 40 insertions(+) - -diff --git a/gcc/configure b/gcc/configure -index 1c6e340..7e8b5d6 100755 ---- a/gcc/configure -+++ b/gcc/configure -@@ -29390,6 +29390,33 @@ fi - $as_echo "$gcc_cv_no_pie" >&6; } - if test "$gcc_cv_no_pie" = "yes"; then - NO_PIE_FLAG="-no-pie" -+else -+ # Check if -nopie works. -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -nopie option" >&5 -+$as_echo_n "checking for -nopie option... " >&6; } -+if test "${gcc_cv_nopie+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ saved_LDFLAGS="$LDFLAGS" -+ LDFLAGS="$LDFLAGS -nopie" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+int main(void) {return 0;} -+_ACEOF -+if ac_fn_cxx_try_link "$LINENO"; then : -+ gcc_cv_nopie=yes -+else -+ gcc_cv_nopie=no -+fi -+rm -f core conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+ LDFLAGS="$saved_LDFLAGS" -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_nopie" >&5 -+$as_echo "$gcc_cv_nopie" >&6; } -+ if test "$gcc_cv_nopie" = "yes"; then -+ NO_PIE_FLAG="-nopie" -+ fi - fi - - -diff --git a/gcc/configure.ac b/gcc/configure.ac -index 6c1dcd9..0ca7647 100644 ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -6098,6 +6098,19 @@ AC_CACHE_CHECK([for -no-pie option], - LDFLAGS="$saved_LDFLAGS"]) - if test "$gcc_cv_no_pie" = "yes"; then - NO_PIE_FLAG="-no-pie" -+else -+ # Check if -nopie works. -+ AC_CACHE_CHECK([for -nopie option], -+ [gcc_cv_nopie], -+ [saved_LDFLAGS="$LDFLAGS" -+ LDFLAGS="$LDFLAGS -nopie" -+ AC_LINK_IFELSE([int main(void) {return 0;}], -+ [gcc_cv_nopie=yes], -+ [gcc_cv_nopie=no]) -+ LDFLAGS="$saved_LDFLAGS"]) -+ if test "$gcc_cv_nopie" = "yes"; then -+ NO_PIE_FLAG="-nopie" -+ fi - fi - AC_SUBST([NO_PIE_FLAG]) - --- -2.8.1 - diff --git a/aports/cross/gcc-x86_64/207-static-pie.patch b/aports/cross/gcc-x86_64/207-static-pie.patch deleted file mode 100644 index 9355c584..00000000 --- a/aports/cross/gcc-x86_64/207-static-pie.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h -index b0bf40a..d4b56fe 100644 ---- a/gcc/config/gnu-user.h -+++ b/gcc/config/gnu-user.h -@@ -51,10 +51,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - #if defined HAVE_LD_PIE - #define GNU_USER_TARGET_STARTFILE_SPEC \ - "%{!shared: %{pg|p|profile:gcrt1.o%s;: \ -- %{" PIE_SPEC ":Scrt1.o%s} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -- crti.o%s %{static:crtbeginT.o%s;: %{shared:crtbeginS.o%s} \ -+ %{" PIE_SPEC ":%{static:rcrt1.o%s;:Scrt1.o%s}} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -+ crti.o%s %{shared:crtbeginS.o%s;: \ - %{" PIE_SPEC ":crtbeginS.o%s} \ -- %{" NO_PIE_SPEC ":crtbegin.o%s}} \ -+ %{" NO_PIE_SPEC ":%{static:crtbeginT.o%s;:crtbegin.o%s}}} \ - %{fvtable-verify=none:%s; \ - fvtable-verify=preinit:vtv_start_preinit.o%s; \ - fvtable-verify=std:vtv_start.o%s} \ -diff --git a/gcc/gcc.c b/gcc/gcc.c -index 0208d61..731564e 100644 ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -870,7 +870,7 @@ proper position among the other output files. */ - #endif - - #ifdef ENABLE_DEFAULT_PIE --#define NO_PIE_SPEC "no-pie|static" -+#define NO_PIE_SPEC "no-pie" - #define PIE_SPEC NO_PIE_SPEC "|r|shared:;" - #define NO_FPIE1_SPEC "fno-pie" - #define FPIE1_SPEC NO_FPIE1_SPEC ":;" -@@ -916,7 +916,7 @@ proper position among the other output files. */ - #ifndef LINK_PIE_SPEC - #ifdef HAVE_LD_PIE - #ifndef LD_PIE_SPEC --#define LD_PIE_SPEC "-pie" -+#define LD_PIE_SPEC "-pie %{static:--no-dynamic-linker -Bsymbolic}" - #endif - #else - #define LD_PIE_SPEC "" diff --git a/aports/cross/gcc-x86_64/300-main-gcc-add-musl-s390x-dynamic-linker.patch b/aports/cross/gcc-x86_64/300-main-gcc-add-musl-s390x-dynamic-linker.patch deleted file mode 100644 index 24195787..00000000 --- a/aports/cross/gcc-x86_64/300-main-gcc-add-musl-s390x-dynamic-linker.patch +++ /dev/null @@ -1,32 +0,0 @@ -From be841c16dd544553c67faac79bd4cc3cd10a1dc0 Mon Sep 17 00:00:00 2001 -From: "Tuan M. Hoang" -Date: Mon, 21 Nov 2016 01:42:16 +0700 -Subject: [PATCH] main/gcc: add musl s390x dynamic linker - ---- - gcc/config/s390/linux.h | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h -index 1e3ed35..a244214 100644 ---- a/gcc/config/s390/linux.h -+++ b/gcc/config/s390/linux.h -@@ -63,6 +63,15 @@ along with GCC; see the file COPYING3. If not see - #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1" - #define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1" - -+#undef MUSL_DYNAMIC_LINKER -+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKER32 -+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKER64 -+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-s390x.so.1" -+#undef MUSL_DYNAMIC_LINKERX32 -+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-s390x.so.1" -+ - #undef LINK_SPEC - #define LINK_SPEC \ - "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \ --- -2.10.2 - diff --git a/aports/cross/gcc-x86_64/310-build-gcj-s390x.patch b/aports/cross/gcc-x86_64/310-build-gcj-s390x.patch deleted file mode 100644 index 1e522ee1..00000000 --- a/aports/cross/gcc-x86_64/310-build-gcj-s390x.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 697a7ba791fce2ffab2ed723d909a89684019e3d Mon Sep 17 00:00:00 2001 -From: "Tuan M. Hoang" -Date: Sun, 19 Feb 2017 17:03:33 +0000 -Subject: [PATCH] main/gcc : when building gcc-java on s390x, libgcj.so - complains about undefined reference to __data_start. Using - SEARCH_FOR_DATA_START instead solved it. Credit to Andrew Haley at RedHat. - ---- - boehm-gc/include/private/gcconfig.h | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h -index 4ca6a80..a15fff6 100644 ---- a/boehm-gc/include/private/gcconfig.h -+++ b/boehm-gc/include/private/gcconfig.h -@@ -1837,8 +1837,7 @@ - # define OS_TYPE "LINUX" - # define LINUX_STACKBOTTOM - # define DYNAMIC_LOADING -- extern int __data_start[]; --# define DATASTART ((ptr_t)(__data_start)) -+# define SEARCH_FOR_DATA_START - extern int _end[]; - # define DATAEND (_end) - # define CACHE_LINE_SIZE 256 --- -2.11.1 - diff --git a/aports/cross/gcc-x86_64/320-libffi-gnulinux.patch b/aports/cross/gcc-x86_64/320-libffi-gnulinux.patch deleted file mode 100644 index b3b4fc93..00000000 --- a/aports/cross/gcc-x86_64/320-libffi-gnulinux.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/libffi/closures.c.orig b/libffi/closures.c -index 721ff00..22a699c 100644 ---- a/libffi/src/closures.c.orig -+++ b/libffi/src/closures.c -@@ -34,7 +34,7 @@ - #include - - #if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE --# if __gnu_linux__ && !defined(__ANDROID__) -+# if __linux__ && !defined(__ANDROID__) - /* This macro indicates it may be forbidden to map anonymous memory - with both write and execute permission. Code compiled when this - option is defined will attempt to map such pages once, but if it diff --git a/aports/cross/gcc-x86_64/APKBUILD b/aports/cross/gcc-x86_64/APKBUILD deleted file mode 100644 index 82c333bc..00000000 --- a/aports/cross/gcc-x86_64/APKBUILD +++ /dev/null @@ -1,717 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen gcc-x86_64 -# Based on: main/gcc - -CTARGET_ARCH=x86_64 -CTARGET="$(arch_to_hostspec ${CTARGET_ARCH})" -LANG_OBJC=false -LANG_JAVA=false -LANG_GO=false -LANG_FORTRAN=false -LANG_ADA=false -options="!strip !tracedeps" - -# abuild doesn't try to tries to install "build-base-$CTARGET_ARCH" -# when this variable matches "no*" -BOOTSTRAP="nobuildbase" - -# abuild will only cross compile when this variable is set, but it -# needs to find a valid package database in there for dependency -# resolving, so we set it to /. -CBUILDROOT="/" - -_cross_configure="--disable-bootstrap --with-sysroot=/usr/$CTARGET" - -pkgname="gcc-x86_64" -pkgver=6.4.0 -[ "$BOOTSTRAP" = "nolibc" ] && pkgname="gcc-pass2" -[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" -[ "$CHOST" != "$CTARGET" ] && _target="-$CTARGET_ARCH" || _target="" - -pkgname="gcc-x86_64" -pkgrel=8 -pkgdesc="Stage2 cross-compiler for x86_64" -url="http://gcc.gnu.org" -arch="armhf aarch64 x86" -license="GPL LGPL" -_gccrel=$pkgver-r$pkgrel -depends="isl binutils-x86_64" -makedepends_build="gcc g++ paxmark bison flex texinfo gawk zip gmp-dev mpfr-dev mpc1-dev zlib-dev" -makedepends_host="linux-headers gmp-dev mpfr-dev mpc1-dev isl-dev zlib-dev musl-dev-x86_64 binutils-x86_64" -subpackages="g++-x86_64:gpp" -[ "$CHOST" = "$CTARGET" ] && subpackages="gcc-doc$_target" -replaces="libstdc++ binutils" - -: ${LANG_CXX:=true} -: ${LANG_OBJC:=true} -: ${LANG_JAVA:=true} -: ${LANG_GO:=true} -: ${LANG_FORTRAN:=true} -: ${LANG_ADA:=true} - -LIBGOMP="false" -LIBGCC="false" -LIBATOMIC="false" -LIBITM="false" - -if [ "$CHOST" != "$CTARGET" ]; then - if [ "$BOOTSTRAP" = nolibc ]; then - LANG_CXX=false - LANG_ADA=false - LIBGCC=false - _builddir="$srcdir/build-cross-pass2" - else - _builddir="$srcdir/build-cross-final" - fi - LANG_OBJC=false - LANG_JAVA=false - LANG_GO=false - LANG_FORTRAN=false - LIBGOMP=false - LIBATOMIC=false - LIBITM=false - - # reset target flags (should be set in crosscreate abuild) - # fixup flags. seems gcc treats CPPFLAGS as global without - # _FOR_xxx variants. wrap it in CFLAGS and CXXFLAGS. - export CFLAGS="$CPPFLAGS $CFLAGS" - export CXXFLAGS="$CPPFLAGS $CXXFLAGS" - unset CPPFLAGS - export CFLAGS_FOR_TARGET=" " - export CXXFLAGS_FOR_TARGET=" " - export LDFLAGS_FOR_TARGET=" " - - STRIP_FOR_TARGET="$CTARGET-strip" -elif [ "$CBUILD" != "$CHOST" ]; then - # fixup flags. seems gcc treats CPPFLAGS as global without - # _FOR_xxx variants. wrap it in CFLAGS and CXXFLAGS. - export CFLAGS="$CPPFLAGS $CFLAGS" - export CXXFLAGS="$CPPFLAGS $CXXFLAGS" - unset CPPFLAGS - - # reset flags and cc for build - export CC_FOR_BUILD="gcc" - export CXX_FOR_BUILD="g++" - export CFLAGS_FOR_BUILD=" " - export CXXFLAGS_FOR_BUILD=" " - export LDFLAGS_FOR_BUILD=" " - export CFLAGS_FOR_TARGET=" " - export CXXFLAGS_FOR_TARGET=" " - export LDFLAGS_FOR_TARGET=" " - - # Languages that do not need bootstrapping - LANG_OBJC=false - LANG_JAVA=false - LANG_GO=false - LANG_FORTRAN=false - - STRIP_FOR_TARGET=${CROSS_COMPILE}strip - _builddir="$srcdir/build-cross-native" -else - STRIP_FOR_TARGET=${CROSS_COMPILE}strip - _builddir="$srcdir/build" -fi - -# Go needs {set,make,swap}context, unimplemented in musl -[ "$CTARGET_LIBC" = musl ] && LANG_GO=false - -# libitm has TEXTRELs in ARM build, so disable for now -case "$CTARGET_ARCH" in -arm*) LIBITM=false ;; -mips*) LIBITM=false ;; -esac - -# Fortran uses libquadmath if toolchain has __float128 -# currently on x86, x86_64 and ia64 -LIBQUADMATH=$LANG_FORTRAN -case "$CTARGET_ARCH" in -x86 | x86_64) LIBQUADMATH=$LANG_FORTRAN ;; -*) LIBQUADMATH=false ;; -esac - -# libatomic is a dependency for openvswitch -$LIBATOMIC && subpackages="$subpackages libatomic::$CTARGET_ARCH" -$LIBGCC && subpackages="$subpackages libgcc::$CTARGET_ARCH" -$LIBQUADMATH && subpackages="$subpackages libquadmath::$CTARGET_ARCH" -if $LIBGOMP; then - depends="$depends libgomp=$_gccrel" - subpackages="$subpackages libgomp::$CTARGET_ARCH" -fi - -_languages=c -if $LANG_CXX; then - _languages="$_languages,c++" -fi -if $LANG_OBJC; then - subpackages="$subpackages libobjc::$CTARGET_ARCH gcc-objc$_target:objc" - _languages="$_languages,objc" -fi -if $LANG_JAVA; then - subpackages="$subpackages libgcj::$CTARGET_ARCH gcc-java$_target:java" - _languages="$_languages,java" -fi -if $LANG_GO; then - subpackages="$subpackages libgo::$CTARGET_ARCH gcc-go$_target:go" - _languages="$_languages,go" -fi -if $LANG_FORTRAN; then - subpackages="$subpackages libgfortran::$CTARGET_ARCH gfortran$_target:gfortran" - _languages="$_languages,fortran" -fi -if $LANG_ADA; then - subpackages="$subpackages libgnat::$CTARGET_ARCH gcc-gnat$_target:gnat" - _languages="$_languages,ada" - makedepends_build="$makedepends_build gcc-gnat gcc-gnat$_cross" -fi -makedepends="$makedepends_build $makedepends_host" - -source="http://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkgbase:-$pkgver}.tar.xz - http://sourceware.org/pub/java/ecj-4.9.jar - - 001_all_default-ssp-strong.patch - 002_all_default-relro.patch - 003_all_default-fortify-source.patch - 005_all_default-as-needed.patch - 011_all_default-warn-format-security.patch - 012_all_default-warn-trampolines.patch - 020_all_msgfmt-libstdc++-link.patch - 050_all_libiberty-asprintf.patch - 051_all_libiberty-pic.patch - 053_all_libitm-no-fortify-source.patch - 067_all_gcc-poison-system-directories.patch - 090_all_pr55930-dependency-tracking.patch - - 201-cilkrts.patch - 203-libgcc_s.patch - 204-linux_libc_has_function.patch - 205-nopie.patch - 207-static-pie.patch - - libgcc-always-build-gcceh.a.patch - gcc-4.9-musl-fortify.patch - gcc-6.1-musl-libssp.patch - boehm-gc-musl.patch - gcc-pure64.patch - fix-gcj-stdgnu14-link.patch - fix-gcj-musl.patch - fix-gcj-iconv-musl.patch - - gcc-4.8-build-args.patch - fix-cxxflags-passing.patch - ada-fixes.patch - ada-shared.patch - ada-musl.patch - ada-aarch64-multiarch.patch - - 300-main-gcc-add-musl-s390x-dynamic-linker.patch - 310-build-gcj-s390x.patch - 320-libffi-gnulinux.patch - - fix-rs6000-pie.patch - fix-linux-header-use-in-libgcc.patch - gcc-pure64-mips.patch - ada-mips64.patch - - 0001-i386-Move-struct-ix86_frame-to-machine_function.patch - 0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch - 0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch - 0004-x86-Add-mindirect-branch.patch - 0005-x86-Add-mfunction-return.patch - 0006-x86-Add-mindirect-branch-register.patch - 0007-x86-Add-V-register-operand-modifier.patch - 0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch - 0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch - 0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch - 0011-i386-Update-mfunction-return-for-return-with-pop.patch - 0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch - 0013-i386-Don-t-generate-alias-for-function-return-thunk.patch - " - -# we build out-of-tree -_gccdir="$srcdir"/gcc-${_pkgbase:-$pkgver} -_gcclibdir=/usr/lib/gcc/${CTARGET}/$pkgver -_gcclibexec=/usr/libexec/gcc/${CTARGET}/$pkgver - -prepare() { - cd "$_gccdir" - - _err= - for i in $source; do - case "$i" in - *.patch) - msg "Applying $i" - patch -p1 -F3 -i "$srcdir"/$i || _err="$_err $i" - ;; - esac - done - - if [ -n "$_err" ]; then - error "The following patches failed:" - for i in $_err; do - echo " $i" - done - return 1 - fi - - # see http://gcc.gnu.org/ml/java/2008-04/msg00027.html - mv "$srcdir"/ecj-*.jar ecj.jar - - echo ${pkgver} > gcc/BASE-VER -} - -build() { - local _arch_configure= - local _libc_configure= - local _bootstrap_configure= - local _symvers= - - cd "$_gccdir" - - case "$CTARGET" in - aarch64-*-*-*) _arch_configure="--with-arch=armv8-a --with-abi=lp64";; - armv5-*-*-*eabi) _arch_configure="--with-arch=armv5te --with-tune=arm926ej-s --with-float=soft --with-abi=aapcs-linux";; - armv6-*-*-*eabihf) _arch_configure="--with-arch=armv6zk --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-abi=aapcs-linux";; - armv7-*-*-*eabihf) _arch_configure="--with-arch=armv7-a --with-tune=generic-armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-abi=aapcs-linux --with-mode=thumb";; - mips-*-*-*) _arch_configure="--with-arch=mips32 --with-mips-plt --with-float=soft --with-abi=32";; - mips64-*-*-*) _arch_configure="--with-arch=mips3 --with-tune=mips64 --with-mips-plt --with-float=soft --with-abi=64";; - mips64el-*-*-*) _arch_configure="--with-arch=mips3 --with-tune=mips64 --with-mips-plt --with-float=soft --with-abi=64";; - mipsel-*-*-*) _arch_configure="--with-arch=mips32 --with-mips-plt --with-float=soft --with-abi=32";; - powerpc-*-*-*) _arch_configure="--enable-secureplt --enable-decimal-float=no";; - powerpc64*-*-*-*) _arch_configure="--with-abi=elfv2 --enable-secureplt --enable-decimal-float=no --enable-targets=powerpcle-linux";; - i486-*-*-*) _arch_configure="--with-arch=i486 --with-tune=generic --enable-cld";; - i586-*-*-*) _arch_configure="--with-arch=i586 --with-tune=generic --enable-cld";; - s390x-*-*-*) _arch_configure="--with-arch=z196 --with-tune=zEC12 --with-zarch --with-long-double-128 --enable-decimal-float";; - esac - - case "$CTARGET_ARCH" in - mips*) _hash_style_configure="--with-linker-hash-style=sysv" ;; - *) _hash_style_configure="--with-linker-hash-style=gnu" ;; - esac - - case "$CTARGET_LIBC" in - musl) - # musl does not support mudflap, or libsanitizer - # libmpx uses secure_getenv and struct _libc_fpstate not present in musl - # alpine musl provides libssp_nonshared.a, so we don't need libssp either - _libc_configure="--disable-libssp --disable-libmpx --disable-libmudflap --disable-libsanitizer" - _symvers="--disable-symvers" - export libat_cv_have_ifunc=no - ;; - esac - - - case "$BOOTSTRAP" in - nolibc) _bootstrap_configure="--with-newlib --disable-shared --enable-threads=no" ;; - *) _bootstrap_configure="--enable-shared --enable-threads --enable-tls" ;; - esac - - $LIBGOMP || _bootstrap_configure="$_bootstrap_configure --disable-libgomp" - $LIBATOMIC || _bootstrap_configure="$_bootstrap_configure --disable-libatomic" - $LIBITM || _bootstrap_configure="$_bootstrap_configure --disable-libitm" - $LIBQUADMATH || _arch_configure="$_arch_configure --disable-libquadmath" - - msg "Building the following:" - echo "" - echo " CBUILD=$CBUILD" - echo " CHOST=$CHOST" - echo " CTARGET=$CTARGET" - echo " CTARGET_ARCH=$CTARGET_ARCH" - echo " CTARGET_LIBC=$CTARGET_LIBC" - echo " languages=$_languages" - echo " arch_configure=$_arch_configure" - echo " libc_configure=$_libc_configure" - echo " cross_configure=$_cross_configure" - echo " bootstrap_configure=$_bootstrap_configure" - echo " hash_style_configure=$_hash_style_configure" - echo "" - - mkdir -p "$_builddir" - cd "$_builddir" - "$_gccdir"/configure --prefix=/usr \ - --mandir=/usr/share/man \ - --infodir=/usr/share/info \ - --build=${CBUILD} \ - --host=${CHOST} \ - --target=${CTARGET} \ - --with-pkgversion="Alpine ${pkgver}" \ - --enable-checking=release \ - --disable-fixed-point \ - --disable-libstdcxx-pch \ - --disable-multilib \ - --disable-nls \ - --disable-werror \ - $_symvers \ - --enable-__cxa_atexit \ - --enable-default-pie \ - --enable-cloog-backend \ - --enable-languages=$_languages \ - $_arch_configure \ - $_libc_configure \ - $_cross_configure \ - $_bootstrap_configure \ - --with-system-zlib \ - $_hash_style_configure - make -} - -package() { - cd "$_builddir" - make -j1 DESTDIR="${pkgdir}" install - - ln -s gcc "$pkgdir"/usr/bin/cc - - # we dont support gcj -static - # and saving 35MB is not bad. - find "$pkgdir" -name libgcj.a -o -name libgtkpeer.a \ - -o -name libgjsmalsa.a -o -name libgcj-tools.a \ - -o -name libjvm.a -o -name libgij.a -o -name libgcj_bc.a \ - -o -name libjavamath.a \ - | xargs rm -f - - # strip debug info from some static libs - ${STRIP_FOR_TARGET} -g `find "$pkgdir" \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \ - -o -name libmudflap.a -o -name libmudflapth.a \ - -o -name libgcc.a -o -name libgcov.a -o -name libquadmath.a \ - -o -name libitm.a -o -name libgo.a -o -name libcaf\*.a \ - -o -name libatomic.a -o -name libasan.a -o -name libtsan.a \) \ - -a -type f` - - if $LANG_JAVA; then - sed -i -e 's/lib: /&%{static:%eJava programs cannot be linked statically}/' \ - "$pkgdir"/usr/lib/libgcj.spec - fi - - if $LIBGOMP; then - mv "$pkgdir"/usr/lib/libgomp.spec "$pkgdir"/$_gcclibdir - fi - if $LIBITM; then - mv "$pkgdir"/usr/lib/libitm.spec "$pkgdir"/$_gcclibdir - fi - - # remove ffi - rm -f "$pkgdir"/usr/lib/libffi* "$pkgdir"/usr/share/man/man3/ffi* - find "$pkgdir" -name 'ffi*.h' | xargs rm -f - - local gdblib=${_target:+$CTARGET/}lib - for i in $(find "$pkgdir"/usr/$gdblib/ -type f -maxdepth 1 -name "*-gdb.py" ); do - mkdir -p "$pkgdir"/usr/share/gdb/python/auto-load/usr/$gdblib - mv "$i" "$pkgdir"/usr/share/gdb/python/auto-load/usr/$gdblib/ - done - - paxmark -pmrs "$pkgdir"/$_gcclibexec/cc1 - - # move ada runtime libs - if $LANG_ADA; then - for i in $(find "$pkgdir"/$_gcclibdir/adalib/ -type f -maxdepth 1 -name "libgna*.so"); do - mv "$i" "$pkgdir"/usr/lib/ - ln -s ../../../../${i##*/} $i - done - fi - - if [ "$CHOST" != "$CTARGET" ]; then - # cross-gcc: remove any files that would conflict with the - # native gcc package - rm -rf "$pkgdir"/usr/bin/cc "$pkgdir"/usr/include "$pkgdir"/usr/share - # libcc1 does not depend on target, don't ship it - rm -rf "$pkgdir"/usr/lib/libcc1.so* - - # fixup gcc library symlinks to be linker scripts so - # linker finds the libs from relocated sysroot - for so in "$pkgdir"/usr/$CTARGET/lib/*.so; do - if [ -h "$so" ]; then - local _real=$(basename $(readlink "$so")) - rm -f "$so" - echo "GROUP ($_real)" > "$so" - fi - done - else - # add c89/c99 wrapper scripts - cat >"$pkgdir"/usr/bin/c89 <<'EOF' -#!/bin/sh -fl="-std=c89" -for opt; do - case "$opt" in - -ansi|-std=c89|-std=iso9899:1990) fl="";; - -std=*) echo "$(basename $0) called with non ANSI/ISO C option $opt" >&2 - exit 1;; - esac -done -exec gcc $fl ${1+"$@"} -EOF - cat >"$pkgdir"/usr/bin/c99 <<'EOF' -#!/bin/sh -fl="-std=c99" -for opt; do - case "$opt" in - -std=c99|-std=iso9899:1999) fl="";; - -std=*) echo "$(basename $0) called with non ISO C99 option $opt" >&2 - exit 1;; - esac -done -exec gcc $fl ${1+"$@"} -EOF - chmod 755 "$pkgdir"/usr/bin/c?9 - fi -} - -libatomic() { - pkgdesc="GCC Atomic library" - depends= - replaces="gcc" - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libatomic.so.* "$subpkgdir"/usr/lib/ -} - -libcxx() { - pkgdesc="GNU C++ standard runtime library" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libstdc++.so.* "$subpkgdir"/usr/lib/ -} - -gpp() { - pkgdesc="GNU C++ standard library and compiler" - depends="libstdc++=$_gccrel gcc=$_gccrel libc-dev" - mkdir -p "$subpkgdir/$_gcclibexec" \ - "$subpkgdir"/usr/bin \ - "$subpkgdir"/usr/${_target:+$CTARGET/}include \ - "$subpkgdir"/usr/${_target:+$CTARGET/}lib \ - - mv "$pkgdir/$_gcclibexec/cc1plus" "$subpkgdir/$_gcclibexec/" - paxmark -pmrs "$subpkgdir/$_gcclibexec/cc1plus" - - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/*++* "$subpkgdir"/usr/${_target:+$CTARGET/}lib/ - mv "$pkgdir"/usr/${_target:+$CTARGET/}include/c++ "$subpkgdir"/usr/${_target:+$CTARGET/}include/ - mv "$pkgdir"/usr/bin/*++ "$subpkgdir"/usr/bin/ -} - -libobjc() { - pkgdesc="GNU Objective-C runtime" - replaces="objc" - depends= - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libobjc.so.* "$subpkgdir"/usr/lib/ -} - -objc() { - pkgdesc="GNU Objective-C" - replaces="gcc" - depends="libc-dev gcc=$_gccrel libobjc=$_gccrel" - - mkdir -p "$subpkgdir"/$_gcclibdir/include \ - "$subpkgdir"/usr/lib - mv "$pkgdir"/$_gcclibdir/include/objc "$subpkgdir"/$_gcclibdir/include/ - mv "$pkgdir"/usr/lib/libobjc.so "$pkgdir"/usr/lib/libobjc.a \ - "$subpkgdir"/usr/lib/ -} - -libgcc() { - pkgdesc="GNU C compiler runtime libraries" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libgcc_s.so.* "$subpkgdir"/usr/lib/ -} - -libgomp() { - pkgdesc="GCC shared-memory parallel programming API library" - depends= - replaces="gcc" - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libgomp.so.* "$subpkgdir"/usr/lib/ -} - -java() { - pkgdesc="Java support for GCC" - depends="zlib-dev gcc=$_gccrel libgcj=$_gccrel" - - paxmark -pm "$pkgdir"/$_gcclibexec/ecj1 - mkdir -p "$subpkgdir"/usr/bin "$subpkgdir"/usr/lib "$subpkgdir"/$_gcclibdir/ - cd "$pkgdir"/usr/bin - mv gcj gcj-dbtool gjavah gcjh jcf-dump "$subpkgdir"/usr/bin/ - cd "$pkgdir" - for i in $(find usr/ -name ecj1 -o -name jc1 -o -name jvgenmain); do - mkdir -p "$subpkgdir"/${i%/*} - mv "$pkgdir"/$i "$subpkgdir"/$i - done - for i in "$pkgdir"/usr/lib/libgcj*.so; do - if [ -L "$i" ]; then - mv "$i" "$subpkgdir"/usr/lib/ - fi - done - mv "$pkgdir"/usr/lib/libgij.so "$subpkgdir"/usr/lib/ - mv "$pkgdir"/usr/lib/libgcj.spec "$subpkgdir"/$_gcclibdir/ -} - -libgcj() { - pkgdesc="Java runtime library for gcc" - # libgcj_bc.so moved from gcc-java to libgcj - replaces="gcc-java" - depends= - - mkdir -p "$subpkgdir"/usr/bin - cd "$pkgdir"/usr/bin - paxmark -pmse "$pkgdir"/usr/bin/gij - mv aot-compile gappletviewer gc-analyze gij gjar gjarsigner gkeytool\ - gnative2ascii gorbd grmic grmid grmiregistry gserialver \ - gtnameserv jv-convert rebuild-gcj-db \ - "$subpkgdir"/usr/bin/ - cd "$pkgdir" - for i in $(find usr/lib -name jc1 -o -name jvgenmain); do - mkdir -p "$subpkgdir"/${i%/*} - mv "$pkgdir"/$i "$subpkgdir"/$i - done - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/gcj-* \ - "$pkgdir"/usr/lib/libgcj_bc.so \ - "$pkgdir"/usr/lib/libgcj*.so.* \ - "$pkgdir"/usr/lib/libgij.so.* \ - "$pkgdir"/usr/lib/logging.properties \ - "$pkgdir"/usr/lib/security \ - "$subpkgdir"/usr/lib/ - - mkdir -p "$subpkgdir"/usr/share/ - mv "$pkgdir"/usr/share/java "$subpkgdir"/usr/share/ -} - -libgo() { - pkgdesc="Go runtime library for GCC" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/libgo.so.* "$subpkgdir"/usr/lib/ -} - -go() { - pkgdesc="Go support for GCC" - depends="gcc=$_gccrel libgo=$_gccrel" - - mkdir -p "$subpkgdir"/$_gcclibexec \ - "$subpkgdir"/usr/lib \ - "$subpkgdir"/usr/bin - mv "$pkgdir"/usr/lib/go "$subpkgdir"/usr/lib/ - mv "$pkgdir"/usr/bin/*gccgo "$subpkgdir"/usr/bin/ - mv "$pkgdir"/$_gcclibexec/go1 "$subpkgdir"/$_gcclibexec/ - mv "$pkgdir"/usr/lib/libgo.a \ - "$pkgdir"/usr/lib/libgo.so \ - "$pkgdir"/usr/lib/libgobegin.a \ - "$subpkgdir"/usr/lib/ -} - -libgfortran() { - pkgdesc="Fortran runtime library for GCC" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/libgfortran.so.* "$subpkgdir"/usr/lib/ -} - -libquadmath() { - replaces="gcc" - pkgdesc="128-bit math library for GCC" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/libquadmath.so.* "$subpkgdir"/usr/lib/ -} - -gfortran() { - pkgdesc="GNU Fortran Compiler" - depends="gcc=$_gccrel libgfortran=$_gccrel" - $LIBQUADMATH && depends="$depends libquadmath=$_gccrel" - replaces="gcc" - - mkdir -p "$subpkgdir"/$_gcclibexec \ - "$subpkgdir"/$_gcclibdir \ - "$subpkgdir"/usr/lib \ - "$subpkgdir"/usr/bin - mv "$pkgdir"/usr/bin/*gfortran "$subpkgdir"/usr/bin/ - mv "$pkgdir"/usr/lib/libgfortran.a \ - "$pkgdir"/usr/lib/libgfortran.so \ - "$subpkgdir"/usr/lib/ - if $LIBQUADMATH; then - mv "$pkgdir"/usr/lib/libquadmath.a \ - "$pkgdir"/usr/lib/libquadmath.so \ - "$subpkgdir"/usr/lib/ - fi - mv "$pkgdir"/$_gcclibexec/f951 "$subpkgdir"/$_gcclibexec - mv "$pkgdir"/usr/lib/libgfortran.spec "$subpkgdir"/$_gcclibdir -} - -libgnat() { - pkgdesc="GNU Ada runtime shared libraries" - depends= - - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/libgna*.so "$subpkgdir"/usr/lib/ -} - -gnat() { - pkgdesc="Ada support for GCC" - depends="gcc=$_gccrel" - [ "$CHOST" = "$CTARGET" ] && depends="$depends libgnat=$_gccrel" - - mkdir -p "$subpkgdir"/$_gcclibexec \ - "$subpkgdir"/$_gcclibdir \ - "$subpkgdir"/usr/bin - mv "$pkgdir"/$_gcclibexec/*gnat* "$subpkgdir"/$_gcclibexec/ - mv "$pkgdir"/$_gcclibdir/*ada* "$subpkgdir"/$_gcclibdir/ - mv "$pkgdir"/usr/bin/*gnat* "$subpkgdir"/usr/bin/ -} - -sha512sums="02c60e54527c7adf584798d5251f8a0b80c93d5deafce82501b2c28e6692e0bd783927bbfc4bc527a863c0cccc025150a34740a9e29badb02d4b48e56a8aba90 gcc-6.4.0.tar.xz -28f8c6fdbcb19e950b1d0bafb3bcc7a8cba87bc673aa6027cece116599cdee80f0cf5e95a1440544890239f5c754e8a93ab46d9daedd937faef445d7ea33b226 ecj-4.9.jar -a1335adc2fbee98e36c4437ff2587771b98ed4180726779020f65039498235626a411cdb0100dbd20cd19d12f0d94f9a21af179ff624676c28cead9d60598b5d 001_all_default-ssp-strong.patch -e36e95b81489163abd6fe9d58f7867bdca43e61143afacbfb17f4698c0b16ec5fd0061d8fab7b2ae615540bebd721c2e2227f80401b4e7fc253da9da62e6b513 002_all_default-relro.patch -f86466c62b8291fac46f9c250c7ad8fa5ab7b1cce2504442fd07ddc4543665b317ae28951f244e39aba29aeaf3fff252ec4f6a147aa16adb2b7aed747dd89188 003_all_default-fortify-source.patch -51282fea54c7e616367bbeb2479ba13fec6f24eb47bd04e2071907b3b36273b2ff24676f46ef8d22f241c8ab4857307861eee076eab66797c3a50a8ecaa1809a 005_all_default-as-needed.patch -3398386dd1e079d6545dd9799adc799c6b80e3984fac6899d0e1a7ee21b66d0c7e53cddf17a65d590c883db750f9f79aaedd857355a8b9f7fb9476c906237919 011_all_default-warn-format-security.patch -9adb0d2b9b67dd957df6c609b8714c7c078efb52cd88770905c37c67827be8fc83d1125037b9c29d77db21ce78756aa2bb0bacdb0b98d869ac126da76a298e21 012_all_default-warn-trampolines.patch -d35a3ac7e13a4446921a90e1ff3eec1079840c845f9d523c868e24ae21f94cf69ba041de5341ebef96432a6f57598e223381d4286e8fb8baaa25906707f29fbd 020_all_msgfmt-libstdc++-link.patch -840070a3c423e6206aaa6e63e1d9a0fcd6efd53626cd1240a193f0b60aa5d84216acc4a2a4fa8bce74549b07e6a316b01d638f20cea13dc62473491a302fb3d6 050_all_libiberty-asprintf.patch -0a0bc72b9366158f5d23fff1928e756fdd212433bac6ab1f00d632f241382820db8db5d475ddf11ea020eaf7e2e71b12fb9b1c3c870cf84adf6c2b16f15aabca 051_all_libiberty-pic.patch -e7a2eb1b1870e199d6fd753d065781575656fa12baa264f96c5d179689d88c31b8a3f92a5dae96088c05e96aa2bda138364ad7dbcc79e1819a102f192cbb7bab 053_all_libitm-no-fortify-source.patch -e87da18aa7ab92b02b06168658c63b42a6c73a08fad2a30f81ef6296100fdbe3c3a91548fd0cb24eaf591e862bb08e4b67249bc4b977b07da33523aee0c686bc 067_all_gcc-poison-system-directories.patch -4a328d1e1a56c20166307edcfa322068915784d9c08025b7f81cf69714da48fc266b6d34f77b9135c2f10da830d9df408276a1b78d1fd218637c2823506593c2 090_all_pr55930-dependency-tracking.patch -ef052d0c3c9642fcb5ed570069c5a49c8ef523c47ac8ce3f201a801766f72ae4ff7c3725a70ee66e52c0fb559621e35fe0cf5b88b901d71ceadd381f49653a08 201-cilkrts.patch -808e206f5e107084156fba333d4e091dcbd62f5d7756142bc292d4b0a52619f8c2aaca3617defc2f5b6552ba0439aebd33f4141329d88eab6ddf2dd637d92c08 203-libgcc_s.patch -fc0de05b36613b732a0222ea005c90653c6a40d6761b6894af2419272f4e74875f37e26af33a9b9940669ef89269c44c46d17ca5bcd54b5cd1176e5eaf2992c1 204-linux_libc_has_function.patch -98473bcaa77903a223ca9b0d2087c0921b287a2816d308cc32c8fe009e6cbf5dd1ae7fba27794ab8d9c09e117fe534413d91a464d1218474fc123ce0adfdc2c1 205-nopie.patch -3287d5b443bea8ec64132bcabe869c738ae98ea8f1a86df1c5d18c927f8816edbfcefeefc47792dbbb2bcacf50319af00e01b3735d34525913b64350770ad453 207-static-pie.patch -d08d7ead2de0429e5c9055d5b029ec2be9a8c821d22cecaf9b51f633652c493333f98963d9267fa2fa63850c50ae5eefd5f59e5910ec10d20044dac082182a8b libgcc-always-build-gcceh.a.patch -600fe5098dc54edaa9808fd5717af9dec058953f9ad37d49cfba1db4f7e9a7a8f02019342f75157fc575946fa693259422184de27b7ecc8386d9f3ecc0f7cc5d gcc-4.9-musl-fortify.patch -dbe0ee917fc7668571722364ab7c806731e3a31e8bfa30b4941b28b16b877d2a32b4a3897ef533399a28f82d43cac9b28e92de0493f0e779046db56584e07fa4 gcc-6.1-musl-libssp.patch -bda845a6aa1854d2c883910b115f79ccfa93dfc2b5eac69a3a236d83eb34cadc140731d616ffc24698c7abc8878dd15f231bcc5119f1860e575a120b311706c7 boehm-gc-musl.patch -fa62556719449caec6b2b434355bfbcaa5ae55ffe017b3e1f827f66a2aae21b79c571ee7a4ce723ea69169bc3a6447e73650991a200cc372adf2f102677518d7 gcc-pure64.patch -2253941f3d19b6d08801d3782f5f5ed56c3b73fbc9d3561a8f01c702963ac4fab91599c686076e7081eb6a80c37ccd33591ae978996d6eee1dc0ce0f1c50259a fix-gcj-stdgnu14-link.patch -f89ddeb21bc8f97e6a850a6b70b4501a8f3e49a4bc8cc82897488decda5d98ad01cb7f6c8b392d452e9579924a523bc75da6e0648c1c976d42e40af48b10343b fix-gcj-musl.patch -54d67cc008b735e47771314171930c5d8b8f5f5dc97fcf4214824c105c808f3e75d22d5a4fdf5068ed0457fa0d46c60cfb442e276259a4a5e9b8722a027d18e6 fix-gcj-iconv-musl.patch -abe9aaf9aa956058d0386a4396a511d176a46bb3906b90e952383646cdc158cbeb0a5dc616a1ccb1ca7d49fd0b5e351532aa15a3b13362abbf1ca4266f54a687 gcc-4.8-build-args.patch -35d6d59f0b7b968f282f56767c9e0823a7bdc5aa0d450aca50fbd802649a7ca608b47671244a3faa208a9b0d6832cabb5a22724157dc817b2c0ad63d09f93282 fix-cxxflags-passing.patch -9016b257abd8fa981de44a49512e35db814d1cbb47c1a87cd31c12d4ae20b13e9e149fe41691a7ec3c95bbcfde8a79194a8d2eaf547ceade3a246fad67c47dd8 ada-fixes.patch -3f5bc334d9f73d06f5f7c876738d02356acdd08958bea0e4d2095ebf15c2c2ec4e411abdae0297505ae9a1699ca01b17338e853184e84663203b192b0d35fc19 ada-shared.patch -631d4bdef6d8bde34df7978bb53ec28c3c909cf1f87139e5f148138d0f09adc58b41ecf0148bbf50fb4bc916c411e9bf8a2b6c046c75c0e77d754d8c35bcd4d7 ada-musl.patch -fa44c8158111627aa0e91c43e7cc3aa38642c2041c96532dd4f0932dae4d6f92ea2850b683abcf10e7e120299d42ea6b69adc00002a514c76be8e39e99fa052b ada-aarch64-multiarch.patch -4b4a0ff306a8ef34ff6e3284fbfca869012164a47ba7cb099085c1dd03e6ca0cdd462f82710e08c9a02895adc7484e4c5eef17b5aa264cf5d978fe8ad78eea93 300-main-gcc-add-musl-s390x-dynamic-linker.patch -385bc2fa50204f678964e5148c6170f572701dab920fbec8301f505bda34d182cde0adb7da042fee71719e12fb59f59181897f9b1bb4f4716ff59aad46ca1998 310-build-gcj-s390x.patch -f4ef08454e28c8732db69115e4998ec153399e8d229dd27f923dbdcf57b68128a65640d026cc7f45b58ba8764ab1eb575d4eb6d6dfc550a87a183f8b94e76181 320-libffi-gnulinux.patch -01c71cd5881fc07ea3b9b980697e89b3ca0fe98502958ceafc3fca18b2604c844e2f457feab711baf8e03f00a5383b0e38aac7eb954034e306f43d4a37f165ed fix-rs6000-pie.patch -34a818d5be67eb1f34e44a80b83c28a9b9c17d37fc9fac639f490d6bb5b53ebe3318140d09c236a17d7c98f5a7792ae3d6cefccda8067a5e942d6305b9d1f87c fix-linux-header-use-in-libgcc.patch -86be3338cc9c33089608bc4c5e3b7918c4e500a345c338f361b18c342119a6ed69af5495d72950de7106d760f003528b46ad14795e805f8a3331e206dcb234e3 gcc-pure64-mips.patch -508f3bca214d88531d739d761d07affc953689b1540905c73420b34c246e1e6b72588cf89f0e1462752633f8ddc88da8c0238be2a1b6e1c213829cecee7924cf ada-mips64.patch -7912964bf3a985e9f870250d6e068f715582a4fb04270849d697a50e6aad0cf50df3d483ff80a0eb777d9940fd85526dd8d0b85da9bc71a5f2fbc07616263866 0001-i386-Move-struct-ix86_frame-to-machine_function.patch -baa27a4b912d8e27cd65a556b09cf45289a0e00e86dae3925f2923d1f3752080e80d80e159c996ef4156c4df1dfc3069114810a846672170ef3ae461ae0ab7e1 0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.patch -6701d15000bdd7c4c98a8fece8c814f5e4e73603eecf84fe4dc5ac10f79b3074afba7c2cc9e51d08b2abade1c34cb0c944c08ead7a85db94e97158c752fd1aac 0003-i386-Use-const-reference-of-struct-ix86_frame-to-avo.patch -4e7e71ae57e232b29a6455ec977f60b47df1356eca0e85976ae2b4567c4c39541be9f10c30fe0085d69be5acdb61dff51d3e9d7af587c95d9cd2cb9ee307bd13 0004-x86-Add-mindirect-branch.patch -07f7fdbd9b4876f36ed7715a35a369dbaf1016f46c42a8935930cfcc9ea250de2dbe8113f077373ccce3c39cd728f957b6c4c7c6a7da299f160a4109f0bbe88d 0005-x86-Add-mfunction-return.patch -76ea947591e5241f8e6216ce337baaf1b5dfe3f02d8251f77a4acd70e2a5e7798e2867d70f452027f51a2e3baf1b5c94c3bffe9ef8e0a5ce24dc5d509adaf414 0006-x86-Add-mindirect-branch-register.patch -1c33c5cd34efb44d4fa0ace56e3d27ec802a66e03b08a29ab6122cbc70edbbe22313a34114437a41e09e0a6869af3cea3fb18f5bcb49db2f8e3f155026fe15f0 0007-x86-Add-V-register-operand-modifier.patch -5366e2cff0629304394bf35e9417c7faea6b6f3fc565d0410a17fdafcb2b30c9a218f8ca098274c09ca4c982ff5b178ad6df5bf464ec541aa086966915c7fe11 0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch -67c738b1f6afb09b6f0469c9cb282ab4d51fc8dd8e39df1cfdff8831788c1022081fccd446a482623f649898733aeaaa205cba0aa41162cdbdc74e57de9bb6eb 0009-Use-INVALID_REGNUM-in-indirect-thunk-processing.patch -b7b59f3203bf53168de2170b91738cd456f6ae205b3fe5bf8aacbaa8cc5624dd09c941ad8f1071d1ab8ab4fb5f69068a4bc792c0486fdec1ee2eb9c83688bb78 0010-i386-Pass-INVALID_REGNUM-as-invalid-register-number.patch -c53d4c5968865abb709ee8a9af9d57917d43ea3ba31ee8312f9e8f338e9b1b44babf5aa3414848da7267e5cf13a9261815eb9185dc153cbd41ee7ce5ea23d2d0 0011-i386-Update-mfunction-return-for-return-with-pop.patch -955080ba3e42cfe2f604e5dcef46aa6fca7c899c7808398947af655ff3b7954e30807ef85246986a5cc7db36dbc870db151e9fa8d8bc967b89ea56efdf64614c 0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch -3aae3a9cef8e8afe5a5433db8d9f410e1a2882481af01bb1d33232f987dbb74d7780c32be70b868bb391b3601b65ed3a16d777afea946f5eeaff72aa1e7fa3a9 0013-i386-Don-t-generate-alias-for-function-return-thunk.patch" diff --git a/aports/cross/gcc-x86_64/ada-aarch64-multiarch.patch b/aports/cross/gcc-x86_64/ada-aarch64-multiarch.patch deleted file mode 100644 index ac60b6f6..00000000 --- a/aports/cross/gcc-x86_64/ada-aarch64-multiarch.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- gcc-6.4.0/gcc/ada/gcc-interface/Makefile.in.orig -+++ gcc-6.4.0/gcc/ada/gcc-interface/Makefile.in -@@ -2042,13 +2042,8 @@ - system.ads - #else - #include -+#include - #endif - - #ifdef __MINGW32__ ---- gcc-6.1.0.orig/gcc/ada/terminals.c -+++ gcc-6.1.0/gcc/ada/terminals.c -@@ -1068,13 +1068,6 @@ - #include - #include - --/* On some system termio is either absent or including it will disable termios -- (HP-UX) */ --#if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \ -- && !defined (__rtems__) --# include --#endif -- - #include - #include - #include -@@ -1169,7 +1162,7 @@ - char *slave_name = NULL; - - #ifdef USE_GETPT -- master_fd = getpt (); -+ master_fd = posix_openpt (O_RDWR); - #elif defined (USE_OPENPTY) - status = openpty (&master_fd, &slave_fd, NULL, NULL, NULL); - #elif defined (USE_CLONE_DEVICE) diff --git a/aports/cross/gcc-x86_64/ada-mips64.patch b/aports/cross/gcc-x86_64/ada-mips64.patch deleted file mode 100644 index b7cd3deb..00000000 --- a/aports/cross/gcc-x86_64/ada-mips64.patch +++ /dev/null @@ -1,224 +0,0 @@ -From 5bbd6ca3755e2a199de98d2b270d8a6f616aa6a6 Mon Sep 17 00:00:00 2001 -From: Nils Andreas Svee -Date: Thu, 21 Dec 2017 16:46:12 +0100 -Subject: [PATCH] ada-mips64 - ---- - gcc/ada/gcc-interface/Makefile.in | 29 ++++++-- - gcc/ada/system-linux-mips64.ads | 147 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 171 insertions(+), 5 deletions(-) - create mode 100644 gcc/ada/system-linux-mips64.ads - -diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in -index 598b262d9..1844a6962 100644 ---- a/gcc/ada/gcc-interface/Makefile.in -+++ b/gcc/ada/gcc-interface/Makefile.in -@@ -1854,9 +1854,9 @@ ifeq ($(strip $(filter-out cygwin% mingw32% pe,$(target_os))),) - LIBRARY_VERSION := $(LIB_VERSION) - endif - --# Mips Linux --ifeq ($(strip $(filter-out mips linux%,$(target_cpu) $(target_os))),) -- LIBGNAT_TARGET_PAIRS = \ -+# Mips and Mips64 Linux -+ifeq ($(strip $(filter-out mips mips64 linux%,$(target_cpu) $(target_os))),) -+ LIBGNAT_TARGET_PAIRS_COMMON = \ - a-intnam.ads. -- -+-- -- -+-- GNAT was originally developed by the GNAT team at New York University. -- -+-- Extensive contributions were provided by Ada Core Technologies Inc. -- -+-- -- -+------------------------------------------------------------------------------ -+ -+package System is -+ pragma Pure; -+ -- Note that we take advantage of the implementation permission to make -+ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada -+ -- 2005, this is Pure in any case (AI-362). -+ -+ pragma No_Elaboration_Code_All; -+ -- Allow the use of that restriction in units that WITH this unit -+ -+ type Name is (SYSTEM_NAME_GNAT); -+ System_Name : constant Name := SYSTEM_NAME_GNAT; -+ -+ -- System-Dependent Named Numbers -+ -+ Min_Int : constant := Long_Long_Integer'First; -+ Max_Int : constant := Long_Long_Integer'Last; -+ -+ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; -+ Max_Nonbinary_Modulus : constant := Integer'Last; -+ -+ Max_Base_Digits : constant := Long_Long_Float'Digits; -+ Max_Digits : constant := Long_Long_Float'Digits; -+ -+ Max_Mantissa : constant := 63; -+ Fine_Delta : constant := 2.0 ** (-Max_Mantissa); -+ -+ Tick : constant := 0.000_001; -+ -+ -- Storage-related Declarations -+ -+ type Address is private; -+ pragma Preelaborable_Initialization (Address); -+ Null_Address : constant Address; -+ -+ Storage_Unit : constant := 8; -+ Word_Size : constant := 64; -+ Memory_Size : constant := 2 ** 64; -+ -+ -- Address comparison -+ -+ function "<" (Left, Right : Address) return Boolean; -+ function "<=" (Left, Right : Address) return Boolean; -+ function ">" (Left, Right : Address) return Boolean; -+ function ">=" (Left, Right : Address) return Boolean; -+ function "=" (Left, Right : Address) return Boolean; -+ -+ pragma Import (Intrinsic, "<"); -+ pragma Import (Intrinsic, "<="); -+ pragma Import (Intrinsic, ">"); -+ pragma Import (Intrinsic, ">="); -+ pragma Import (Intrinsic, "="); -+ -+ -- Other System-Dependent Declarations -+ -+ type Bit_Order is (High_Order_First, Low_Order_First); -+ Default_Bit_Order : constant Bit_Order := High_Order_First; -+ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning -+ -+ -- Priority-related Declarations (RM D.1) -+ -+ Max_Priority : constant Positive := 30; -+ Max_Interrupt_Priority : constant Positive := 31; -+ -+ subtype Any_Priority is Integer range 0 .. 31; -+ subtype Priority is Any_Priority range 0 .. 30; -+ subtype Interrupt_Priority is Any_Priority range 31 .. 31; -+ -+ Default_Priority : constant Priority := 15; -+ -+private -+ -+ type Address is mod Memory_Size; -+ Null_Address : constant Address := 0; -+ -+ -------------------------------------- -+ -- System Implementation Parameters -- -+ -------------------------------------- -+ -+ -- These parameters provide information about the target that is used -+ -- by the compiler. They are in the private part of System, where they -+ -- can be accessed using the special circuitry in the Targparm unit -+ -- whose source should be consulted for more detailed descriptions -+ -- of the individual switch values. -+ -+ Backend_Divide_Checks : constant Boolean := False; -+ Backend_Overflow_Checks : constant Boolean := True; -+ Command_Line_Args : constant Boolean := True; -+ Configurable_Run_Time : constant Boolean := False; -+ Denorm : constant Boolean := True; -+ Duration_32_Bits : constant Boolean := False; -+ Exit_Status_Supported : constant Boolean := True; -+ Fractional_Fixed_Ops : constant Boolean := False; -+ Frontend_Layout : constant Boolean := False; -+ Machine_Overflows : constant Boolean := False; -+ Machine_Rounds : constant Boolean := True; -+ Preallocated_Stacks : constant Boolean := False; -+ Signed_Zeros : constant Boolean := True; -+ Stack_Check_Default : constant Boolean := False; -+ Stack_Check_Probes : constant Boolean := True; -+ Stack_Check_Limits : constant Boolean := False; -+ Support_Aggregates : constant Boolean := True; -+ Support_Composite_Assign : constant Boolean := True; -+ Support_Composite_Compare : constant Boolean := True; -+ Support_Long_Shifts : constant Boolean := True; -+ Always_Compatible_Rep : constant Boolean := False; -+ Suppress_Standard_Library : constant Boolean := False; -+ Use_Ada_Main_Program_Name : constant Boolean := False; -+ Frontend_Exceptions : constant Boolean := False; -+ ZCX_By_Default : constant Boolean := True; -+ -+end System; --- -2.15.1 - diff --git a/aports/cross/gcc-x86_64/ada-musl.patch b/aports/cross/gcc-x86_64/ada-musl.patch deleted file mode 100644 index 464c3d57..00000000 --- a/aports/cross/gcc-x86_64/ada-musl.patch +++ /dev/null @@ -1,137 +0,0 @@ -diff -rup gcc-5.1.0/gcc.orig/ada/adaint.c gcc-5.1.0/gcc/ada/adaint.c ---- gcc-5.1.0/gcc.orig/ada/adaint.c 2015-02-20 11:48:57.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/adaint.c 2015-06-02 10:47:51.672767476 +0000 -@@ -70,6 +70,11 @@ - #include - #include - #endif -+ -+#if defined (linux) -+#define _GNU_SOURCE 1 -+#include -+#endif - - #ifdef __PikeOS__ - #define __BSD_VISIBLE 1 -@@ -3057,8 +3062,6 @@ __gnat_lwp_self (void) - return (void *) syscall (__NR_gettid); - } - --#include -- - /* glibc versions earlier than 2.7 do not define the routines to handle - dynamically allocated CPU sets. For these targets, we use the static - versions. */ -@@ -3067,7 +3070,7 @@ __gnat_lwp_self (void) - - /* Dynamic cpu sets */ - --cpu_set_t * -+void * - __gnat_cpu_alloc (size_t count) - { - return CPU_ALLOC (count); -@@ -3080,33 +3083,33 @@ __gnat_cpu_alloc_size (size_t count) - } - - void --__gnat_cpu_free (cpu_set_t *set) -+__gnat_cpu_free (void *set) - { -- CPU_FREE (set); -+ CPU_FREE ((cpu_set_t *) set); - } - - void --__gnat_cpu_zero (size_t count, cpu_set_t *set) -+__gnat_cpu_zero (size_t count, void *set) - { -- CPU_ZERO_S (count, set); -+ CPU_ZERO_S (count, (cpu_set_t *) set); - } - - void --__gnat_cpu_set (int cpu, size_t count, cpu_set_t *set) -+__gnat_cpu_set (int cpu, size_t count, void *set) - { - /* Ada handles CPU numbers starting from 1, while C identifies the first - CPU by a 0, so we need to adjust. */ -- CPU_SET_S (cpu - 1, count, set); -+ CPU_SET_S (cpu - 1, count, (cpu_set_t *) set); - } - - #else /* !CPU_ALLOC */ - - /* Static cpu sets */ - --cpu_set_t * -+void * - __gnat_cpu_alloc (size_t count ATTRIBUTE_UNUSED) - { -- return (cpu_set_t *) xmalloc (sizeof (cpu_set_t)); -+ return xmalloc (sizeof (cpu_set_t)); - } - - size_t -@@ -3116,23 +3119,23 @@ __gnat_cpu_alloc_size (size_t count ATTR - } - - void --__gnat_cpu_free (cpu_set_t *set) -+__gnat_cpu_free (void *set) - { - free (set); - } - - void --__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) -+__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, void *set) - { -- CPU_ZERO (set); -+ CPU_ZERO ((cpu_set_t *) set); - } - - void --__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) -+__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, void *set) - { - /* Ada handles CPU numbers starting from 1, while C identifies the first - CPU by a 0, so we need to adjust. */ -- CPU_SET (cpu - 1, set); -+ CPU_SET (cpu - 1, (cpu_set_t *) set); - } - #endif /* !CPU_ALLOC */ - #endif /* linux */ -diff -rup gcc-5.1.0/gcc.orig/ada/adaint.h gcc-5.1.0/gcc/ada/adaint.h ---- gcc-5.1.0/gcc.orig/ada/adaint.h 2015-01-27 17:20:27.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/adaint.h 2015-06-02 10:47:23.188910894 +0000 -@@ -287,13 +287,11 @@ extern void *__gnat_lwp_self (voi - - /* Routines for interface to required CPU set primitives */ - --#include -- --extern cpu_set_t *__gnat_cpu_alloc (size_t); -+extern void * __gnat_cpu_alloc (size_t); - extern size_t __gnat_cpu_alloc_size (size_t); --extern void __gnat_cpu_free (cpu_set_t *); --extern void __gnat_cpu_zero (size_t, cpu_set_t *); --extern void __gnat_cpu_set (int, size_t, cpu_set_t *); -+extern void __gnat_cpu_free (void *); -+extern void __gnat_cpu_zero (size_t, void *); -+extern void __gnat_cpu_set (int, size_t, void *); - #endif - - #if defined (_WIN32) -diff -rup gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in ---- gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in 2015-04-09 20:29:28.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in 2015-06-02 10:47:23.188910894 +0000 -@@ -1910,7 +1910,7 @@ ifeq ($(strip $(filter-out powerpc% linu - endif - - # ARM linux, GNU eabi --ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),) -+ifeq ($(strip $(filter-out arm% linux-gnueabi% linux-musleabi% linux-muslgnueabi%,$(target_cpu) $(target_os))),) - LIBGNAT_TARGET_PAIRS = \ - a-intnam.ads - # undef __KERNEL__ --# else -+# elif defined(__GLIBC__) - /* Kernels prior to 2.1.1 defined struct sigcontext_struct instead of */ - /* struct sigcontext. libc6 (glibc2) uses "struct sigcontext" in */ - /* prototypes, so we have to include the top-level sigcontext.h to */ ---- gcc-4.8.2/boehm-gc/dyn_load.c.orig 2014-02-17 14:13:09.519850231 +0200 -+++ gcc-4.8.2/boehm-gc/dyn_load.c 2014-02-17 14:14:27.906093514 +0200 -@@ -459,9 +459,7 @@ - /* For glibc 2.2.4+. Unfortunately, it doesn't work for older */ - /* versions. Thanks to Jakub Jelinek for most of the code. */ - --# if (defined(LINUX) || defined (__GLIBC__)) /* Are others OK here, too? */ \ -- && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \ -- || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) -+# if (defined(LINUX) || defined (__GLIBC__)) - - /* We have the header files for a glibc that includes dl_iterate_phdr. */ - /* It may still not be available in the library on the target system. */ ---- gcc-4.8.2/boehm-gc/include/private/gcconfig.h.orig 2014-02-17 14:14:36.026049422 +0200 -+++ gcc-4.8.2/boehm-gc/include/private/gcconfig.h 2014-02-17 14:17:11.345207887 +0200 -@@ -684,7 +684,7 @@ - # ifdef __ELF__ - # define DYNAMIC_LOADING - # include --# if defined(__GLIBC__)&& __GLIBC__>=2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else /* !GLIBC2 */ - extern char **__environ; -@@ -1147,7 +1147,7 @@ - # define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff)) - # endif - # include --# if defined(__GLIBC__) && __GLIBC__ >= 2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else - extern char **__environ; -@@ -1367,7 +1367,7 @@ - # define HBLKSIZE 4096 - # endif - # define USE_GENERIC_PUSH_REGS --# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2 || __GLIBC__ > 2 -+# if 1 - # define LINUX_STACKBOTTOM - # else - # define STACKBOTTOM 0x80000000 -@@ -1858,7 +1858,7 @@ - # ifdef __ELF__ - # define DYNAMIC_LOADING - # include --# if defined(__GLIBC__) && __GLIBC__ >= 2 -+# if 1 - # define SEARCH_FOR_DATA_START - # else - extern char **__environ; diff --git a/aports/cross/gcc-x86_64/fix-cxxflags-passing.patch b/aports/cross/gcc-x86_64/fix-cxxflags-passing.patch deleted file mode 100644 index 8eb1de77..00000000 --- a/aports/cross/gcc-x86_64/fix-cxxflags-passing.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- gcc-4.8.1/Makefile.in.orig -+++ gcc-4.8.1/Makefile.in -@@ -169,6 +169,7 @@ - # built for the build system to override those in BASE_FLAGS_TO_PASSS. - EXTRA_BUILD_FLAGS = \ - CFLAGS="$(CFLAGS_FOR_BUILD)" \ -+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \ - LDFLAGS="$(LDFLAGS_FOR_BUILD)" - - # This is the list of directories to built for the host system. diff --git a/aports/cross/gcc-x86_64/fix-gcj-iconv-musl.patch b/aports/cross/gcc-x86_64/fix-gcj-iconv-musl.patch deleted file mode 100644 index b0015751..00000000 --- a/aports/cross/gcc-x86_64/fix-gcj-iconv-musl.patch +++ /dev/null @@ -1,120 +0,0 @@ ---- gcc-4.8.2/libjava/gnu/gcj/convert/natIconv.cc.orig 2014-02-18 18:46:14.897880526 +0200 -+++ gcc-4.8.2/libjava/gnu/gcj/convert/natIconv.cc 2014-02-18 18:50:08.766613550 +0200 -@@ -24,6 +24,13 @@ - - #ifdef HAVE_ICONV - #include -+#include -+ -+#if __BYTE_ORDER == __BIG_ENDIAN -+#define UCS2_CHARSET "UCS-2BE" -+#else -+#define UCS2_CHARSET "UCS-2LE" -+#endif - - template - static inline size_t -@@ -45,7 +52,7 @@ - _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer); - buffer[len] = '\0'; - -- iconv_t h = iconv_open ("UCS-2", buffer); -+ iconv_t h = iconv_open (UCS2_CHARSET, buffer); - if (h == (iconv_t) -1) - throw new ::java::io::UnsupportedEncodingException (encoding); - -@@ -99,18 +106,6 @@ - throw new ::java::io::CharConversionException (); - } - -- if (iconv_byte_swap) -- { -- size_t max = (old_out - outavail) / sizeof (jchar); -- for (size_t i = 0; i < max; ++i) -- { -- // Byte swap. -- jchar c = (((out[outpos + i] & 0xff) << 8) -- | ((out[outpos + i] >> 8) & 0xff)); -- outbuf[i] = c; -- } -- } -- - inpos += old_in - inavail; - return (old_out - outavail) / sizeof (jchar); - #else /* HAVE_ICONV */ -@@ -145,7 +140,7 @@ - _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer); - buffer[len] = '\0'; - -- iconv_t h = iconv_open (buffer, "UCS-2"); -+ iconv_t h = iconv_open (buffer, UCS2_CHARSET); - if (h == (iconv_t) -1) - throw new ::java::io::UnsupportedEncodingException (encoding); - -@@ -187,20 +182,6 @@ - char *inbuf = (char *) &chars[inpos]; - char *outbuf = (char *) &out[count]; - -- if (iconv_byte_swap) -- { -- // Ugly performance penalty -- don't use losing systems! -- temp_buffer = (jchar *) _Jv_Malloc (inlength * sizeof (jchar)); -- for (int i = 0; i < inlength; ++i) -- { -- // Byte swap. -- jchar c = (((chars[inpos + i] & 0xff) << 8) -- | ((chars[inpos + i] >> 8) & 0xff)); -- temp_buffer[i] = c; -- } -- inbuf = (char *) temp_buffer; -- } -- - size_t loop_old_in = old_in; - while (1) - { -@@ -252,44 +233,7 @@ - jboolean - gnu::gcj::convert::IOConverter::iconv_init (void) - { -- // Some versions of iconv() always return their UCS-2 results in -- // big-endian order, and they also require UCS-2 inputs to be in -- // big-endian order. For instance, glibc 2.1.3 does this. If the -- // UTF-8=>UCS-2 iconv converter has this feature, then we assume -- // that all UCS-2 converters do. (This might not be the best -- // heuristic, but is is all we've got.) -- jboolean result = false; --#ifdef HAVE_ICONV -- iconv_t handle = iconv_open ("UCS-2", "UTF-8"); -- if (handle != (iconv_t) -1) -- { -- jchar c; -- unsigned char in[4]; -- char *inp, *outp; -- size_t inc, outc, r; -- -- // This is the UTF-8 encoding of \ufeff. At least Tru64 UNIX libiconv -- // needs the trailing NUL byte, otherwise iconv fails with EINVAL. -- in[0] = 0xef; -- in[1] = 0xbb; -- in[2] = 0xbf; -- in[3] = 0x00; -- -- inp = (char *) in; -- inc = 4; -- outp = (char *) &c; -- outc = 2; -- -- r = iconv_adapter (iconv, handle, &inp, &inc, &outp, &outc); -- // Conversion must be complete for us to use the result. -- if (r != (size_t) -1 && inc == 0 && outc == 0) -- result = (c != 0xfeff); -- -- // Release iconv handle. -- iconv_close (handle); -- } --#endif /* HAVE_ICONV */ -- return result; -+ return false; - } - - void diff --git a/aports/cross/gcc-x86_64/fix-gcj-musl.patch b/aports/cross/gcc-x86_64/fix-gcj-musl.patch deleted file mode 100644 index d26f510c..00000000 --- a/aports/cross/gcc-x86_64/fix-gcj-musl.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- gcc-4.8.2/libjava/gnu/classpath/natSystemProperties.cc.orig 2014-02-18 10:55:08.617678779 +0200 -+++ gcc-4.8.2/libjava/gnu/classpath/natSystemProperties.cc 2014-02-18 10:56:31.927227453 +0200 -@@ -289,7 +289,7 @@ - // just default to `en_US'. - setlocale (LC_ALL, ""); - char *locale = setlocale (LC_MESSAGES, ""); -- if (locale && strlen (locale) >= 2) -+ if (locale && strlen (locale) >= 2 && (locale[2] == '\0' || locale[2] == '_')) - { - char buf[3]; - buf[2] = '\0'; ---- gcc-4.8.2/libjava/posix-threads.cc.orig 2014-02-18 13:22:01.789933726 +0200 -+++ gcc-4.8.2/libjava/posix-threads.cc 2014-02-18 13:29:50.924058875 +0200 -@@ -657,6 +657,7 @@ - struct sched_param param; - pthread_attr_t attr; - struct starter *info; -+ size_t ss; - - if (data->flags & FLAG_START) - return; -@@ -675,8 +676,25 @@ - // Set stack size if -Xss option was given. - if (gcj::stack_size > 0) - { -- int e = pthread_attr_setstacksize (&attr, gcj::stack_size); -+ ss = gcj::stack_size; -+ } -+ else -+ { -+ int e = pthread_attr_getstacksize (&attr, &ss); -+ if (e != 0) -+ JvFail (strerror (e)); -+ -+ // Request at least 1meg of stack -+ if (ss >= 1024 * 1024) -+ ss = 0; -+ else -+ ss = 1024 * 1024; -+ } -+ -+ if (ss) -+ { -+ int e = pthread_attr_setstacksize (&attr, ss); - if (e != 0) - JvFail (strerror (e)); - } - - info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter)); diff --git a/aports/cross/gcc-x86_64/fix-gcj-stdgnu14-link.patch b/aports/cross/gcc-x86_64/fix-gcj-stdgnu14-link.patch deleted file mode 100644 index 2b2ce0fa..00000000 --- a/aports/cross/gcc-x86_64/fix-gcj-stdgnu14-link.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- gcc-6.1.0/libjava/Makefile.am -+++ gcc-6.1.0/libjava/Makefile.am -@@ -488,10 +488,14 @@ - nat_files = $(nat_source_files:.cc=.lo) - xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) - -+libgcj_la_CPPFLAGS = \ -+ $(AM_CPPFLAGS) \ -+ $(LIBSTDCXX_RAW_CXX_CXXFLAGS) -+ - # Include THREADLIBS here to ensure that the correct version of - # certain linuxthread functions get linked: - ## The mysterious backslash in the grep pattern is consumed by make. --libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ -+libgcj_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ - $(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ - -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL) ---- gcc-6.1.0/libjava/Makefile.in -+++ gcc-6.1.0/libjava/Makefile.in -@@ -1103,9 +1103,13 @@ - nat_files = $(nat_source_files:.cc=.lo) - xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) - -+libgcj_la_CPPFLAGS = \ -+ $(AM_CPPFLAGS) \ -+ $(LIBSTDCXX_RAW_CXX_CXXFLAGS) -+ - # Include THREADLIBS here to ensure that the correct version of - # certain linuxthread functions get linked: --libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ -+libgcj_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \ - $(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ - -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL) diff --git a/aports/cross/gcc-x86_64/fix-linux-header-use-in-libgcc.patch b/aports/cross/gcc-x86_64/fix-linux-header-use-in-libgcc.patch deleted file mode 100644 index 6dad1b2c..00000000 --- a/aports/cross/gcc-x86_64/fix-linux-header-use-in-libgcc.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 9cd4503714c4e596818c4ea8e15905c249b7a319 Mon Sep 17 00:00:00 2001 -From: nsz -Date: Thu, 25 Aug 2016 14:08:27 +0000 -Subject: [PATCH] [mips] Fix linux header use in libgcc - -libgcc/ - * config/mips/linux-unwind.h: Use sys/syscall.h. - - - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239759 138bc75d-0d04-0410-961f-82ee72b054a4 ---- - libgcc/ChangeLog | 4 ++++ - libgcc/config/mips/linux-unwind.h | 2 +- - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog -index b78c4b2..99bd2f1 100644 ---- a/libgcc/ChangeLog -+++ b/libgcc/ChangeLog -@@ -1,3 +1,7 @@ -+2016-08-25 Szabolcs Nagy -+ -+ * config/mips/linux-unwind.h: Use sys/syscall.h. -+ - 2016-08-16 Joseph Myers - - PR libgcc/77265 -diff --git a/libgcc/config/mips/linux-unwind.h b/libgcc/config/mips/linux-unwind.h -index bf12de5..4035c121 100644 ---- a/libgcc/config/mips/linux-unwind.h -+++ b/libgcc/config/mips/linux-unwind.h -@@ -27,7 +27,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - state data appropriately. See unwind-dw2.c for the structs. */ - - #include --#include -+#include - - /* The third parameter to the signal handler points to something with - * this structure defined in asm/ucontext.h, but the name clashes with --- -2.9.3 - diff --git a/aports/cross/gcc-x86_64/fix-rs6000-pie.patch b/aports/cross/gcc-x86_64/fix-rs6000-pie.patch deleted file mode 100644 index 1fbc31a5..00000000 --- a/aports/cross/gcc-x86_64/fix-rs6000-pie.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- gcc-6.3.0.orig/gcc/config/rs6000/sysv4.h -+++ gcc-6.3.0/gcc/config/rs6000/sysv4.h -@@ -753,23 +753,42 @@ - #endif - - #ifdef HAVE_LD_PIE --#define STARTFILE_LINUX_SPEC "\ --%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ --%{mnewlib:ecrti.o%s;:crti.o%s} \ --%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ --" CRTOFFLOADBEGIN -+#define STARTFILE_LINUX_SPEC \ -+ "%{!shared: %{pg|p|profile:gcrt1.o%s;: \ -+ %{" PIE_SPEC ":%{static:rcrt1.o%s;:Scrt1.o%s}} %{" NO_PIE_SPEC ":crt1.o%s}}} \ -+ crti.o%s %{shared:crtbeginS.o%s;: \ -+ %{" PIE_SPEC ":crtbeginS.o%s} \ -+ %{" NO_PIE_SPEC ":%{static:crtbeginT.o%s;:crtbegin.o%s}}} \ -+ %{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_start_preinit.o%s; \ -+ fvtable-verify=std:vtv_start.o%s} \ -+ " CRTOFFLOADBEGIN - #else --#define STARTFILE_LINUX_SPEC "\ --%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ --%{mnewlib:ecrti.o%s;:crti.o%s} \ --%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ --" CRTOFFLOADBEGIN -+#define STARTFILE_LINUX_SPEC \ -+ "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ -+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \ -+ %{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_start_preinit.o%s; \ -+ fvtable-verify=std:vtv_start.o%s} \ -+ " CRTOFFLOADBEGIN - #endif - --#define ENDFILE_LINUX_SPEC "\ --%{shared|pie:crtendS.o%s;:crtend.o%s} \ --%{mnewlib:ecrtn.o%s;:crtn.o%s} \ --" CRTOFFLOADEND -+#ifdef HAVE_LD_PIE -+#define ENDFILE_LINUX_SPEC \ -+ "%{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_end_preinit.o%s; \ -+ fvtable-verify=std:vtv_end.o%s} \ -+ %{shared:crtendS.o%s;: %{" PIE_SPEC ":crtendS.o%s} \ -+ %{" NO_PIE_SPEC ":crtend.o%s}} crtn.o%s \ -+ " CRTOFFLOADEND -+#else -+#define ENDFILE_LINUX_SPEC \ -+ "%{fvtable-verify=none:%s; \ -+ fvtable-verify=preinit:vtv_end_preinit.o%s; \ -+ fvtable-verify=std:vtv_end.o%s} \ -+ %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s \ -+ " CRTOFFLOADEND -+#endif - - #define LINK_START_LINUX_SPEC "" - diff --git a/aports/cross/gcc-x86_64/gcc-4.8-build-args.patch b/aports/cross/gcc-x86_64/gcc-4.8-build-args.patch deleted file mode 100644 index c27e0096..00000000 --- a/aports/cross/gcc-x86_64/gcc-4.8-build-args.patch +++ /dev/null @@ -1,41 +0,0 @@ -When cross compiling a target gcc, target flags may be used on the host - -Configure identifies a number of warning flags (WARN_CFLAGS and -WARN_CXXFLAGS) from the $CC value. The cross compiler may be different -from the host compiler and may not support the same set of flags. This -leads to problems such as: - -cc1plus: error: unrecognized command line option "-Wno-narrowing" -cc1plus: error: unrecognized command line option "-Wno-overlength-strings" - -Work around this problem by removing the warning flags from the -BUILD_CXXFLAGS value, in a way similar to the BUILD_CFLAGS. - -Upstream-Status: Pending - -Signed-off-by: Mark Hatle - -Index: gcc-4.8.0/gcc/configure -=================================================================== ---- gcc-4.8.0.orig/gcc/configure -+++ gcc-4.8.0/gcc/configure -@@ -11720,6 +10581,7 @@ STMP_FIXINC=stmp-fixinc - if test x$build != x$host || test "x$coverage_flags" != x - then - BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' -+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' - BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)' - fi - -Index: gcc-4.8.0/gcc/configure.ac -=================================================================== ---- gcc-4.8.0.orig/gcc/configure.ac -+++ gcc-4.8.0/gcc/configure.ac -@@ -1901,6 +1901,7 @@ STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_F - if test x$build != x$host || test "x$coverage_flags" != x - then - BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' -+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)' - BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)' - fi - diff --git a/aports/cross/gcc-x86_64/gcc-4.9-musl-fortify.patch b/aports/cross/gcc-x86_64/gcc-4.9-musl-fortify.patch deleted file mode 100644 index daae954c..00000000 --- a/aports/cross/gcc-x86_64/gcc-4.9-musl-fortify.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- gcc-4.9.2/gcc/config/linux.h.orig 2015-03-09 13:27:13.289736710 +0000 -+++ gcc-4.9.2/gcc/config/linux.h 2015-03-09 13:29:32.295625046 +0000 -@@ -146,6 +146,8 @@ - - #ifdef NATIVE_SYSTEM_HEADER_DIR - #define INCLUDE_DEFAULTS_MUSL_NATIVE \ -+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 2 }, \ -+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 0 }, \ - { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \ - { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 }, - #else diff --git a/aports/cross/gcc-x86_64/gcc-6.1-musl-libssp.patch b/aports/cross/gcc-x86_64/gcc-6.1-musl-libssp.patch deleted file mode 100644 index fe5c6143..00000000 --- a/aports/cross/gcc-x86_64/gcc-6.1-musl-libssp.patch +++ /dev/null @@ -1,20 +0,0 @@ -Author: Timo Teräs - -Alpine musl package provides libssp_nonshared.a. We link to it unconditionally, -as otherwise we get link failures if some objects are -fstack-protector built -and final link happens with -fno-stack-protector. This seems to be the common -case when bootstrapping gcc, the piepatches do not seem to fully fix the -crosstoolchain and bootstrap sequence wrt. stack-protector flag usage. - ---- gcc-6.1.0/gcc/gcc.c.orig -+++ gcc-6.1.0/gcc/gcc.c -@@ -870,8 +870,7 @@ - - #ifndef LINK_SSP_SPEC - #ifdef TARGET_LIBC_PROVIDES_SSP --#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ -- "|fstack-protector-strong|fstack-protector-explicit:}" -+#define LINK_SSP_SPEC "-lssp_nonshared" - #else - #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ - "|fstack-protector-strong|fstack-protector-explicit" \ diff --git a/aports/cross/gcc-x86_64/gcc-pure64-mips.patch b/aports/cross/gcc-x86_64/gcc-pure64-mips.patch deleted file mode 100644 index d78f2838..00000000 --- a/aports/cross/gcc-x86_64/gcc-pure64-mips.patch +++ /dev/null @@ -1,47 +0,0 @@ -From b8c4e45d052adc247341066f748421743704b481 Mon Sep 17 00:00:00 2001 -From: Nils Andreas Svee -Date: Thu, 21 Dec 2017 03:14:33 +0100 -Subject: [PATCH] Pure 64-bit MIPS - ---- - gcc/config/mips/mips.h | 8 ++++---- - gcc/config/mips/t-linux64 | 6 +++--- - 2 files changed, 7 insertions(+), 7 deletions(-) - -diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h -index 803ab98e7..afd74752f 100644 ---- a/gcc/config/mips/mips.h -+++ b/gcc/config/mips/mips.h -@@ -3330,11 +3330,11 @@ struct GTY(()) machine_function { - /* If we are *not* using multilibs and the default ABI is not ABI_32 we - need to change these from /lib and /usr/lib. */ - #if MIPS_ABI_DEFAULT == ABI_N32 --#define STANDARD_STARTFILE_PREFIX_1 "/lib32/" --#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib32/" -+#define STANDARD_STARTFILE_PREFIX_1 "/lib/" -+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" - #elif MIPS_ABI_DEFAULT == ABI_64 --#define STANDARD_STARTFILE_PREFIX_1 "/lib64/" --#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/" -+#define STANDARD_STARTFILE_PREFIX_1 "/lib/" -+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/" - #endif - - /* Load store bonding is not supported by micromips and fix_24k. The -diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64 -index 16c8adf85..bb46204db 100644 ---- a/gcc/config/mips/t-linux64 -+++ b/gcc/config/mips/t-linux64 -@@ -21,6 +21,6 @@ MULTILIB_DIRNAMES = n32 32 64 - MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el) - MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft) - MULTILIB_OSDIRNAMES = \ -- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \ -- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \ -- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT)) -+ ../lib \ -+ ../lib32 \ -+ ../lib --- -2.15.1 - diff --git a/aports/cross/gcc-x86_64/gcc-pure64.patch b/aports/cross/gcc-x86_64/gcc-pure64.patch deleted file mode 100644 index 2c350fe5..00000000 --- a/aports/cross/gcc-x86_64/gcc-pure64.patch +++ /dev/null @@ -1,89 +0,0 @@ ---- ./gcc/config/i386/t-linux64.orig 2013-01-14 16:32:37.000000000 +0000 -+++ ./gcc/config/i386/t-linux64 2013-04-22 06:12:32.984439677 +0000 -@@ -34,6 +34,6 @@ - comma=, - MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG)) - MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS))) --MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu) --MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32) ---- ./gcc/config/aarch64/t-aarch64-linux.orig -+++ ./gcc/config/aarch64/t-aarch64-linux -@@ -22,7 +22,7 @@ - LIB1ASMFUNCS = _aarch64_sync_cache_range - - AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be) --MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) -+MULTILIB_OSDIRNAMES = mabi.lp64=../lib - MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu) - - MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32 ---- ./gcc/config/s390/t-linux64.orig -+++ ./gcc/config/s390/t-linux64 -@@ -7,5 +7,5 @@ - MULTILIB_OPTIONS = m64/m31 - MULTILIB_DIRNAMES = 64 32 --MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu) --MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - ---- ./gcc/config/rs6000/t-linux.orig -+++ ./gcc/config/rs6000/t-linux -@@ -2,7 +2,8 @@ - # or soft-float. - ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float))) - ifneq (,$(findstring powerpc64,$(target))) --MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - else - ifneq (,$(findstring spe,$(target))) - MULTIARCH_DIRNAME := powerpc-linux-gnuspe$(if $(findstring 8548,$(with_cpu)),,v1) -@@ -14,7 +15,8 @@ - MULTIARCH_DIRNAME := $(subst -linux,le-linux,$(MULTIARCH_DIRNAME)) - endif - ifneq (,$(findstring powerpc64le,$(target))) --MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES)) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - endif - endif - ---- ./gcc/config/rs6000/t-linux64.orig -+++ ./gcc/config/rs6000/t-linux64 -@@ -28,8 +28,8 @@ - MULTILIB_OPTIONS := m64/m32 - MULTILIB_DIRNAMES := 64 32 - MULTILIB_EXTRA_OPTS := --MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu) --MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - - rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c - $(COMPILE) $< ---- ./gcc/config/rs6000/t-linux64bele.orig -+++ ./gcc/config/rs6000/t-linux64bele -@@ -2,6 +2,6 @@ - - MULTILIB_OPTIONS += mlittle - MULTILIB_DIRNAMES += le --MULTILIB_OSDIRNAMES += $(subst =,.mlittle=,$(subst lible32,lib32le,$(subst lible64,lib64le,$(subst lib,lible,$(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES)))))) --MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mlittle%,$(MULTILIB_OSDIRNAMES))) -+MULTILIB_OSDIRNAMES = m64=../lib -+MULTILIB_OSDIRNAMES+= m32=../lib32 - MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN} ---- ./gcc/config/rs6000/t-linux64lebe.orig -+++ ./gcc/config/rs6000/t-linux64lebe -@@ -2,6 +2,6 @@ - - MULTILIB_OPTIONS += mbig - MULTILIB_DIRNAMES += be --MULTILIB_OSDIRNAMES += $(subst =,.mbig=,$(subst libbe32,lib32be,$(subst libbe64,lib64be,$(subst lib,libbe,$(subst le-linux,-linux,$(MULTILIB_OSDIRNAMES)))))) --MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mbig%,$(MULTILIB_OSDIRNAMES))) -+MULTILIB_OSDIRNAMES := m64=../lib -+MULTILIB_OSDIRNAMES += m32=../lib32 - MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN} diff --git a/aports/cross/gcc-x86_64/libgcc-always-build-gcceh.a.patch b/aports/cross/gcc-x86_64/libgcc-always-build-gcceh.a.patch deleted file mode 100644 index 74ae8973..00000000 --- a/aports/cross/gcc-x86_64/libgcc-always-build-gcceh.a.patch +++ /dev/null @@ -1,39 +0,0 @@ -Highly inspired by: - http://landley.net/hg/aboriginal/file/7e0747a665ab/sources/patches/gcc-core-libgcceh.patch - -diff -durN gcc-4.6.0.orig/libgcc/Makefile.in gcc-4.6.0/libgcc/Makefile.in ---- gcc-4.6.0.orig/libgcc/Makefile.in 2011-01-26 05:19:58.000000000 +0100 -+++ gcc-4.6.0/libgcc/Makefile.in 2011-09-12 18:17:12.743718974 +0200 -@@ -772,8 +772,9 @@ - libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT) - endif - -+all: libgcc_eh.a - ifeq ($(enable_shared),yes) --all: libgcc_eh.a libgcc_s$(SHLIB_EXT) -+all: libgcc_s$(SHLIB_EXT) - ifneq ($(LIBUNWIND),) - all: libunwind$(SHLIB_EXT) - endif -@@ -950,10 +951,6 @@ - install-shared: - $(mkinstalldirs) $(DESTDIR)$(inst_libdir) - -- $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ -- chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a -- $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a -- - $(subst @multilib_dir@,$(MULTIDIR),$(subst \ - @shlib_base_name@,libgcc_s,$(subst \ - @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL)))) -@@ -968,6 +965,10 @@ - chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a - $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a - -+ $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ -+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a -+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a -+ - parts="$(INSTALL_PARTS)"; \ - for file in $$parts; do \ - rm -f $(DESTDIR)$(inst_libdir)/$$file; \ diff --git a/aports/cross/musl-aarch64/APKBUILD b/aports/cross/musl-aarch64/APKBUILD deleted file mode 100644 index 560902ba..00000000 --- a/aports/cross/musl-aarch64/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen musl-aarch64 - -pkgname="musl-aarch64" -pkgver="1.1.19" -pkgrel=10 -arch="armhf x86_64 x86" -subpackages="musl-dev-aarch64:package_dev" - -_arch="aarch64" -_mirror="http://dl-cdn.alpinelinux.org/alpine/" - -url="https://musl-libc.org" -license="MIT" -options="!check !strip" -pkgdesc="the musl library (lib c) implementation for $_arch" - -_target="$(arch_to_hostspec $_arch)" - -source=" - musl-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/musl-$pkgver-r$pkgrel.apk - musl-dev-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/musl-dev-$pkgver-r$pkgrel.apk -" - -package() { - mkdir -p "$pkgdir/usr/$_target" - cd "$pkgdir/usr/$_target" - tar -xf $srcdir/musl-$pkgver-r$pkgrel-$_arch.apk - rm .PKGINFO .SIGN.* -} -package_dev() { - mkdir -p "$subpkgdir/usr/$_target" - cd "$subpkgdir/usr/$_target" - tar -xf $srcdir/musl-dev-$pkgver-r$pkgrel-$_arch.apk - rm .PKGINFO .SIGN.* - - # symlink everything from /usr/$_target/usr/* to /usr/$_target/* - # so the cross-compiler gcc does not fail to build. - for _dir in include lib; do - mkdir -p "$subpkgdir/usr/$_target/$_dir" - cd "$subpkgdir/usr/$_target/usr/$_dir" - for i in *; do - cd "$subpkgdir/usr/$_target/$_dir" - ln -s /usr/$_target/usr/$_dir/$i $i - done - done -} - -sha512sums="4c152b4cdcb668f62efde3f1c6a95c5edec9118e5faa0fff8de47de6bf020b7882f07e211333bd370399a56adb9aeb3f396fdec6c142ea764d348e0f21b9ccbf musl-1.1.19-r10-aarch64.apk -690b768206a717b99fa9ad1f1334aac9ba6cd251218bf57700d66becda21e447b3071db3488bc7b7f22c37e336ab002b3abfcf9763d3bcfb27235063e5f42928 musl-dev-1.1.19-r10-aarch64.apk" diff --git a/aports/cross/musl-armhf/APKBUILD b/aports/cross/musl-armhf/APKBUILD deleted file mode 100644 index fdb472c5..00000000 --- a/aports/cross/musl-armhf/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen musl-armhf - -pkgname="musl-armhf" -pkgver="1.1.19" -pkgrel=10 -arch="aarch64 x86_64 x86" -subpackages="musl-dev-armhf:package_dev" - -_arch="armhf" -_mirror="http://dl-cdn.alpinelinux.org/alpine/" - -url="https://musl-libc.org" -license="MIT" -options="!check !strip" -pkgdesc="the musl library (lib c) implementation for $_arch" - -_target="$(arch_to_hostspec $_arch)" - -source=" - musl-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/musl-$pkgver-r$pkgrel.apk - musl-dev-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/musl-dev-$pkgver-r$pkgrel.apk -" - -package() { - mkdir -p "$pkgdir/usr/$_target" - cd "$pkgdir/usr/$_target" - tar -xf $srcdir/musl-$pkgver-r$pkgrel-$_arch.apk - rm .PKGINFO .SIGN.* -} -package_dev() { - mkdir -p "$subpkgdir/usr/$_target" - cd "$subpkgdir/usr/$_target" - tar -xf $srcdir/musl-dev-$pkgver-r$pkgrel-$_arch.apk - rm .PKGINFO .SIGN.* - - # symlink everything from /usr/$_target/usr/* to /usr/$_target/* - # so the cross-compiler gcc does not fail to build. - for _dir in include lib; do - mkdir -p "$subpkgdir/usr/$_target/$_dir" - cd "$subpkgdir/usr/$_target/usr/$_dir" - for i in *; do - cd "$subpkgdir/usr/$_target/$_dir" - ln -s /usr/$_target/usr/$_dir/$i $i - done - done -} - -sha512sums="172e6abfe13ddf0290bbddca33b3b67f4787524d1523c29d20c0ed374dca0a3dda7243cc251604c5a98bc6b272868628671af48936dec7ab17395ce14ba9365c musl-1.1.19-r10-armhf.apk -e0aafccc867235f296df407363ea3a16690722a02903fdf415a8417d5a4581c3da45c0b3616c3da5f00a68e6051a2eec617d4fa05ae7c605fdbac700e15b71c9 musl-dev-1.1.19-r10-armhf.apk" diff --git a/aports/cross/musl-x86_64/APKBUILD b/aports/cross/musl-x86_64/APKBUILD deleted file mode 100644 index 8d3393b5..00000000 --- a/aports/cross/musl-x86_64/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Automatically generated aport, do not edit! -# Generator: pmbootstrap aportgen musl-x86_64 - -pkgname="musl-x86_64" -pkgver="1.1.19" -pkgrel=10 -arch="armhf aarch64 x86" -subpackages="musl-dev-x86_64:package_dev" - -_arch="x86_64" -_mirror="http://dl-cdn.alpinelinux.org/alpine/" - -url="https://musl-libc.org" -license="MIT" -options="!check !strip" -pkgdesc="the musl library (lib c) implementation for $_arch" - -_target="$(arch_to_hostspec $_arch)" - -source=" - musl-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/musl-$pkgver-r$pkgrel.apk - musl-dev-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/musl-dev-$pkgver-r$pkgrel.apk -" - -package() { - mkdir -p "$pkgdir/usr/$_target" - cd "$pkgdir/usr/$_target" - tar -xf $srcdir/musl-$pkgver-r$pkgrel-$_arch.apk - rm .PKGINFO .SIGN.* -} -package_dev() { - mkdir -p "$subpkgdir/usr/$_target" - cd "$subpkgdir/usr/$_target" - tar -xf $srcdir/musl-dev-$pkgver-r$pkgrel-$_arch.apk - rm .PKGINFO .SIGN.* - - # symlink everything from /usr/$_target/usr/* to /usr/$_target/* - # so the cross-compiler gcc does not fail to build. - for _dir in include lib; do - mkdir -p "$subpkgdir/usr/$_target/$_dir" - cd "$subpkgdir/usr/$_target/usr/$_dir" - for i in *; do - cd "$subpkgdir/usr/$_target/$_dir" - ln -s /usr/$_target/usr/$_dir/$i $i - done - done -} - -sha512sums="b1370973e0b2bc28c01e0a2620c9a95db7a1564315c989455805e903ea456823b022797a4309c73db2c75b9f303b98d59acf4ce6d410074cdf2a3d7e98fd6d81 musl-1.1.19-r10-x86_64.apk -8734538c911d8247966c068234451bc63a3b950542952410ae16138ce7109b5e02bf46c400b4bb1fd925f0916a4c1114786e8cda2c824089ba9f6167bf4d6544 musl-dev-1.1.19-r10-x86_64.apk" diff --git a/aports/device/bluetooth-raspberry-pi/50-bluetooth-hci-auto-poweron.rules b/aports/device/bluetooth-raspberry-pi/50-bluetooth-hci-auto-poweron.rules deleted file mode 100644 index f88cefe4..00000000 --- a/aports/device/bluetooth-raspberry-pi/50-bluetooth-hci-auto-poweron.rules +++ /dev/null @@ -1,2 +0,0 @@ -# Set bluetooth power up -ACTION=="add", SUBSYSTEM=="bluetooth", KERNEL=="hci[0-9]*", RUN+="/usr/bin/hciconfig %k up" diff --git a/aports/device/bluetooth-raspberry-pi/APKBUILD b/aports/device/bluetooth-raspberry-pi/APKBUILD deleted file mode 100644 index 61f90e71..00000000 --- a/aports/device/bluetooth-raspberry-pi/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Maintainer: He Yangxuan - -pkgname=bluetooth-raspberry-pi -pkgver=1 -pkgrel=0 -pkgdesc="Service and udev rule for built-in bluetooth on Raspberry Pi zero w, 3B, 3B plus" -url="https://github.com/RPi-Distro/bluez-firmware" -arch="noarch" -license="MIT" -depends="bluez bluez-deprecated" -install="$pkgname.post-install" -source="pi-bluetooth.openrc 50-bluetooth-hci-auto-poweron.rules" -options="!check" - -package() { - cd "$srcdir" - install -Dm644 50-bluetooth-hci-auto-poweron.rules "$pkgdir"/etc/udev/rules.d/50-bluetooth-hci-auto-poweron.rules - install -Dm755 pi-bluetooth.openrc "$pkgdir"/etc/init.d/pi-bluetooth -} - -sha512sums="34a50554466dd6096cbee9b14fc0d77b268b731cd45981e69394343dad25d6006dbe44bee30700d71b80c593d38699dfc870983ae7d862b9c09afb39c5d3b383 pi-bluetooth.openrc -511281ae8cbebd4390836ba83049a7fb793121d60ebd6c436bf36330e0aab738a827daf7fd6721cc71681e72b7ddaa581814264cc3bf759f07148fe5b657b981 50-bluetooth-hci-auto-poweron.rules" diff --git a/aports/device/bluetooth-raspberry-pi/bluetooth-raspberry-pi.post-install b/aports/device/bluetooth-raspberry-pi/bluetooth-raspberry-pi.post-install deleted file mode 100755 index 9b971e99..00000000 --- a/aports/device/bluetooth-raspberry-pi/bluetooth-raspberry-pi.post-install +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -# Enable pi-bluetooth init script -rc-update add bluetooth default -rc-update add pi-bluetooth default diff --git a/aports/device/bluetooth-raspberry-pi/pi-bluetooth.openrc b/aports/device/bluetooth-raspberry-pi/pi-bluetooth.openrc deleted file mode 100755 index 2d6347a6..00000000 --- a/aports/device/bluetooth-raspberry-pi/pi-bluetooth.openrc +++ /dev/null @@ -1,12 +0,0 @@ -#!/sbin/openrc-run - -command="/usr/bin/hciattach" -command_args="-n /dev/ttyAMA0 bcm43xx 115200 noflow -" -command_background=true -pidfile="/run/hciattach.pid" - -depend() { - before bluetooth - after modules - need localmount -} diff --git a/aports/device/device-amazon-thor/APKBUILD b/aports/device/device-amazon-thor/APKBUILD deleted file mode 100755 index 61c2cf6a..00000000 --- a/aports/device/device-amazon-thor/APKBUILD +++ /dev/null @@ -1,27 +0,0 @@ -pkgname=device-amazon-thor -pkgver=1 -pkgrel=9 -pkgdesc="Amazon KFHDX 7inch 2013" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-amazon-thor mkbootimg msm-fb-refresher mesa-dri-swrast" -makedepends="devicepkg-dev" -install="" -subpackages="" -source=" - deviceinfo - fb.modes -" -options="!check" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="d790fc98e56ea8376bc1619cf374f744989cebcb37e5874f5cf5b99f974c2b2cae327add45fecc59720ed3b06a2d7c98129d523d62d165aff1a173ac8417dca2 deviceinfo -e96725e631ba474980274266fd5af85c72fcd31543d0b5f5dbe7bd610f9650f881708a41887d61ba3e1d821b88668c3ca3d18667e9a1de918560a1ff762dda3d fb.modes" diff --git a/aports/device/device-amazon-thor/deviceinfo b/aports/device/device-amazon-thor/deviceinfo deleted file mode 100755 index 7e90e9c0..00000000 --- a/aports/device/device-amazon-thor/deviceinfo +++ /dev/null @@ -1,35 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Amazon Kindle Fire HDX 2013 (7-inch)" -deviceinfo_manufacturer="Amazon" -deviceinfo_date="" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_screen_width="1200" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="/dev/input/event0" -deviceinfo_weston_pixman_type="2" - -# Kernel related -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 buildvariant=userdebug" - -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x01e00000" -deviceinfo_flash_pagesize="2048" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_fastboot_vendor_id="0x1949" -deviceinfo_flash_fastboot_max_size="510" - -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" diff --git a/aports/device/device-amazon-thor/fb.modes b/aports/device/device-amazon-thor/fb.modes deleted file mode 100755 index 6c4fc9aa..00000000 --- a/aports/device/device-amazon-thor/fb.modes +++ /dev/null @@ -1,7 +0,0 @@ -mode "1200x1920-0" - # D: 1.116 MHz, H: 0.877 kHz, V: 0.448 Hz - geometry 1200 1920 1200 1920 24 - timings 896149 16 32 25 10 24 2 - accel false - rgba 8/16,8/8,8/0,0/0 -endmode diff --git a/aports/device/device-asus-duma/APKBUILD b/aports/device/device-asus-duma/APKBUILD deleted file mode 100644 index cf51396e..00000000 --- a/aports/device/device-asus-duma/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -pkgname="device-asus-duma" -pkgdesc="ASUS MeMO Pad FHD 10 (ME302KL)" -pkgver=0.1 -pkgrel=0 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-asus-duma mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="firmware-asus-duma" - mkdir "$subpkgdir" -} - -sha512sums="98e2d7ac4d01063315634fc4a2e3c50a6fc76db9755c2fdc0b884d460acf15c2955f830b976d41889b4a176febf7bec1d48c485bdcd69cd099caccc8381d858e deviceinfo" diff --git a/aports/device/device-asus-duma/deviceinfo b/aports/device/device-asus-duma/deviceinfo deleted file mode 100644 index 6bff67b7..00000000 --- a/aports/device/device-asus-duma/deviceinfo +++ /dev/null @@ -1,34 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="ASUS MeMO Pad FHD 10 (ME302KL)" -deviceinfo_manufacturer="ASUS" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1920" -deviceinfo_screen_height="1200" -deviceinfo_dev_touchscreen="/dev/input/event0" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.hardware=msm8960 maxcpus=2 androidboot.selinux=permissive buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x80200000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - -# Weston red screen workaround (see issue #54) -deviceinfo_weston_pixman_type="2" diff --git a/aports/device/device-asus-flo/90-android-touch-dev.rules b/aports/device/device-asus-flo/90-android-touch-dev.rules deleted file mode 100644 index 91a69638..00000000 --- a/aports/device/device-asus-flo/90-android-touch-dev.rules +++ /dev/null @@ -1,14 +0,0 @@ -# udev rules file -# All device names can be read from weston's logfile - -# Touchscreen -# default ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0 0 1 0" -# Left - 90 degree clockwise ENV{LIBINPUT_CALIBRATION_MATRIX}="0 -1 1 1 0 0" -# 180 degree clockwise ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1" -# Right - 270 degree clockwise ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1" -# reflect along y axis ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 1 0 0" - -SUBSYSTEM=="input", ATTRS{name}=="Elan Touchscreen", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1", \ -ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0 0 1 0" - diff --git a/aports/device/device-asus-flo/APKBUILD b/aports/device/device-asus-flo/APKBUILD deleted file mode 100644 index d4443889..00000000 --- a/aports/device/device-asus-flo/APKBUILD +++ /dev/null @@ -1,43 +0,0 @@ -pkgname=device-asus-flo -pkgver=0 -pkgrel=13 -pkgdesc="Google Nexus 7 2013 flo" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-asus-flo mkbootimg mesa mesa-egl mesa-dri-freedreno" -makedepends="" -install="" -subpackages="$pkgname-weston $pkgname-nonfree-firmware:nonfree_firmware" -source="deviceinfo 90-android-touch-dev.rules wpa_supplicant.conf pointercal weston.ini" - -options="!check" - -package() { - install -D -m644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -D -m644 "$srcdir"/wpa_supplicant.conf \ - "$pkgdir"/etc/wpa_supplicant/wpa_supplicant.conf - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -D -m644 "$srcdir"/pointercal \ - "$pkgdir"/etc/pointercal -} - -weston() { - install_if="$pkgname weston" - install -Dm644 "$srcdir"/weston.ini \ - "$subpkgdir"/etc/xdg/weston/weston.ini -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="firmware-asus-flo" - mkdir "$subpkgdir" -} - -sha512sums="6f67406d0af3e6908c649acdacab7970493bfe9cdb6f546e4a61e00d480c806f55c71e5238176a9fa2874bf33183e36a2d7a00f09bb647f5a65beb619d90fa38 deviceinfo -5ac89b627f52d2f1103c3329bd905cdbb906cae5bb332d52e6805d7971fbcc0faabe1fd9d2beb7c6de4e4487c05047eaa17852dbf9e114ee3c5d4b0d57d73859 90-android-touch-dev.rules -3278921cc1617d10fdd13dfbeaf213cda0078d069e727acd8cfac10bd8ade6f373be1e22fd1e4b50ae71cd2eae09f7d6aad5de42338d9ea9f8c1a34f0b60cb69 wpa_supplicant.conf -cf913217b41a3dde8bc2a16a5bc82013c85679de0e81db1cfc36f2409ea034fec430082ddcb207c16746453601cf8381300b049cd2fb131f1916dc7dbcc247e3 pointercal -de794566118f1744d068a94e6a75b61d43f6749a4b0871a5270fa7a2048164d609c71fcffa61845c2a7dd4cb5fbeb72c0e4f8b73b382f36d6ff0bcc9b8a5ae25 weston.ini" diff --git a/aports/device/device-asus-flo/deviceinfo b/aports/device/device-asus-flo/deviceinfo deleted file mode 100644 index f42cf0f3..00000000 --- a/aports/device/device-asus-flo/deviceinfo +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Nexus 7 2013 Wifi" -deviceinfo_manufacturer="Asus" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_dev_touchscreen="/dev/input/event1" -deviceinfo_screen_width="1200" -deviceinfo_screen_height="1920" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_base="0x80200000" -# Feed the whacky bootloader that eats 26 characters -deviceinfo_kernel_cmdline="xxxxxxxxxxxxxxxxxxxxxxxxxxconsole=ttyMSM0,115200,n8 user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3 vmalloc=340M" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-asus-flo/pointercal b/aports/device/device-asus-flo/pointercal deleted file mode 100644 index 48e18ccd..00000000 --- a/aports/device/device-asus-flo/pointercal +++ /dev/null @@ -1 +0,0 @@ -57486 105 31016 -393 54683 1214768 65536 1200 1920 diff --git a/aports/device/device-asus-flo/weston.ini b/aports/device/device-asus-flo/weston.ini deleted file mode 100644 index 72039ae3..00000000 --- a/aports/device/device-asus-flo/weston.ini +++ /dev/null @@ -1,5 +0,0 @@ -[core] -xwayland=true -backend=drm-backend.so -[shell] -background-image=/usr/share/wallpapers/postmarketos.jpg diff --git a/aports/device/device-asus-flo/wpa_supplicant.conf b/aports/device/device-asus-flo/wpa_supplicant.conf deleted file mode 100644 index f20de2ce..00000000 --- a/aports/device/device-asus-flo/wpa_supplicant.conf +++ /dev/null @@ -1,8 +0,0 @@ -update_config=1 -eapol_version=1 -ap_scan=1 -fast_reauth=1 -pmf=1 -disable_scan_offload=1 -tdls_external_control=1 -no_ctrl_interface= diff --git a/aports/device/device-asus-grouper/90-android-touch-dev.rules b/aports/device/device-asus-grouper/90-android-touch-dev.rules deleted file mode 100644 index 494fd186..00000000 --- a/aports/device/device-asus-grouper/90-android-touch-dev.rules +++ /dev/null @@ -1,3 +0,0 @@ -SUBSYSTEM=="input", ATTRS{name}=="elan-touchscreen", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \ -ENV{WL_CALIBRATION}="0.982113 -0.006129 1.983124 -0.002560 1.000800 -6.012451" diff --git a/aports/device/device-asus-grouper/APKBUILD b/aports/device/device-asus-grouper/APKBUILD deleted file mode 100644 index af1597b6..00000000 --- a/aports/device/device-asus-grouper/APKBUILD +++ /dev/null @@ -1,28 +0,0 @@ -pkgname=device-asus-grouper -pkgver=1 -pkgrel=14 -pkgdesc="Asus Nexus 7 2012 Wifi" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-asus-grouper mkbootimg mesa-dri-swrast" -makedepends="" -install="" -subpackages="" -source="deviceinfo - 90-android-touch-dev.rules - pointercal" -options="!check" - -package() { - install -D -m644 "$srcdir/deviceinfo" \ - "$pkgdir/etc/deviceinfo" - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -D -m644 "$srcdir"/pointercal \ - "$pkgdir"/etc/pointercal -} - -sha512sums="6d7ea5d197aed62548fc68e42e18620a8f493436c2cf431e438e4cffa9fac40c690873b4498e328192f2d9b46f3f2fd5321e6847b2793b5caf5f08ccaf59fb1d deviceinfo -05f938784e8f30cdbe9923a5f3e34ce7c539060d3a621741206bc5ed02afd7cbf480b02fbe48a70968e7182f885ab9bfe57c4d1e7c6eefca54a6f7188d2849f2 90-android-touch-dev.rules -ae9c145ffd745c83c73edbc486d3b9d22c6cbb8c57827b6f1ba87b6449a17a73a443be7daa0ab87de8df2dd9594e624364652c84ec1e7b536d37f52449a5a58c pointercal" diff --git a/aports/device/device-asus-grouper/deviceinfo b/aports/device/device-asus-grouper/deviceinfo deleted file mode 100644 index c5b74714..00000000 --- a/aports/device/device-asus-grouper/deviceinfo +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Nexus 7 2012 Wifi" -deviceinfo_manufacturer="Asus" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" -deviceinfo_dev_touchscreen="/dev/input/event0" - -# Splash screen -deviceinfo_screen_width="800" -deviceinfo_screen_height="1280" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" -deviceinfo_flash_fastboot_max_size="650" diff --git a/aports/device/device-asus-grouper/pointercal b/aports/device/device-asus-grouper/pointercal deleted file mode 100644 index 58d3a7fe..00000000 --- a/aports/device/device-asus-grouper/pointercal +++ /dev/null @@ -1 +0,0 @@ -40574 133 -243068 -264 39483 459840 65536 800 1280 diff --git a/aports/device/device-asus-t00f/APKBUILD b/aports/device/device-asus-t00f/APKBUILD deleted file mode 100644 index a6e9f6a5..00000000 --- a/aports/device/device-asus-t00f/APKBUILD +++ /dev/null @@ -1,38 +0,0 @@ -pkgname="device-asus-t00f" -pkgdesc="Asus Zenfone 5" -pkgver=0.1 -pkgrel=3 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-asus-t00f mkbootimg" -makedepends="devicepkg-dev" -subpackages="$pkgname-x11" -source=" - deviceinfo - xorg.conf -" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - install -Dm644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - devicepkg_package $startdir $pkgname -} - -x11() { - install_if="$pkgname xorg-server" - depends=" - libinput - xf86-input-libinput - xf86-video-fbdev" - install -Dm644 "$srcdir"/xorg.conf \ - "$subpkgdir"/etc/X11/xorg.conf.d/10-t00f.conf -} - -sha512sums="7a31b027a17f90872dfe3303227e36a699b0a95619ef27165183e83f91e084d4d61bc9e38bfd13e94f805b328f8850397d05d1f4acde49f86f4c599c98cf8f19 deviceinfo -2511fa519813061531757996fbbbb9eecae1a136d2e13149fd7afe04d19982c7eaa5ced8df57860bb816186f206915fcbd4a9e34fdf92b2c6efe3320a223c328 xorg.conf" diff --git a/aports/device/device-asus-t00f/deviceinfo b/aports/device/device-asus-t00f/deviceinfo deleted file mode 100644 index 7ac5c403..00000000 --- a/aports/device/device-asus-t00f/deviceinfo +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Asus Zenfone 5" -deviceinfo_manufacturer="Asus" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="x86" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="720" -deviceinfo_screen_height="1280" -deviceinfo_dev_touchscreen="/dev/input/event1" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="init=/init pci=noearly earlyprintk=nologger loglevel=0 kmemleak=off androidboot.bootmedia=sdcard androidboot.hardware=redhookbay watchdog.watchdog_thresh=60 androidboot.spid=xxxx:xxxx:xxxx:xxxx:xxxx:xxxx androidboot.serialno=01234567890123456789 ip=50.0.0.2:50.0.0.1::255.255.255.0::usb0:on vmalloc=172M slub_max_order=2" -deviceinfo_generate_bootimg="false" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="" -deviceinfo_flash_offset_kernel="" -deviceinfo_flash_offset_ramdisk="" -deviceinfo_flash_offset_second="" -deviceinfo_flash_offset_tags="" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-asus-t00f/xorg.conf b/aports/device/device-asus-t00f/xorg.conf deleted file mode 100644 index 3a68d23f..00000000 --- a/aports/device/device-asus-t00f/xorg.conf +++ /dev/null @@ -1,4 +0,0 @@ -Section "Device" - Identifier "Card0" - Driver "fbdev" -EndSection diff --git a/aports/device/device-asus-tf101/APKBUILD b/aports/device/device-asus-tf101/APKBUILD deleted file mode 100644 index 76d84355..00000000 --- a/aports/device/device-asus-tf101/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-asus-tf101" -pkgdesc="Asus Eee Pad Transformer" -pkgver=0.2 -pkgrel=3 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-asus-tf101 mkbootimg blobtools" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="4acc93d01368cf7ae71587f46289534e99b35a913a3d6a823801b70184f14c22d42b25fe334ebb4a05e96a9a10e886353fe513120a26e53adb1aa3d127c9aaa8 deviceinfo" diff --git a/aports/device/device-asus-tf101/deviceinfo b/aports/device/device-asus-tf101/deviceinfo deleted file mode 100644 index 903f0318..00000000 --- a/aports/device/device-asus-tf101/deviceinfo +++ /dev/null @@ -1,33 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Asus Eee Pad Transformer" -deviceinfo_manufacturer="Asus" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1280" -deviceinfo_screen_height="800" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="adb" - -deviceinfo_kernel_cmdline="nvmem=128M@384M mem=1024M@0M vmalloc=128M gpt video=tegrafb console=tty0 usbcore.oldscheme_first=1 lp0_vec=8192@0x1fbed000 root=/dev/mmcblk0p7 ro quiet splash" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_bootimg_blobpack="true" -deviceinfo_flash_offset_base="0x10000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-asus-z00t/90-touchscreen.rules b/aports/device/device-asus-z00t/90-touchscreen.rules deleted file mode 100644 index 4524817b..00000000 --- a/aports/device/device-asus-z00t/90-touchscreen.rules +++ /dev/null @@ -1,2 +0,0 @@ -SUBSYSTEM=="input", ATTRS{name}=="ft5x06_ts", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" diff --git a/aports/device/device-asus-z00t/APKBUILD b/aports/device/device-asus-z00t/APKBUILD deleted file mode 100644 index af12d171..00000000 --- a/aports/device/device-asus-z00t/APKBUILD +++ /dev/null @@ -1,34 +0,0 @@ -# Reference: -pkgname="device-asus-z00t" -pkgdesc="Zenfone 2 Laser/Selfie (1080p)" -pkgver=0.1 -pkgrel=1 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-asus-z00t mkbootimg mesa-dri-swrast libsparse msm-fb-refresher" -makedepends="devicepkg-dev" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware" -source=" - deviceinfo - 90-touchscreen.rules -" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - install -Dm644 "$srcdir"/90-touchscreen.rules "$pkgdir"/etc/udev/rules.d/90-touchscreen.rules -} - -nonfree_firmware() { - pkgdesc="All non-free firmwares from a device image. Includes firmware for wifi, modem and camera among others." - depends="firmware-asus-z00t" - mkdir "$subpkgdir" -} - -sha512sums="e2ddd7db3cb1aa6dfad6f3c3c57bfb6faf62e228a5bc86deb2e44fd1a9fcd2806c72b563940f8622f1f9e5ad012ce53c8ee8bb27f9a67d4be2efaa87de4e563c deviceinfo -5bcf314aa8e77db9d9673a93886906bd15e8c3c57f8d0c4343977d2ce8d017af5608a3d13cd2cbacf155e3ecf632ccab6ff6f3b0c95eb4a2a3b35686a3c842db 90-touchscreen.rules" diff --git a/aports/device/device-asus-z00t/deviceinfo b/aports/device/device-asus-z00t/deviceinfo deleted file mode 100644 index 79bac09e..00000000 --- a/aports/device/device-asus-z00t/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Asus Zenfone 2 Laser/Selfie (1080p)" -deviceinfo_manufacturer="Asus" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="androidboot.hardware=qcom ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 androidboot.selinux=permissive" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x10000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-bq-chaozu/APKBUILD b/aports/device/device-bq-chaozu/APKBUILD deleted file mode 100644 index ed74488e..00000000 --- a/aports/device/device-bq-chaozu/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-bq-chaozu" -pkgdesc="Aquaris U" -pkgver=0.1 -pkgrel=1 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-bq-chaozu mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="be011171642f25380c2c1d20c06c47547257ea5a2727aee06e11d61bcf64c5ffca1105d6825ade150b0ec43ac1dc79d1868136037f59c93d84703be789af13a7 deviceinfo" diff --git a/aports/device/device-bq-chaozu/deviceinfo b/aports/device/device-bq-chaozu/deviceinfo deleted file mode 100644 index 6993ab7d..00000000 --- a/aports/device/device-bq-chaozu/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="BQ Aquaris U" -deviceinfo_manufacturer="BQ" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="720" -deviceinfo_screen_height="1280" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="androidboot.console=ttyHSL0 androidboot.hardware=qcom user_debug=30 msm_rtb.filter=0x237 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 earlycon=msm_hsl_uart,0x78B0000 buildvariant=user" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x80000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-fairphone-fp2/APKBUILD b/aports/device/device-fairphone-fp2/APKBUILD deleted file mode 100644 index f8080568..00000000 --- a/aports/device/device-fairphone-fp2/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -pkgname="device-fairphone-fp2" -pkgdesc="Fairphone 2" -pkgver=2 -pkgrel=0 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-fairphone-fp2 mkbootimg mesa-dri-swrast" -makedepends="devicepkg-dev" -source="deviceinfo" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -nonfree_firmware() { - pkgdesc="WCNSS firmware (WiFi, Bluetooth, FM)" - depends="firmware-fairphone-fp2" - mkdir "$subpkgdir" -} - -sha512sums="fe35eb83d1eb5bc0d6bfced5db30238730a2309e8266556f36ca2a9e34ecc2b3825b9533416e93d147ff5488455db7b760d059fde07a714137aae57d0e227e2c deviceinfo" diff --git a/aports/device/device-fairphone-fp2/deviceinfo b/aports/device/device-fairphone-fp2/deviceinfo deleted file mode 100644 index eee90e4e..00000000 --- a/aports/device/device-fairphone-fp2/deviceinfo +++ /dev/null @@ -1,35 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Fairphone 2" -deviceinfo_manufacturer="Fairphone" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="/dev/input/event0" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x3b7 ehci-hcd.park=3 androidboot.bootdevice=msm_sdcc.1" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - -# Weston red screen workaround (see issue #54) -deviceinfo_weston_pixman_type="2" - diff --git a/aports/device/device-google-glass/APKBUILD b/aports/device/device-google-glass/APKBUILD deleted file mode 100644 index 3609e343..00000000 --- a/aports/device/device-google-glass/APKBUILD +++ /dev/null @@ -1,17 +0,0 @@ -pkgname="device-google-glass" -pkgdesc="Google Glass" -pkgver=0.1 -pkgrel=4 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-google-glass mkbootimg mesa-dri-swrast" -source="deviceinfo" - -package() { - install -Dm644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo -} - -sha512sums="5b5336077b0ff513f6a9d1b39e5ecf69af1289edcc92308ac8cdaa42e8307bcb24faf6af0a2e5da0f498f1c0d584245660b60431fd281bcf55c3a49fc8285f15 deviceinfo" diff --git a/aports/device/device-google-glass/deviceinfo b/aports/device/device-google-glass/deviceinfo deleted file mode 100644 index 610fe489..00000000 --- a/aports/device/device-google-glass/deviceinfo +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Glass" -deviceinfo_manufacturer="Google" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="640" -deviceinfo_screen_height="360" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyO2,115200n8 vmalloc=500M androidboot.console=ttyO2 androidboot.carrier=wifi-only product_type=w cpuidle_sysfs_switch" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x80000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-gp-peak/APKBUILD b/aports/device/device-gp-peak/APKBUILD deleted file mode 100644 index 8d5e9c68..00000000 --- a/aports/device/device-gp-peak/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -pkgname="device-gp-peak" -pkgdesc="Geeksphone Peak" -pkgver=0.1 -pkgrel=5 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-gp-peak mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source=" - deviceinfo - device-gp-peak.start - fb.modes -" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - - install -Dm755 "$srcdir"/$pkgname.start "$pkgdir"/etc/local.d/$pkgname.start - install -Dm644 "$srcdir"/fb.modes "$pkgdir"/etc/fb.modes -} - -sha512sums="c6680d1fc55e91a698404c4f92485b7ec86b743a907fdbc256accf37ac3b978c6cac7001b8b8a0982ffee4ad349bbe240f7235e42d89020098fa92eb80acde0a deviceinfo -b77fc5191c07bf2b6a5bf5e702351f8de024a6f15d3726c88da1ab2e3d8185cbb468acbea533d07bf595855d53ab8bcd3a48fd9f35d55b78981f1ae23d44bbd8 device-gp-peak.start -3a2c1c53ec67d40639920ace68ebf13ecff5966a8f94a603f625e01e5f403178c511c21c6de841837e256b714045e7c90cc0cb62537a9f0a536ad4b390f9c3c3 fb.modes" diff --git a/aports/device/device-gp-peak/device-gp-peak.start b/aports/device/device-gp-peak/device-gp-peak.start deleted file mode 100644 index 4e625f9b..00000000 --- a/aports/device/device-gp-peak/device-gp-peak.start +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -udevadm test /devices/virtual/graphics/fb0 -udevadm test /devices/virtual/input/input2/event2 -udevadm test /devices/platform/soc-audio/sound/card0/controlC0 -udevadm test /devices/platform/soc-audio/sound/card0/pcmC0D0c -udevadm test /devices/platform/soc-audio/sound/card0/pcmC0D0p diff --git a/aports/device/device-gp-peak/deviceinfo b/aports/device/device-gp-peak/deviceinfo deleted file mode 100644 index 341e706a..00000000 --- a/aports/device/device-gp-peak/deviceinfo +++ /dev/null @@ -1,34 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Geeksphone Peak" -deviceinfo_manufacturer="Geeksphone" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="540" -deviceinfo_screen_height="960" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" -deviceinfo_weston_pixman_type="2" -deviceinfo_dev_touchscreen="/dev/input/event2" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="androidboot.hardware=qcom loglevel=1" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x00200000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01308000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="4096" -deviceinfo_flash_fastboot_max_size="400" diff --git a/aports/device/device-gp-peak/fb.modes b/aports/device/device-gp-peak/fb.modes deleted file mode 100644 index dfa5f2c2..00000000 --- a/aports/device/device-gp-peak/fb.modes +++ /dev/null @@ -1,6 +0,0 @@ -mode "540x960-0" - # D: 0.001 MHz, H: 0.001 kHz, V: 0.000 Hz - geometry 540 960 540 960 16 - timings 898000000 75 129 4 8 5 4 - rgba 8/16,8/8,8/0,8/24 -endmode diff --git a/aports/device/device-htc-a5ul/APKBUILD b/aports/device/device-htc-a5ul/APKBUILD deleted file mode 100644 index df44d804..00000000 --- a/aports/device/device-htc-a5ul/APKBUILD +++ /dev/null @@ -1,25 +0,0 @@ -# Reference: -pkgname="device-htc-a5ul" -pkgdesc="hTC Desire 816" -pkgver=0.1 -pkgrel=1 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-htc-a5ul mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo initfs-hook.sh" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh -} - -sha512sums="f3a73742194b8fd64f7ea7190cfbc4428ed7e5be78be1de7d050ffc4da523a04b5aeb5dd78436f6a917880a033d0c266cb32399bff9526b34f5456a53bc823eb deviceinfo -765abaad5fda0dfda5e62e1e48414d3eea822198f39d0792171a04d73f86f6273a6e562afab430cbfcdd084412568a0ad03d012e9c40c5564f5cd1b9c0f181eb initfs-hook.sh" diff --git a/aports/device/device-htc-a5ul/deviceinfo b/aports/device/device-htc-a5ul/deviceinfo deleted file mode 100644 index e42a8f36..00000000 --- a/aports/device/device-htc-a5ul/deviceinfo +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="hTC Desire 816" -deviceinfo_manufacturer="hTC" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="720" -deviceinfo_screen_height="1280" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02008000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x01e00000" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-htc-a5ul/initfs-hook.sh b/aports/device/device-htc-a5ul/initfs-hook.sh deleted file mode 100644 index 79f65b41..00000000 --- a/aports/device/device-htc-a5ul/initfs-hook.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# set usb properties -echo 4 > /sys/devices/platform/android_usb/usb_function_switch diff --git a/aports/device/device-htc-ace/90-android-touch-dev.rules b/aports/device/device-htc-ace/90-android-touch-dev.rules deleted file mode 100644 index 3b8ad763..00000000 --- a/aports/device/device-htc-ace/90-android-touch-dev.rules +++ /dev/null @@ -1,6 +0,0 @@ -# Touchscreen (use 'weston-calibrator' to calibrate) -SUBSYSTEM=="input", ATTRS{name}=="synaptics-rmi-touchscreen", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1", \ -ENV{WL_CALIBRATION}="0.963488 0.004947 14.422623 -0.076271 1.026566 -7.303467" - - diff --git a/aports/device/device-htc-ace/APKBUILD b/aports/device/device-htc-ace/APKBUILD deleted file mode 100644 index e4f536e1..00000000 --- a/aports/device/device-htc-ace/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -pkgname=device-htc-ace -pkgver=1 -pkgrel=11 -pkgdesc="HTC Desire HD" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-htc-ace mkbootimg mesa-dri-swrast" -makedepends="" -install="" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware" -source=" - deviceinfo - initfs-hook.sh - 90-android-touch-dev.rules -" -options="!check" - -package() { - install -D -m644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="firmware-aosp-broadcom-wlan" - mkdir "$subpkgdir" -} - -sha512sums="57a44f5670df1ba34812c849d1650907b4d800d2979c120ed4fe54e6b714802b9bdb63b0beba81ad476e8bee72c4f0d03a330423733e8ccfa534a642ff955b27 deviceinfo -3ce2d134aa59677e25a160b5985c552fbf048b237169bbeb85e2b8824f734627064b51c097036db10eee0254064d45d804d17372dffcd1ba246938968fe1e225 initfs-hook.sh -ab8fb357bb45ba44723f1ecb01a10db26f8f74b605499673e1ba90c69a9b11a1555983ce90235e3b636d75461c81c81eea0f8318ded06b72dad17f924d8b9901 90-android-touch-dev.rules" diff --git a/aports/device/device-htc-ace/deviceinfo b/aports/device/device-htc-ace/deviceinfo deleted file mode 100644 index 49a5dde4..00000000 --- a/aports/device/device-htc-ace/deviceinfo +++ /dev/null @@ -1,30 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="HTC Desire HD" -deviceinfo_manufacturer="HTC" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="true" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_screen_width="480" -deviceinfo_screen_height="800" - - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_base="0x04000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_kernel_cmdline="no_console_suspend=1 androidboot.selinux=permissive" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-htc-ace/initfs-hook.sh b/aports/device/device-htc-ace/initfs-hook.sh deleted file mode 100644 index 47dab354..00000000 --- a/aports/device/device-htc-ace/initfs-hook.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# set framebuffer resolution -echo 16 > /sys/class/graphics/fb0/bits_per_pixel -echo 480,1600 > /sys/class/graphics/fb0/virtual_size - -# set usb properties -echo 4 > /sys/devices/platform/android_usb/usb_function_switch diff --git a/aports/device/device-htc-bravo/90-android-touch-dev.rules b/aports/device/device-htc-bravo/90-android-touch-dev.rules deleted file mode 100644 index 0fcb167c..00000000 --- a/aports/device/device-htc-bravo/90-android-touch-dev.rules +++ /dev/null @@ -1,3 +0,0 @@ -# Touchscreen -SUBSYSTEM=="input", ATTRS{name}=="synaptics-rmi-touchscreen", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" diff --git a/aports/device/device-htc-bravo/APKBUILD b/aports/device/device-htc-bravo/APKBUILD deleted file mode 100644 index ac6bdcc1..00000000 --- a/aports/device/device-htc-bravo/APKBUILD +++ /dev/null @@ -1,34 +0,0 @@ -pkgname=device-htc-bravo -pkgver=1 -pkgrel=12 -pkgdesc="HTC Desire" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-htc-bravo mkbootimg mesa-dri-swrast" -makedepends="" -install="" -subpackages="" -source=" - deviceinfo - initfs-hook.sh - 90-android-touch-dev.rules - pointercal -" -options="!check" - -package() { - install -D -m644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -D -m644 "$srcdir"/pointercal \ - "$pkgdir"/etc/pointercal -} - -sha512sums="293e3cafc2c562cb8b05ae1c698a184c9f3cb573d5d764e65e3d642db5e0afb07c77da83139dc15624736af396e8e01aa56fd396f7f6e3cdf51f9ec56d499c10 deviceinfo -3ce2d134aa59677e25a160b5985c552fbf048b237169bbeb85e2b8824f734627064b51c097036db10eee0254064d45d804d17372dffcd1ba246938968fe1e225 initfs-hook.sh -f0f69ab3b5b3fed11ec5049f37c71c4e9dcf87dc1f238199a3917dd61957d46783a8798d63d400cc5d3983987e750e3fec6d7117561ad5005f28131ae4821d66 90-android-touch-dev.rules -d3de411b31de4bf4336dfac530e6af3392620ef6276ad143ebe0e417d543bfc7f5c9fcab8dab9342798e2c03281275c97e25bd01e97c350a2596f52795a37cef pointercal" diff --git a/aports/device/device-htc-bravo/deviceinfo b/aports/device/device-htc-bravo/deviceinfo deleted file mode 100644 index 8e02257b..00000000 --- a/aports/device/device-htc-bravo/deviceinfo +++ /dev/null @@ -1,30 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="HTC Desire" -deviceinfo_manufacturer="HTC" -deviceinfo_date="" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="true" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_screen_width="480" -deviceinfo_screen_height="800" -deviceinfo_dev_touchscreen="/dev/input/event2" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_base="0x20000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_kernel_cmdline="" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-htc-bravo/initfs-hook.sh b/aports/device/device-htc-bravo/initfs-hook.sh deleted file mode 100644 index 47dab354..00000000 --- a/aports/device/device-htc-bravo/initfs-hook.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# set framebuffer resolution -echo 16 > /sys/class/graphics/fb0/bits_per_pixel -echo 480,1600 > /sys/class/graphics/fb0/virtual_size - -# set usb properties -echo 4 > /sys/devices/platform/android_usb/usb_function_switch diff --git a/aports/device/device-htc-bravo/pointercal b/aports/device/device-htc-bravo/pointercal deleted file mode 100644 index 0b5729fe..00000000 --- a/aports/device/device-htc-bravo/pointercal +++ /dev/null @@ -1 +0,0 @@ -8122 -24 -1119784 14 7798 -645344 65536 480 800 \ No newline at end of file diff --git a/aports/device/device-htc-flounder/APKBUILD b/aports/device/device-htc-flounder/APKBUILD deleted file mode 100644 index 4bb556c4..00000000 --- a/aports/device/device-htc-flounder/APKBUILD +++ /dev/null @@ -1,27 +0,0 @@ -# Reference: -pkgname="device-htc-flounder" -pkgdesc="Google Nexus 9" -pkgver=0.1 -pkgrel=1 -url="https://postmarketos.org" -license="gpl-v3" -arch="aarch64" -options="!check" -depends="postmarketos-base linux-htc-flounder mkbootimg mesa-dri-swrast libsparse" -makedepends="devicepkg-dev" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} -package() { - devicepkg_package $startdir $pkgname - -} -nonfree_firmware() { - pkgdesc="Firmware" - depends="linux-firmware-brcm firmware-htc-flounder" - mkdir "$subpkgdir" -} -sha512sums="48be91a584861fb2db3d10577b718a1b9daa9ad4fe531c5b79946fe52e89cfecf16559ea4558b4fd736f1e04d4df43c79256c29165d08457507ac2c315bd3cfb deviceinfo" diff --git a/aports/device/device-htc-flounder/deviceinfo b/aports/device/device-htc-flounder/deviceinfo deleted file mode 100644 index d480e86b..00000000 --- a/aports/device/device-htc-flounder/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Nexus 9" -deviceinfo_manufacturer="HTC" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="2048" -deviceinfo_screen_height="1536" -deviceinfo_dev_touchscreen="/dev/input/event2" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="no_console_suspend=1 tegra_wdt.enable_on_probe=1 tegra_wdt.heartbeat=120 androidboot.hardware=flounder androidboot.selinux=permissive selinux=0" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x10000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" -deviceinfo_flash_sparse=true diff --git a/aports/device/device-htc-m8/90-android-touch-dev.rules b/aports/device/device-htc-m8/90-android-touch-dev.rules deleted file mode 100644 index 0fcb167c..00000000 --- a/aports/device/device-htc-m8/90-android-touch-dev.rules +++ /dev/null @@ -1,3 +0,0 @@ -# Touchscreen -SUBSYSTEM=="input", ATTRS{name}=="synaptics-rmi-touchscreen", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" diff --git a/aports/device/device-htc-m8/APKBUILD b/aports/device/device-htc-m8/APKBUILD deleted file mode 100644 index 7d0848ca..00000000 --- a/aports/device/device-htc-m8/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -pkgname="device-htc-m8" -pkgdesc="HTC One M8" -pkgver=0.1 -pkgrel=1 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="linux-htc-m8 mkbootimg mesa-dri-swrast msm-fb-refresher postmarketos-base" -makedepends="devicepkg-dev" -source="deviceinfo - initfs-hook.sh - 90-android-touch-dev.rules" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules -} - -sha512sums="292364ef4b3f6f5132aad207a0e6e0664cba1fa981d714fa862d816bd19cd1141fbdb6f40b47aad34eb0a205a4979303913541a0889188523df274db64b8c4b7 deviceinfo -765abaad5fda0dfda5e62e1e48414d3eea822198f39d0792171a04d73f86f6273a6e562afab430cbfcdd084412568a0ad03d012e9c40c5564f5cd1b9c0f181eb initfs-hook.sh -f0f69ab3b5b3fed11ec5049f37c71c4e9dcf87dc1f238199a3917dd61957d46783a8798d63d400cc5d3983987e750e3fec6d7117561ad5005f28131ae4821d66 90-android-touch-dev.rules" diff --git a/aports/device/device-htc-m8/deviceinfo b/aports/device/device-htc-m8/deviceinfo deleted file mode 100644 index 1605c1cf..00000000 --- a/aports/device/device-htc-m8/deviceinfo +++ /dev/null @@ -1,36 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="HTC One M8" -deviceinfo_manufacturer="HTC" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage_install="true" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.hardware=qcom user_debug=31 ehci-hcd.park=3 zcache androidboot.selinux=permissive" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02008000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x01e00000" -deviceinfo_flash_pagesize="2048" - -# Weston red screen workaround (see issue #54) -deviceinfo_weston_pixman_type="2" - diff --git a/aports/device/device-htc-m8/initfs-hook.sh b/aports/device/device-htc-m8/initfs-hook.sh deleted file mode 100644 index 79f65b41..00000000 --- a/aports/device/device-htc-m8/initfs-hook.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# set usb properties -echo 4 > /sys/devices/platform/android_usb/usb_function_switch diff --git a/aports/device/device-htc-vivo/APKBUILD b/aports/device/device-htc-vivo/APKBUILD deleted file mode 100644 index 5cfb5ea2..00000000 --- a/aports/device/device-htc-vivo/APKBUILD +++ /dev/null @@ -1,25 +0,0 @@ -# Reference: -pkgname="device-htc-vivo" -pkgdesc="Incredible S" -pkgver=1 -pkgrel=1 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-htc-vivo mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo initfs-hook.sh" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh -} - -sha512sums="17b9290a76ff0b892d720f65c2d05b91e54898e7cc4b68ddf244887c6da0bf07113053f0b2782bccd9a382e9aee73da78336158908ca53f6e6921069fb3d3e59 deviceinfo -2d02a02649ee3dc28041045086ffe11c9077067393954295343efb80727432902494da4c3b68f992880f3c0f01a9d164c2517f51519c92445e3ed88872a71e2f initfs-hook.sh" diff --git a/aports/device/device-htc-vivo/deviceinfo b/aports/device/device-htc-vivo/deviceinfo deleted file mode 100644 index f9ca1cd1..00000000 --- a/aports/device/device-htc-vivo/deviceinfo +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="hTC Incredible S" -deviceinfo_manufacturer="hTC" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="480" -deviceinfo_screen_height="800" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="androidboot.selinux=disabled" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x04400000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-htc-vivo/initfs-hook.sh b/aports/device/device-htc-vivo/initfs-hook.sh deleted file mode 100644 index 8fb53910..00000000 --- a/aports/device/device-htc-vivo/initfs-hook.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# set usb properties -echo 4 > /sys/devices/platform/android_usb/usb_function_switch \ No newline at end of file diff --git a/aports/device/device-huawei-angler/90-android-touch-dev.rules b/aports/device/device-huawei-angler/90-android-touch-dev.rules deleted file mode 100644 index 4014a086..00000000 --- a/aports/device/device-huawei-angler/90-android-touch-dev.rules +++ /dev/null @@ -1,7 +0,0 @@ -# udev rules file -# All device names can be read from weston's logfile -# Use default calibration for now. -SUBSYSTEM=="input", ATTRS{name}=="synaptics_dsx", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \ -ENV{ID_INPUT_TOUCHPAD}="" ENV{ID_INPUT_KEY}="" \ -ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0 0 1 0" diff --git a/aports/device/device-huawei-angler/APKBUILD b/aports/device/device-huawei-angler/APKBUILD deleted file mode 100644 index 137e1c2b..00000000 --- a/aports/device/device-huawei-angler/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -pkgname=device-huawei-angler -pkgver=1 -pkgrel=13 -pkgdesc="Huawei Nexus 6P" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-huawei-angler mkbootimg msm-fb-refresher mesa-dri-swrast" -makedepends="" -install="" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware" -source=" - deviceinfo - 90-android-touch-dev.rules - bcmdhd.cal -" - -# Note: bcmdhd.cal is from https://github.com/LineageOS/android_device_huawei_angler/blob/752aaf664ab079f4ce9cbdeae6978f615d39b783/bcmdhd.cal -# TODO: this calibration file isn't valid for all variants of this device -# See https://github.com/LineageOS/android_device_huawei_angler/blob/cm-14.1/init.angler.rc#L450 -options="!check" - -package() { - install -D -m644 "$srcdir/deviceinfo" \ - "$pkgdir/etc/deviceinfo" - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -D -m644 "$srcdir"/bcmdhd.cal \ - "$pkgdir"/etc/wifi/bcmdhd.cal -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="firmware-aosp-broadcom-wlan" - mkdir "$subpkgdir" -} - -sha512sums="ac6581bbe87103e79e4b75c886ba577a147af88a79ed084156963ed3397d544c0b301937c81c1debaf1c6d33992357b3aa0698bc04977ed752c15dbdae64c7b0 deviceinfo -262f9f3e28cbb28d236cf6edce4919766baabb18e5b0cf35d672d306efeaf12fd66ffba57e6d9bef0eee90203dc98f95aab17145e4c12383055afb58b922ae58 90-android-touch-dev.rules -61fe1f91d7b0b570b77fcca76503373cbac2515ca3dcc2f2543b910dfaeb1e935a11975f824f6a72001df4e63329356a6aff2d016e9b4f5d8f7b739fee065c4e bcmdhd.cal" diff --git a/aports/device/device-huawei-angler/bcmdhd.cal b/aports/device/device-huawei-angler/bcmdhd.cal deleted file mode 100644 index 607dd927..00000000 --- a/aports/device/device-huawei-angler/bcmdhd.cal +++ /dev/null @@ -1,227 +0,0 @@ -#BCM4358 WLBGA module for iPA, eLNA board with PCIE for production package -#adding two range TSSI parameters -NVRAMRev=$Rev: 500210 $ -sromrev=11 -boardrev=0x1100 -## boardtype is subject to change -boardtype=0x07a1 -boardflags=0x12001001 -#enable eLNA both 2G/5G -boardflags2=0x00002000 -boardflags3=0x48000109 -#boardnum=57410 -macaddr=00:90:4c:16:70:01 -ccode=ALL -regrev=0 -antswitch=0 -pdgain5g=4 -pdgain2g=4 -tworangetssi2g=0 -tworangetssi5g=0 -lowpowerrange2g=0 -lowpowerrange5g=0 -olpc_thresh=1 -femctrl=10 -vendid=0x14e4 -devid=0x43e9 -manfid=0x2d0 -#prodid=0x052e -nocrc=1 -otpimagesize=484 -xtalfreq=37400 -ltecxmux=0x78560 - -rxgains2gelnagaina0=3 -rxgains2gtrisoa0=8 -rxgains2gtrelnabypa0=1 -rxgains5gelnagaina0=3 -rxgains5gtrisoa0=7 -rxgains5gtrelnabypa0=1 -rxgains5gmelnagaina0=3 -rxgains5gmtrisoa0=7 -rxgains5gmtrelnabypa0=1 -rxgains5ghelnagaina0=3 -rxgains5ghtrisoa0=6 -rxgains5ghtrelnabypa0=1 -rxgains2gelnagaina1=3 -rxgains2gtrisoa1=8 -rxgains2gtrelnabypa1=1 -rxgains5gelnagaina1=3 -rxgains5gtrisoa1=7 -rxgains5gtrelnabypa1=1 -rxgains5gmelnagaina1=3 -rxgains5gmtrisoa1=7 -rxgains5gmtrelnabypa1=1 -rxgains5ghelnagaina1=3 -rxgains5ghtrisoa1=6 -rxgains5ghtrelnabypa1=1 -rxchain=3 -txchain=3 -aa2g=3 -aa5g=3 -agbg0=0 -agbg1=0 -aga0=0 -aga1=0 -tssipos2g=1 -extpagain2g=2 -tssipos5g=1 -extpagain5g=2 -tempthresh=120 -temps_hysteresis=15 -tempoffset=255 -rawtempsense=0x1ff - -#PA parameters copied from 4356 wlbga design bcm94356wlsagbl - -pa2gccka0=0xff34,0x1557,0xfd57 -pa2ga0=0xff44,0x15de,0xfd58 -#pa5ga0=-166,6427,-744,-174,6340,-742,-188,6004,-721,-178,6037,-714 -pa5ga0=0xff3a,0x16fc,0xfd30,0xff37,0x16fe,0xfd2e,0xff40,0x16d3,0xfd3a,0xff3a,0x1643,0xfd46 - -pa2gccka1=0xff47,0x176a,0xfd21 -pa2ga1=0xff4b,0x16bb,0xfd41 -#pa5ga1=-168,6277,-731,-189,5964,-722,-173,6056,-712,-165,6195,-718 -pa5ga1=0xff3c,0x17ea,0xfd18,0xff3c,0x17af,0xfd1c,0xff43,0x16f5,0xfd36,0xff40,0x16ff,0xfd34 - - -#pa2ga0=-165,5774,-687 -#pa2ga1=-151,6040,-693 -#pa5ga0=-171,5985,-715,-164,5988,-710,-149,5992,-688,-165,5935,-699 -#pa5ga1=-178,6049,-724,-166,6117,-721,-157,6073,-704,-164,6043,-712 - -###low range -#pa2ga2=-108,4009,-577 -#pa2ga3=-129,4081,-572 -#pa5ga2=-101,4150,-583,-103,4080,-582,-80,4147,-590,-120,3997,-567 -#pa5ga3=-139,4129,-579,-133,4111,-580,-115,4129,-581,-121,4120,-577 - -maxp2ga0=82 -maxp5ga0=82,82,82,82 -maxp2ga1=82 -maxp5ga1=82,82,82,82 - - -subband5gver=0x4 -pdoffsetcckma0=0x2 -pdoffsetcckma1=0x2 -pdoffset40ma0=0x2222 -pdoffset80ma0=0x0000 -pdoffset40ma1=0x2222 -pdoffset80ma1=0x0000 -cckbw202gpo=0x2222 -cckbw20ul2gpo=0x2222 - -mcsbw202gpo=0xDC655442 -mcsbw402gpo=0xFE777666 -dot11agofdmhrbw202gpo=0x4431 -ofdmlrbw202gpo=0x1111 - -mcsbw205glpo=0xA9654431 -mcsbw405glpo=0xA9864444 -mcsbw805glpo=0xcc865555 -#mcsbw805glpo=0xBB865555 - -mcsbw205gmpo=0xA9654431 -mcsbw405gmpo=0xA9864444 -mcsbw805gmpo=0xcc865555 - -mcsbw205ghpo=0x99654431 -mcsbw405ghpo=0xA9864444 -mcsbw805ghpo=0xfe865555 - -mcslr5glpo=0x0000 -mcslr5gmpo=0x0000 -mcslr5ghpo=0x0000 - -sb20in40hrpo=0x0 -sb20in80and160hr5glpo=0x0 -sb40and80hr5glpo=0x0 -sb20in80and160hr5gmpo=0x0 -sb40and80hr5gmpo=0x0 -sb20in80and160hr5ghpo=0x0 -sb40and80hr5ghpo=0x0 -sb20in40lrpo=0x0 -sb20in80and160lr5glpo=0x0 -sb40and80lr5glpo=0x0 -sb20in80and160lr5gmpo=0x0 -sb40and80lr5gmpo=0x0 -sb20in80and160lr5ghpo=0x0 -sb40and80lr5ghpo=0x0 -dot11agduphrpo=0x0 -dot11agduplrpo=0x0 -phycal_tempdelta=25 -temps_period=15 -phy4350_ss_opt=1 -AvVmid_c0=2,140,2,145,2,145,2,145,2,145 -AvVmid_c1=2,140,2,145,2,145,2,145,2,145 -rssicorrnorm_c0=-1,-1 -rssicorrnorm_c1=-1,-1 -rssicorrnorm5g_c0=1,2,2,0,2,2,1,2,2,1,2,3 -rssicorrnorm5g_c1=0,1,2,0,1,2,0,1,2,0,1,2 -epsdelta2g0=0 -epsdelta2g1=0 -papdwar=4 -cckdigfilttype=2 -cck_onecore_tx=1 -tssisleep_en=0x1f - -swctrlmap_5g=0x02080208,0x05a00000,0x04200000,0x000000,0x0fd -swctrlmap_2g=0x14011401,0x28500000,0x08100000,0x020202,0x0ff -#fem_table_init_val=0x1,0x1 -swctrlmapext_2g=0x0,0x0,0x0,0x0,0x03 - -## Enabling OOB signal - needed for final board -host_wake_opt=0 - -# For Sensor Hub UART -#muxenab=0x4 - -## 2G TX power compensation -#powoffs2gtna0=0,-1,-1,0,2,3,4,4,2,0,-1,-2,-1,0 -powoffs2gtna0=0,0,0,0,0,-1,-1,0,0,0,0,1,1,0 -powoffs2gtna1=0,0,0,0,0,-1,-1,0,0,0,1,1,1,0 - -#rpcal2g=10 -#rpcal5gb0=20 -#rpcal5gb1=10 -#rpcal5gb2=20 -#rpcal5gb3=10 - -#dynamicsarctrl_2g=0xffb0 -#dynamicsarctrl_5g=0xffa0 - -ofdmfilttype=1 -ofdmfiltbesel_2g=0x39 -ofdmfiltbe_2g=4 -ofdmfiltbesel_5g20=0x3f -ofdmfiltbe_5g20=4 -ofdmfiltbesel_5g40=0x1f -ofdmfiltbe_5g40=4 -ofdmfiltbesel_5g80=0xf -ofdmfiltbe_5g80=4 - -btc_params82=0x0 -btc_params51=0x409f -btc_params73=0 -prot_btrssi_thresh=0 - -pacalshift5ga0=0,0,0,0,-2,-2,0,-2,0,-2,0,-3 -pacalshift5ga1=0,0,0,0,-2,-1,0,-2,-2,-2,0,-3 - -# ########### BTC Dynctl profile params ############ -# flags:bit0 - dynctl enabled, bit1 dynamic desense, bit2 dynamic mode -btcdyn_flags=0x7 -btcdyn_dflt_dsns_level=0 -btcdyn_low_dsns_level=0 -btcdyn_mid_dsns_level=12 -btcdyn_high_dsns_level=2 -btcdyn_default_btc_mode=1 -# --- number of rows in the array vars below --- -btcdyn_msw_rows=1 -btcdyn_dsns_rows=1 -# --- mode switch data rows (max is 4) --- -btcdyn_msw_row0=1,12,-70,-5,-100 -# --- desense switching data rows (max is 4) --- -btcdyn_dsns_row0=5,4,0,-65,-65 -## btc parameters should be added diff --git a/aports/device/device-huawei-angler/deviceinfo b/aports/device/device-huawei-angler/deviceinfo deleted file mode 100644 index 6566ee94..00000000 --- a/aports/device/device-huawei-angler/deviceinfo +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Nexus 6P" -deviceinfo_manufacturer="Huawei" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="aarch64" - -# Splash screen -deviceinfo_screen_width="1440" -deviceinfo_screen_height="2560" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -# Angler doesn't have a second in the boot.img. This is a placeholder value for mkbootimg -deviceinfo_flash_offset_second="0x00000000" -deviceinfo_flash_offset_tags="0x01e00000" -deviceinfo_kernel_cmdline="androidboot.hardware=angler androidboot.console=ttyHSL0 msm_rtb.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 boot_cpus=0-3" -deviceinfo_flash_pagesize="4096" diff --git a/aports/device/device-huawei-y530/APKBUILD b/aports/device/device-huawei-y530/APKBUILD deleted file mode 100644 index 49052c3d..00000000 --- a/aports/device/device-huawei-y530/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -pkgname="device-huawei-y530" -pkgdesc="Huawei Ascend Y530" -pkgver=1 -pkgrel=11 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-huawei-y530 mkbootimg mesa-dri-swrast" -makedepends="devicepkg-dev" -source="deviceinfo" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="firmware-huawei-y530" - mkdir "$subpkgdir" -} - -sha512sums="c6d12a7869423b15b96938e05ca638b27a0e644ec4374978bfaacf9cf26d9bf6f4fa8a8e6bd708394ac0225fefe9f24b51a18b478730d1782cd64c5e6e0327f4 deviceinfo" diff --git a/aports/device/device-huawei-y530/deviceinfo b/aports/device/device-huawei-y530/deviceinfo deleted file mode 100644 index 2e5b75f2..00000000 --- a/aports/device/device-huawei-y530/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Huawei Ascend Y530" -deviceinfo_manufacturer="Huawei" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="480" -deviceinfo_screen_height="854" -deviceinfo_dev_touchscreen="/dev/input/event1" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x01e00000" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-infocus-flatfish/APKBUILD b/aports/device/device-infocus-flatfish/APKBUILD deleted file mode 100644 index 3bc395df..00000000 --- a/aports/device/device-infocus-flatfish/APKBUILD +++ /dev/null @@ -1,28 +0,0 @@ -# Reference: -pkgname="device-infocus-flatfish" -pkgdesc="InFocus New Tab F1" -pkgver=0.1 -pkgrel=3 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-infocus-flatfish mkbootimg mesa-dri-swrast" -makedepends="devicepkg-dev" -source=" - deviceinfo - fb.modes -" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - - install -Dm644 "$srcdir"/fb.modes "$pkgdir"/etc/fb.modes -} - -sha512sums="219e75dfb9f28761258f623a0587163fbcff884a594d495362ad25ae4fccc11d2a9a7ac98e2e9b547b8b63f9ef844bcb290a2b09ad80218c2ca905d872570a83 deviceinfo -2961df06a303e28139f67ae8abc99d0ddc48d2aa4c1d67a51e924493a27b46fff7e6072ddfd4273bdfa6b489598cbfda65400c3afdfaf16fce7fc407d19284f0 fb.modes" diff --git a/aports/device/device-infocus-flatfish/deviceinfo b/aports/device/device-infocus-flatfish/deviceinfo deleted file mode 100644 index c87a618b..00000000 --- a/aports/device/device-infocus-flatfish/deviceinfo +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="InFocus New Tab F1" -deviceinfo_manufacturer="InFocus" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1280" -deviceinfo_screen_height="800" -deviceinfo_dev_touchscreen="/dev/input/event2" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyS0,115200 rw init=/init androidboot.hardware=flatfish ion_reserve=256M loglevel=7" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x40000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-infocus-flatfish/fb.modes b/aports/device/device-infocus-flatfish/fb.modes deleted file mode 100644 index fb5f8ca0..00000000 --- a/aports/device/device-infocus-flatfish/fb.modes +++ /dev/null @@ -1,6 +0,0 @@ -mode "1280x800-0" - # D: 0.001 MHz, H: 0.001 kHz, V: 0.000 Hz - geometry 1280 800 1280 800 16 - timings 898000000 75 129 4 8 5 4 - rgba 8/16,8/8,8/0,8/24 -endmode diff --git a/aports/device/device-jolla-sbj/APKBUILD b/aports/device/device-jolla-sbj/APKBUILD deleted file mode 100644 index d21e1268..00000000 --- a/aports/device/device-jolla-sbj/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-jolla-sbj" -pkgdesc="Jolla phone" -pkgver=0.1 -pkgrel=3 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-jolla-sbj mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="48cc790203cd79e1801d31ab27725b0917096b581f431fa3d1d67be5adece48201d35bc2ef82ed6835556d47405b0df674fd8acaf23f00f1a80b2eb18ac0fec9 deviceinfo" diff --git a/aports/device/device-jolla-sbj/deviceinfo b/aports/device/device-jolla-sbj/deviceinfo deleted file mode 100644 index 5b9ecbeb..00000000 --- a/aports/device/device-jolla-sbj/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Jolla phone" -deviceinfo_manufacturer="Jolla" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="540" -deviceinfo_screen_height="960" -deviceinfo_dev_touchscreen="/dev/input/event0" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="androidboot.hardware=qcom user_debug=31 ehci-hcd.park=3 maxcpus=2 zram.num_devices=2 root=/dev/mmcblk0p28" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x80200000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-leeco-s2/APKBUILD b/aports/device/device-leeco-s2/APKBUILD deleted file mode 100644 index 06e603b9..00000000 --- a/aports/device/device-leeco-s2/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-leeco-s2" -pkgdesc="LeEco Le 2" -pkgver=0.1 -pkgrel=5 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-leeco-s2 mkbootimg msm-fb-refresher mesa-dri-swrast" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="558952381513e7886f26dc3f6b32324dda462e4beb62b43f53bae8213b53356807057ce87bc5174abd49efb76ed01a9d9a925b213ee54d016bdd2fa2133b6f83 deviceinfo" diff --git a/aports/device/device-leeco-s2/deviceinfo b/aports/device/device-leeco-s2/deviceinfo deleted file mode 100644 index 00c9c371..00000000 --- a/aports/device/device-leeco-s2/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="LeEco Le 2" -deviceinfo_manufacturer="LeEco" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="1920" -deviceinfo_screen_height="1080" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom msm_rtb.filter=0x237 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 earlyprintk buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x80000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-lenovo-karate/90-android-touch-dev.rules b/aports/device/device-lenovo-karate/90-android-touch-dev.rules deleted file mode 100644 index b2ccd04a..00000000 --- a/aports/device/device-lenovo-karate/90-android-touch-dev.rules +++ /dev/null @@ -1,4 +0,0 @@ -# use 'weston-calibrator' to calibrate the touchscreen! -SUBSYSTEM=="input", ATTRS{name}=="fts_ts", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1", \ -ENV{LIBINPUT_CALIBRATION_MATRIX}="0.975358 0.020484 -20.695250 0.031747 1.034592 -60.641296" \ No newline at end of file diff --git a/aports/device/device-lenovo-karate/APKBUILD b/aports/device/device-lenovo-karate/APKBUILD deleted file mode 100644 index 09ef00be..00000000 --- a/aports/device/device-lenovo-karate/APKBUILD +++ /dev/null @@ -1,27 +0,0 @@ -pkgname="device-lenovo-karate" -pkgdesc="Lenovo K6 Power" -pkgver=0.1 -pkgrel=7 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-lenovo-karate mkbootimg mdss-fb-init-hack mesa-dri-swrast" -source="deviceinfo 90-android-touch-dev.rules" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware" - -package() { - install -Dm644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -Dm755 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules -} - -nonfree_firmware() { - depends="firmware-lenovo-karate" - pkgdesc="Wifi firmware" - mkdir "$subpkgdir" -} - -sha512sums="843416b78a36da8e21531305813209c513841b06457bc996417b732d68922ab6c9e616eb593f5de068af61b283112096269843cf560b49507938531e8d00abcb deviceinfo -25086c95c67c27151112efac1dcf7792589c990cc0a93ee910654445a3f9cc66c4a5ab656b3256224b39c49fe104540757cc36abf9de19f47c28c4fa82c4f552 90-android-touch-dev.rules" diff --git a/aports/device/device-lenovo-karate/deviceinfo b/aports/device/device-lenovo-karate/deviceinfo deleted file mode 100644 index e184ac6d..00000000 --- a/aports/device/device-lenovo-karate/deviceinfo +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Lenovo K6 Power" -deviceinfo_manufacturer="Lenovo" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="/dev/input/event1" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=tty60,115200,n8 androidboot.console=tty60 androidboot.hardware=qcom msm_rtb.filter=0x237 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 gpt androidboot.bootdevice=7824900.sdhci earlycon=msm_hsl_uart,0x78B0000 androidboot.selinux=permissive buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x80000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-lg-bullhead/APKBUILD b/aports/device/device-lg-bullhead/APKBUILD deleted file mode 100644 index 08ff5fe1..00000000 --- a/aports/device/device-lg-bullhead/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-lg-bullhead" -pkgdesc="Google Nexus 5X" -pkgver=0.1 -pkgrel=4 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-lg-bullhead mkbootimg mesa-dri-swrast libsparse msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="b0087bcd4d0f6167fc84413d54ce17cae56ff65a1ac0c89e2fd3da67bda2030b6b2370b307dea1eb5945e83da7172bd6c8f875031c8b979e54d46a27a86e1245 deviceinfo" diff --git a/aports/device/device-lg-bullhead/deviceinfo b/aports/device/device-lg-bullhead/deviceinfo deleted file mode 100644 index 2a1768bc..00000000 --- a/aports/device/device-lg-bullhead/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Nexus 5X" -deviceinfo_manufacturer="LG" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="/dev/input/event0" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.hardware=bullhead boot_cpus=0-5 lpm_levels.sleep_disabled=1 msm_poweroff.download_mode=0 buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x01e00000" -deviceinfo_flash_pagesize="4096" -deviceinfo_flash_sparse=true diff --git a/aports/device/device-lg-d285/90-android-touch-dev.rules b/aports/device/device-lg-d285/90-android-touch-dev.rules deleted file mode 100644 index cabe0f6e..00000000 --- a/aports/device/device-lg-d285/90-android-touch-dev.rules +++ /dev/null @@ -1,5 +0,0 @@ -# use 'weston-calibrator' to calibrate the touchscreen! -SUBSYSTEM=="input", ATTRS{name}=="touch_dev", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \ -ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1" - diff --git a/aports/device/device-lg-d285/APKBUILD b/aports/device/device-lg-d285/APKBUILD deleted file mode 100644 index 58d71ed5..00000000 --- a/aports/device/device-lg-d285/APKBUILD +++ /dev/null @@ -1,30 +0,0 @@ -pkgname=device-lg-d285 -pkgver=1 -pkgrel=6 -pkgdesc="LG L65" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-lg-d285 mkbootimg msm-fb-refresher mesa-dri-swrast" -makedepends="" -install="" -subpackages="" -source=" - deviceinfo - initfs-hook.sh - 90-android-touch-dev.rules -" -options="!check" - -package() { - install -D -m644 "$srcdir/deviceinfo" \ - "$pkgdir/etc/deviceinfo" - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh -} - -sha512sums="08371290f50b6758fb3bb57ea9cdc372c0b1a965bb52304a0880748e5dd6465eddccaa4186142236ce9d49c32a14f92cb4940b0af7e33d5cc97814c2fb5e4b98 deviceinfo -78224ef3078dd8ee6b15de7a72cc3fe05ec4cb8eb503e11aa06e83009da8a8c104562463ac747d00ac9854c18b16fa557df01f377f4f9af5d98429906fdd016f initfs-hook.sh -568d407c3e96b45d740af8617f0e389d36a7091dceccae8f77288fdc45fb7a5ed418c28f31d7fe5a51d92337a40b2dd741b1b18ad02e3fbae91f9a2035d62c95 90-android-touch-dev.rules" diff --git a/aports/device/device-lg-d285/deviceinfo b/aports/device/device-lg-d285/deviceinfo deleted file mode 100644 index 71a05e75..00000000 --- a/aports/device/device-lg-d285/deviceinfo +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="LG L65" -deviceinfo_manufacturer="LG" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="true" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_screen_width="480" -deviceinfo_screen_height="800" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - -# Weston red screen workaround (see issue #54) -deviceinfo_weston_pixman_type="2" diff --git a/aports/device/device-lg-d285/initfs-hook.sh b/aports/device/device-lg-d285/initfs-hook.sh deleted file mode 100644 index bc3c1d14..00000000 --- a/aports/device/device-lg-d285/initfs-hook.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# set framebuffer resolution -echo 1 > /sys/devices/fd900000.qcom,mdss_mdp/qcom,mdss_fb_primary.134/leds/lcd-backlight/brightness \ No newline at end of file diff --git a/aports/device/device-lg-d855/90-android-touch-dev.rules b/aports/device/device-lg-d855/90-android-touch-dev.rules deleted file mode 100644 index d87a6544..00000000 --- a/aports/device/device-lg-d855/90-android-touch-dev.rules +++ /dev/null @@ -1,5 +0,0 @@ -# use 'weston-calibrator' to calibrate the touchscreen! -SUBSYSTEM=="input", ATTRS{name}=="touch_dev", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \ -ENV{WL_CALIBRATION}="0.982113 -0.006129 1.983124 -0.002560 1.000800 -6.012451" - diff --git a/aports/device/device-lg-d855/APKBUILD b/aports/device/device-lg-d855/APKBUILD deleted file mode 100644 index 380d0dfe..00000000 --- a/aports/device/device-lg-d855/APKBUILD +++ /dev/null @@ -1,23 +0,0 @@ -pkgname=device-lg-d855 -pkgver=1 -pkgrel=15 -pkgdesc="LG G3 International" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-lg-d855 mkbootimg mesa-dri-swrast" -makedepends="" -install="" -subpackages="" -source="deviceinfo 90-android-touch-dev.rules" -options="!check" - -package() { - install -D -m644 "$srcdir/deviceinfo" \ - "$pkgdir/etc/deviceinfo" - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules -} - -sha512sums="278d9b772091a0cb0264f03685e3c9fabbc9361653c27ee338e0290df39c6999932503f6f7356a136f0894730ecce411f61520c28e6bb7d063c1fd58985f2564 deviceinfo -ee25f3d0377f027d108593eb7953b8db49d7f05a5c36a0c8ca7e7849d15e3c217bc1ac97d77a66e28d2db4b81c0f50b905639911276da40321d2b6cca7f797df 90-android-touch-dev.rules" diff --git a/aports/device/device-lg-d855/deviceinfo b/aports/device/device-lg-d855/deviceinfo deleted file mode 100644 index 9cdbe2dc..00000000 --- a/aports/device/device-lg-d855/deviceinfo +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="LG G3 International" -deviceinfo_manufacturer="LG" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="true" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_screen_width="1440" -deviceinfo_screen_height="2560" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - -# Weston red screen workaround (see issue #54) -deviceinfo_weston_pixman_type="2" diff --git a/aports/device/device-lg-dory/90-touchscreen-dev.rules b/aports/device/device-lg-dory/90-touchscreen-dev.rules deleted file mode 100644 index a3429cb2..00000000 --- a/aports/device/device-lg-dory/90-touchscreen-dev.rules +++ /dev/null @@ -1,7 +0,0 @@ -# udev rules file -# All device names can be read from weston's logfile - -# Touchscreen detection -SUBSYSTEM=="input", ATTRS{name}=="synaptics_rmi4_i2c", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" - diff --git a/aports/device/device-lg-dory/APKBUILD b/aports/device/device-lg-dory/APKBUILD deleted file mode 100644 index b942c40d..00000000 --- a/aports/device/device-lg-dory/APKBUILD +++ /dev/null @@ -1,23 +0,0 @@ -pkgname=device-lg-dory -pkgver=1 -pkgrel=8 -pkgdesc="LG G Watch" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-lg-dory mkbootimg msm-fb-refresher mesa-dri-swrast" -makedepends="" -install="" -subpackages="" -source="deviceinfo 90-touchscreen-dev.rules" -options="!check" - -package() { - install -D -m644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -D -m644 "$srcdir"/90-touchscreen-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-touchscreen-dev.rules -} - -sha512sums="e793bcb264acca83886cf5bae8a1783bf4574b48148c8b2ced062321ecc96aa9204ede08dfa2973cb9326c47d73fea26cc9b02b998ed3babd37066cafa54b673 deviceinfo -f52a0bfab7e0067c0837662b5297e6c6d3433a1fc1cbdfaf3000227452d88980b99ac196541fda3bd57fd789580cb4ef96299b24e1bdb277f21f42418fcf17fa 90-touchscreen-dev.rules" diff --git a/aports/device/device-lg-dory/deviceinfo b/aports/device/device-lg-dory/deviceinfo deleted file mode 100644 index 5be685f3..00000000 --- a/aports/device/device-lg-dory/deviceinfo +++ /dev/null @@ -1,27 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="LG G Watch" -deviceinfo_manufacturer="LG" -deviceinfo_date="" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_screen_width="280" -deviceinfo_screen_height="280" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x01e00000" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-lg-h815/APKBUILD b/aports/device/device-lg-h815/APKBUILD deleted file mode 100644 index a5846a1f..00000000 --- a/aports/device/device-lg-h815/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-lg-h815" -pkgdesc="LG G4 (h815)" -pkgver=0.1 -pkgrel=5 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-lg-h815 mkbootimg msm-fb-refresher mesa-dri-swrast" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="6928232324228106d65358c66a61315fd777fbdafd5f180363385a9cbc579be10826a727f45c32b75645afa6413807d45795178f2fa83c3111bbd086b125df23 deviceinfo" diff --git a/aports/device/device-lg-h815/deviceinfo b/aports/device/device-lg-h815/deviceinfo deleted file mode 100644 index 417a2289..00000000 --- a/aports/device/device-lg-h815/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="LG G4 (h815)" -deviceinfo_manufacturer="LG" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1440" -deviceinfo_screen_height="2560" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom user_debug=31 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 msm_rtb.filter=0x37 boot_cpus=0-5 buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="4096" - diff --git a/aports/device/device-lg-hammerhead/APKBUILD b/aports/device/device-lg-hammerhead/APKBUILD deleted file mode 100644 index f133dd13..00000000 --- a/aports/device/device-lg-hammerhead/APKBUILD +++ /dev/null @@ -1,56 +0,0 @@ -pkgname=device-lg-hammerhead -pkgver=2 -pkgrel=1 -pkgdesc="Google Nexus 5" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-postmarketos-qcom mkbootimg mesa-dri-freedreno ofono" -makedepends="" -install="$pkgname.post-install" -subpackages="$pkgname-weston $pkgname-x11 $pkgname-nonfree-firmware:nonfree_firmware" -source=" - deviceinfo - weston.ini - xorg.conf - modules-load.conf - brcmfmac4339-sdio.txt -" -options="!check" - -package() { - install -Dm644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -D -m644 "$srcdir"/modules-load.conf \ - "$pkgdir"/etc/modules-load.d/00-${pkgname}.conf - install -D -m644 "$srcdir"/brcmfmac4339-sdio.txt \ - "$pkgdir"/lib/firmware/brcm/brcmfmac4339-sdio.txt -} - -x11() { - install_if="$pkgname xorg-server" - depends=" - libinput - xf86-input-libinput - xf86-video-fbdev" - install -Dm644 "$srcdir"/xorg.conf \ - "$subpkgdir"/etc/X11/xorg.conf.d/10-hammerhead.conf -} - -weston() { - install_if="$pkgname weston" - install -Dm644 "$srcdir"/weston.ini \ - "$subpkgdir"/etc/xdg/weston/weston.ini -} - -nonfree_firmware() { - pkgdesc="Wifi, GPU, Modem and ADSP firmware" - depends="linux-firmware-qcom linux-firmware-brcm firmware-adreno firmware-lg-hammerhead-adsp firmware-lg-hammerhead-modem modem-qcom-msm-mainline-common" - mkdir "$subpkgdir" -} - -sha512sums="c101c0de0f0799bd0d78303f3dc13da74b54369df89ddd85f75e11ef3122f8a4ba8c3543c640a27eb079e9c3afceafec7958c7427abe914b3409ca1430a00f61 deviceinfo -4c22070223f39c419260a6817e5cc2b7881c095deeba031363a5634842dd175dd67eecace980849f0553de79110ef4e43a66143d71433805cd916c37fe7248e9 weston.ini -f86ef35730b89bcc8160c08db7a7fcd0970adf60c0b77af68bac397de49c0d1783e6b8db1762380c9bf874aff2d030c6f44ecb75c803d69e79ede11376409369 xorg.conf -d8ce60ea7acaabf627ddca2f0887a4cda46f313b7aaf7934bef2fef8a6e0798ccefab849e4571e4e3fcd06ae34c1a6efe3b58b401e2e443416f6200e6d4ea769 modules-load.conf -59baf815a45c632f3413dc8d9f48978f91d8f8ee165003689dcd54cc3b3d1af65bfc0c88f76579f840b83b303a28a1de2c2994a651d62cc6f6d8988c8716e345 brcmfmac4339-sdio.txt" diff --git a/aports/device/device-lg-hammerhead/brcmfmac4339-sdio.txt b/aports/device/device-lg-hammerhead/brcmfmac4339-sdio.txt deleted file mode 100644 index 688c388b..00000000 --- a/aports/device/device-lg-hammerhead/brcmfmac4339-sdio.txt +++ /dev/null @@ -1,129 +0,0 @@ -#Hammerhead for 4339 iPA/eLNA / AARDVARK_6_30_271 -#2G CCK Filter / 5G EVM SW Ctrl/Targer power/130930 -#Boardflags3 / 5G cal / RSSI cal - -sromrev=11 -boardrev=0x1106 -boardtype=0x06b6 - -boardflags=0x10081401 -boardflags2=0x00000000 -boardflags3=0x08001188 - -#boardnum=57410 -macaddr=00:90:4c:c5:12:38 -ccode=XV -regrev=17 -antswitch=0 -pdgain2g=7 -pdgain5g=7 -tworangetssi2g=0 -tworangetssi5g=0 -muxenab=0x10 -#sd_gpout=0 -#sd_oobonly=1 -vendid=0x14e4 -devid=0x43ae -manfid=0x2d0 -#prodid=0x052e -nocrc=1 -otpimagesize=502 -xtalfreq=37400 -extpagain2g=2 -pdetrange2g=2 -extpagain5g=2 -pdetrange5g=2 - -rxgains2gelnagaina0=4 -rxgains2gtrisoa0=6 -rxgains2gtrelnabypa0=1 -rxgains5gelnagaina0=5 -rxgains5gtrisoa0=9 - -rxgains5gtrelnabypa0=1 -rxchain=1 -txchain=1 -aa2g=1 -aa5g=1 - -agbg0=0 -aga0=0 - -tssipos5g=0 -tssipos2g=0 - - -pa2gccka0=-116,7568,-852 -pa2ga0=-161,6269,-723 - -pa5ga0=0xFF40,0x15EA,0xFD51,0xFF33,0x160A,0xFD49,0xFF51,0x1706,0xFD3E,0xFF54,0x16E3,0xFD47 -pa5gbw40a0=0xFF45,0x1676,0xFD49,0xFF45,0x1789,0xFD21,0xFF38,0x16CE,0xFD28,0xFF25,0x15D1,0xFD36 -pa5gbw80a0=0xFF49,0x15C6,0xFD61,0xFF52,0x1736,0xFD39,0xFF5D,0x1735,0xFD4B,0xFF48,0x16B4,0xFD3B - -pdoffset40ma0=0 -pdoffset80ma0=0 -pdoffsetcckma0=0 - -maxp2ga0=78 - -cckbw202gpo=0x0000 -cckbw20ul2gpo=0x0000 -cckbw20ul2gpo=0x0 - -ofdmlrbw202gpo=0x8864 -dot11agofdmhrbw202gpo=0x8866 - -mcsbw202gpo=0xaaaa8884 -mcsbw402gpo=0xaaaa8884 - -maxp5ga0=74,74,74,78 - -tssifloor2g=500 - -#low -mcsbw205glpo=0xaa866662 -mcsbw405glpo=0xaa888888 -mcsbw805glpo=0xaa888888 -mcsbw1605glpo=0xaa888888 -#mid -mcsbw205gmpo=0xaa866662 -mcsbw405gmpo=0xaa888888 -mcsbw805gmpo=0xaa888888 -mcsbw1605gmpo=0xaa888888 -#high -mcsbw205ghpo=0xcca88882 -mcsbw405ghpo=0xccaaaaaa -mcsbw805ghpo=0xccaaaaaa -mcsbw1605ghpo=0xccaaaaaa - -mcslr5glpo=0x0000 -mcslr5gmpo=0x0000 -mcslr5ghpo=0x0000 - -sb20in40hrrpo=0x0 -sb20in80and160hr5glpo=0x0 -sb40and80hr5glpo=0x0 -sb20in80and160hr5gmpo=0x0 -sb40and80hr5gmpo=0x0 -sb20in80and160hr5ghpo=0x0 -sb40and80hr5ghpo=0x0 -sb20in40lrpo=0x0 -sb20in80and160lr5glpo=0x0 -sb40and80lr5glpo=0x0 -sb20in80and160lr5gmpo=0x0 -sb40and80lr5gmpo=0x0 -sb20in80and160lr5ghpo=0x0 -sb40and80lr5ghpo=0x0 -dot11agduphrpo=0x0 -dot11agduplrpo=0x0 -phycal_tempdelta=25 -cckdigfilttype=1 - -swctrlmap_5g=0x00080008,0x00040000,0x00000008,0x800301,0x00c -swctrlmap_2g=0x00000000,0x00030001,0x00010000,0x800301,0x0ff -swctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x000 -swctrlmapext_2g=0x00000001,0x00000000,0x00000000,0x000000,0x001 - - -rssicorrnorm_c0=2,2 -rssicorrnorm5g_c0=-1,0,0,-2,0,0,0,1,1,1,2,2 diff --git a/aports/device/device-lg-hammerhead/device-lg-hammerhead.post-install b/aports/device/device-lg-hammerhead/device-lg-hammerhead.post-install deleted file mode 100644 index f3cc5122..00000000 --- a/aports/device/device-lg-hammerhead/device-lg-hammerhead.post-install +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# Enable ofono -rc-update add ofono default diff --git a/aports/device/device-lg-hammerhead/deviceinfo b/aports/device/device-lg-hammerhead/deviceinfo deleted file mode 100644 index 812fe5f2..00000000 --- a/aports/device/device-lg-hammerhead/deviceinfo +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Nexus 5" -deviceinfo_manufacturer="LG" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="qcom-msm8974-lge-nexus5-hammerhead" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_base="0" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x2900000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x02700000" -deviceinfo_kernel_cmdline="console=ttyMSM0,115200,n8 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1 cma=1024m msm.vram=778m g_mass_storage.removable=y" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-lg-hammerhead/modules-load.conf b/aports/device/device-lg-hammerhead/modules-load.conf deleted file mode 100644 index a52c413a..00000000 --- a/aports/device/device-lg-hammerhead/modules-load.conf +++ /dev/null @@ -1,5 +0,0 @@ -# This file contains the names of kernel modules that should be loaded -# at boot time, one per line. Lines beginning with "#" are ignored. - -# wifi module -brcmfmac diff --git a/aports/device/device-lg-hammerhead/weston.ini b/aports/device/device-lg-hammerhead/weston.ini deleted file mode 100644 index c1e36c96..00000000 --- a/aports/device/device-lg-hammerhead/weston.ini +++ /dev/null @@ -1,11 +0,0 @@ -# XWayland seems to be broken for this device. -# NOTE: This information might be outdated! simply delete /etc/xdg/weston/weston.ini -# after installation to check if it is still broken, and please report if it -# isn't broken anymore (or even better: make a pull request, that removes this -# config file). - -[core] -xwayland=true -backend=drm-backend.so -[shell] -background-image=/usr/share/wallpapers/postmarketos.jpg diff --git a/aports/device/device-lg-hammerhead/xorg.conf b/aports/device/device-lg-hammerhead/xorg.conf deleted file mode 100644 index b7374dc4..00000000 --- a/aports/device/device-lg-hammerhead/xorg.conf +++ /dev/null @@ -1,24 +0,0 @@ -Section "ServerLayout" - Identifier "Layout0" - Screen "Screen0" -EndSection - -Section "Device" - Identifier "Card0" - Driver "fbdev" - Option "fbdev" "/dev/fb0" #linuxdeploy -EndSection - -Section "Screen" - Identifier "Screen0" - Device "Card0" - DefaultDepth 24 - SubSection "Display" - Depth 32 - EndSubSection -EndSection - -Section "ServerFlags" - Option "Pixmap" "24" -EndSection - diff --git a/aports/device/device-lg-lenok/90-android-touch-dev.rules b/aports/device/device-lg-lenok/90-android-touch-dev.rules deleted file mode 100644 index b26f5d59..00000000 --- a/aports/device/device-lg-lenok/90-android-touch-dev.rules +++ /dev/null @@ -1,4 +0,0 @@ -# use 'weston-calibrator' to calibrate the touchscreen! -SUBSYSTEM=="input", ATTRS{name}=="synaptics_rmi4_i2c", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \ -ENV{WL_CALIBRATION}="0.982113 -0.006129 1.983124 -0.002560 1.000800 -6.012451" diff --git a/aports/device/device-lg-lenok/APKBUILD b/aports/device/device-lg-lenok/APKBUILD deleted file mode 100644 index d0590286..00000000 --- a/aports/device/device-lg-lenok/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -pkgname=device-lg-lenok -pkgver=1 -pkgrel=10 -pkgdesc="LG G Watch R" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-lg-lenok mkbootimg mesa-dri-swrast" -makedepends="" -install="" -subpackages="" -source="deviceinfo initfs-hook.sh 90-android-touch-dev.rules fb_fix.sh" -options="!check" - -package() { - install -D -m644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -D -m644 "$srcdir"/fb_fix.sh \ - "$pkgdir"/etc/profile.d/fb_fix.sh -} - -sha512sums="2d83e71843f35d72920c26ebe66caf76823c859ec932b03c85bdedcdc22140b51e4437edd48adc8e8b0552d6587c34374d8e352d939872996e3714c0c1bee368 deviceinfo -d29105805adcd79d4f73c2f2c4483a2c627dc7b70acb77f43d085742ef930407c9b1423f7020c34f38e8a09f40cadd991b9acae23e936c90d6a4c0900250da22 initfs-hook.sh -a36ba9017df3b4be233783096c303abafa873dcdf50f6357b82f3c5526fd161a1914dafe143377cb5982955108b987890638b51911d0dd339172554e39a82d9f 90-android-touch-dev.rules -f623da68a750ba5dd367d131841aca182b5041292c800e0c919d25187305546e9e42b876cadadc2f56b73e0e6b718a9149a817f5d571e015f7c9467f7387aa61 fb_fix.sh" diff --git a/aports/device/device-lg-lenok/deviceinfo b/aports/device/device-lg-lenok/deviceinfo deleted file mode 100644 index d897c9c3..00000000 --- a/aports/device/device-lg-lenok/deviceinfo +++ /dev/null @@ -1,26 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="LG G Watch R" -deviceinfo_manufacturer="LG" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_screen_width="320" -deviceinfo_screen_height="320" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_kernel="0x0000000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x01e00000" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-lg-lenok/fb_fix.sh b/aports/device/device-lg-lenok/fb_fix.sh deleted file mode 100644 index 6055f440..00000000 --- a/aports/device/device-lg-lenok/fb_fix.sh +++ /dev/null @@ -1,15 +0,0 @@ -main() { - # Wait untill graphical enviroment is running - sleep 5 - # Workaround for buggy graphics driver - while [ ! ]; - do - echo '0,0' > /sys/class/graphics/fb0/pan; - done -} - -# tty1 autologin -if [ $(tty) = "/dev/tty1" ]; then - # Run in background, to make /etc/profile not wait for it to finish - main & -fi diff --git a/aports/device/device-lg-lenok/initfs-hook.sh b/aports/device/device-lg-lenok/initfs-hook.sh deleted file mode 100644 index 7e264558..00000000 --- a/aports/device/device-lg-lenok/initfs-hook.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# set framebuffer resolution -echo 320,320 > /sys/class/graphics/fb0/virtual_size diff --git a/aports/device/device-lg-mako/90-android-touch-dev.rules b/aports/device/device-lg-mako/90-android-touch-dev.rules deleted file mode 100644 index d87a6544..00000000 --- a/aports/device/device-lg-mako/90-android-touch-dev.rules +++ /dev/null @@ -1,5 +0,0 @@ -# use 'weston-calibrator' to calibrate the touchscreen! -SUBSYSTEM=="input", ATTRS{name}=="touch_dev", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \ -ENV{WL_CALIBRATION}="0.982113 -0.006129 1.983124 -0.002560 1.000800 -6.012451" - diff --git a/aports/device/device-lg-mako/APKBUILD b/aports/device/device-lg-mako/APKBUILD deleted file mode 100644 index 990fe543..00000000 --- a/aports/device/device-lg-mako/APKBUILD +++ /dev/null @@ -1,43 +0,0 @@ -pkgname=device-lg-mako -pkgver=2 -pkgrel=20 -pkgdesc="Google Nexus 4" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-lg-mako mkbootimg mesa-dri-swrast" -makedepends="" -install="" -subpackages="$pkgname-weston" -source="deviceinfo 90-android-touch-dev.rules profile.sh pointercal fb.modes weston.ini" -options="!check" - -package() { - install -Dm644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -Dm644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -Dm644 "$srcdir"/profile.sh \ - "$pkgdir"/etc/profile.d/00-$pkgname.sh - install -Dm644 "$srcdir"/pointercal \ - "$pkgdir"/etc/pointercal - install -Dm644 "$srcdir"/fb.modes \ - "$pkgdir"/etc/fb.modes - - # Disable v4l (video4linux), because without the camera firmware - # blobs this makes dev hang with the kernel this device uses (#1033) - ln -s /dev/null "$pkgdir"/etc/udev/rules.d/60-persistent-v4l.rules -} - -weston() { - install_if="$pkgname weston" - install -Dm644 "$srcdir"/weston.ini \ - "$subpkgdir"/etc/xdg/weston/weston.ini -} - -sha512sums="f28220a839c3be259cfa9c99d91b99012d8992869e66aafcc9d96d676a6dc25e937747063812212f5b43c3ba5be79f4c6c4f479e8eec60cbb641e42c146d2577 deviceinfo -ee25f3d0377f027d108593eb7953b8db49d7f05a5c36a0c8ca7e7849d15e3c217bc1ac97d77a66e28d2db4b81c0f50b905639911276da40321d2b6cca7f797df 90-android-touch-dev.rules -d04013c17caf77a87ebea167dbe48f7efa9c9d3123c5743d359f3ea8ccc6b268fa021535a4bf8291eb4a352f0c92f6eb527da0db340421f53bc1cc439a453306 profile.sh -52b1465c75c51e2dc2e351a0609220af04b939b9edf7fca844cc00bb9eeb4e71f53e34817ba094e477fc43bf15101fcfd07963c791a36be5c52f199bba6a6d9d pointercal -217bdf692ade75d57968299e29e9379ffcfc97addf735663b3e1e7dfce049f9d13b26347b4405ac724ae5fac2946012dcc58014b23b8df357e225b6718dbc0a6 fb.modes -86a0c08720225e4532f797ad69307dfff66867e4a35de1aacceefc48f19721caf93f9a17a268e58f1f5a7e947f157d6984676837c2b5b835b0caf6ee9821bb5a weston.ini" diff --git a/aports/device/device-lg-mako/deviceinfo b/aports/device/device-lg-mako/deviceinfo deleted file mode 100644 index 506c9c5c..00000000 --- a/aports/device/device-lg-mako/deviceinfo +++ /dev/null @@ -1,30 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Nexus 4" -deviceinfo_manufacturer="LG" -deviceinfo_date="" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_screen_width="768" -deviceinfo_screen_height="1280" -deviceinfo_dev_touchscreen="/dev/input/event2" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_kernel="0x80208000" -deviceinfo_flash_offset_ramdisk="0x81800000" -deviceinfo_flash_offset_second="0x81100000" -deviceinfo_flash_offset_tags="0x80200100" -deviceinfo_flash_pagesize="2048" - -# Weston red screen workaround (see issue #54) -deviceinfo_weston_pixman_type="2" diff --git a/aports/device/device-lg-mako/fb.modes b/aports/device/device-lg-mako/fb.modes deleted file mode 100644 index 73aae109..00000000 --- a/aports/device/device-lg-mako/fb.modes +++ /dev/null @@ -1,7 +0,0 @@ -mode "768x1280-0" - # D: 0.002 MHz, H: 0.002 kHz, V: 0.002 Hz - geometry 768 1280 768 1280 16 - timings 453770000 180 8 22 8 4 2 - accel false - rgba 8/24,8/16,8/8,8/0 -endmode diff --git a/aports/device/device-lg-mako/pointercal b/aports/device/device-lg-mako/pointercal deleted file mode 100644 index ac8c26b4..00000000 --- a/aports/device/device-lg-mako/pointercal +++ /dev/null @@ -1 +0,0 @@ -33530 -135 -964096 114 32899 -1376992 65536 768 1280 diff --git a/aports/device/device-lg-mako/profile.sh b/aports/device/device-lg-mako/profile.sh deleted file mode 100644 index d469a6b7..00000000 --- a/aports/device/device-lg-mako/profile.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -# Run a few weston demos, because the postmarketos-demos program depends -# on xwayland for now (Alpine's GTK3 isn't configured for Wayland -# support yet.) -if [ $(tty) = "/dev/tty1" ]; then - ( - sleep 3; - export XDG_RUNTIME_DIR=/tmp/0-runtime-dir - weston-smoke & - weston-simple-damage & - weston-editor & - weston-terminal --shell=/usr/bin/htop & - ) > /dev/null & -fi - diff --git a/aports/device/device-lg-mako/weston.ini b/aports/device/device-lg-mako/weston.ini deleted file mode 100644 index d94ea3a1..00000000 --- a/aports/device/device-lg-mako/weston.ini +++ /dev/null @@ -1,11 +0,0 @@ -# XWayland seems to be broken for this device. -# NOTE: This information might be outdated! simply delete /etc/xdg/weston/weston.ini -# after installation to check if it is still broken, and please report if it -# isn't broken anymore (or even better: make a pull request, that removes this -# config file). - -[core] -xwayland=false -backend=fbdev-backend.so -[shell] -background-image=/usr/share/wallpapers/postmarketos.jpg diff --git a/aports/device/device-motorola-athene/APKBUILD b/aports/device/device-motorola-athene/APKBUILD deleted file mode 100644 index 9cd8bc8e..00000000 --- a/aports/device/device-motorola-athene/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-motorola-athene" -pkgdesc="Motorola Moto G4" -pkgver=0.1 -pkgrel=1 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-motorola-athene mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="4a1c06b52b0faf000e89e08e1f8c006434b6d4f670ad952a808f7d3688c7ec14893fc765ddd05b8e6cbe757d9228f4d7e38e9fb3188cd9a860d5ebcb9d942b1a deviceinfo" diff --git a/aports/device/device-motorola-athene/deviceinfo b/aports/device/device-motorola-athene/deviceinfo deleted file mode 100644 index a5ea36be..00000000 --- a/aports/device/device-motorola-athene/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Moto G4" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="/dev/input/event2" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom msm_rtb.filter=0x237 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 earlyprintk buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x80000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-motorola-falcon/APKBUILD b/aports/device/device-motorola-falcon/APKBUILD deleted file mode 100644 index 6a5b8407..00000000 --- a/aports/device/device-motorola-falcon/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-motorola-falcon" -pkgdesc="Moto G (2013)" -pkgver=0.1 -pkgrel=4 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-motorola-falcon mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="b1c794d3453a3695d7643b50d44e798e6a3f54849c1c2e3ee2c66acff5de3d1c4b23aedf023d17b0be929abbb8a61230bafabb0c3745ee72464a47cf78ae6a27 deviceinfo" diff --git a/aports/device/device-motorola-falcon/deviceinfo b/aports/device/device-motorola-falcon/deviceinfo deleted file mode 100644 index f826a21a..00000000 --- a/aports/device/device-motorola-falcon/deviceinfo +++ /dev/null @@ -1,36 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Moto G (2013)" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="720" -deviceinfo_screen_height="1280" -deviceinfo_dev_touchscreen="/dev/input/event2" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="androidboot.bootdevice=msm_sdcc.1 androidboot.hardware=qcom vmalloc=400M utags.blkdev=/dev/block/platform/msm_sdcc.1/by-name/utags buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" -deviceinfo_flash_sparse=true - -# Make the display output work -deviceinfo_weston_pixman_type="2" - diff --git a/aports/device/device-motorola-ghost/APKBUILD b/aports/device/device-motorola-ghost/APKBUILD deleted file mode 100644 index a46aa7c9..00000000 --- a/aports/device/device-motorola-ghost/APKBUILD +++ /dev/null @@ -1,21 +0,0 @@ -# Reference: -pkgname="device-motorola-ghost" -pkgdesc="Moto X (2013)" -pkgver=0.1 -pkgrel=2 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-motorola-ghost mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo" -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="4f90dc966e2875eda5f451f878c90434ad81c4c6cd2ebe3beb71aff6bcfbaf4c6e547d6d307eb224d1421af5bdd913b4aa08ec1ec516c8eb1a65b85a6d45516c deviceinfo" diff --git a/aports/device/device-motorola-ghost/deviceinfo b/aports/device/device-motorola-ghost/deviceinfo deleted file mode 100644 index 77802000..00000000 --- a/aports/device/device-motorola-ghost/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Moto X (2013)" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="720" -deviceinfo_screen_height="1280" -deviceinfo_dev_touchscreen="/dev/input/event2" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3 maxcpus=2 vmalloc=400M" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x80200000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x02000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-motorola-harpia/APKBUILD b/aports/device/device-motorola-harpia/APKBUILD deleted file mode 100644 index 56c3bed5..00000000 --- a/aports/device/device-motorola-harpia/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -# Reference: -pkgname="device-motorola-harpia" -pkgdesc="Motorola Moto G4 Play" -pkgver=0.1 -pkgrel=1 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-motorola-harpia mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source=" - deviceinfo - initfs-hook.sh -" - - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh -} - -sha512sums="6008cc900a0ee49169ea405add7fb589367905b0f58306750e227739f79dabf9b6dd46b457c8991e6114dda76e8039ac86dfbbce6810e657de7663ac53a73263 deviceinfo -17dabb0190a9191173454ac12c5c8ad8744b922d20807bd9465bc26d485c0f2d34e968d40b8e886a32640f0c36635cde083c4dc7e4122b55c3cff1f9d1b34af6 initfs-hook.sh" diff --git a/aports/device/device-motorola-harpia/deviceinfo b/aports/device/device-motorola-harpia/deviceinfo deleted file mode 100644 index 8116ea51..00000000 --- a/aports/device/device-motorola-harpia/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Moto G4 Play" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="720" -deviceinfo_screen_height="1280" -deviceinfo_dev_touchscreen="/dev/input/event1" -deviceinfo_dev_touchscreen_calibration="1 0 0 0 1 0" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom msm_rtb.filter=0x3F ehci-hcd.park=3 vmalloc=400M androidboot.bootdevice=7824900.sdhci utags.blkdev=/dev/block/bootdevice/by-name/utags utags.backup=/dev/block/bootdevice/by-name/utagsBackup movablecore=160M buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x80000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-motorola-harpia/initfs-hook.sh b/aports/device/device-motorola-harpia/initfs-hook.sh deleted file mode 100644 index f1552a9e..00000000 --- a/aports/device/device-motorola-harpia/initfs-hook.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -# Blank and set brightness (fixes blank screen after boot splash) -echo 0 > /sys/class/graphics/fb0/blank -echo 255 > /sys/devices/soc.0/1a00000.qcom,mdss_mdp/qcom,mdss_fb_primary.126/leds/lcd-backlight/brightness diff --git a/aports/device/device-motorola-maserati/10-safestrap-maserati.sh b/aports/device/device-motorola-maserati/10-safestrap-maserati.sh deleted file mode 100644 index c94ac961..00000000 --- a/aports/device/device-motorola-maserati/10-safestrap-maserati.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -. /etc/deviceinfo -. ./init_functions.sh - -mount_safestrap() { - grep -q PMOS_NO_SAFESTRAP /proc/cmdline && return - - mkdir /ss - mount -t vfat -o uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020 ${deviceinfo_safestrap_partition} /ss - - slot_loc=$(cat /ss/safestrap/active_slot) - - if [ ! -z $slot_loc ]; then - if [ "$slot_loc" = "stock" ]; then - umount /ss - elif [ "$slot_loc" = "safe" ]; then - umount /ss - else - # setup loopbacks - data_partition=$(losetup -f) - losetup $data_partition /ss/safestrap/$slot_loc/userdata.img - kpartx -afs $data_partition - - system_partition=$(losetup -f) - losetup $system_partition /ss/safestrap/$slot_loc/system.img - fi - fi -} - -mount_safestrap diff --git a/aports/device/device-motorola-maserati/APKBUILD b/aports/device/device-motorola-maserati/APKBUILD deleted file mode 100644 index 4bbbc4ba..00000000 --- a/aports/device/device-motorola-maserati/APKBUILD +++ /dev/null @@ -1,21 +0,0 @@ -pkgname="device-motorola-maserati" -pkgdesc="Motorola Motorola Droid 4" -pkgver=0.1 -pkgrel=1 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-motorola-maserati" -source="deviceinfo 10-safestrap-maserati.sh" - -package() { - install -Dm644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - - mkdir -p "$pkgdir"/etc/postmarketos-mkinitfs/hooks/ - install -Dm644 "$srcdir"/10-safestrap-maserati.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/ -} -sha512sums="7e83d44307330366c9d050395f439af2e46dff5b6eaa2bb3806f3b21630219e0b538271cea7fa41acfbc0ad12445e2b07217f4005eadc0ae74eb616ef9126d02 deviceinfo -36e529d5ded647012bb46a3e03ea8916c5046bed628a4b72a0c057dd2de6410bd9a1d74fc01b862feff3a4cfe8b0b0df6bd69fdbb6e63406e97c1811be07f3b8 10-safestrap-maserati.sh" diff --git a/aports/device/device-motorola-maserati/deviceinfo b/aports/device/device-motorola-maserati/deviceinfo deleted file mode 100644 index 657994c1..00000000 --- a/aports/device/device-motorola-maserati/deviceinfo +++ /dev/null @@ -1,24 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Droid 4" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" -deviceinfo_external_storage="true" - -# Device related -deviceinfo_keyboard="true" -deviceinfo_screen_width="540" -deviceinfo_screen_height="960" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="none" -deviceinfo_safestrap_partition="/dev/mmcblk1p25" -deviceinfo_data_partition="/dev/mmcblk1p24" -deviceinfo_system_partition="/dev/mmcblk1p20" diff --git a/aports/device/device-motorola-osprey/90-android-touch-dev.rules b/aports/device/device-motorola-osprey/90-android-touch-dev.rules deleted file mode 100644 index b2ee6aaf..00000000 --- a/aports/device/device-motorola-osprey/90-android-touch-dev.rules +++ /dev/null @@ -1,6 +0,0 @@ -# udev rules file -# All device names can be read from weston's logfile - -# Touchscreen (use 'weston-calibrator' to calibrate) -SUBSYSTEM=="input", ATTRS{name}=="synaptics_dsx_i2c", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" diff --git a/aports/device/device-motorola-osprey/APKBUILD b/aports/device/device-motorola-osprey/APKBUILD deleted file mode 100644 index 6d6aac2e..00000000 --- a/aports/device/device-motorola-osprey/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -pkgname=device-motorola-osprey -pkgver=1 -pkgrel=7 -pkgdesc="Motorola Moto G 3rd gen. (2015)" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-motorola-osprey mkbootimg mesa-dri-swrast" -makedepends="" -install="" -subpackages="" -source="deviceinfo initfs-hook.sh 90-android-touch-dev.rules fb-workaround.sh" -options="!check" - -package() { - install -D -m644 "$srcdir/deviceinfo" \ - "$pkgdir/etc/deviceinfo" - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh - install -D -m644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -D -m644 "$srcdir"/fb-workaround.sh \ - "$pkgdir"/etc/profile.d/00-fb-workaround.sh -} - -sha512sums="beeae4bc4d2c332391e7b10c620608ed1d4cad2db528032bf11406e0686a0850482dfd77a86d34a3f7e8ab8392c3ddb521527f6dbbfebba1755ab6a9f47d6237 deviceinfo -3e9d6bf1bd45328104b91b724472ac0e39cb595fb87f84b6793527019477a73234ae37d33e99419bc5810c018402ea6e68e76c26ace112ee11efc416ac0a7398 initfs-hook.sh -60597699b58aca14a1696329eba4ffb46d98c721d442fb024752e3301ea992ac1727d4609083a299573115288d2039c17831e7c70c2ffdd195a3c20323e6b5fb 90-android-touch-dev.rules -857da7bfe3a44d960ca1c05f8646eedd16140fa339f3b0421353f6cdb4b42f8e5c6457522e70c2eb2f76717404c688c0d92525b9d1e99895f3febb5ae3687420 fb-workaround.sh" diff --git a/aports/device/device-motorola-osprey/deviceinfo b/aports/device/device-motorola-osprey/deviceinfo deleted file mode 100644 index a0ea9e64..00000000 --- a/aports/device/device-motorola-osprey/deviceinfo +++ /dev/null @@ -1,27 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Moto G 3rd gen. (2015)" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="true" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_screen_width="720" -deviceinfo_screen_height="1280" - -# Fastboot related -deviceinfo_generate_bootimg="true" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" diff --git a/aports/device/device-motorola-osprey/fb-workaround.sh b/aports/device/device-motorola-osprey/fb-workaround.sh deleted file mode 100644 index e879ef11..00000000 --- a/aports/device/device-motorola-osprey/fb-workaround.sh +++ /dev/null @@ -1,12 +0,0 @@ -main() { - # Wait until graphical environment is running - sleep 5 - # Workaround for buggy graphics driver - cat /sys/class/graphics/fb0/modes > /sys/class/graphics/fb0/mode -} - -# tty1 autologin -if [ $(tty) = "/dev/tty1" ]; then - # Run in background, to make /etc/profile not wait for it to finish - main & -fi diff --git a/aports/device/device-motorola-osprey/initfs-hook.sh b/aports/device/device-motorola-osprey/initfs-hook.sh deleted file mode 100644 index ab3b1cf4..00000000 --- a/aports/device/device-motorola-osprey/initfs-hook.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# activate touchscreen -echo 1 > /sys/devices/soc.0/78b6000.i2c/i2c-2/2-0020/drv_irq diff --git a/aports/device/device-motorola-peregrine/APKBUILD b/aports/device/device-motorola-peregrine/APKBUILD deleted file mode 100644 index c46d8d23..00000000 --- a/aports/device/device-motorola-peregrine/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Reference: -pkgname="device-motorola-peregrine" -pkgdesc="Moto G 4G (2013)" -pkgver=0.1 -pkgrel=4 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-motorola-peregrine mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -subpackages="$pkgname-nonfree-firmware:nonfree_firmware device-motorola-peregrine-x11" -source="deviceinfo xorg.conf" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -x11() { - install_if="$pkgname xorg-server" - depends=" - libinput - xf86-input-libinput - xf86-video-fbdev" - install -Dm644 "$srcdir"/xorg.conf \ - "$subpkgdir"/etc/X11/xorg.conf.d/10-peregrine.conf -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="firmware-motorola-titan" - mkdir "$subpkgdir" -} - -sha512sums="77b0e979e3b9f039dd53fc1d3441d662e098402e4dd0f73205d3ce5a771522672bc1d4c40e2157575cac64af1c46548a2a398a8a7e0c3f808fbff37757bd40b4 deviceinfo -f86ef35730b89bcc8160c08db7a7fcd0970adf60c0b77af68bac397de49c0d1783e6b8db1762380c9bf874aff2d030c6f44ecb75c803d69e79ede11376409369 xorg.conf" diff --git a/aports/device/device-motorola-peregrine/deviceinfo b/aports/device/device-motorola-peregrine/deviceinfo deleted file mode 100644 index 20da79e7..00000000 --- a/aports/device/device-motorola-peregrine/deviceinfo +++ /dev/null @@ -1,34 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Moto G 4G (2013)" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="720" -deviceinfo_screen_height="1080" -deviceinfo_dev_touchscreen="/dev/input/event3" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="androidboot.bootdevice=msm_sdcc.1 androidboot.hardware=qcom vmalloc=400M androidboot.selinux=permissive" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x10000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - -# Make the display output work -deviceinfo_weston_pixman_type="2" diff --git a/aports/device/device-motorola-peregrine/xorg.conf b/aports/device/device-motorola-peregrine/xorg.conf deleted file mode 100644 index b7374dc4..00000000 --- a/aports/device/device-motorola-peregrine/xorg.conf +++ /dev/null @@ -1,24 +0,0 @@ -Section "ServerLayout" - Identifier "Layout0" - Screen "Screen0" -EndSection - -Section "Device" - Identifier "Card0" - Driver "fbdev" - Option "fbdev" "/dev/fb0" #linuxdeploy -EndSection - -Section "Screen" - Identifier "Screen0" - Device "Card0" - DefaultDepth 24 - SubSection "Display" - Depth 32 - EndSubSection -EndSection - -Section "ServerFlags" - Option "Pixmap" "24" -EndSection - diff --git a/aports/device/device-motorola-potter/APKBUILD b/aports/device/device-motorola-potter/APKBUILD deleted file mode 100644 index 1fdf7e8c..00000000 --- a/aports/device/device-motorola-potter/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-motorola-potter" -pkgdesc="Motorola Moto G5 Plus" -pkgver=0.1 -pkgrel=5 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-motorola-potter mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="4927ebeb9585207afa432cfe360e051aa2a8e6d7126b0f469371c0463aa9d7b7fcec8c8965abe087a9a039e6de0998e8b1b3a51f987936284cd452f124ec638b deviceinfo" diff --git a/aports/device/device-motorola-potter/deviceinfo b/aports/device/device-motorola-potter/deviceinfo deleted file mode 100644 index 48e34c46..00000000 --- a/aports/device/device-motorola-potter/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Moto G5 Plus" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="true" -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom user_debug=30 msm_rtb.filter=0x237 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 vmalloc=350M androidboot.selinux=permissive buildvariant=eng" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="true" -deviceinfo_flash_offset_base="0x80000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-motorola-shamu/APKBUILD b/aports/device/device-motorola-shamu/APKBUILD deleted file mode 100644 index e2751205..00000000 --- a/aports/device/device-motorola-shamu/APKBUILD +++ /dev/null @@ -1,25 +0,0 @@ -# Reference: -pkgname="device-motorola-shamu" -pkgdesc="Motorola Google Nexus 6" -pkgver=0.3 -pkgrel=5 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-motorola-shamu mkbootimg mesa-dri-swrast msm-fb-refresher" -makedepends="devicepkg-dev" -source="deviceinfo initfs-hook.sh" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - install -Dm644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh -} - -sha512sums="28d0e960b9795ce8b93016ed37852d2e616182d3dcd204e8cec25673779f1d4064562b377bb0a420807ce1bc58f37db8a97bd7d71589e557934fa54a26778aa2 deviceinfo -c4f4785a9fea1d8b461e1de4dcd04daae45bd9df94f8123655b981de5ac5718f082a59169c39c506aa996c1642f465249fbc8b6e1c0463aeca6abf74ff523d9c initfs-hook.sh" diff --git a/aports/device/device-motorola-shamu/deviceinfo b/aports/device/device-motorola-shamu/deviceinfo deleted file mode 100644 index 13c48839..00000000 --- a/aports/device/device-motorola-shamu/deviceinfo +++ /dev/null @@ -1,32 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Google Nexus 6" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="armhf" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="1440" -deviceinfo_screen_height="2560" -deviceinfo_dev_touchscreen="/dev/input/event0" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=shamu msm_rtb.filter=0x37 ehci-hcd.park=3 utags.blkdev=/dev/block/platform/msm_sdcc.1/by-name/utags utags.backup=/dev/block/platform/msm_sdcc.1/by-name/utagsBackup coherent_pool=8M" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x0000000b" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x0000000b" -deviceinfo_flash_pagesize="2048" - diff --git a/aports/device/device-motorola-shamu/initfs-hook.sh b/aports/device/device-motorola-shamu/initfs-hook.sh deleted file mode 100644 index c4e74090..00000000 --- a/aports/device/device-motorola-shamu/initfs-hook.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -# enable touchscreen -echo 1 > /sys/devices/f9966000.i2c/i2c-1/1-004a/drv_irq - -# write to screen brightness to fix black screen after splash -cat /sys/devices/fd900000.qcom,mdss_mdp/qcom,mdss_fb_primary.164/leds/lcd-backlight/brightness > \ - /sys/devices/fd900000.qcom,mdss_mdp/qcom,mdss_fb_primary.164/leds/lcd-backlight/brightness - diff --git a/aports/device/device-motorola-titan/90-android-touch-dev.rules b/aports/device/device-motorola-titan/90-android-touch-dev.rules deleted file mode 100644 index 5c9cbd97..00000000 --- a/aports/device/device-motorola-titan/90-android-touch-dev.rules +++ /dev/null @@ -1,8 +0,0 @@ -# udev rules file -# All device names can be read from weston's logfile - -# Touchscreen (use 'weston-calibrator' to calibrate) -SUBSYSTEM=="input", ATTRS{name}=="synaptics_dsx_i2c", \ -ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \ -ENV{WL_CALIBRATION}="1.058484 -0.016513 -7.906464 0.020550 0.998119 -34.100464" - diff --git a/aports/device/device-motorola-titan/APKBUILD b/aports/device/device-motorola-titan/APKBUILD deleted file mode 100644 index 5393e2dc..00000000 --- a/aports/device/device-motorola-titan/APKBUILD +++ /dev/null @@ -1,43 +0,0 @@ -pkgname=device-motorola-titan -pkgver=1 -pkgrel=27 -pkgdesc="Motorola Moto G 2014" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-motorola-titan mkbootimg msm-fb-refresher mesa-dri-swrast" -makedepends="" -install="$pkgname.post-install" -subpackages="$pkgname-weston $pkgname-nonfree-firmware:nonfree_firmware" -source="deviceinfo 90-android-touch-dev.rules profile.sh weston.ini" -options="!check" - -package() { - install -Dm644 "$srcdir/deviceinfo" \ - "$pkgdir/etc/deviceinfo" - install -Dm644 "$srcdir"/90-android-touch-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules - install -Dm644 "$srcdir"/profile.sh \ - "$pkgdir"/etc/profile.d/00-$pkgname.sh - - # Disable v4l (video4linux), because without the camera firmware - # blobs this makes dev hang with the kernel this device uses (#1033) - ln -s /dev/null "$pkgdir"/etc/udev/rules.d/60-persistent-v4l.rules -} - -weston() { - install_if="$pkgname weston" - install -Dm644 "$srcdir"/weston.ini \ - "$subpkgdir"/etc/xdg/weston/weston.ini -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="firmware-motorola-titan" - mkdir "$subpkgdir" -} - -sha512sums="efb55c0801fec27b50841eeb5beb0e28a3178b1c5d7ea9cb7bf645616853c47818edebbdaa1be616436e7c12c336380c4c4a3d6ba6fb6061078cd2ca235ec65f deviceinfo -8406968cd554393ea1e350967c80810d059de2b1d33ea1302e265780c1f0110d64cf15a68c2f374981a88906d0317315e0a71995c85fd5eaf93bb47ed427529c 90-android-touch-dev.rules -d04013c17caf77a87ebea167dbe48f7efa9c9d3123c5743d359f3ea8ccc6b268fa021535a4bf8291eb4a352f0c92f6eb527da0db340421f53bc1cc439a453306 profile.sh -86a0c08720225e4532f797ad69307dfff66867e4a35de1aacceefc48f19721caf93f9a17a268e58f1f5a7e947f157d6984676837c2b5b835b0caf6ee9821bb5a weston.ini" diff --git a/aports/device/device-motorola-titan/device-motorola-titan.post-install b/aports/device/device-motorola-titan/device-motorola-titan.post-install deleted file mode 100644 index c9c68751..00000000 --- a/aports/device/device-motorola-titan/device-motorola-titan.post-install +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -if [ -z "$(grep /mnt/firmware /etc/fstab)" ]; then - mkdir -p /mnt/firmware - echo "/dev/mmcblk0p1 /mnt/firmware auto ro 0 0" >> /etc/fstab -fi - -if [ -z "$(grep /mnt/data /etc/fstab)" ]; then - mkdir -p /mnt/data - echo "/dev/mmcblk0p38 /mnt/data auto ro 0 0" >> /etc/fstab -fi - -if [ -z "$(grep /mnt/persist /etc/fstab)" ]; then - mkdir -p /mnt/persist - echo "/dev/mmcblk0p29 /mnt/persist auto ro 0 0" >> /etc/fstab -fi diff --git a/aports/device/device-motorola-titan/deviceinfo b/aports/device/device-motorola-titan/deviceinfo deleted file mode 100644 index 3905dd7d..00000000 --- a/aports/device/device-motorola-titan/deviceinfo +++ /dev/null @@ -1,31 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Motorola Moto G 2014" -deviceinfo_manufacturer="Motorola" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_nonfree="????" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_flash_method="fastboot" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_screen_width="720" -deviceinfo_screen_height="1280" - -# Fastboot related -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="2048" -deviceinfo_kernel_cmdline="androidboot.bootdevice=msm_sdcc.1 androidboot.hardware=qcom vmalloc=400M utags.blkdev=/dev/block/platform/msm_sdcc.1/by-name/utags buildvariant=userdebug" -deviceinfo_generate_bootimg="true" -deviceinfo_flash_sparse="true" - -# Weston red screen workaround (see issue #54) -deviceinfo_weston_pixman_type="2" diff --git a/aports/device/device-motorola-titan/profile.sh b/aports/device/device-motorola-titan/profile.sh deleted file mode 100644 index d469a6b7..00000000 --- a/aports/device/device-motorola-titan/profile.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -# Run a few weston demos, because the postmarketos-demos program depends -# on xwayland for now (Alpine's GTK3 isn't configured for Wayland -# support yet.) -if [ $(tty) = "/dev/tty1" ]; then - ( - sleep 3; - export XDG_RUNTIME_DIR=/tmp/0-runtime-dir - weston-smoke & - weston-simple-damage & - weston-editor & - weston-terminal --shell=/usr/bin/htop & - ) > /dev/null & -fi - diff --git a/aports/device/device-motorola-titan/weston.ini b/aports/device/device-motorola-titan/weston.ini deleted file mode 100644 index d94ea3a1..00000000 --- a/aports/device/device-motorola-titan/weston.ini +++ /dev/null @@ -1,11 +0,0 @@ -# XWayland seems to be broken for this device. -# NOTE: This information might be outdated! simply delete /etc/xdg/weston/weston.ini -# after installation to check if it is still broken, and please report if it -# isn't broken anymore (or even better: make a pull request, that removes this -# config file). - -[core] -xwayland=false -backend=fbdev-backend.so -[shell] -background-image=/usr/share/wallpapers/postmarketos.jpg diff --git a/aports/device/device-nextbit-robin/APKBUILD b/aports/device/device-nextbit-robin/APKBUILD deleted file mode 100644 index 958340f2..00000000 --- a/aports/device/device-nextbit-robin/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Reference: -pkgname="device-nextbit-robin" -pkgdesc="Nextbit Robin" -pkgver=0.1 -pkgrel=4 -url="https://postmarketos.org" -license="MIT" -arch="noarch" -options="!check" -depends="postmarketos-base linux-nextbit-robin mkbootimg msm-fb-refresher mesa-dri-swrast" -makedepends="devicepkg-dev" -source="deviceinfo" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname -} - -sha512sums="313776f670f202dcbc375befd4544b5e97836c0678c8135d046ec443d3a4767ca771b5d3894e89f257b38a6492a9a9c20a01baeefb02ede9a98a2d82a69a7f0a deviceinfo" diff --git a/aports/device/device-nextbit-robin/deviceinfo b/aports/device/device-nextbit-robin/deviceinfo deleted file mode 100644 index 8e996c77..00000000 --- a/aports/device/device-nextbit-robin/deviceinfo +++ /dev/null @@ -1,34 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Nextbit Robin" -deviceinfo_manufacturer="Nextbit" -deviceinfo_date="" -deviceinfo_dtb="" -deviceinfo_modules_initfs="" -deviceinfo_arch="aarch64" - -# Device related -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="1080" -deviceinfo_screen_height="1920" -deviceinfo_dev_touchscreen="" -deviceinfo_dev_touchscreen_calibration="" -deviceinfo_dev_keyboard="" - - - -# Bootloader related -deviceinfo_flash_method="fastboot" -deviceinfo_kernel_cmdline="console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 boot_cpus=0-3" -deviceinfo_generate_bootimg="true" -deviceinfo_bootimg_qcdt="false" -deviceinfo_flash_offset_base="0x00000000" -deviceinfo_flash_offset_kernel="0x00008000" -deviceinfo_flash_offset_ramdisk="0x01000000" -deviceinfo_flash_offset_second="0x00f00000" -deviceinfo_flash_offset_tags="0x00000100" -deviceinfo_flash_pagesize="4096" - diff --git a/aports/device/device-nokia-n9/APKBUILD b/aports/device/device-nokia-n9/APKBUILD deleted file mode 100644 index 8efb067c..00000000 --- a/aports/device/device-nokia-n9/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -pkgname=device-nokia-n9 -pkgver=1 -pkgrel=6 -pkgdesc="Nokia N9" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-nokia-n9 ofono watchdog-kick" -makedepends="" -install="" -subpackages="$pkgname-weston:weston" -source=" - deviceinfo - initfs-hook.sh - weston.ini - $install -" -options="!check" - -package() { - install -D -m644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -D -m644 "$srcdir"/initfs-hook.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh -} - -weston() { - install_if="$pkgname weston" - install -Dm644 "$srcdir"/weston.ini \ - "$subpkgdir"/etc/xdg/weston/weston.ini -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="linux-firmware" - mkdir "$subpkgdir" -} - -sha512sums="4ba72beb9b1ff162d7e3b69f3ea43e4166fa928e3ed1bff0f61e61cdb48647070cfedfdb767e4c9173939c5ec347826c5bef003705c59da00a510ce407730720 deviceinfo -61d9e6bf94f3b9cab0ccb2e18c18e5886a08aae5e70fe5e7b7d7cc2a8d655dc11cdec603731c4328dd288f13ba3aa9328f2fc46e7a473be3da31767786978b05 initfs-hook.sh -de794566118f1744d068a94e6a75b61d43f6749a4b0871a5270fa7a2048164d609c71fcffa61845c2a7dd4cb5fbeb72c0e4f8b73b382f36d6ff0bcc9b8a5ae25 weston.ini" diff --git a/aports/device/device-nokia-n9/deviceinfo b/aports/device/device-nokia-n9/deviceinfo deleted file mode 100644 index dccf4381..00000000 --- a/aports/device/device-nokia-n9/deviceinfo +++ /dev/null @@ -1,17 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Nokia N9" -deviceinfo_manufacturer="Nokia" -deviceinfo_date="" -deviceinfo_keyboard="false" -deviceinfo_keymaps="" -deviceinfo_nonfree="????" -deviceinfo_modules_initfs="" -deviceinfo_external_storage="false" -deviceinfo_arch="armhf" - -# Splash screen -deviceinfo_screen_width="480" -deviceinfo_screen_height="864" diff --git a/aports/device/device-nokia-n9/initfs-hook.sh b/aports/device/device-nokia-n9/initfs-hook.sh deleted file mode 100644 index a1f10da9..00000000 --- a/aports/device/device-nokia-n9/initfs-hook.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -watchdog_kick() { - while true; do - for wd in /dev/watchdog*; do - [ -c $wd ] && echo X > $wd - done - - # /etc/postmarketos-mkinitfs/hooks/00-device-nokia-rm696.sh: line 12: sleep: not found - if [ -f /bin/sleep ]; then - /bin/sleep 2s - else - return 0 - fi - done -} - -watchdog_kick & diff --git a/aports/device/device-nokia-n9/weston.ini b/aports/device/device-nokia-n9/weston.ini deleted file mode 100644 index 72039ae3..00000000 --- a/aports/device/device-nokia-n9/weston.ini +++ /dev/null @@ -1,5 +0,0 @@ -[core] -xwayland=true -backend=drm-backend.so -[shell] -background-image=/usr/share/wallpapers/postmarketos.jpg diff --git a/aports/device/device-nokia-n900/APKBUILD b/aports/device/device-nokia-n900/APKBUILD deleted file mode 100644 index 1782f096..00000000 --- a/aports/device/device-nokia-n900/APKBUILD +++ /dev/null @@ -1,126 +0,0 @@ -pkgname=device-nokia-n900 -pkgver=2 -pkgrel=9 -pkgdesc="Nokia N900" -url="https://postmarketos.org" -arch="noarch" -license="MIT" -depends="postmarketos-base linux-postmarketos-stable uboot-tools kbd kbd-bkeymaps ofono mesa-dri-swrast" -makedepends="uboot-tools kbd kbd-bkeymaps" -install="$pkgname.post-install" -subpackages=" - $pkgname-weston - $pkgname-x11 - $pkgname-i3wm - $pkgname-nonfree-firmware:nonfree_firmware -" -source=" - deviceinfo - uboot-script.cmd - backlight-enable.sh - udev/90-touchscreen-dev.rules - udev/10-nokia-modem.rules - acpi_handler.sh - acpi.map - keymaps/rx51_us.map - keymaps/rx51_ch-de.map - keymaps/40-xkb.conf - pointercal - asound.state - weston.ini - i3wm/i3wm.conf - i3wm/i3status.conf - i3wm/bq27200_status.sh - xorg.conf -" -options="!check" - -build() { - mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n postmarketos -d "$srcdir/uboot-script.cmd" "$srcdir/boot.scr" - mkdir "$srcdir"/keymaps - loadkeys -b "$srcdir"/rx51_us.map > "$srcdir"/keymaps/rx51_us.bmap - gzip "$srcdir"/keymaps/rx51_us.bmap - loadkeys -b "$srcdir"/rx51_ch-de.map > "$srcdir"/keymaps/rx51_ch-de.bmap - gzip "$srcdir"/keymaps/rx51_ch-de.bmap - return 0 -} - -package() { - install -D -m644 "$srcdir"/deviceinfo \ - "$pkgdir"/etc/deviceinfo - install -D -m644 "$srcdir"/boot.scr \ - "$pkgdir"/boot/boot.scr - install -D -m644 "$srcdir"/backlight-enable.sh \ - "$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}-backlight.sh - install -D -m644 "$srcdir"/pointercal \ - "$pkgdir"/etc/pointercal - install -D -m644 "$srcdir"/asound.state \ - "$pkgdir"/var/lib/alsa/asound.state - - # Udev rules - install -D -m644 "$srcdir"/90-touchscreen-dev.rules \ - "$pkgdir"/etc/udev/rules.d/90-touchscreen-dev.rules - install -D -m644 "$srcdir"/10-nokia-modem.rules \ - "$pkgdir"/etc/udev/rules.d/10-nokia-modem.rules - - # ACPI - mkdir "$pkgdir"/etc/acpi - install -D -m755 "$srcdir"/acpi_handler.sh \ - "$pkgdir"/etc/acpi/handler.sh - install -D -m644 "$srcdir"/acpi.map \ - "$pkgdir"/etc/acpi.map - - # Keymap - install -D -m644 "$srcdir"/keymaps/rx51_us.bmap.gz \ - "$pkgdir"/usr/share/bkeymaps/us/rx51_us.bmap.gz - install -D -m644 "$srcdir"/keymaps/rx51_ch-de.bmap.gz \ - "$pkgdir"/usr/share/bkeymaps/ch/rx51_ch-de.bmap.gz -} - -weston() { - install_if="$pkgname weston" - install -Dm644 "$srcdir"/weston.ini \ - "$subpkgdir"/etc/xdg/weston/weston.ini -} - -x11() { - install_if="$pkgname xorg-server" - install -D -m644 "$srcdir"/40-xkb.conf \ - "$subpkgdir"/etc/X11/xorg.conf.d/40-xkb.conf - install -D -m644 "$srcdir"/xorg.conf \ - "$subpkgdir"/etc/X11/xorg.conf.d/11-n900.conf -} - -i3wm() { - install_if="$pkgname postmarketos-ui-i3wm" - install -D -m644 "$srcdir"/i3wm.conf \ - "$subpkgdir"/etc/skel/.config/i3/config - install -D -m644 "$srcdir"/i3status.conf \ - "$subpkgdir"/etc/skel/.config/i3/i3status.conf - install -D -m755 "$srcdir"/bq27200_status.sh \ - "$subpkgdir"/etc/skel/.config/i3/bq27200_status.sh -} - -nonfree_firmware() { - pkgdesc="Wifi firmware" - depends="linux-firmware-ti-connectivity" - mkdir "$subpkgdir" -} - -sha512sums="9b38f17e8f68768a8efc51b0cf4585dc3c01a69913013b9fbc52c8a758b53d2d74540bf0d3e7a7936fc3ae355fd802df938854c28e63966d90962385ddc8b8a9 deviceinfo -8f5b68b86f5345698114a2d70fd174699e5729f6c157659e4e57bef1dcab8c1209c13b30df6f5c2e8f31fee077039ffbc7817ca201f0745467b693e7550eaf6b uboot-script.cmd -3d55e34b95791636e44a5f41754f3d0de039dbba41f7a556d43a95c9e64afcfa930046b4b96b40020b6f196096ffba93514682927e32fa4488686fdd19c6da5a backlight-enable.sh -c6012aef28b096141b924fced226ec99fb93eb53b69c064a8887d8fecdf8dc08a3ba3db399e18d88374c6ef4c59013a30699c7e4d76e5cb771040582573a0527 90-touchscreen-dev.rules -9e72035c88632d12895534e5aa5746f2c130c7dcdafa8702748d62b71ed0e1b5911b6e1f07f9b9e39b6072bbb662f66aead585baa1dcacb7d8c8953ca89b6762 10-nokia-modem.rules -df5dcae9a32d04ba2fed8b4dbb8722f8d56d063a288dfbaeca37806bdbb8ba4de639b392859b9f24040a1032456d5dcd754f51314e3ab66515b91ae1e03c93a7 acpi_handler.sh -7761aec6e6e219245b006e7bdc1d19812e9c5915cf3e64bb3dd46bb4b5570c1715650b53a1fc1007cb814076b5d81be0a66ba7ebf06d9a1fa4e364725c3ee633 acpi.map -c9ff8b5968fe94007e1139db5ae76f3ee6c214356bff297b9672276c6adb332ba2342b6ca54cf7992d6556f3c68a13ef49ae5e61abe86154935514034170e228 rx51_us.map -dc585e11bf4e06e36c5c62bcc024eaacecc30437d9da5257df14be05e247a2f2bc208874be3058edc6f87cc2877da2ecafd2f627d9b465d4fd24475fc21fdc71 rx51_ch-de.map -181187db6d88b872233f594759373f32fd08065ee340b60f0c3ff06396d99f4b1250192d70a054fcc9e51e067f6cc063c62b7d8dfff3427b292f1d0c766db206 40-xkb.conf -143c21f0b18a016d37cb44178e9daea09f128a90769b48353c03c3f245cb9b1f7e773b9ccee084973fc78ddd7a18c2642e54888a85bda7c7daecddc9a8c62eff pointercal -e023df91295fe7e410e163747d17e5b92fe3c022ff076e286778b8334368f885603b8fda65671e4a7328766da7b2552ea4df1b1399df23e504a41a6655771142 asound.state -7f48d1a044f8c02f7b1d11487ec1f83978d9b0ea12529156e7418f82be556d9baee32b70c4d911174e388bb4941dc19519e93e7551d00ffcd825c848665ff096 weston.ini -387c76ef51d08b1f397364657ab32c5915fbd62b2786e9fd61b47e9eeed36d24571e22974ea36cb1b01c25eef5789c4e8e1de9a23de3a4a9192e727ed6a7ab67 i3wm.conf -3bed8554400d6bbebf7e61b14f347a0f3e24b29be296c56fc829ed655cf67fa547c09bb715589b716d6c3f04492e9f3a12473dce6c7151bc15562b9d102bac2f i3status.conf -4e7abd1ac6223494b2ce96f7fb2dfe6116ee8a526440df07307994ed577f1860222548f7512273b5a21febac8119794774658f60e5d6976747ddc60323d26a62 bq27200_status.sh -a91f98daa60efa2beb2ff6b405097f92edca5f1bbb9e7675499139be52ca2570712f8f06f9032ef29f636f99c8f8da8b992f746eab6424aac04260c16158bcc2 xorg.conf" diff --git a/aports/device/device-nokia-n900/acpi.map b/aports/device/device-nokia-n900/acpi.map deleted file mode 100644 index 4f5a0da4..00000000 --- a/aports/device/device-nokia-n900/acpi.map +++ /dev/null @@ -1,30 +0,0 @@ -# FORMAT: "" ""