Compare commits

...

164 Commits

Author SHA1 Message Date
Dave Murphy
dfb3d82a96 devkitARM: update newlib to 4.4.0 2024-02-01 11:00:58 +00:00
Dave Murphy
7318227e11 devkitPPC: upgrade newlib to 4.4.0 2024-01-26 17:35:07 +00:00
Dave Murphy
c04144a5cf install to fixed prefix 2024-01-17 18:49:53 +00:00
Dave Murphy
c5f34ab49b devkitA64: update binutils to 2.41 2023-09-17 17:05:29 +01:00
Dave Murphy
eb428eb450 devkitPPC: bump version 2023-09-13 10:10:13 +01:00
Dave Murphy
032100b82e devkitPPC: call destructors 2023-09-13 10:08:13 +01:00
Dave Murphy
d051cd518b update rules & crtls versions 2023-09-12 18:26:40 +01:00
Dave Murphy
5daf9f7bd1 devkitA64: update to gcc 13.2 2023-08-26 16:28:50 +01:00
Dave Murphy
f06196c43c devkitPPC: remove stale patch file 2023-08-07 15:14:29 +01:00
Dave Murphy
5926a76d64 devkitPPC: update binutils to 2.41 2023-08-07 15:13:35 +01:00
Dave Murphy
12a06c469f devkitPPC: update gcc to 13.2.0 2023-08-07 15:12:35 +01:00
Dave Murphy
67729ec64c devkitARM: release 62 2023-08-04 15:52:30 +01:00
Dave Murphy
d0a05636ab devkitARM: use binutils 2.41 2023-08-04 15:51:08 +01:00
Dave Murphy
7d1a2ac929 devkitARM: use gcc 13.2.0 2023-08-04 15:50:20 +01:00
Dave Murphy
9332465b06 devkitARM: remove old patches 2023-08-04 15:49:21 +01:00
Dave Murphy
3b8a45ed5b devkitA64: fix newlib patch 2023-06-17 12:15:25 +01:00
Dave Murphy
cc0e589e56 devkitA64: update gcc to 13.1.0 2023-05-07 01:03:11 +01:00
Dave Murphy
06e7ade19c devkitA64: add symlink support 2023-05-01 17:17:51 +01:00
Dave Murphy
dec683a0ed devkitA64: gcc 13.1.0 RC test 2023-05-01 17:11:02 +01:00
Dave Murphy
4319248cf8 devkitARM: fix dynamic reent 2023-05-01 16:24:23 +01:00
Dave Murphy
80a329157a prevent hard dependency on findfp 2023-05-01 16:21:39 +01:00
Dave Murphy
c8273a1082 devkitARM: newlib add symlink support 2023-05-01 16:21:38 +01:00
Dave Murphy
4defc0f22b devkitARM: update gcc to 13.1.0 2023-05-01 16:21:38 +01:00
Dave Murphy
d158002ce3 devkitARM: test 13.1.0 RC2 2023-05-01 16:21:33 +01:00
Dave Murphy
62b6ba1484 devkitPPC: enable dynamic reent 2023-05-01 12:08:04 +01:00
Dave Murphy
e3dca6f33f devkitPPC: move to gcc 13.1.0 2023-05-01 12:08:04 +01:00
Dave Murphy
db4e394ab8 update devkitppc-rules version 2023-04-29 11:39:06 +01:00
Dave Murphy
8f6a2cf470 update devkitarm rules/crtls versions 2023-04-29 10:45:59 +01:00
Dave Murphy
3429d8162f bump devkitPPC version 2023-04-20 07:42:20 +01:00
Dave Murphy
a048d2e89c devkitPPC: newlib fixes 2023-04-20 07:40:43 +01:00
Dave Murphy
94cabdf12a devkitPPC: update version 2023-04-19 09:15:33 +01:00
Dave Murphy
6a2cfec336 devkitPPC: disable gcc libssp 2023-04-19 08:59:50 +01:00
Dave Murphy
7b03d726b6 devkitPPC: update newlib to 4.3.0 2023-04-15 14:49:13 +01:00
Dave Murphy
9df0987259 devkitPPC: update binutils to 2.40 2023-04-15 14:48:22 +01:00
Dave Murphy
923724a397 devkitPPC: update gcc to 12.2.0 2023-04-15 14:48:22 +01:00
Dave Murphy
cd5e224d6a devkitARM: update newlib to 4.3.0 2023-04-03 21:54:26 +01:00
Dave Murphy
b280c0af31 devkitARM: update gcc patch 2023-04-03 21:53:28 +01:00
Dave Murphy
776be5894d devkitARM: next update is release 60 2023-04-03 21:53:28 +01:00
Dave Murphy
87f8584b86 devkitA64: use binutils 2.40 2023-04-03 21:53:28 +01:00
Dave Murphy
84ca4f5c18 devkitA64: remove old gcc patch 2023-04-02 19:42:31 +01:00
Dave Murphy
a07a271bdb devkitA64: add __DEVKITPRO__ to built-in defines 2023-04-02 19:42:30 +01:00
Dave Murphy
026a498a51 devkitA64: update newlib to 4.3.0 2023-04-02 19:42:30 +01:00
omerien
b5de354a1e Use https urls (#56) 2022-11-20 15:39:15 +00:00
Dave Murphy
ca6cded363 devkitA64: update gcc to 12.2.0 2022-11-13 11:23:23 +00:00
Dave Murphy
149a2358b8 devkitARM: remove stale patches 2022-11-08 10:43:28 +00:00
Dave Murphy
426c8d0e62 devkitARM: update gcc to 12.2.0 2022-11-06 20:46:02 +00:00
Dave Murphy
a33bf405d2 devkitARM: update binutils to 2.39 2022-11-06 20:44:51 +00:00
Dave Murphy
eac2e40528 devkitPPC: remove old patch file 2022-05-22 21:21:35 +01:00
Dave Murphy
e377ef05f6 devkitPPC: remove obsolete flag setting 2022-05-06 21:15:06 +01:00
Dave Murphy
67b8703a8c devkitPPC: update gcc to 12.1.0 2022-05-06 19:46:27 +01:00
Dave Murphy
df8b66a808 devkitA64: update gcc to 12.1.0 2022-05-06 17:46:22 +01:00
Dave Murphy
219b5dcebd devkitARM: update gcc to 12.1.0 2022-05-06 13:27:04 +01:00
Dave Murphy
a370be5c4a devkitA64: update gcc to 12.1.0-RC-20220429 2022-05-02 22:19:23 +01:00
Dave Murphy
a84866105a devkitARM: update gcc to 12.1.0-RC-20220429 2022-04-30 18:00:21 +01:00
Dave Murphy
c0146427e1 devkitARM: update binutils to 2.38 2022-04-30 17:57:26 +01:00
Dave Murphy
a0ee149c40 devkitA64: remove obsolete flag setting 2022-01-27 20:55:27 +00:00
Dave Murphy
da06cfb478 devkitPPC: add arm64 macOS patch 2022-01-25 19:49:11 +00:00
Dave Murphy
b700c35789 devkitARM: update newlib to 4.2.0.20211231 2022-01-03 19:21:28 +00:00
Dave Murphy
73b1cb9d7a devkitPPC: update newlib to 4.2.0.20211231 2022-01-03 19:21:20 +00:00
Dave Murphy
3ca5189cdd devkitA64: update newlib to 4.2.0.20211231 2022-01-03 12:24:00 +00:00
Dave Murphy
4dc7a3333c devkitPPC: next release is 40 2022-01-03 12:21:48 +00:00
Dave Murphy
98aac78959 devkitPPC: remove can delete directories 2022-01-02 18:34:36 +00:00
Dave Murphy
092f657e81 devkitPPC: update binutils to 2.37 2022-01-02 18:34:36 +00:00
Dave Murphy
7d3bbea16e devkitPPC: update gcc to 11.2.0 2022-01-02 18:34:36 +00:00
Dave Murphy
066afb3cca devkitARM: remove can delete directories 2022-01-02 18:34:36 +00:00
Dave Murphy
dd13eb9497 devkitARM: rework syscall interface 2022-01-02 18:34:36 +00:00
Dave Murphy
af726256f1 devkitARM: patch binutils for building with mingw 2022-01-02 18:34:36 +00:00
Dave Murphy
5e87380f11 devkitARM: update binutils to 2.37 2022-01-02 18:34:36 +00:00
Dave Murphy
cd9e7f1fee devkitARM: update gcc to 11.2.0 2022-01-02 18:34:36 +00:00
Dave Murphy
f1bf935706 devkitA64: remove can delete directories 2022-01-02 18:34:36 +00:00
Dave Murphy
9ae621ad62 devkitA64: upgrade gcc to 11.2 2022-01-02 18:34:26 +00:00
Dave Murphy
251c7cbbf1 devkitPPC: use supplied zlib 2021-05-25 09:27:00 +01:00
Dave Murphy
2b7e5215fc fix shebang 2021-05-25 09:16:19 +01:00
Dave Murphy
540dbb84c6 devkitPPC: remove stale patches 2021-05-25 09:16:19 +01:00
Dave Murphy
90fb45065c devkitPPC: disable unwanted features 2021-05-25 09:16:19 +01:00
Dave Murphy
771225f45a devkitPPC: move mn10200 binutils to 2.24 2021-05-25 09:16:19 +01:00
Dave Murphy
fdb7c8a6d2 devkitPPC: update gcc to 11.1.0 2021-05-25 09:16:19 +01:00
Dave Murphy
5649ec2a1f devkitPPC: update newlib patch 2021-05-25 09:16:19 +01:00
Dave Murphy
6e92980fd1 devkitPPC: allow external gcc config params 2021-05-25 09:16:19 +01:00
Dave Murphy
3673dced6d devkitPPC: reduce printf bloat 2021-05-25 09:16:19 +01:00
Dave Murphy
6999db3f10 devkitPPC: next release is 39 2021-05-25 09:16:19 +01:00
Dave Murphy
ae793d657a devkitPPC: update binutils to 2.36.1 2021-05-25 09:16:19 +01:00
Dave Murphy
c375da789d devkitPPC: update newlib to 4.1.0 2021-05-25 09:16:19 +01:00
Dave Murphy
b8c7c915bc allow prevention of binary stripping 2021-05-09 13:50:54 +01:00
Dave Murphy
c108162819 use ansi stdio on mingw host too 2021-05-09 13:38:10 +01:00
Dave Murphy
e952463476 use the supplied zlib 2021-05-08 21:28:54 +01:00
Dave Murphy
1444dc91df allow external variables to influence build 2021-05-08 21:10:04 +01:00
Dave Murphy
4219405837 devkitARM: update gcc patch 2021-04-30 13:08:32 +01:00
Dave Murphy
aacd4f8bf6 devkitARM: allow external gcc config params 2021-04-30 13:08:32 +01:00
Dave Murphy
e4cb9e3b2f devkitARM: update binutils to 2.36.1 2021-04-30 13:08:32 +01:00
Dave Murphy
85ec801a13 devkitARM: update newlib to 4.1.0 2021-04-30 13:08:32 +01:00
Dave Murphy
0eb81ba063 devkitARM: next release is 56 2021-04-30 13:08:32 +01:00
Dave Murphy
5740d1d57d devkitARM: update gcc to 11.1.0 2021-04-30 13:08:32 +01:00
Dave Murphy
d2c48d04c2 ignore .xz files 2021-04-29 22:53:42 +01:00
Dave Murphy
289d6a6aa0 use latest crtls & rules 2021-04-29 22:53:42 +01:00
Dave Murphy
c33f389df1 add zstd to configure options 2021-04-29 22:53:42 +01:00
Dave Murphy
2938af4ed5 add isl to configure options 2021-04-29 22:53:42 +01:00
Dave Murphy
0f4422c92c devkitA64: allow external gcc config params 2021-04-29 22:53:42 +01:00
Dave Murphy
dc5b7bb5a6 remove cross build scripts 2021-04-29 22:53:42 +01:00
Dave Murphy
a87f68d4dd devkitA64: update gcc to 11.1.0 2021-04-29 22:53:26 +01:00
Dave Murphy
a9b611e134 dlls no longer required 2021-04-27 16:49:40 +01:00
Dave Murphy
6015da5cab devkitA64: update newlib to 4.1.0 2021-04-27 16:49:31 +01:00
Dave Murphy
6a74f83616 devkitPPC: use modern config.sub for mn10200 binutils 2020-07-25 14:58:45 +01:00
Dave Murphy
953cf2a761 devkitPPC: update gcc to 10.2.0, next release is r38 2020-07-25 13:10:46 +01:00
Dave Murphy
60efdbd109 devkitPPC: stop building gdb here 2020-07-25 11:13:00 +01:00
Dave Murphy
ef789eddb7 don't download crtls & rules archives if not building them 2020-07-25 03:45:56 +01:00
Dave Murphy
502f832a5b fixup rules archive downloading 2020-07-25 03:29:50 +01:00
Dave Murphy
848924d332 devkitARM: update rules to 1.2.0 2020-07-25 03:07:30 +01:00
Dave Murphy
1f5f5eedf5 devkitARM: update gcc to 10.2.0 2020-07-25 03:05:58 +01:00
Dave Murphy
5664d84c44 devkitARM: update rules to 1.1.0 2020-07-25 03:02:16 +01:00
Dave Murphy
6e8de1b1d2 devkitARM: next release is 55 2020-07-25 03:02:16 +01:00
Dave Murphy
b16276e9da devkitARM: separate gdb 2020-07-25 03:02:16 +01:00
Dave Murphy
7f142c7583 devkitARM: use binutils 2.34 2020-07-25 03:02:16 +01:00
Dave Murphy
1a1b35aa3b devkitARM: disable tm clone registry and cxa-atexit 2020-07-25 03:02:16 +01:00
Dave Murphy
70c8df8709 devkitA64 now release 16 2020-07-25 02:53:33 +01:00
Dave Murphy
bc52f6ac2b devkitA64: next release is r16 2020-07-24 23:41:39 +01:00
Dave Murphy
81719c49e3 devkitA64: disable cxa_atexit & tm clone registry 2020-07-24 23:41:39 +01:00
Dave Murphy
d4a84c9884 devkitA64: separate rules package 2020-07-24 23:41:39 +01:00
Dave Murphy
25f22b6c93 devkitA64: don't build gdb 2020-07-24 23:41:39 +01:00
Dave Murphy
a0fe0c5297 devkitA64: update to gcc 10.2.0 2020-07-24 23:41:39 +01:00
Dave Murphy
77ad8b785c add native tools to path when cross building 2020-07-24 23:40:16 +01:00
Dave Murphy
e4b1370595 remove redundant toolsprefix 2020-07-24 23:38:05 +01:00
Dave Murphy
dcfd0e271e add dummy cross build script for linux PKGBUILD 2020-07-24 23:34:26 +01:00
Dave Murphy
9bf0973c2a ensure newly built tools on front of path 2020-07-24 16:02:56 +01:00
Dave Murphy
0b31c7ab1c stop building gdb here 2020-07-24 15:55:13 +01:00
Dave Murphy
90e2936222 add cross build for aarch64 linux 2020-06-30 18:18:19 +01:00
Dave Murphy
556a2a2e02 devkitPPC: refill buffer for large reads 2020-06-08 20:01:52 +01:00
Dave Murphy
6da9ea33f7 devkitPPC: use binutils 2.34 2020-06-08 19:59:53 +01:00
Dave Murphy
433a4bdd80 devkitPPC: releease 37 2020-05-16 03:17:05 +01:00
Dave Murphy
20bf4948a1 devkitPPC: update to gcc 10 2020-05-16 03:15:39 +01:00
Dave Murphy
5e720e01c1 devkitPPC: rework syscalls 2020-05-16 03:14:57 +01:00
Dave Murphy
183ab79cfc flag for building crtls & rules 2020-05-12 14:04:01 +01:00
Dave Murphy
ad4246dfc4 oops, forgot to update rules script for devkitPPC 2020-05-12 11:37:27 +00:00
Dave Murphy
9165c280f3 restore building of crtls and rules files 2020-05-11 13:43:17 +01:00
Dave Murphy
116613adc8 devkitARM: next release is r54 2020-05-08 10:04:40 +01:00
Dave Murphy
fbc790a8dd devkitARM: upgrade newlib to 3.3.0 2020-05-08 10:01:17 +01:00
Dave Murphy
91789e0ca8 devkitARM: upgrade gcc to 10.1.0 2020-05-08 10:00:10 +01:00
Dave Murphy
fddf563787 devkitA64: next release is r15 2020-05-08 09:59:14 +01:00
Dave Murphy
45bf89586f devkitA64: upgrade gdb to 9.1 2020-05-08 09:57:51 +01:00
Dave Murphy
ddaf472951 devkitA64: upgrade newlib to 3.3.0 2020-05-08 09:56:51 +01:00
Dave Murphy
0adc00806f devkitA64: upgrade gcc to 10.1.0 2020-05-08 09:54:21 +01:00
Dave Murphy
fa1972f5e9 gdb requires CPPFLAGS for cross compile 2020-05-08 09:51:51 +01:00
Dave Murphy
2a306b5e49 strip bins script should be executable 2020-05-08 09:50:02 +01:00
Dave Murphy
1857d52ede copy dll to libexec folder for windows tools 2020-05-08 09:49:26 +01:00
Dave Murphy
57ec7b67ac script builds devkitPPC release 36 2020-04-12 02:12:22 +01:00
Dave Murphy
d9392f8f56 stop downloading and building outdated tools archives 2020-04-12 02:10:35 +01:00
Dave Murphy
e0c908dfc2 devkitPPC: next release is r35 2020-04-12 01:38:45 +01:00
Dave Murphy
2ddef0ade4 devkitPPC: update newlib to 3.3.0 2020-04-12 01:38:08 +01:00
Dave Murphy
e68aaf8cdd devkitPPC: update gcc to 8.4.0 2020-04-12 01:37:13 +01:00
Dave Murphy
0add4d1b5c changes for devkitA64 r14 2019-12-11 01:18:57 +00:00
Dave Murphy
736db33e06 devkitARM: remove old gcc patch 2019-06-28 16:07:20 +01:00
Dave Murphy
96f7acc919 remove library building from scripts 2019-06-25 22:04:51 +01:00
Dave Murphy
c2aae79d59 devkitARM: latest newlib patch 2019-06-25 20:28:26 +01:00
Dave Murphy
fe202a6f50 devkitARM: update gcc to 9.1.0 2019-06-23 10:54:29 +01:00
Dave Murphy
aeb6482da9 devkitARM: update gdb patch 2019-05-14 10:22:19 +01:00
Dave Murphy
b1d5f5c7a6 fix macOS build 2019-03-29 20:17:09 +00:00
fincs
1974c8ae38 Update devkitA64 newlib patch, remove old stale patch 2019-03-29 20:17:09 +00:00
fincs
65c1a1256a devkitA64: update binutils patch with latest changes 2019-03-29 20:17:09 +00:00
Dave Murphy
ade65bab03 fix uselocal 2019-03-29 20:17:09 +00:00
Dave Murphy
bcb3bff114 update devkitA64 version 2019-03-29 20:17:09 +00:00
Dave Murphy
a48e515bd6 devkitA64: update newlib to 3.1.0 2019-03-29 20:16:16 +00:00
Dave Murphy
fec37937b7 devkitA64: update gdb to 8.2.1 2019-03-29 20:16:16 +00:00
Dave Murphy
2c8ae62e8e devkitA64: update gcc to 8.3.0 2019-03-29 20:16:16 +00:00
Dave Murphy
383ebe76c8 devkitA64: update binutils to 2.32 2019-03-29 20:16:16 +00:00
38 changed files with 40242 additions and 27066 deletions

1
.gitignore vendored
View File

@@ -2,6 +2,7 @@ config.sh
.devkitARM* .devkitARM*
.devkitPPC* .devkitPPC*
.devkitA64* .devkitA64*
*.xz
*.gz *.gz
*.bz2 *.bz2
*~ *~

View File

@@ -24,9 +24,9 @@ For building gcc libgmp, libmpfr and libmpc are required - these are built as
static libraries to make packaging simpler. If you're building the tools for static libraries to make packaging simpler. If you're building the tools for
personal use then the versions packaged by your chosen distro should suffice. personal use then the versions packaged by your chosen distro should suffice.
http://gmplib.org/ https://gmplib.org/
http://www.mpfr.org/ https://www.mpfr.org/
http://www.multiprecision.org/ https://www.multiprecision.org/
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
@@ -34,10 +34,10 @@ Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib,
expat, and libusb. Again these are built as static libraries for ease of expat, and libusb. Again these are built as static libraries for ease of
packaging but you can probably use the versions supplied by your distro. packaging but you can probably use the versions supplied by your distro.
http://freeimage.sourceforge.net/ https://freeimage.sourceforge.net/
http://www.zlib.net https://www.zlib.net
http://www.libusb.org https://www.libusb.org
http://expat.sourceforge.net/ https://expat.sourceforge.net/
sudo apt-get install libfreeimage-dev zlib1g-dev libusb-dev libudev-dev libexpat1-dev sudo apt-get install libfreeimage-dev zlib1g-dev libusb-dev libudev-dev libexpat1-dev

View File

@@ -1,8 +1,8 @@
#!/bin/bash #!/usr/bin/env bash
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# devkitARM release 52 # devkitARM release 63
# devkitPPC release 35 # devkitPPC release 45
# devkitA64 release 12 # devkitA64 release 24
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then if [ 0 -eq 1 ] ; then
@@ -26,45 +26,13 @@ echo "https://github.com/devkitPro/buildscripts/pulls"
echo echo
GENERAL_TOOLS_VER=1.0.2
LIBGBA_VER=0.5.2 DKARM_RULES_VER=1.5.0
GBATOOLS_VER=1.1.0 DKARM_CRTLS_VER=1.2.2
DKARM_RULES_VER=1.0.0
DKARM_CRTLS_VER=1.0.0
LIBNDS_VER=1.7.2 DKPPC_RULES_VER=1.2.1
DEFAULT_ARM7_VER=0.7.4
DSWIFI_VER=0.4.2
MAXMOD_VER=1.0.11
FILESYSTEM_VER=0.9.14
LIBFAT_VER=1.1.3
DSTOOLS_VER=1.2.1
GRIT_VER=0.8.15
NDSTOOL_VER=2.1.1
MMUTIL_VER=1.8.7
DFU_UTIL_VER=0.9.1 DKA64_RULES_VER=1.1.1
STLINK_VER=1.2.3
GAMECUBE_TOOLS_VER=1.0.2
LIBOGC_VER=1.8.21
WIILOAD_VER=0.5.1
DKPPC_RULES_VER=1.0.0
LIBCTRU_VER=1.5.1
CITRO3D_VER=1.5.0
CITRO2D_VER=1.1.0
TOOLS3DS_VER=1.1.4
LINK3DS_VER=0.5.2
PICASSO_VER=2.7.0
TEX3DS_VER=1.0.0
GP32_TOOLS_VER=1.0.3
LIBMIRKO_VER=0.9.8
SWITCH_TOOLS_VER=1.4.1
LIBNX_VER=1.3.0
OSXMIN=${OSXMIN:-10.9} OSXMIN=${OSXMIN:-10.9}
@@ -90,13 +58,6 @@ if [ ! -z "$CROSSBUILD" ] ; then
fi fi
fi fi
#---------------------------------------------------------------------------------
# Sane defaults for building toolchain
#---------------------------------------------------------------------------------
export CFLAGS="-O2 -pipe"
export CXXFLAGS="$CFLAGS"
unset LDFLAGS
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Look for automated configuration file to bypass prompts # Look for automated configuration file to bypass prompts
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -111,20 +72,18 @@ fi
. ./select_toolchain.sh . ./select_toolchain.sh
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Get preferred installation directory and set paths to the sources # Legacy versions of these scripts allowed the selection of a prefix which is
# no longer supported. Since adopting pacman and providing precompiled binaries
# of "portlibs" everything we distribute is intended to work within opt/devkitpro
#
# Rather than attempting to repackage our work for exotic linux distributions it
# would be much better for everyone concerned if efforts were made to provide
# pacman and whatever support is necessary to allow the binaries we distribute to
# work as expected.
#
# See https://github.com/devkitPro/pacman and https://devkitpro.org/wiki/devkitPro_pacman
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
INSTALLDIR=/opt/devkitpro
if [ ! -z "$BUILD_DKPRO_INSTALLDIR" ] ; then
INSTALLDIR="$BUILD_DKPRO_INSTALLDIR"
else
echo
echo "Please enter the directory where you would like '$package' to be installed:"
echo "for mingw/msys you must use <drive>:/<install path> or you will have include path problems"
echo "this is the top level directory for devkitpro, i.e. e:/devkitPro"
read -e INSTALLDIR
echo
fi
[ ! -z "$INSTALLDIR" ] && mkdir -p $INSTALLDIR && touch $INSTALLDIR/nonexistantfile && rm $INSTALLDIR/nonexistantfile || exit 1; [ ! -z "$INSTALLDIR" ] && mkdir -p $INSTALLDIR && touch $INSTALLDIR/nonexistantfile && rm $INSTALLDIR/nonexistantfile || exit 1;
@@ -151,24 +110,22 @@ fi
echo use $MAKE as make echo use $MAKE as make
export MAKE export MAKE
CROSS_PARAMS="--build=`./config.guess`"
if [ ! -z $CROSSBUILD ]; then
export PATH=/opt/devkitpro/$package/bin:$PATH
prefix=$INSTALLDIR/$CROSSBUILD/$package
CROSS_PARAMS="$CROSS_PARAMS --host=$CROSSBUILD"
CROSS_GCC_PARAMS="--with-gmp=$CROSSPATH --with-mpfr=$CROSSPATH --with-mpc=$CROSSPATH --with-isl=$CROSSPATH --with-zstd=$CROSSPATH"
else
prefix=$INSTALLDIR/$package
fi
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Add installed devkit to the path, adjusting path on minsys # Add installed devkit to the path, adjusting path on minsys
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/') TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH=$PATH:$TOOLPATH/$package/bin export PATH=$TOOLPATH/$package/bin:$PATH
CROSS_PARAMS="--build=`./config.guess`"
if [ ! -z $CROSSBUILD ]; then
toolsprefix=$INSTALLDIR/$CROSSBUILD/tools
prefix=$INSTALLDIR/$CROSSBUILD/$package
toolsprefix=$INSTALLDIR/$CROSSBUILD/tools
CROSS_PARAMS="$CROSS_PARAMS --host=$CROSSBUILD"
CROSS_GCC_PARAMS="--with-gmp=$CROSSPATH --with-mpfr=$CROSSPATH --with-mpc=$CROSSPATH"
else
toolsprefix=$INSTALLDIR/tools
prefix=$INSTALLDIR/$package
fi
if [ "$BUILD_DKPRO_AUTOMATED" != "1" ] ; then if [ "$BUILD_DKPRO_AUTOMATED" != "1" ] ; then
@@ -195,7 +152,7 @@ case $PLATFORM in
fi fi
;; ;;
MINGW32* ) MINGW32* )
cppflags="-D__USE_MINGW_ACCESS" cppflags="-D__USE_MINGW_ACCESS -D__USE_MINGW_ANSI_STDIO=1"
;; ;;
esac esac
@@ -214,43 +171,26 @@ fi
patchdir=$(pwd)/$basedir/patches patchdir=$(pwd)/$basedir/patches
scriptdir=$(pwd)/$basedir/scripts scriptdir=$(pwd)/$basedir/scripts
archives="binutils-${BINUTILS_VER}.tar.xz gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.xz" archives="binutils-${BINUTILS_VER}.tar.xz gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz"
if [ $VERSION -eq 1 ]; then
targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2
libmirko-src-${LIBMIRKO_VER}.tar.bz2 dswifi-src-${DSWIFI_VER}.tar.bz2 maxmod-src-${MAXMOD_VER}.tar.bz2
default-arm7-src-${DEFAULT_ARM7_VER}.tar.bz2 libfilesystem-src-${FILESYSTEM_VER}.tar.bz2
libfat-src-${LIBFAT_VER}.tar.bz2 libctru-src-${LIBCTRU_VER}.tar.bz2 citro3d-src-${CITRO3D_VER}.tar.bz2
citro2d-src-${CITRO2D_VER}.tar.bz2"
hostarchives="gba-tools-$GBATOOLS_VER.tar.bz2 gp32-tools-$GP32_TOOLS_VER.tar.bz2
dstools-$DSTOOLS_VER.tar.bz2 grit-$GRIT_VER.tar.bz2 ndstool-$NDSTOOL_VER.tar.bz2
general-tools-$GENERAL_TOOLS_VER.tar.bz2 mmutil-$MMUTIL_VER.tar.bz2
dfu-util-$DFU_UTIL_VER.tar.bz2 stlink-$STLINK_VER.tar.bz2 3dstools-$TOOLS3DS_VER.tar.bz2
picasso-$PICASSO_VER.tar.bz2 tex3ds-$TEX3DS_VER.tar.bz2 3dslink-$LINK3DS_VER.tar.bz2"
archives="devkitarm-rules-$DKARM_RULES_VER.tar.xz devkitarm-crtls-$DKARM_CRTLS_VER.tar.xz $archives"
fi
if [ $VERSION -eq 2 ]; then if [ $VERSION -eq 2 ]; then
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives"
targetarchives="libogc-src-${LIBOGC_VER}.tar.bz2 libfat-src-${LIBFAT_VER}.tar.bz2"
hostarchives="gamecube-tools-$GAMECUBE_TOOLS_VER.tar.bz2 wiiload-$WIILOAD_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2"
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 devkitppc-rules-$DKPPC_RULES_VER.tar.xz $archives"
fi fi
if [ $VERSION -eq 3 ]; then if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ]; then
if [ $VERSION -eq 1 ]; then
archives="devkitarm-rules-$DKARM_RULES_VER.tar.gz devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz $archives"
fi
targetarchives=" libnx-src-${LIBNX_VER}.tar.bz2" if [ $VERSION -eq 2 ]; then
archives="devkitppc-rules-$DKPPC_RULES_VER.tar.gz $archives"
hostarchives="general-tools-$GENERAL_TOOLS_VER.tar.bz2 switch-tools-$SWITCH_TOOLS_VER.tar.bz2" fi
if [ $VERSION -eq 3 ]; then
archives="devkita64-rules-$DKA64_RULES_VER.tar.gz $archives"
fi
fi fi
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
SRCDIR="$BUILD_DKPRO_SRCDIR" SRCDIR="$BUILD_DKPRO_SRCDIR"
else else
@@ -258,7 +198,7 @@ else
fi fi
cd "$SRCDIR" cd "$SRCDIR"
for archive in $archives $targetarchives $hostarchives for archive in $archives
do do
echo $archive echo $archive
if [ ! -f $archive ]; then if [ ! -f $archive ]; then
@@ -273,52 +213,26 @@ cd $BUILDDIR
extract_and_patch binutils $BINUTILS_VER xz extract_and_patch binutils $BINUTILS_VER xz
extract_and_patch gcc $GCC_VER xz extract_and_patch gcc $GCC_VER xz
extract_and_patch newlib $NEWLIB_VER gz extract_and_patch newlib $NEWLIB_VER gz
extract_and_patch gdb $GDB_VER xz
if [ $VERSION -eq 2 ]; then if [ $VERSION -eq 2 ]; then extract_and_patch binutils $MN_BINUTILS_VER bz2; fi
extract_and_patch binutils $MN_BINUTILS_VER bz2
fi
for archive in $targetarchives
do
destdir=$(echo $archive | sed -e 's/\(.*\)-src-\(.*\)\.tar\.bz2/\1-\2/' )
echo $destdir
if [ ! -d $destdir ]; then
mkdir -p $destdir
bzip2 -cd "$SRCDIR/$archive" | tar -xf - -C $destdir || { echo "Error extracting "$archive; exit 1; }
fi
done
for archive in $hostarchives
do
destdir=$(echo $archive | sed -e 's/\(.*\)-src-\(.*\)\.tar\.bz2/\1-\2/' )
if [ ! -d $destdir ]; then
tar -xjf "$SRCDIR/$archive"
fi
done
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Build and install devkit components # Build and install devkit components
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ -f $scriptdir/build-gcc.sh ]; then . $scriptdir/build-gcc.sh || { echo "Error building toolchain"; exit 1; }; cd $BUILDSCRIPTDIR; fi if [ -f $scriptdir/build-gcc.sh ]; then . $scriptdir/build-gcc.sh || { echo "Error building toolchain"; exit 1; }; cd $BUILDSCRIPTDIR; fi
if [ "$BUILD_DKPRO_SKIP_TOOLS" != "1" ] && [ -f $scriptdir/build-tools.sh ]; then
. $scriptdir/build-tools.sh || { echo "Error building tools"; exit 1; }; cd $BUILDSCRIPTDIR;
fi
if [ "$BUILD_DKPRO_SKIP_LIBRARIES" != "1" ] && [ -f $scriptdir/build-libs.sh ]; then if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ] && [ -f $scriptdir/build-crtls.sh ]; then
. $scriptdir/build-libs.sh || { echo "Error building libraries"; exit 1; }; cd $BUILDSCRIPTDIR; . $scriptdir/build-crtls.sh || { echo "Error building crtls & rules"; exit 1; }; cd $BUILDSCRIPTDIR;
fi fi
cd $BUILDSCRIPTDIR cd $BUILDSCRIPTDIR
if [ ! -z $CROSSBUILD ] && grep -q "mingw" <<<"$CROSSBUILD" ; then if [ "$BUILD_DKPRO_NO_STRIP_BINARIES" != "1" ]; then
cp -v $CROSSBINPATH//libwinpthread-1.dll $prefix/bin echo "stripping installed binaries"
. ./strip_bins.sh
fi fi
echo "stripping installed binaries"
. ./strip_bins.sh
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Clean up temporary files and source directories # Clean up temporary files and source directories
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------

View File

@@ -13,12 +13,6 @@
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
BUILD_DKPRO_PACKAGE=0 BUILD_DKPRO_PACKAGE=0
#---------------------------------------------------------------------------------
# Toolchain installation directory, comment if not specified
#---------------------------------------------------------------------------------
#BUILD_DKPRO_INSTALLDIR=/opt/devkitpro
#BUILD_DKPRO_INSTALLDIR=c:/devkitPro
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Path to previously downloaded source packages, comment if not specified # Path to previously downloaded source packages, comment if not specified
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -31,15 +25,9 @@ BUILD_DKPRO_PACKAGE=0
#export MAKEFLAGS="$MAKEFLAGS -j${numcores}" #export MAKEFLAGS="$MAKEFLAGS -j${numcores}"
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Uncomment to skip building of tools # Uncomment to skip building of crtls and rules files
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
#BUILD_DKPRO_SKIP_TOOLS=1 #BUILD_DKPRO_SKIP_CRTLS=1
#---------------------------------------------------------------------------------
# Uncomment to skip building of libraries
#---------------------------------------------------------------------------------
#BUILD_DKPRO_SKIP_LIBRARIES=1
# Automated script execution # Automated script execution
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------

View File

@@ -1,7 +0,0 @@
#!/bin/bash
export CROSSBUILD=i686-w64-mingw32
export CROSSPATH=/opt/mingw32/mingw
export CROSSLIBPATH=$CROSSPATH/lib
export CROSSBINPATH=$CROSSPATH/bin
export PATH=/opt/mingw32/bin:$PATH

View File

@@ -1,18 +0,0 @@
#!/bin/bash
export CPPFLAGS=-I/opt/osx/x86_64-apple-darwin15/include
export LDFLAGS=-L/opt/osx/x86_64-apple-darwin15/lib
export OSXCROSS_PKG_CONFIG_USE_NATIVE_VARIABLES=1
export CC=x86_64-apple-darwin15-clang
export CXX=x86_64-apple-darwin15-clang++
export CROSSBUILD=x86_64-apple-darwin15
export CROSSPATH=/opt/osx/x86_64-apple-darwin15
export CROSSLIBPATH=$CROSSPATH/lib
export CROSSBINPATH=$CROSSPATH/bin
export PATH=/opt/osx/bin:$PATH
export PKG_CONFIG_PATH=
export PKG_CONFIG_LIBDIR=$CROSSLIBPATH/pkgconfig

View File

@@ -1,7 +0,0 @@
#!/bin/bash
export CROSSBUILD=x86_64-w64-mingw32
export CROSSPATH=/opt/mingw64/mingw
export CROSSLIBPATH=$CROSSPATH/lib
export CROSSBINPATH=$CROSSPATH/bin
export PATH=/opt/mingw64/bin:$PATH

View File

@@ -1,346 +0,0 @@
diff -NBaur binutils-2.31.1/bfd/elfnn-aarch64.c binutils-2.31.1-dka64/bfd/elfnn-aarch64.c
--- binutils-2.31.1/bfd/elfnn-aarch64.c 2018-06-25 12:44:16.000000000 +0100
+++ binutils-2.31.1-dka64/bfd/elfnn-aarch64.c 2018-07-27 18:11:15.757082269 +0100
@@ -2342,6 +2342,12 @@
aarch64_stub_erratum_843419_veneer,
};
+/* Is an undefined weak symbol resolved to 0 ? */
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
+ && bfd_link_executable (INFO) \
+ && !(INFO)->dynamic_undefined_weak)
+
struct elf_aarch64_stub_hash_entry
{
/* Base hash table entry structure. */
@@ -6370,11 +6376,13 @@
Elf_Internal_Sym *sym;
asection *sec;
struct elf_link_hash_entry *h;
+ struct elf_aarch64_link_hash_entry *eh;
bfd_vma relocation;
bfd_reloc_status_type r;
arelent bfd_reloc;
char sym_type;
bfd_boolean unresolved_reloc = FALSE;
+ bfd_boolean resolved_to_zero = FALSE;
char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -6509,6 +6517,10 @@
h, &unresolved_reloc,
save_addend, &addend, sym);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ resolved_to_zero = (eh != NULL
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
+
switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -6532,7 +6544,7 @@
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6627,7 +6639,7 @@
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6676,7 +6688,7 @@
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7019,6 +7031,26 @@
return FALSE;
}
+/* Remove undefined weak symbol from the dynamic symbol table if it
+ is resolved to 0. */
+
+extern bfd_boolean
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *, struct elf_link_hash_entry *);
+
+bfd_boolean
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *h)
+{
+ if (h->dynindx != -1
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_aarch64_hash_entry (h)))
+ {
+ h->dynindx = -1;
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
+ h->dynstr_index);
+ }
+ return TRUE;
+}
+
/* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the
dynamic object, but we're not including those sections. We have to
@@ -8221,6 +8253,7 @@
struct elf_aarch64_link_hash_table *htab;
struct elf_aarch64_link_hash_entry *eh;
struct elf_dyn_relocs *p;
+ bfd_boolean resolved_to_zero;
/* An example of a bfd_link_hash_indirect symbol is versioned
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -8240,6 +8273,10 @@
info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */
if (h->type == STT_GNU_IFUNC
@@ -8249,7 +8286,7 @@
{
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (h->dynindx == -1 && !h->forced_local
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8283,6 +8320,11 @@
of relaxing into these from the large model PLT entries. */
s->size += PLT_SMALL_ENTRY_SIZE;
+ /* There should be no PLT relocations against resolved undefined
+ weak symbols in the executable. */
+ if (!resolved_to_zero)
+ {
+
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
htab->root.sgotplt->size += GOT_ENTRY_SIZE;
@@ -8305,6 +8347,7 @@
htab->root.srelplt->reloc_count++;
}
+ }
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8317,9 +8360,6 @@
h->needs_plt = 0;
}
- eh = (struct elf_aarch64_link_hash_entry *) h;
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
-
if (h->got.refcount > 0)
{
bfd_boolean dyn;
@@ -8331,7 +8371,7 @@
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (dyn && h->dynindx == -1 && !h->forced_local
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8345,7 +8385,7 @@
{
h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
@@ -8381,7 +8421,7 @@
}
indx = h && h->dynindx != -1 ? h->dynindx : 0;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (!bfd_link_executable (info)
|| indx != 0
@@ -8447,7 +8487,7 @@
visibility. */
if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
{
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
eh->dyn_relocs = NULL;
@@ -8467,7 +8507,9 @@
symbols which turn out to need copy relocs or are not
dynamic. */
- if (!h->non_got_ref
+ if (!(h->non_got_ref
+ || (h->root.type == bfd_link_hash_undefweak
+ && !resolved_to_zero))
&& ((h->def_dynamic
&& !h->def_regular)
|| (htab->root.dynamic_sections_created
@@ -8478,6 +8520,7 @@
Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1
&& !h->forced_local
+ && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h))
return FALSE;
@@ -9098,8 +9141,17 @@
Elf_Internal_Sym *sym)
{
struct elf_aarch64_link_hash_table *htab;
+ struct elf_aarch64_link_hash_entry *eh;
+ bfd_boolean local_undefweak;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+
+ /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
+ resolved undefined weak symbols in executable so that their
+ references have value 0 at run-time. */
+ local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
if (h->plt.offset != (bfd_vma) - 1)
{
asection *plt, *gotplt, *relplt;
@@ -9134,7 +9186,7 @@
return FALSE;
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
- if (!h->def_regular)
+ if (!local_undefweak && !h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. */
@@ -9153,10 +9205,11 @@
}
if (h->got.offset != (bfd_vma) - 1
- && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
+ && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
/* Undefined weak symbol in static PIE resolves to 0 without
any dynamic relocations. */
- && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+ && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)
+ && !local_undefweak)
{
Elf_Internal_Rela rela;
bfd_byte *loc;
@@ -9650,6 +9703,9 @@
#define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections
+#define elf_backend_fixup_symbol \
+ elfNN_aarch64_elf_fixup_symbol
+
#define elf_backend_finish_dynamic_sections \
elfNN_aarch64_finish_dynamic_sections
diff -NBaur binutils-2.31.1/ld/emulparams/aarch64elf32.sh binutils-2.31.1-dka64/ld/emulparams/aarch64elf32.sh
--- binutils-2.31.1/ld/emulparams/aarch64elf32.sh 2018-06-24 19:38:57.000000000 +0100
+++ binutils-2.31.1-dka64/ld/emulparams/aarch64elf32.sh 2018-07-27 18:04:52.585317513 +0100
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32"
MACHINE=
NOP=0x1f2003d5
diff -NBaur binutils-2.31.1/ld/emulparams/aarch64elf.sh binutils-2.31.1-dka64/ld/emulparams/aarch64elf.sh
--- binutils-2.31.1/ld/emulparams/aarch64elf.sh 2018-06-24 19:38:57.000000000 +0100
+++ binutils-2.31.1-dka64/ld/emulparams/aarch64elf.sh 2018-07-27 18:04:52.585317513 +0100
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64
MACHINE=
NOP=0x1f2003d5
diff -NBaur binutils-2.31.1/ld/emultempl/aarch64elf.em binutils-2.31.1-dka64/ld/emultempl/aarch64elf.em
--- binutils-2.31.1/ld/emultempl/aarch64elf.em 2018-06-26 12:27:20.000000000 +0100
+++ binutils-2.31.1-dka64/ld/emultempl/aarch64elf.em 2018-07-27 18:04:52.585317513 +0100
@@ -380,7 +380,7 @@
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
'
-PARSE_AND_LIST_OPTIONS='
+PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}'
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
" enum sizes\n"));
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n"
diff -NBaur binutils-2.31.1/ld/Makefile.am binutils-2.31.1-dka64/ld/Makefile.am
--- binutils-2.31.1/ld/Makefile.am 2018-06-24 19:38:57.000000000 +0100
+++ binutils-2.31.1-dka64/ld/Makefile.am 2018-07-27 18:04:52.585317513 +0100
@@ -1495,19 +1495,23 @@
$(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
diff -NBaur binutils-2.31.1/ld/Makefile.in binutils-2.31.1-dka64/ld/Makefile.in
--- binutils-2.31.1/ld/Makefile.in 2018-07-18 08:46:21.000000000 +0100
+++ binutils-2.31.1-dka64/ld/Makefile.in 2018-07-27 18:04:52.585317513 +0100
@@ -3097,18 +3097,22 @@
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \

View File

@@ -0,0 +1,507 @@
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index ec856764519..436098cbcc2 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1966,6 +1966,14 @@ struct output_elf_obj_tdata
asection *sec;
} package_metadata;
+ /* Data for .nx-module-name. */
+ struct
+ {
+ bool (*after_write_object_contents) (bfd *);
+ const char *name;
+ asection *sec;
+ } nx_module_name;
+
/* Records the result of `get_program_header_size'. */
bfd_size_type program_header_size;
diff --git a/bfd/elf.c b/bfd/elf.c
index d38e0afff2e..372e6615931 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -7321,6 +7321,14 @@ _bfd_elf_write_object_contents (bfd *abfd)
if (!bed->s->write_shdrs_and_ehdr (abfd))
return false;
+ /* Write out the NX module name. */
+ if (t->o->nx_module_name.after_write_object_contents != NULL)
+ {
+ failed = !(*t->o->nx_module_name.after_write_object_contents) (abfd);
+ if (failed)
+ return false;
+ }
+
/* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
if (t->o->build_id.after_write_object_contents != NULL
&& !(*t->o->build_id.after_write_object_contents) (abfd))
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 4592bd6da27..dc27042cfe2 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -2441,6 +2441,12 @@ enum elf_aarch64_stub_type
aarch64_stub_erratum_843419_veneer,
};
+/* Is an undefined weak symbol resolved to 0 ? */
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
+ && bfd_link_executable (INFO) \
+ && !(INFO)->dynamic_undefined_weak)
+
struct elf_aarch64_stub_hash_entry
{
/* Base hash table entry structure. */
@@ -6916,11 +6922,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
Elf_Internal_Sym *sym;
asection *sec;
struct elf_link_hash_entry *h;
+ struct elf_aarch64_link_hash_entry *eh;
bfd_vma relocation;
bfd_reloc_status_type r;
arelent bfd_reloc;
char sym_type;
bool unresolved_reloc = false;
+ bool resolved_to_zero = false;
char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -7060,6 +7068,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
h, &unresolved_reloc,
save_addend, &addend, sym);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ resolved_to_zero = (eh != NULL
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
+
switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -7083,7 +7095,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7178,7 +7190,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7227,7 +7239,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7553,6 +7565,23 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
return false;
}
+/* Remove undefined weak symbol from the dynamic symbol table if it
+ is resolved to 0. */
+
+static bool
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *h)
+{
+ if (h->dynindx != -1
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_aarch64_hash_entry (h)))
+ {
+ h->dynindx = -1;
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
+ h->dynstr_index);
+ }
+ return true;
+}
+
/* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the
dynamic object, but we're not including those sections. We have to
@@ -8771,6 +8800,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
struct elf_aarch64_link_hash_table *htab;
struct elf_aarch64_link_hash_entry *eh;
struct elf_dyn_relocs *p;
+ bool resolved_to_zero;
/* An example of a bfd_link_hash_indirect symbol is versioned
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -8790,6 +8820,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */
if (h->type == STT_GNU_IFUNC
@@ -8799,7 +8833,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (h->dynindx == -1 && !h->forced_local
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8833,6 +8867,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
of relaxing into these from the large model PLT entries. */
s->size += htab->plt_entry_size;
+ /* There should be no PLT relocations against resolved undefined
+ weak symbols in the executable. */
+ if (!resolved_to_zero)
+ {
+
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
htab->root.sgotplt->size += GOT_ENTRY_SIZE;
@@ -8861,6 +8900,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
htab->variant_pcs = 1;
}
+ }
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8873,9 +8913,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
h->needs_plt = 0;
}
- eh = (struct elf_aarch64_link_hash_entry *) h;
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
-
if (h->got.refcount > 0)
{
bool dyn;
@@ -8887,7 +8924,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (dyn && h->dynindx == -1 && !h->forced_local
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8901,7 +8938,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
@@ -8937,7 +8974,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
}
indx = h && h->dynindx != -1 ? h->dynindx : 0;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (!bfd_link_executable (info)
|| indx != 0
@@ -9019,7 +9056,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
visibility. */
if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
{
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
h->dyn_relocs = NULL;
@@ -9039,7 +9076,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
symbols which turn out to need copy relocs or are not
dynamic. */
- if (!h->non_got_ref
+ if (!(h->non_got_ref
+ || (h->root.type == bfd_link_hash_undefweak
+ && !resolved_to_zero))
&& ((h->def_dynamic
&& !h->def_regular)
|| (htab->root.dynamic_sections_created
@@ -9050,6 +9089,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1
&& !h->forced_local
+ && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h))
return false;
@@ -9607,8 +9647,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Sym *sym)
{
struct elf_aarch64_link_hash_table *htab;
+ struct elf_aarch64_link_hash_entry *eh;
+ bool local_undefweak;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+
+ /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
+ resolved undefined weak symbols in executable so that their
+ references have value 0 at run-time. */
+ local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
if (h->plt.offset != (bfd_vma) - 1)
{
asection *plt, *gotplt, *relplt;
@@ -9643,7 +9692,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
return false;
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
- if (!h->def_regular)
+ if (!local_undefweak && !h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. */
@@ -9665,7 +9714,8 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
&& elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
/* Undefined weak symbol in static PIE resolves to 0 without
any dynamic relocations. */
- && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+ && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)
+ && !local_undefweak)
{
Elf_Internal_Rela rela;
bfd_byte *loc;
@@ -10312,6 +10362,9 @@ const struct elf_size_info elfNN_aarch64_size_info =
#define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections
+#define elf_backend_fixup_symbol \
+ elfNN_aarch64_elf_fixup_symbol
+
#define elf_backend_finish_dynamic_sections \
elfNN_aarch64_finish_dynamic_sections
diff --git a/ld/emulparams/aarch64elf.sh b/ld/emulparams/aarch64elf.sh
index 8f68e517b45..260a590e69e 100644
--- a/ld/emulparams/aarch64elf.sh
+++ b/ld/emulparams/aarch64elf.sh
@@ -1,3 +1,5 @@
+source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64
MACHINE=
NOP=0x1f2003d5
diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh
index 5a08d9e29f1..e4c9abf85a1 100644
--- a/ld/emulparams/aarch64elf32.sh
+++ b/ld/emulparams/aarch64elf32.sh
@@ -1,3 +1,5 @@
+source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32"
MACHINE=
NOP=0x1f2003d5
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index d47bdbf9937..b6f76d5c8d7 100644
--- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em
@@ -378,7 +378,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
'
-PARSE_AND_LIST_OPTIONS='
+PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}'
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
" enum sizes\n"));
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n"
diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em
index 3f67f8b09d9..eb8e8e1596e 100644
--- a/ld/emultempl/elf.em
+++ b/ld/emultempl/elf.em
@@ -572,6 +572,7 @@ enum elf_options
OPTION_EXCLUDE_LIBS,
OPTION_HASH_STYLE,
OPTION_BUILD_ID,
+ OPTION_NX_MODULE_NAME,
OPTION_PACKAGE_METADATA,
OPTION_AUDIT,
OPTION_COMPRESS_DEBUG
@@ -603,6 +604,7 @@ EOF
fi
fragment <<EOF
{"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+ {"nx-module-name", optional_argument, NULL, OPTION_NX_MODULE_NAME},
{"package-metadata", optional_argument, NULL, OPTION_PACKAGE_METADATA},
{"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
EOF
@@ -673,6 +675,16 @@ gld${EMULATION_NAME}_handle_option (int optc)
einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"),
optarg);
break;
+ case OPTION_NX_MODULE_NAME:
+ if (ldelf_emit_nx_module_name != NULL)
+ {
+ free ((char *) ldelf_emit_nx_module_name);
+ ldelf_emit_nx_module_name = NULL;
+ }
+ if (optarg == NULL)
+ optarg = "";
+ ldelf_emit_nx_module_name = xstrdup (optarg);
+ break;
EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
diff --git a/ld/ldelf.c b/ld/ldelf.c
index f9a6819366f..99e982ef5eb 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -55,6 +55,9 @@ const char *ldelf_emit_note_gnu_build_id;
/* Content of .note.package section. */
const char *ldelf_emit_note_fdo_package_metadata;
+/* NX module name. */
+const char *ldelf_emit_nx_module_name;
+
/* These variables are required to pass information back and forth
between after_open and check_needed and stat_needed and vercheck. */
@@ -1206,8 +1209,93 @@ ldelf_handle_dt_needed (struct elf_link_hash_table *htab,
*save_input_bfd_tail = NULL;
}
-/* This is called before calling plugin 'all symbols read' hook. */
+static bool
+write_nx_module_name (bfd *abfd)
+{
+ struct elf_obj_tdata *t = elf_tdata (abfd);
+ const char *name;
+ asection *asec;
+ Elf_Internal_Shdr *i_shdr;
+ unsigned char *contents;
+ bfd_size_type size;
+ file_ptr position;
+ name = t->o->nx_module_name.name;
+ asec = t->o->nx_module_name.sec;
+ if (bfd_is_abs_section (asec->output_section))
+ {
+ einfo (_("%P: warning: .nx-module-name section discarded,"
+ " --build-id ignored\n"));
+ return true;
+ }
+ i_shdr = &elf_section_data (asec->output_section)->this_hdr;
+
+ if (i_shdr->contents == NULL)
+ {
+ if (asec->contents == NULL)
+ asec->contents = (unsigned char *) xmalloc (asec->size);
+ contents = asec->contents;
+ }
+ else
+ contents = i_shdr->contents + asec->output_offset;
+
+ size = asec->size;
+ bfd_h_put_32 (abfd, 0, &contents[0]);
+ bfd_h_put_32 (abfd, size - 9, &contents[4]);
+ memcpy (&contents[8], name, size - 9);
+ contents[size - 1] = 0; /* ensure null termination for AMS */
+
+ position = i_shdr->sh_offset + asec->output_offset;
+
+ return (bfd_seek (abfd, position, SEEK_SET) == 0
+ && bfd_bwrite (contents, size, abfd) == size);
+}
+
+/* Make .nx-module-name section, and set up elf_tdata->nx_module_name. */
+
+static bool
+setup_nx_module_name (bfd *ibfd, bfd *obfd)
+{
+ asection *s;
+ bfd_size_type size;
+ flagword flags;
+
+ if (ldelf_emit_nx_module_name[0] == '\0')
+ {
+ /* Extract the basename of the output bfd and use it as the module name. */
+ char *dot_pos;
+ free ((char *) ldelf_emit_nx_module_name);
+ ldelf_emit_nx_module_name = (char *) lbasename (bfd_get_filename (obfd));
+ ldelf_emit_nx_module_name = xstrdup (ldelf_emit_nx_module_name);
+ dot_pos = strrchr (ldelf_emit_nx_module_name, '.');
+ if (dot_pos != NULL)
+ {
+ /* Remove extension. */
+ *dot_pos = 0;
+ }
+ }
+
+ size = 8 + strlen(ldelf_emit_nx_module_name) + 1; /* extra null terminator for AMS */
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED | SEC_READONLY | SEC_DATA);
+ s = bfd_make_section_with_flags (ibfd, ".nx-module-name", flags);
+ if (s != NULL && bfd_set_section_alignment (s, 4))
+ {
+ struct elf_obj_tdata *t = elf_tdata (link_info.output_bfd);
+ t->o->nx_module_name.after_write_object_contents = &write_nx_module_name;
+ t->o->nx_module_name.name = ldelf_emit_nx_module_name;
+ t->o->nx_module_name.sec = s;
+ elf_section_type (s) = SHT_PROGBITS;
+ s->size = size;
+ return true;
+ }
+
+ einfo (_("%P: warning: cannot create .nx-module-name section,"
+ " --nx-module-name ignored\n"));
+ return false;
+}
+
+/* This is called before calling plugin 'all symbols read' hook. */
void
ldelf_before_plugin_all_symbols_read (int use_libpath, int native,
int is_linux, int is_freebsd,
@@ -1286,6 +1374,24 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
}
}
+ if (ldelf_emit_nx_module_name != NULL)
+ {
+ /* Find an ELF input. */
+ for (abfd = link_info.input_bfds;
+ abfd != (bfd *) NULL; abfd = abfd->link.next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && bfd_count_sections (abfd) != 0
+ && !((lang_input_statement_type *) abfd->usrdata)->flags.just_syms)
+ break;
+
+ /* If there are no ELF input files do not try to create a .nx-module-name section. */
+ if (abfd == NULL || !setup_nx_module_name (abfd, link_info.output_bfd))
+ {
+ free ((char *) ldelf_emit_nx_module_name);
+ ldelf_emit_nx_module_name = NULL;
+ }
+ }
+
get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
/* Do not allow executable files to be used as inputs to the link. */
diff --git a/ld/ldelf.h b/ld/ldelf.h
index f82bd9234a7..96173dcd671 100644
--- a/ld/ldelf.h
+++ b/ld/ldelf.h
@@ -20,6 +20,7 @@
extern const char *ldelf_emit_note_gnu_build_id;
extern const char *ldelf_emit_note_fdo_package_metadata;
+extern const char *ldelf_emit_nx_module_name;
extern void ldelf_after_parse (void);
extern bool ldelf_load_symbols (lang_input_statement_type *);

View File

@@ -0,0 +1,346 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 648b3dc2110..ed605b28956 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1132,7 +1132,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
tmake_file="${tmake_file} aarch64/t-aarch64"
case $target in
aarch64-*-elf*)
+ default_use_cxa_atexit=yes
use_gcc_stdint=wrap
+ tm_file="${tm_file} devkitpro.h"
+ tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
+ extra_options="${extra_options} devkitpro.opt"
+ case ${enable_threads} in
+ "" | yes | posix) thread_file='posix' ;;
+ esac
;;
aarch64-*-fuchsia*)
tm_file="${tm_file} fuchsia.h"
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index ec45f23fa41..a208eabd806 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -22,6 +22,7 @@
#ifndef GCC_AARCH64_ELF_RAW_H
#define GCC_AARCH64_ELF_RAW_H
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
#define ENDFILE_SPEC \
" crtend%O%s crtn%O%s " \
diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h
index a9f3e2715ca..0c7304e1d81 100644
--- a/gcc/config/aarch64/aarch64-opts.h
+++ b/gcc/config/aarch64/aarch64-opts.h
@@ -52,6 +52,12 @@ enum aarch64_tls_type {
TLS_DESCRIPTORS
};
+/* Which thread pointer access sequence to use. */
+enum aarch64_tp_type {
+ TP_HARD,
+ TP_SOFT
+};
+
/* The code model defines the address generation strategy.
Most have a PIC and non-PIC variant. */
enum aarch64_code_model {
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index f5db5379543..f582e5a7543 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -19550,8 +19550,24 @@ aarch64_load_tp (rtx target)
|| !register_operand (target, Pmode))
target = gen_reg_rtx (Pmode);
- /* Can return in any reg. */
- emit_insn (gen_aarch64_load_tp_hard (target));
+ if (TARGET_HARD_TP)
+ {
+ /* Can return in any reg. */
+ emit_insn (gen_aarch64_load_tp_hard (target));
+ }
+ else
+ {
+ /* Always returned in r0. Immediately copy the result into a pseudo,
+ otherwise other uses of r0 (e.g. setting up function arguments) may
+ clobber the value. */
+
+ rtx tmp;
+
+ emit_insn (gen_aarch64_load_tp_soft ());
+
+ tmp = gen_rtx_REG (DImode, R0_REGNUM);
+ emit_move_insn (target, tmp);
+ }
return target;
}
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 73b09e20508..ad62b5080cc 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -1154,6 +1154,10 @@ typedef struct
/* Check TLS Descriptors mechanism is selected. */
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
+/* Check selected thread pointer access sequence to use. */
+#define TARGET_HARD_TP (target_thread_pointer == TP_HARD)
+#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT)
+
extern enum aarch64_code_model aarch64_cmodel;
/* When using the tiny addressing model conditional and unconditional branches
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 36d0bb3f718..cfa2f7efc7f 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -7068,11 +7068,22 @@
(define_insn "aarch64_load_tp_hard"
[(set (match_operand:DI 0 "register_operand" "=r")
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
- ""
- "mrs\\t%0, tpidr_el0"
+ "TARGET_HARD_TP"
+ "mrs\\t%0, tpidr_el0\\t// aarch64_load_tp_hard"
[(set_attr "type" "mrs")]
)
+(define_insn "aarch64_load_tp_soft"
+ [(set (reg:DI 0) (unspec:DI [(const_int 0)] UNSPEC_TLS))
+ (clobber (reg:DI IP0_REGNUM))
+ (clobber (reg:DI IP1_REGNUM))
+ (clobber (reg:DI LR_REGNUM))
+ (clobber (reg:CC CC_REGNUM))]
+ "TARGET_SOFT_TP"
+ "bl\\t__aarch64_read_tp\\t// aarch64_load_tp_soft"
+ [(set_attr "type" "branch")]
+)
+
;; The TLS ABI specifically requires that the compiler does not schedule
;; instructions in the TLS stubs, in order to enable linker relaxation.
;; Therefore we treat the stubs as an atomic sequence.
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 1d7967db9c0..17870f18b8b 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -128,6 +128,21 @@ Enum(aarch64_tls_size) String(32) Value(32)
EnumValue
Enum(aarch64_tls_size) String(48) Value(48)
+mtp=
+Target RejectNegative Joined Enum(aarch64_tp_type) Var(target_thread_pointer) Init(TP_HARD)
+Specify how to access the thread pointer.
+
+Enum
+Name(aarch64_tp_type) Type(enum aarch64_tp_type)
+Valid arguments to -mtp=:
+
+EnumValue
+Enum(aarch64_tp_type) String(hard) Value(TP_HARD)
+
+EnumValue
+Enum(aarch64_tp_type) String(soft) Value(TP_SOFT)
+
+
march=
Target RejectNegative Negative(march=) ToLower Joined Var(aarch64_arch_string)
Use features of architecture ARCH.
@@ -266,7 +281,7 @@ TargetVariable
long aarch64_stack_protector_guard_offset = 0
moutline-atomics
-Target Var(aarch64_flag_outline_atomics) Init(2) Save
+Target Var(aarch64_flag_outline_atomics) Save
Generate local calls to out-of-line atomic operations.
-param=aarch64-sve-compare-costs=
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
index a9a244ab6d6..a29f2772d63 100644
--- a/gcc/config/aarch64/t-aarch64
+++ b/gcc/config/aarch64/t-aarch64
@@ -177,8 +177,10 @@ aarch64-cc-fusion.o: $(srcdir)/config/aarch64/aarch64-cc-fusion.cc \
$(srcdir)/config/aarch64/aarch64-cc-fusion.cc
comma=,
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
-MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG))
+MULTILIB_OPTIONS = mcmodel=large fPIC
+MULTILIB_DIRNAMES = large pic
+MULTILIB_REQUIRED = mcmodel=large fPIC
+MULTILIB_MATCHES = fPIC=fpic fPIC=fpie fPIC=fPIE
insn-conditions.md: s-check-sve-md
s-check-sve-md: $(srcdir)/config/aarch64/check-sve-md.awk \
diff --git a/gcc/config/devkitpro.h b/gcc/config/devkitpro.h
new file mode 100644
index 00000000000..a25459e4352
--- /dev/null
+++ b/gcc/config/devkitpro.h
@@ -0,0 +1,32 @@
+/* Definitions for devkitPro toolchains.
+ Copyright (C) 2016-2018 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do { \
+ builtin_define ("__DEVKITA64__"); \
+ builtin_define ("__DEVKITPRO__"); \
+ } while (0)
+
+
diff --git a/gcc/config/devkitpro.opt b/gcc/config/devkitpro.opt
new file mode 100644
index 00000000000..9acbbf9d27c
--- /dev/null
+++ b/gcc/config/devkitpro.opt
@@ -0,0 +1,29 @@
+; Options for devkitPro toolchains.
+
+; Copyright (C) 2011-2018 Free Software Foundation, Inc.
+;
+; This file is part of GCC.
+;
+; GCC is free software; you can redistribute it and/or modify it under
+; the terms of the GNU General Public License as published by the Free
+; Software Foundation; either version 3, or (at your option) any later
+; version.
+;
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
+; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+; for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with GCC; see the file COPYING3. If not see
+; <http://www.gnu.org/licenses/>.
+
+; See the GCC internals manual (options.texi) for a description of
+; this file's format.
+
+; Please try to keep this file in ASCII collating order.
+
+pthread
+Driver
+
+; This comment is to ensure we retain the blank line above.
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
index acff6138d63..8dc91b75f93 100644
--- a/gcc/config/i386/host-mingw32.cc
+++ b/gcc/config/i386/host-mingw32.cc
@@ -93,7 +93,10 @@ mingw32_gt_pch_get_address (size_t size, int)
for NT system dlls is in 0x70000000 to 0x78000000 range.
If we allocate at bottom we need to reserve the address as early
as possible and at the same point in each invocation. */
-
+
+#if __MINGW64__
+ size = UINT64_C(64 * 1024 * 1024 * 1024);
+#endif
res = VirtualAlloc (NULL, size,
MEM_RESERVE | MEM_TOP_DOWN,
PAGE_NOACCESS);
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 16bb07f2cdc..22a181a3a1c 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -868,6 +868,11 @@ proper position among the other output files. */
#endif
#endif
+#ifndef LIBGLOSS_SPEC
+# define LIBGLOSS_SPEC "-lsysbase"
+#endif
+
+
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1191,6 +1196,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
+static const char *libgloss_spec = LIBGLOSS_SPEC;
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1701,6 +1707,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 93ff5b81dc5..20c0fe89a28 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -326,7 +326,7 @@ register_tm_clones (void)
#ifdef OBJECT_FORMAT_ELF
-#if DEFAULT_USE_CXA_ATEXIT
+#if 1 /* DEFAULT_USE_CXA_ATEXIT */
/* Declare the __dso_handle variable. It should have a unique value
in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance
diff --git a/libgcc/gthr.h b/libgcc/gthr.h
index 1989c0c86ed..f1c49b2d4b1 100644
--- a/libgcc/gthr.h
+++ b/libgcc/gthr.h
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* The pe-coff weak support isn't fully compatible to ELF's weak.
For static libraries it might would work, but as we need to deal
with shared versions too, we disable it for mingw-targets. */
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(__DEVKITA64__)
#undef GTHREAD_USE_WEAK
#define GTHREAD_USE_WEAK 0
#endif
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index a880e8ee227..c58249f986c 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -1417,6 +1417,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
+ -e 's/_GLIBCXX___DEVKITA64_GLIBCXX___/__DEVKITA64__/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 0ff875b280b..37820c57a0a 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -1891,6 +1891,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
+ -e 's/_GLIBCXX___DEVKITA64_GLIBCXX___/__DEVKITA64__/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@

View File

@@ -1,199 +0,0 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 532c33f4c2b..c8a8bc698a7 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -945,6 +945,7 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
case $target in
aarch64-*-elf*)
use_gcc_stdint=wrap
+ tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
;;
aarch64-*-fuchsia*)
tm_file="${tm_file} fuchsia.h"
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index c074238df06..ef503ddd5a6 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -22,6 +22,7 @@
#ifndef GCC_AARCH64_ELF_RAW_H
#define GCC_AARCH64_ELF_RAW_H
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
#define ENDFILE_SPEC \
" crtend%O%s crtn%O%s " \
diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h
index 7a5c6d7664f..687793841de 100644
--- a/gcc/config/aarch64/aarch64-opts.h
+++ b/gcc/config/aarch64/aarch64-opts.h
@@ -48,6 +48,12 @@ enum aarch64_tls_type {
TLS_DESCRIPTORS
};
+/* Which thread pointer access sequence to use. */
+enum aarch64_tp_type {
+ TP_HARD,
+ TP_SOFT
+};
+
/* The code model defines the address generation strategy.
Most have a PIC and non-PIC variant. */
enum aarch64_code_model {
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 175f13dc264..733ab473cbd 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -11979,8 +11979,24 @@ aarch64_load_tp (rtx target)
|| !register_operand (target, Pmode))
target = gen_reg_rtx (Pmode);
- /* Can return in any reg. */
- emit_insn (gen_aarch64_load_tp_hard (target));
+ if (TARGET_HARD_TP)
+ {
+ /* Can return in any reg. */
+ emit_insn (gen_aarch64_load_tp_hard (target));
+ }
+ else
+ {
+ /* Always returned in r0. Immediately copy the result into a pseudo,
+ otherwise other uses of r0 (e.g. setting up function arguments) may
+ clobber the value. */
+
+ rtx tmp;
+
+ emit_insn (gen_aarch64_load_tp_soft ());
+
+ tmp = gen_rtx_REG (DImode, R0_REGNUM);
+ emit_move_insn (target, tmp);
+ }
return target;
}
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 976f9afae54..73263bcb5e7 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -957,6 +957,10 @@ typedef struct
/* Check TLS Descriptors mechanism is selected. */
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
+/* Check selected thread pointer access sequence to use. */
+#define TARGET_HARD_TP (target_thread_pointer == TP_HARD)
+#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT)
+
extern enum aarch64_code_model aarch64_cmodel;
/* When using the tiny addressing model conditional and unconditional branches
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 32a0e1f3685..783c655acf0 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -5693,11 +5693,22 @@
(define_insn "aarch64_load_tp_hard"
[(set (match_operand:DI 0 "register_operand" "=r")
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
- ""
- "mrs\\t%0, tpidr_el0"
+ "TARGET_HARD_TP"
+ "mrs\\t%0, tpidr_el0\\t// aarch64_load_tp_hard"
[(set_attr "type" "mrs")]
)
+(define_insn "aarch64_load_tp_soft"
+ [(set (reg:DI 0) (unspec:DI [(const_int 0)] UNSPEC_TLS))
+ (clobber (reg:DI IP0_REGNUM))
+ (clobber (reg:DI IP1_REGNUM))
+ (clobber (reg:DI LR_REGNUM))
+ (clobber (reg:CC CC_REGNUM))]
+ "TARGET_SOFT_TP"
+ "bl\\t__aarch64_read_tp\\t// aarch64_load_tp_soft"
+ [(set_attr "type" "branch")]
+)
+
;; The TLS ABI specifically requires that the compiler does not schedule
;; instructions in the TLS stubs, in order to enable linker relaxation.
;; Therefore we treat the stubs as an atomic sequence.
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 52eaf8c6f40..52bccddc6e3 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -115,6 +115,20 @@ Enum(aarch64_tls_size) String(32) Value(32)
EnumValue
Enum(aarch64_tls_size) String(48) Value(48)
+mtp=
+Target RejectNegative Joined Enum(aarch64_tp_type) Var(target_thread_pointer) Init(TP_HARD)
+Specify how to access the thread pointer.
+
+Enum
+Name(aarch64_tp_type) Type(enum aarch64_tp_type)
+Valid arguments to -mtp=:
+
+EnumValue
+Enum(aarch64_tp_type) String(hard) Value(TP_HARD)
+
+EnumValue
+Enum(aarch64_tp_type) String(soft) Value(TP_SOFT)
+
march=
Target RejectNegative ToLower Joined Var(aarch64_arch_string)
-march=ARCH Use features of architecture ARCH.
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
index 0be1f0d63aa..a54068bfd96 100644
--- a/gcc/config/aarch64/t-aarch64
+++ b/gcc/config/aarch64/t-aarch64
@@ -68,5 +68,7 @@ cortex-a57-fma-steering.o: $(srcdir)/config/aarch64/cortex-a57-fma-steering.c \
$(srcdir)/config/aarch64/cortex-a57-fma-steering.c
comma=,
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
-MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG))
+MULTILIB_OPTIONS = mcmodel=large fPIC
+MULTILIB_DIRNAMES = large pic
+MULTILIB_REQUIRED = mcmodel=large fPIC
+MULTILIB_MATCHES = fPIC=fpic fPIC=fpie fPIC=fPIE
diff --git a/gcc/gcc.c b/gcc/gcc.c
index a716f708259..6a11011dba7 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -786,6 +786,11 @@ proper position among the other output files. */
#endif
#endif
+#ifndef LIBGLOSS_SPEC
+# define LIBGLOSS_SPEC "-lsysbase"
+#endif
+
+
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1081,6 +1086,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
+static const char *libgloss_spec = LIBGLOSS_SPEC;
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1577,6 +1583,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 5e894455e16..f2347455de0 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -47,6 +47,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* Target machine header files require this define. */
#define IN_LIBGCC2
+#define USED_FOR_TARGET
/* FIXME: Including auto-host is incorrect, but until we have
identified the set of defines that need to go into auto-target.h,

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
#!/bin/sh
#---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH
#---------------------------------------------------------------------------------
# Install the rules files
#---------------------------------------------------------------------------------
cd $BUILDDIR
tar -xvf $SRCDIR/devkita64-rules-$DKA64_RULES_VER.tar.gz
cd devkita64-rules-$DKA64_RULES_VER
make install

View File

@@ -10,7 +10,7 @@ cd $target/binutils
if [ ! -f configured-binutils ] if [ ! -f configured-binutils ]
then then
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \ ../../binutils-$BINUTILS_VER/configure \
--prefix=$prefix --target=$target --disable-nls --disable-werror \ --prefix=$prefix --target=$target --disable-nls --disable-werror \
--enable-lto --enable-plugins --enable-poison-system-directories \ --enable-lto --enable-plugins --enable-poison-system-directories \
$CROSS_PARAMS \ $CROSS_PARAMS \
@@ -39,9 +39,6 @@ cd $target/gcc
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS="$cflags" \
CXXFLAGS="$cflags" \
LDFLAGS="$ldflags" \
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \ CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \ CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
LDFLAGS_FOR_TARGET="" \ LDFLAGS_FOR_TARGET="" \
@@ -52,21 +49,23 @@ then
--enable-cxx-flags='-ffunction-sections' \ --enable-cxx-flags='-ffunction-sections' \
--disable-libstdcxx-verbose \ --disable-libstdcxx-verbose \
--enable-poison-system-directories \ --enable-poison-system-directories \
--enable-interwork --enable-multilib \ --enable-multilib \
--enable-threads --disable-win32-registry --disable-nls --disable-debug\ --enable-threads --disable-win32-registry --disable-nls --disable-debug\
--disable-libmudflap --disable-libssp --disable-libgomp \ --disable-libmudflap --disable-libssp --disable-libgomp \
--disable-libstdcxx-pch \ --disable-libstdcxx-pch \
--enable-libstdcxx-time \ --enable-libstdcxx-time \
--enable-libstdcxx-filesystem-ts \ --enable-libstdcxx-filesystem-ts \
--target=$target \ --target=$target \
--with-newlib \ --with-newlib=yes \
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \ --with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--prefix=$prefix \ --prefix=$prefix \
--enable-lto $plugin_ld\ --enable-lto \
--with-system-zlib \ --disable-tm-clone-registry \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 12" \ --disable-__cxa_atexit \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 24" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \
|| { echo "Error configuring gcc"; exit 1; } || { echo "Error configuring gcc"; exit 1; }
touch configured-gcc touch configured-gcc
fi fi
@@ -148,42 +147,3 @@ then
fi fi
rm -fr $prefix/$target/sys-include rm -fr $prefix/$target/sys-include
cd $BUILDDIR
#---------------------------------------------------------------------------------
# build and install the debugger
#---------------------------------------------------------------------------------
mkdir -p $target/gdb
cd $target/gdb
PLATFORM=`uname -s`
if [ ! -f configured-gdb ]
then
CFLAGS="$cflags" \
CXXFLAGS="$cflags" \
LDFLAGS="$ldflags" \
../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \
$CROSS_PARAMS \
|| { echo "Error configuring gdb"; exit 1; }
touch configured-gdb
fi
if [ ! -f built-gdb ]
then
$MAKE || { echo "Error building gdb"; exit 1; }
touch built-gdb
fi
if [ ! -f installed-gdb ]
then
$MAKE install || { echo "Error installing gdb"; exit 1; }
touch installed-gdb
fi
#---------------------------------------------------------------------------------
# copy base rulesets
#---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dka64/rules/* $prefix

View File

@@ -1,7 +0,0 @@
#!/bin/sh
export DEVKITPRO=$TOOLPATH
cd $BUILDDIR/libnx-$LIBNX_VER
$MAKE || { echo "error building libnx"; exit 1; }
$MAKE install || { echo "error installing libnx"; exit 1; }

View File

@@ -1,20 +0,0 @@
#!/bin/bash
cd $BUILDDIR
for archive in $hostarchives
do
dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' )
cd $BUILDDIR/$dir
if [ ! -f configured ]; then
CXXFLAGS=$cflags CFLAGS=$cflags LDFLAGS=$ldflags ./configure --prefix=$toolsprefix $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; }
touch configured
fi
if [ ! -f built ]; then
$MAKE || { echo "error building $dir"; exit 1; }
touch built
fi
if [ ! -f installed ]; then
$MAKE install || { echo "error installing $dir"; exit 1; }
touch installed
fi
done

View File

@@ -0,0 +1,354 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 6fd1594480a..92b82426f50 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1412,6 +1412,11 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*)
tm_file="$tm_file newlib-stdint.h"
tmake_file="${tmake_file} arm/t-bpabi"
use_gcc_stdint=wrap
+ tm_file="${tm_file} devkitpro.h"
+ extra_options="${extra_options} devkitpro.opt"
+ case ${enable_threads} in
+ "" | yes | posix) thread_file='posix' ;;
+ esac
;;
arm*-*-fuchsia*)
tm_file="${tm_file} fuchsia.h arm/fuchsia-elf.h glibc-stdint.h"
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index f1fa3fa174c..2bb894b5b2d 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -416,7 +416,7 @@ begin arch armv6k
tune for mpcore
tune flags CO_PROC
base 6K
- isa ARMv6k
+ isa ARMv6k VFPv2 FP_DBL
option fp add VFPv2 FP_DBL
optalias vfpv2 fp
option nofp remove ALL_FP
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
index f7fc1460d1c..055f9d62385 100644
--- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf
@@ -16,120 +16,22 @@
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
-# Build a very basic set of libraries that should cater for most cases.
-
-# Single-precision floating-point is NOT supported; we don't build a
-# suitable library for that. Use the rm-profile config in that case.
-
-# PART 1 - Useful groups of options
-
-dp_fpus := vfp vfpv2 vfpv3 vfpv3-fp16 vfpv3-d16 vfpv3-d16-fp16 \
- neon neon-vfpv3 neon-fp16 vfpv4 neon-vfpv4 vfpv4-d16 \
- fpv5-d16 fp-armv8 neon-fp-armv8 crypto-neon-fp-armv8 \
- vfp3
-
-sp_fpus := vfpv3xd vfpv3xd-fp16 fpv4-sp-d16 fpv5-sp-d16
-
-v7a_fps := vfpv3 vfpv3-fp16 vfpv4 simd neon-fp16 neon-vfpv4
-v7ve_fps := vfpv3-d16 vfpv3 vfpv3-d16-fp16 vfpv3-fp16 vfpv4 neon \
- neon-fp16 simd
-
-# Not all these permutations exist for all architecture variants, but
-# it seems to work ok.
-v8_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
-
-v9_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
-
-# We don't do anything special with these. Pre-v4t probably doesn't work.
-all_early_nofp := armv4 armv4t armv5t
-
-all_early_arch := armv5tej armv6 armv6j armv6k armv6z armv6kz \
- armv6zk armv6t2 iwmmxt iwmmxt2
-
-all_v7_a_r := armv7-a armv7ve armv7-r
-
-all_v8_archs := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a armv8.4-a \
- armv8.5-a armv8.6-a
-
-all_v9_archs := armv9-a
-
-# No floating point variants, require thumb1 softfp
-all_nofp_t := armv6-m armv6s-m armv8-m.base
-
-all_nofp_t2 := armv7-m
-
-all_sp_only := armv7e-m armv8-m.main
-
-MULTILIB_OPTIONS =
-MULTILIB_DIRNAMES =
+MULTILIB_OPTIONS = mthumb mbig-endian march=armv6k march=armv6s-m mfloat-abi=hard mfloat-abi=soft
+MULTILIB_DIRNAMES = thumb be armv6k v6-m fpu nofp
MULTILIB_EXCEPTIONS =
MULTILIB_MATCHES =
-MULTILIB_REUSE =
-
-# PART 2 - multilib build rules
-
-MULTILIB_OPTIONS += marm/mthumb
-MULTILIB_DIRNAMES += arm thumb
-
-MULTILIB_OPTIONS += mfpu=auto
-MULTILIB_DIRNAMES += autofp
-
-MULTILIB_OPTIONS += march=armv5te+fp/march=armv7+fp
-MULTILIB_DIRNAMES += v5te v7
-
-MULTILIB_OPTIONS += mfloat-abi=hard
-MULTILIB_DIRNAMES += fpu
-
-# Build a total of 4 library variants (base options plus the following):
-MULTILIB_REQUIRED += mthumb
-MULTILIB_REQUIRED += marm/mfpu=auto/march=armv5te+fp/mfloat-abi=hard
-MULTILIB_REQUIRED += mthumb/mfpu=auto/march=armv7+fp/mfloat-abi=hard
-
-# PART 3 - Match rules
-
-# Map all supported FPUs onto mfpu=auto
-MULTILIB_MATCHES += $(foreach FPU, $(dp_fpus), \
- mfpu?auto=mfpu?$(FPU))
-
-MULTILIB_MATCHES += march?armv5te+fp=march?armv5te
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \
- march?armv5te+fp=march?$(ARCH) \
- march?armv5te+fp=march?$(ARCH)+fp)
-
-MULTILIB_MATCHES += march?armv7+fp=march?armv7
-
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7a_fps), \
- march?armv7+fp=march?armv7-a+$(FPARCH))
-
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7ve_fps), \
- march?armv7+fp=march?armv7ve+$(FPARCH))
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v7_a_r), \
- march?armv7+fp=march?$(ARCH) \
- march?armv7+fp=march?$(ARCH)+fp)
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v8_archs), \
- march?armv7+fp=march?$(ARCH) \
- $(foreach FPARCH, $(v8_fps), \
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
+MULTILIB_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard mthumb/march=armv6s-m/mfloat-abi=soft
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v9_archs), \
- march?armv7+fp=march?$(ARCH) \
- $(foreach FPARCH, $(v9_fps), \
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
-MULTILIB_MATCHES += $(foreach ARCH, armv7e-m armv8-m.mainline, \
- march?armv7+fp=march?$(ARCH)+fp.dp)
+MULTILIB_MATCHES += march?armv6k=mtune?mpcore
+MULTILIB_MATCHES += march?armv6k=mcpu?mpcore
-# PART 4 - Reuse rules
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m0
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0plus
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m0plus
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m1
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m1
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto/march.armv5te+fp
-MULTILIB_REUSE += mthumb=mthumb/march.armv5te+fp
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=marm/march.armv5te+fp/mfloat-abi.hard
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=march.armv5te+fp/mfloat-abi.hard
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=mfpu.auto/march.armv5te+fp/mfloat-abi.hard
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mthumb/march.armv7+fp/mfloat-abi.hard
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mfpu.auto/march.armv7+fp/mfloat-abi.hard
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=march.armv7+fp/mfloat-abi.hard
+MULTILIB_REUSE = mthumb/march.armv6s-m/mfloat-abi.soft=mthumb/march.armv6s-m
diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
index 397ac3f68b9..b9a388f19be 100644
--- a/gcc/config/arm/unknown-elf.h
+++ b/gcc/config/arm/unknown-elf.h
@@ -29,7 +29,7 @@
#endif
/* Now we define the strings used to build the spec file. */
-#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
+#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -93,4 +93,5 @@
udivmoddi4, which will depend on the exception unwind routines,
which will depend on abort, which is defined in libc. */
#undef LINK_GCC_C_SEQUENCE_SPEC
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:%L} --end-group"
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
+
diff --git a/gcc/config/devkitpro.h b/gcc/config/devkitpro.h
new file mode 100644
index 00000000000..180a9ea8553
--- /dev/null
+++ b/gcc/config/devkitpro.h
@@ -0,0 +1,27 @@
+/* Definitions for devkitPro toolchains.
+ Copyright (C) 2016-2018 Free Software Foundation, Inc.
+ This file is part of GCC.
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do { \
+ builtin_define ("__DEVKITPRO__"); \
+ builtin_define ("__DEVKITARM__"); \
+ } while (0)
+
+
diff --git a/gcc/config/devkitpro.opt b/gcc/config/devkitpro.opt
new file mode 100644
index 00000000000..9acbbf9d27c
--- /dev/null
+++ b/gcc/config/devkitpro.opt
@@ -0,0 +1,29 @@
+; Options for devkitPro toolchains.
+
+; Copyright (C) 2011-2018 Free Software Foundation, Inc.
+;
+; This file is part of GCC.
+;
+; GCC is free software; you can redistribute it and/or modify it under
+; the terms of the GNU General Public License as published by the Free
+; Software Foundation; either version 3, or (at your option) any later
+; version.
+;
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
+; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+; for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with GCC; see the file COPYING3. If not see
+; <http://www.gnu.org/licenses/>.
+
+; See the GCC internals manual (options.texi) for a description of
+; this file's format.
+
+; Please try to keep this file in ASCII collating order.
+
+pthread
+Driver
+
+; This comment is to ensure we retain the blank line above.
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 16bb07f2cdc..22a181a3a1c 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -868,6 +868,11 @@ proper position among the other output files. */
#endif
#endif
+#ifndef LIBGLOSS_SPEC
+# define LIBGLOSS_SPEC "-lsysbase"
+#endif
+
+
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1191,6 +1196,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
+static const char *libgloss_spec = LIBGLOSS_SPEC;
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1701,6 +1707,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
index dddddc7c444..c2502597953 100644
--- a/libgcc/config/arm/t-bpabi
+++ b/libgcc/config/arm/t-bpabi
@@ -17,4 +17,4 @@ SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver
# On ARM, specifying -fnon-call-exceptions will needlessly pull in
# the unwinder in simple programs which use 64-bit division. Omitting
# the option is safe.
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 93ff5b81dc5..20c0fe89a28 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -326,7 +326,7 @@ register_tm_clones (void)
#ifdef OBJECT_FORMAT_ELF
-#if DEFAULT_USE_CXA_ATEXIT
+#if 1 /* DEFAULT_USE_CXA_ATEXIT */
/* Declare the __dso_handle variable. It should have a unique value
in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance
diff --git a/libgcc/gthr.h b/libgcc/gthr.h
index 1989c0c86ed..dc3220cdf3c 100644
--- a/libgcc/gthr.h
+++ b/libgcc/gthr.h
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* The pe-coff weak support isn't fully compatible to ELF's weak.
For static libraries it might would work, but as we need to deal
with shared versions too, we disable it for mingw-targets. */
-#ifdef __MINGW32__
+#ifdef __MINGW32__ || defined(__DEVKITARM__)
#undef GTHREAD_USE_WEAK
#define GTHREAD_USE_WEAK 0
#endif
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index a880e8ee227..2050e2e4ccf 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -1417,6 +1417,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
+ -e 's/_GLIBCXX___DEVKITARM_GLIBCXX___/__DEVKITARM__/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 0ff875b280b..7d270fc3a83 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -336,6 +336,7 @@ prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
python_mod_dir = @python_mod_dir@
+runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -1891,6 +1892,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
+ -e 's/_GLIBCXX___DEVKITARM_GLIBCXX___/__DEVKITARM__/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@

View File

@@ -1,290 +0,0 @@
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index ba194a80229..12e023c3728 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -401,7 +401,7 @@ begin arch armv6k
tune for mpcore
tune flags CO_PROC
base 6K
- isa ARMv6k
+ isa ARMv6k VFPv2 FP_DBL
option fp add VFPv2 FP_DBL
optalias vfpv2 fp
option nofp remove ALL_FP
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
index 9ec5bf065ac..9ab3ffb109d 100644
--- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf
@@ -1,4 +1,4 @@
-# Copyright (C) 1998-2018 Free Software Foundation, Inc.
+# Copyright (C) 1998-2017 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
@@ -16,110 +16,83 @@
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
-# Build a very basic set of libraries that should cater for most cases.
-
-# Single-precision floating-point is NOT supported; we don't build a
-# suitable library for that. Use the rm-profile config in that case.
-
-# PART 1 - Useful groups of options
-
-dp_fpus := vfp vfpv2 vfpv3 vfpv3-fp16 vfpv3-d16 vfpv3-d16-fp16 \
- neon neon-vfpv3 neon-fp16 vfpv4 neon-vfpv4 vfpv4-d16 \
- fpv5-d16 fp-armv8 neon-fp-armv8 crypto-neon-fp-armv8 \
- vfp3
-
-sp_fpus := vfpv3xd vfpv3xd-fp16 fpv4-sp-d16 fpv5-sp-d16
-
-v7a_fps := vfpv3 vfpv3-fp16 vfpv4 simd neon-fp16 neon-vfpv4
-v7ve_fps := vfpv3-d16 vfpv3 vfpv3-d16-fp16 vfpv3-fp16 vfpv4 neon \
- neon-fp16 simd
-
-# Not all these permutations exist for all architecture variants, but
-# it seems to work ok.
-v8_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
-
-# We don't do anything special with these. Pre-v4t probably doesn't work.
-all_early_nofp := armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5t
-
-all_early_arch := armv5e armv5tej armv6 armv6j armv6k armv6z armv6kz \
- armv6zk armv6t2 iwmmxt iwmmxt2
-
-all_v7_a_r := armv7-a armv7ve armv7-r
-
-all_v8_archs := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a armv8.4-a
-
-# No floating point variants, require thumb1 softfp
-all_nofp_t := armv6-m armv6s-m armv8-m.base
-
-all_nofp_t2 := armv7-m
-
-all_sp_only := armv7e-m armv8-m.main
-
-MULTILIB_OPTIONS =
-MULTILIB_DIRNAMES =
+MULTILIB_OPTIONS = mthumb mbig-endian march=armv6k mfloat-abi=hard
+MULTILIB_DIRNAMES = thumb be armv6k fpu
MULTILIB_EXCEPTIONS =
MULTILIB_MATCHES =
-MULTILIB_REUSE =
-
-# PART 2 - multilib build rules
-
-MULTILIB_OPTIONS += marm/mthumb
-MULTILIB_DIRNAMES += arm thumb
-
-MULTILIB_OPTIONS += mfpu=auto
-MULTILIB_DIRNAMES += autofp
-
-MULTILIB_OPTIONS += march=armv5te+fp/march=armv7+fp
-MULTILIB_DIRNAMES += v5te v7
-
-MULTILIB_OPTIONS += mfloat-abi=hard
-MULTILIB_DIRNAMES += fpu
-
-# Build a total of 4 library variants (base options plus the following):
-MULTILIB_REQUIRED += mthumb
-MULTILIB_REQUIRED += marm/mfpu=auto/march=armv5te+fp/mfloat-abi=hard
-MULTILIB_REQUIRED += mthumb/mfpu=auto/march=armv7+fp/mfloat-abi=hard
-
-# PART 3 - Match rules
-
-# Map all supported FPUs onto mfpu=auto
-MULTILIB_MATCHES += $(foreach FPU, $(dp_fpus), \
- mfpu?auto=mfpu?$(FPU))
-
-MULTILIB_MATCHES += march?armv5te+fp=march?armv5te
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \
- march?armv5te+fp=march?$(ARCH) \
- march?armv5te+fp=march?$(ARCH)+fp)
-
-MULTILIB_MATCHES += march?armv7+fp=march?armv7
-
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7a_fps), \
- march?armv7+fp=march?armv7-a+$(FPARCH))
-
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7ve_fps), \
- march?armv7+fp=march?armv7ve+$(FPARCH))
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v7_a_r), \
- march?armv7+fp=march?$(ARCH) \
- march?armv7+fp=march?$(ARCH)+fp)
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v8_archs), \
- march?armv7+fp=march?$(ARCH) \
- $(foreach FPARCH, $(v8_fps), \
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
-
-MULTILIB_MATCHES += $(foreach ARCH, armv7e-m armv8-m.mainline, \
- march?armv7+fp=march?$(ARCH)+fp.dp)
-
-# PART 4 - Reuse rules
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto/march.armv5te+fp
-MULTILIB_REUSE += mthumb=mthumb/march.armv5te+fp
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=marm/march.armv5te+fp/mfloat-abi.hard
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=march.armv5te+fp/mfloat-abi.hard
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=mfpu.auto/march.armv5te+fp/mfloat-abi.hard
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mthumb/march.armv7+fp/mfloat-abi.hard
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mfpu.auto/march.armv7+fp/mfloat-abi.hard
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=march.armv7+fp/mfloat-abi.hard
+MULTILIB_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard
+
+
+MULTILIB_MATCHES += march?armv6k=mtune?mpcore
+MULTILIB_MATCHES += march?armv6k=mcpu?mpcore
+
+
+
+#MULTILIB_OPTIONS += mcpu=fa526/mcpu=fa626/mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
+#MULTILIB_DIRNAMES += fa526 fa626 fa606te fa626te fmp626 fa726te
+#MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=fa526 *mthumb*/*mcpu=fa626
+
+#MULTILIB_OPTIONS += march=armv7
+#MULTILIB_DIRNAMES += thumb2
+#MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7*
+#MULTILIB_MATCHES += march?armv7=march?armv7-a
+#MULTILIB_MATCHES += march?armv7=march?armv7-r
+#MULTILIB_MATCHES += march?armv7=march?armv7-m
+#MULTILIB_MATCHES += march?armv7=mcpu?cortex-a8
+#MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4
+#MULTILIB_MATCHES += march?armv7=mcpu?cortex-m3
+
+# Not quite true. We can support hard-vfp calling in Thumb2, but how do we
+# express that here? Also, we really need architecture v5e or later
+# (mcrr etc).
+#MULTILIB_OPTIONS += mfloat-abi=hard
+#MULTILIB_DIRNAMES += fpu
+#MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
+#MULTILIB_EXCEPTIONS += *mcpu=fa526/*mfloat-abi=hard*
+#MULTILIB_EXCEPTIONS += *mcpu=fa626/*mfloat-abi=hard*
+
+# MULTILIB_OPTIONS += mcpu=ep9312
+# MULTILIB_DIRNAMES += ep9312
+# MULTILIB_EXCEPTIONS += *mthumb/*mcpu=ep9312*
+#
+# MULTILIB_OPTIONS += mlittle-endian/mbig-endian
+# MULTILIB_DIRNAMES += le be
+# MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=mle
+#
+# MULTILIB_OPTIONS += mfloat-abi=hard/mfloat-abi=soft
+# MULTILIB_DIRNAMES += fpu soft
+# MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
+#
+# MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork
+# MULTILIB_DIRNAMES += normal interwork
+#
+# MULTILIB_OPTIONS += fno-leading-underscore/fleading-underscore
+# MULTILIB_DIRNAMES += elf under
+#
+# MULTILIB_OPTIONS += mcpu=arm7
+# MULTILIB_DIRNAMES += nofmult
+# MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=arm7*
+# # Note: the multilib_exceptions matches both -mthumb and
+# # -mthumb-interwork
+# #
+# # We have to match all the arm cpu variants which do not have the
+# # multiply instruction and treat them as if the user had specified
+# # -mcpu=arm7. Note that in the following the ? is interpreted as
+# # an = for the purposes of matching command line options.
+# # FIXME: There ought to be a better way to do this.
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7d
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7di
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm70
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm700
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm700i
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm710
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm710c
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7100
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7500
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm7500fe
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm6
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm60
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm600
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm610
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm620
diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
index 12dd0931b08..59584fe64bc 100644
--- a/gcc/config/arm/unknown-elf.h
+++ b/gcc/config/arm/unknown-elf.h
@@ -29,7 +29,7 @@
#endif
/* Now we define the strings used to build the spec file. */
-#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
+#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -93,4 +93,9 @@
udivmoddi4, which will depend on the exception unwind routines,
which will depend on abort, which is defined in libc. */
#undef LINK_GCC_C_SEQUENCE_SPEC
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L --end-group"
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
+
+/* The system headers under devkitARM are C++-aware. */
+#undef NO_IMPLICIT_EXTERN_C
+#define NO_IMPLICIT_EXTERN_C
+
diff --git a/gcc/gcc.c b/gcc/gcc.c
index a716f708259..6a11011dba7 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -786,6 +786,11 @@ proper position among the other output files. */
#endif
#endif
+#ifndef LIBGLOSS_SPEC
+# define LIBGLOSS_SPEC "-lsysbase"
+#endif
+
+
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1081,6 +1086,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
+static const char *libgloss_spec = LIBGLOSS_SPEC;
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1577,6 +1583,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
index dddddc7c444..c2502597953 100644
--- a/libgcc/config/arm/t-bpabi
+++ b/libgcc/config/arm/t-bpabi
@@ -17,4 +17,4 @@ SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver
# On ARM, specifying -fnon-call-exceptions will needlessly pull in
# the unwinder in simple programs which use 64-bit division. Omitting
# the option is safe.
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 5e894455e16..f81c9c6a64c 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -47,7 +47,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* Target machine header files require this define. */
#define IN_LIBGCC2
-
+#define USED_FOR_TARGET
/* FIXME: Including auto-host is incorrect, but until we have
identified the set of defines that need to go into auto-target.h,
this will have to do. */

View File

@@ -1,449 +0,0 @@
diff -NBaur gdb-8.2.1/gdb/arm-3ds-tdep.c gdb-8.2.1-apple/gdb/arm-3ds-tdep.c
--- gdb-8.2.1/gdb/arm-3ds-tdep.c 1970-01-01 01:00:00.000000000 +0100
+++ gdb-8.2.1-apple/gdb/arm-3ds-tdep.c 2019-02-19 17:15:22.100604954 +0000
@@ -0,0 +1,157 @@
+/* Target-dependent code for 3DS. */
+
+/* This uses code from GDB, which license is: */
+
+/*
+ Copyright (C) 2002-2017 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "gdbcore.h"
+#include "target.h"
+#include "osabi.h"
+#include "xml-syscall.h"
+
+#include "arch/arm.h"
+#include "arch/arm-get-next-pcs.h"
+#include "arm-tdep.h"
+
+static const gdb_byte arm_3ds_arm_le_breakpoint[] = {0xff, 0x00, 0x00, 0xef};
+static const gdb_byte arm_3ds_thumb_le_breakpoint[] = {0xff, 0xdf};
+
+static CORE_ADDR
+ arm_3ds_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
+
+/* Operation function pointers for get_next_pcs. */
+static struct arm_get_next_pcs_ops arm_3ds_get_next_pcs_ops = {
+ arm_get_next_pcs_read_memory_unsigned_integer,
+ arm_3ds_get_next_pcs_syscall_next_pc,
+ arm_get_next_pcs_addr_bits_remove,
+ arm_get_next_pcs_is_thumb,
+ NULL,
+};
+
+static CORE_ADDR
+arm_3ds_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
+{
+ CORE_ADDR next_pc = 0;
+ CORE_ADDR pc = regcache_read_pc (self->regcache);
+ int is_thumb = arm_is_thumb (self->regcache);
+ ULONGEST svc_number = 0;
+
+ if (is_thumb)
+ {
+ next_pc = pc + 2;
+ }
+ else
+ {
+ next_pc = pc + 4;
+ }
+
+ /* Addresses for calling Thumb functions have the bit 0 set. */
+ if (is_thumb)
+ next_pc = MAKE_THUMB_ADDR (next_pc);
+
+ return next_pc;
+}
+
+static LONGEST
+arm_3ds_get_syscall_number (struct gdbarch *gdbarch,
+ thread_info *thread)
+{
+ struct regcache *regs = get_thread_regcache (thread);
+
+ ULONGEST pc;
+ ULONGEST cpsr;
+ ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
+ int is_thumb;
+ ULONGEST svc_number = -1;
+
+ regcache_cooked_read_unsigned (regs, ARM_PC_REGNUM, &pc);
+ regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &cpsr);
+ is_thumb = (cpsr & t_bit) != 0;
+
+ if (is_thumb)
+ {
+ enum bfd_endian byte_order_for_code =
+ gdbarch_byte_order_for_code (gdbarch);
+
+ /* PC gets incremented before the syscall-stop, so read the
+ previous instruction. */
+ unsigned long this_instr =
+ read_memory_unsigned_integer (pc - 2, 2, byte_order_for_code);
+
+ unsigned long svc_operand = (0x00ff & this_instr);
+ svc_number = svc_operand;
+ }
+ else
+ {
+ enum bfd_endian byte_order_for_code =
+ gdbarch_byte_order_for_code (gdbarch);
+
+ /* PC gets incremented before the syscall-stop, so read the
+ previous instruction. */
+ unsigned long this_instr =
+ read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
+
+ unsigned long svc_operand = (0x000000ff & this_instr);
+ svc_number = svc_operand;
+ }
+
+ if (svc_number == 0xfe)
+ {
+ regcache_cooked_read_unsigned (regs, 12, &svc_number);
+ }
+
+ return svc_number;
+}
+
+static void
+arm_3ds_init_abi (struct gdbarch_info info,
+ struct gdbarch *gdbarch)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+ switch (info.byte_order)
+ {
+ case BFD_ENDIAN_LITTLE:
+ tdep->arm_breakpoint = arm_3ds_arm_le_breakpoint;
+ tdep->thumb_breakpoint = arm_3ds_thumb_le_breakpoint;
+ tdep->arm_breakpoint_size = sizeof (arm_3ds_arm_le_breakpoint);
+ tdep->thumb_breakpoint_size = sizeof (arm_3ds_thumb_le_breakpoint);
+ break;
+
+ default:
+ internal_error (__FILE__, __LINE__,
+ _("arm_gdbarch_init: bad byte order"));
+ }
+ tdep->fp_model = ARM_FLOAT_VFP;
+
+ /* Single stepping. */
+ set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
+
+ /* `catch syscall' */
+ set_xml_syscall_file_name (gdbarch, "syscalls/arm-3ds.xml");
+ set_gdbarch_get_syscall_number (gdbarch, arm_3ds_get_syscall_number);
+}
+
+void
+_initialize_arm_3ds_tdep (void)
+{
+ gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_3DS,
+ arm_3ds_init_abi);
+}
diff -NBaur gdb-8.2.1/gdb/configure.tgt gdb-8.2.1-apple/gdb/configure.tgt
--- gdb-8.2.1/gdb/configure.tgt 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/configure.tgt 2019-02-19 17:15:22.104618045 +0000
@@ -61,7 +61,7 @@
;;
arm*-*-*)
- cpu_obs="arch/arm.o arch/arm-get-next-pcs.o arm-tdep.o";;
+ cpu_obs="arch/arm.o arch/arm-get-next-pcs.o arm-tdep.o arm-3ds-tdep.o";;
hppa*-*-*)
# Target: HP PA-RISC
diff -NBaur gdb-8.2.1/gdb/data-directory/Makefile.in gdb-8.2.1-apple/gdb/data-directory/Makefile.in
--- gdb-8.2.1/gdb/data-directory/Makefile.in 2018-01-05 04:07:23.000000000 +0000
+++ gdb-8.2.1-apple/gdb/data-directory/Makefile.in 2019-02-19 17:15:22.104618045 +0000
@@ -63,7 +63,7 @@
sparc-linux.xml \
sparc64-linux.xml
-SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml $(GEN_SYSCALLS_FILES)
+SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml arm-3ds.xml $(GEN_SYSCALLS_FILES)
PYTHON_DIR = python
PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR)
diff -NBaur gdb-8.2.1/gdb/defs.h gdb-8.2.1-apple/gdb/defs.h
--- gdb-8.2.1/gdb/defs.h 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/defs.h 2019-02-19 17:15:22.104618045 +0000
@@ -495,6 +495,7 @@
GDB_OSABI_LYNXOS178,
GDB_OSABI_NEWLIB,
GDB_OSABI_SDE,
+ GDB_OSABI_3DS,
GDB_OSABI_INVALID /* keep this last */
};
diff -NBaur gdb-8.2.1/gdb/dtrace-probe.c gdb-8.2.1-apple/gdb/dtrace-probe.c
--- gdb-8.2.1/gdb/dtrace-probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/dtrace-probe.c 2019-02-19 17:30:16.449175937 +0000
@@ -100,7 +100,7 @@
/* DTrace static_probe_ops. */
-const dtrace_static_probe_ops dtrace_static_probe_ops;
+const dtrace_static_probe_ops dtrace_static_probe_ops = {};
/* The following structure represents a dtrace probe. */
diff -NBaur gdb-8.2.1/gdb/Makefile.in gdb-8.2.1-apple/gdb/Makefile.in
--- gdb-8.2.1/gdb/Makefile.in 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/Makefile.in 2019-02-19 17:15:22.104618045 +0000
@@ -684,6 +684,7 @@
arch/arm-linux.o \
arch/i386.o \
arch/ppc-linux-common.o \
+ arm-3ds-tdep.o \
arm-bsd-tdep.o \
arm-fbsd-tdep.o \
arm-linux-tdep.o \
@@ -2213,6 +2214,7 @@
amd64-tdep.c \
arc-tdep.c \
arm.c \
+ arm-3ds-tdep.c \
arm-bsd-tdep.c \
arm-fbsd-nat.c \
arm-fbsd-tdep.c \
diff -NBaur gdb-8.2.1/gdb/osabi.c gdb-8.2.1-apple/gdb/osabi.c
--- gdb-8.2.1/gdb/osabi.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/osabi.c 2019-02-19 17:15:22.104618045 +0000
@@ -80,6 +80,7 @@
{ "LynxOS178", NULL },
{ "Newlib", NULL },
{ "SDE", NULL },
+ { "3DS", NULL },
{ "<invalid>", NULL }
};
diff -NBaur gdb-8.2.1/gdb/probe.c gdb-8.2.1-apple/gdb/probe.c
--- gdb-8.2.1/gdb/probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/probe.c 2019-02-19 17:31:05.266578008 +0000
@@ -60,7 +60,7 @@
/* Static operations associated with a generic probe. */
-const any_static_probe_ops any_static_probe_ops;
+const any_static_probe_ops any_static_probe_ops = {};
/* A helper for parse_probes that decodes a probe specification in
SEARCH_PSPACE. It appends matching SALs to RESULT. */
diff -NBaur gdb-8.2.1/gdb/record-btrace.c gdb-8.2.1-apple/gdb/record-btrace.c
--- gdb-8.2.1/gdb/record-btrace.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/record-btrace.c 2019-02-19 17:31:33.301731324 +0000
@@ -144,7 +144,7 @@
/* Token associated with a new-thread observer enabling branch tracing
for the new thread. */
-static const gdb::observers::token record_btrace_thread_observer_token;
+static const gdb::observers::token record_btrace_thread_observer_token = {};
/* Memory access types used in set/show record btrace replay-memory-access. */
static const char replay_memory_access_read_only[] = "read-only";
diff -NBaur gdb-8.2.1/gdb/stap-probe.c gdb-8.2.1-apple/gdb/stap-probe.c
--- gdb-8.2.1/gdb/stap-probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/stap-probe.c 2019-02-19 17:29:35.744567941 +0000
@@ -119,7 +119,7 @@
/* SystemTap static_probe_ops. */
-const stap_static_probe_ops stap_static_probe_ops;
+const stap_static_probe_ops stap_static_probe_ops = {};
class stap_probe : public probe
{
diff -NBaur gdb-8.2.1/gdb/syscalls/arm-3ds.xml gdb-8.2.1-apple/gdb/syscalls/arm-3ds.xml
--- gdb-8.2.1/gdb/syscalls/arm-3ds.xml 1970-01-01 01:00:00.000000000 +0100
+++ gdb-8.2.1-apple/gdb/syscalls/arm-3ds.xml 2019-02-19 17:15:22.104618045 +0000
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- This file is located inside GDB and is based on files which license are: -->
+<!-- Copyright (C) 2009-2017 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. This file is offered as-is,
+ without any warranty. -->
+<syscalls_info>
+ <syscall name="ControlMemory" number="1" groups="memory"/>
+ <syscall name="QueryMemory" number="2" groups="memory"/>
+
+ <syscall name="ExitProcess" number="3" groups="process"/>
+ <syscall name="GetProcessAffinityMask" number="4" groups="process"/>
+ <syscall name="SetProcessAffinityMask" number="5" groups="process"/>
+ <syscall name="GetProcessIdealProcessor" number="6" groups="process"/>
+ <syscall name="SetProcessIdealProcessor" number="7" groups="process"/>
+
+ <syscall name="CreateThread" number="8" groups="thread"/>
+ <syscall name="ExitThread" number="9" groups="thread"/>
+ <syscall name="SleepThread" number="10" groups="thread"/>
+ <syscall name="GetThreadPriority" number="11" groups="thread"/>
+ <syscall name="SetThreadPriority" number="12" groups="thread"/>
+ <syscall name="GetThreadAffinityMask" number="13" groups="thread"/>
+ <syscall name="SetThreadAffinityMask" number="14" groups="thread"/> <!-- removed -->
+ <syscall name="GetThreadIdealProcessor" number="15" groups="thread"/>
+ <syscall name="SetThreadIdealProcessor" number="16" groups="thread"/> <!-- removed -->
+ <syscall name="GetCurrentProcessorNumber" number="17" groups="thread"/>
+ <syscall name="Run" number="18" groups="thread"/>
+
+ <syscall name="CreateMutex" number="19" groups="synchronization"/>
+ <syscall name="ReleaseMutex" number="20" groups="synchronization"/>
+ <syscall name="CreateSemaphore" number="21" groups="synchronization"/>
+ <syscall name="ReleaseSemaphore" number="22" groups="synchronization"/>
+ <syscall name="CreateEvent" number="23" groups="synchronization"/>
+ <syscall name="SignalEvent" number="24" groups="synchronization"/>
+ <syscall name="ClearEvent" number="25" groups="synchronization"/>
+ <syscall name="CreateTimer" number="26" groups="synchronization"/>
+ <syscall name="SetTimer" number="27" groups="synchronization"/>
+ <syscall name="CancelTimer" number="28" groups="synchronization"/>
+ <syscall name="ClearTimer" number="29" groups="synchronization"/>
+
+ <syscall name="CreateMemoryBlock" number="30" groups="memory,ipc"/>
+ <syscall name="MapMemoryBlock" number="31" groups="memory,ipc"/>
+ <syscall name="UnmapMemoryBlock" number="32" groups="memory,ipc"/>
+
+ <syscall name="CreateAddressArbiter" number="33" groups="memory,synchronization"/>
+ <syscall name="ArbitrateAddress" number="34" groups="memory,synchronization"/>
+
+ <syscall name="CloseHandle" number="35" groups="synchronization,ipc,memory,thread,process,debug"/>
+ <syscall name="WaitSynchronization" number="36" groups="synchronization,ipc,thread,process,debug"/>
+ <syscall name="WaitSynchronizationN" number="37" groups="synchronization,ipc,thread,process,debug"/>
+ <syscall name="SignalAndWait" number="38" groups="synchronization"/> <!-- removed -->
+ <syscall name="DuplicateHandle" number="39" groups="synchronization,ipc,memory,thread,process,debug"/>
+
+ <syscall name="GetSystemTick" number="40" groups="information"/>
+ <syscall name="GetHandleInfo" number="41" groups="information,synchronization,ipc,memory,thread,process,debug"/>
+ <syscall name="GetSystemInfo" number="42" groups="information"/>
+ <syscall name="GetProcessInfo" number="43" groups="information,process"/>
+ <syscall name="GetThreadInfo" number="44" groups="information,thread"/>
+
+ <syscall name="ConnectToPort" number="45" groups="ipc"/>
+ <syscall name="GetCFWInfo" number="46" groups="custom,information"/> <!-- deprecated -->
+ <syscall name="SendSyncRequest2" number="47" groups="ipc"/> <!-- removed -->
+ <syscall name="SendSyncRequest3" number="48" groups="ipc"/> <!-- removed -->
+ <syscall name="SendSyncRequest4" number="49" groups="ipc"/> <!-- removed -->
+ <syscall name="SendSyncRequest" number="50" groups="ipc"/> <!-- removed -->
+
+ <syscall name="OpenProcess" number="51" groups="process"/>
+ <syscall name="OpenThread" number="52" groups="thread"/>
+
+ <syscall name="GetProcessId" number="53" groups="process"/>
+ <syscall name="GetProcessIdOfThread" number="54" groups="process,thread"/>
+ <syscall name="GetThreadId" number="55" groups="thread"/>
+
+ <syscall name="GetResourceLimit" number="56" groups="process"/>
+ <syscall name="GetResourceLimitLimitValues" number="57" groups="process"/>
+ <syscall name="GetResourceLimitCurrentValues" number="58" groups="process"/>
+
+ <syscall name="GetThreadContext" number="59" groups="debug,thread"/> <!-- removed -->
+ <syscall name="Break" number="60" groups="debug"/>
+ <syscall name="OutputDebugString" number="61" groups="debug"/>
+ <syscall name="ControlPerformanceCounter" number="62" groups="debug"/>
+
+ <syscall name="CreatePort" number="71" groups="ipc"/>
+ <syscall name="CreateSessionToPort" number="72" groups="ipc"/>
+ <syscall name="CreateSession" number="73" groups="ipc"/>
+ <syscall name="AcceptSession" number="74" groups="ipc"/>
+ <syscall name="ReplyAndReceive1" number="75" groups="ipc"/>
+ <syscall name="ReplyAndReceive2" number="76" groups="ipc"/>
+ <syscall name="ReplyAndReceive3" number="77" groups="ipc"/>
+ <syscall name="ReplyAndReceive4" number="78" groups="ipc"/>
+ <syscall name="ReplyAndReceive" number="79" groups="ipc"/>
+
+ <syscall name="BindInterrupt" number="80" groups="io,synchronization"/>
+ <syscall name="UnbindInterrupt" number="81" groups="io,synchronization"/>
+ <syscall name="InvalidateProcessDataCache" number="82" groups="io,memory,process"/>
+ <syscall name="StoreProcessDataCache" number="83" groups="io,memory,process"/>
+ <syscall name="FlushProcessDataCache" number="84" groups="io,memory,process"/>
+
+ <syscall name="StartInterprocessDma" number="85" groups="io,memory,ipc"/>
+ <syscall name="StopDma" number="86" groups="io,memory,ipc"/>
+ <syscall name="GetDmaState" number="87" groups="io,memory,ipc"/>
+ <syscall name="RestartDma" number="88" groups="io,memory,ipc"/>
+
+ <syscall name="SetGpuProt" number="89" groups="io"/>
+ <syscall name="SetWifiEnabled" number="90" groups="io"/>
+
+ <syscall name="DebugActiveProcess" number="96" groups="debug,process"/>
+ <syscall name="BreakDebugProcess" number="97" groups="debug,process"/>
+ <syscall name="TerminateDebugProcess" number="98" groups="debug,process"/>
+ <syscall name="GetProcessDebugEvent" number="99" groups="debug"/>
+ <syscall name="ContinueDebugEvent" number="100" groups="debug"/>
+ <syscall name="GetProcessList" number="101" groups="information,debug,process"/>
+ <syscall name="GetThreadList" number="102" groups="information,debug,thread"/>
+ <syscall name="GetDebugThreadContext" number="103" groups="debug,thread"/>
+ <syscall name="SetDebugThreadContext" number="104" groups="debug,thread"/>
+ <syscall name="QueryDebugProcessMemory" number="105" groups="debug,process,memory"/>
+ <syscall name="ReadProcessMemory" number="106" groups="debug,process,memory"/>
+ <syscall name="WriteProcessMemory" number="107" groups="debug,process,memory"/>
+ <syscall name="SetHardwareBreakPoint" number="108" group="debug"/>
+ <syscall name="GetDebugThreadParam" number="109" group="debug,thread"/>
+
+ <syscall name="ControlProcessMemory" number="112" group="process,memory"/>
+ <syscall name="MapProcessMemory" number="113" group="process,memory"/>
+ <syscall name="UnmapProcessMemory" number="114" group="process,memory"/>
+
+ <syscall name="CreateCodeSet" number="115" group="process,memory"/>
+ <syscall name="RandomStub" number="116" group="process,memory"/> <!-- removed -->
+ <syscall name="CreateProcess" number="117" group="process"/>
+ <syscall name="TerminateProcess" number="118" group="process"/>
+ <syscall name="SetProcessResourceLimits" number="119" group="process"/>
+ <syscall name="CreateResourceLimit" number="120" group="process"/>
+ <syscall name="SetResourceLimitValues" number="121" group="process"/>
+ <syscall name="AddCodeSegment" number="122" group="process"/> <!-- removed -->
+
+ <syscall name="Backdoor" number="123" group="kernel"/>
+ <syscall name="KernelSetState" number="124" group="kernel"/>
+
+ <syscall name="QueryProcessMemory" number="125" group="process,memory"/>
+
+ <syscall name="CustomBackdoor" number="128" group="custom,kernel"/>
+
+ <syscall name="ConvertVAToPA" number="144" group="custom,io,memory"/>
+ <syscall name="FlushDataCacheRange" number="145" group="custom,io,memory"/>
+ <syscall name="FlushEntireDataCache" number="146" group="custom,io,memory"/>
+ <syscall name="InvalidateInstructionCacheRange" number="147" group="custom,io,memory"/>
+ <syscall name="InvalidateEntireInstructionCache" number="148" group="custom,io,memory"/>
+
+ <syscall name="MapProcessMemoryEx" number="160" group="custom,process,memory"/>
+ <syscall name="UnmapProcessMemoryEx" number="161" group="custom,process,memory"/>
+ <syscall name="ControlMemoryEx" number="162" group="custom,memory"/>
+
+ <syscall name="ControlService" number="176" group="custom,ipc"/>
+ <syscall name="CopyHandle" number="177" groups="custom,synchronization,ipc,thread,process,debug"/>
+ <syscall name="TranslateHandle" number="178" groups="custom,synchronization,ipc,thread,process,debug"/>
+
+</syscalls_info>
diff -NBaur gdb-8.2.1/gdb/tui/tui-hooks.c gdb-8.2.1-apple/gdb/tui/tui-hooks.c
--- gdb-8.2.1/gdb/tui/tui-hooks.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/tui/tui-hooks.c 2019-02-19 17:28:53.178460364 +0000
@@ -205,7 +205,7 @@
/* Token associated with observers registered while TUI hooks are
installed. */
-static const gdb::observers::token tui_observers_token;
+static const gdb::observers::token tui_observers_token = {};
/* Attach or detach a single observer, according to ATTACH. */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
#!/bin/sh
#---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH
export DEVKITARM=$DEVKITPRO/devkitARM
#---------------------------------------------------------------------------------
# Install the rules files
#---------------------------------------------------------------------------------
cd $BUILDDIR
tar -xvf $SRCDIR/devkitarm-rules-$DKARM_RULES_VER.tar.gz
cd devkitarm-rules-$DKARM_RULES_VER
make install
#---------------------------------------------------------------------------------
# Install and build the crt0 files
#---------------------------------------------------------------------------------
cd $BUILDDIR
tar -xvf $SRCDIR/devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz
cd devkitarm-crtls-$DKARM_CRTLS_VER
make install

View File

@@ -64,9 +64,12 @@ then
--prefix=$prefix \ --prefix=$prefix \
--enable-lto\ --enable-lto\
--with-system-zlib \ --with-system-zlib \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 52" \ --disable-tm-clone-registry \
--disable-__cxa_atexit \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 63" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \
|| { echo "Error configuring gcc"; exit 1; } || { echo "Error configuring gcc"; exit 1; }
touch configured-gcc touch configured-gcc
fi fi
@@ -150,35 +153,3 @@ fi
rm -fr $prefix/$target/sys-include rm -fr $prefix/$target/sys-include
cd $BUILDDIR cd $BUILDDIR
#---------------------------------------------------------------------------------
# build and install the debugger
#---------------------------------------------------------------------------------
mkdir -p $target/gdb
cd $target/gdb
PLATFORM=`uname -s`
if [ ! -f configured-gdb ]
then
CPPFLAGS="$cppflags $CPPFLAGS" \
LDFLAGS="$ldflags" \
../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \
$CROSS_PARAMS \
|| { echo "Error configuring gdb"; exit 1; }
touch configured-gdb
fi
if [ ! -f built-gdb ]
then
$MAKE || { echo "Error building gdb"; exit 1; }
touch built-gdb
fi
if [ ! -f installed-gdb ]
then
$MAKE install || { echo "Error installing gdb"; exit 1; }
touch installed-gdb
fi

View File

@@ -1,71 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH
export DEVKITARM=$DEVKITPRO/devkitARM
#---------------------------------------------------------------------------------
# Install the rules files
#---------------------------------------------------------------------------------
cd $BUILDDIR
mkdir -p rules
cd rules
tar -xvf $SRCDIR/devkitarm-rules-$DKARM_RULES_VER.tar.xz
make install
#---------------------------------------------------------------------------------
# Install and build the crt0 files
#---------------------------------------------------------------------------------
cd $BUILDDIR
mkdir -p crtls
cd crtls
tar -xvf $SRCDIR/devkitarm-crtls-$DKARM_CRTLS_VER.tar.xz
make install
cd $BUILDDIR/libgba-$LIBGBA_VER
$MAKE || { echo "error building libgba"; exit 1; }
$MAKE install || { echo "error installing libgba"; exit 1; }
cd $BUILDDIR/libnds-$LIBNDS_VER
$MAKE || { echo "error building libnds"; exit 1; }
$MAKE install || { echo "error installing libnds"; exit 1; }
cd $BUILDDIR/dswifi-$DSWIFI_VER
$MAKE || { echo "error building dswifi"; exit 1; }
$MAKE install || { echo "error installing dswifi"; exit 1; }
cd $BUILDDIR/maxmod-$MAXMOD_VER
$MAKE || { echo "error building maxmod"; exit 1; }
$MAKE install || { echo "error installing maxmod"; exit 1; }
cd $BUILDDIR/default_arm7-$DEFAULT_ARM7_VER
$MAKE || { echo "error building default arm7"; exit 1; }
$MAKE install || { echo "error installing default arm7"; exit 1; }
cd $BUILDDIR/libfat-$LIBFAT_VER
$MAKE nds-install || { echo "error building nds libfat"; exit 1; }
$MAKE gba-install || { echo "error installing gba libfat"; exit 1; }
#cd $BUILDDIR/libmirko-$LIBMIRKO_VER
#$MAKE || { echo "error building libmirko"; exit 1; }
#$MAKE install || { echo "error installing libmirko"; exit 1; }
cd $BUILDDIR/libfilesystem-$FILESYSTEM_VER
$MAKE || { echo "error building libfilesystem"; exit 1; }
$MAKE install || { echo "error installing libfilesystem"; exit 1; }
cd $BUILDDIR/libctru-$LIBCTRU_VER
$MAKE || { echo "error building libctru"; exit 1; }
$MAKE install || { echo "error installing libctru"; exit 1; }
cd $BUILDDIR/citro3d-$CITRO3D_VER
$MAKE || { echo "error building citro3d"; exit 1; }
$MAKE install || { echo "error installing citro3d"; exit 1; }
cd $BUILDDIR/citro2d-$CITRO2D_VER
$MAKE || { echo "error building citro2d"; exit 1; }
$MAKE install || { echo "error installing citro2d"; exit 1; }

View File

@@ -1,20 +0,0 @@
#!/bin/bash
cd $BUILDDIR
for archive in $hostarchives
do
dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' )
cd $BUILDDIR/$dir
if [ ! -f configured ]; then
CPPFLAGS="$cppflags $CPPFLAGS" ./configure --prefix=$toolsprefix $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; }
touch configured
fi
if [ ! -f built ]; then
$MAKE || { echo "error building $dir"; exit 1; }
touch built
fi
if [ ! -f installed ]; then
$MAKE install || { echo "error installing $dir"; exit 1; }
touch installed
fi
done

View File

@@ -1,12 +0,0 @@
diff -NBaur binutils-2.31.1/opcodes/ppc-opc.c binutils-2.31.1-ppc/opcodes/ppc-opc.c
--- binutils-2.31.1/opcodes/ppc-opc.c 2018-06-24 19:38:58.000000000 +0100
+++ binutils-2.31.1-ppc/opcodes/ppc-opc.c 2018-11-01 10:59:42.814553627 +0000
@@ -3501,7 +3501,7 @@
#define MFDEC2 (PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE \
| PPC_OPCODE_TITAN)
#define BOOKE PPC_OPCODE_BOOKE
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
#define PPCE300 PPC_OPCODE_E300
#define PPCSPE PPC_OPCODE_SPE
#define PPCSPE2 PPC_OPCODE_SPE2

View File

@@ -0,0 +1,26 @@
diff --git a/ld/emulparams/elf32ppccommon.sh b/ld/emulparams/elf32ppccommon.sh
index da892988f5d..6b8efb9bbdb 100644
--- a/ld/emulparams/elf32ppccommon.sh
+++ b/ld/emulparams/elf32ppccommon.sh
@@ -23,7 +23,7 @@ else
unset SBSS_START_SYMBOLS
unset SBSS_END_SYMBOLS
fi
-OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end = .${CREATE_SHLIB+)};"
+OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end = .${CREATE_SHLIB+)};${CREATE_SHLIB+PROVIDE (}__end__ = .${CREATE_SHLIB+)};"
OTHER_RELRO_SECTIONS="
.fixup ${RELOCATING-0} : { *(.fixup) }
.got1 ${RELOCATING-0} : { *(.got1) }
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index 37f1aeb780c..f8de8aacc44 100644
--- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c
@@ -4988,7 +4988,7 @@ const unsigned int num_powerpc_operands = ARRAY_SIZE (powerpc_operands);
#define MFDEC2 (PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE \
| PPC_OPCODE_TITAN)
#define BOOKE PPC_OPCODE_BOOKE
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
#define PPCE300 PPC_OPCODE_E300
#define PPCSPE PPC_OPCODE_SPE
#define PPCSPE2 PPC_OPCODE_SPE2

View File

@@ -1,30 +1,17 @@
diff --git a/config/gthr.m4 b/config/gthr.m4 diff --git a/config/gthr.m4 b/config/gthr.m4
index 7b29f1f..814104f 100644 index 11996247f15..f21b315ce8a 100644
--- a/config/gthr.m4 --- a/config/gthr.m4
+++ b/config/gthr.m4 +++ b/config/gthr.m4
@@ -12,6 +12,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER], @@ -13,6 +13,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER],
[
case $1 in case $1 in
aix) thread_header=config/rs6000/gthr-aix.h ;; aix) thread_header=config/rs6000/gthr-aix.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
dce) thread_header=config/pa/gthr-dce.h ;; dce) thread_header=config/pa/gthr-dce.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;; lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 7af8e02..dc58cab 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2464,7 +2464,7 @@ powerpc-xilinx-eabi*)
use_gcc_stdint=wrap
;;
powerpc-*-eabi*)
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h"
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/750cl.h"
extra_options="${extra_options} rs6000/sysv4.opt"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
use_gcc_stdint=wrap
diff --git a/gcc/config/newlib-stdint.h b/gcc/config/newlib-stdint.h diff --git a/gcc/config/newlib-stdint.h b/gcc/config/newlib-stdint.h
index f46e797..fd39e64 100644 index 98bc77b46b8..4f1690d4f4d 100644
--- a/gcc/config/newlib-stdint.h --- a/gcc/config/newlib-stdint.h
+++ b/gcc/config/newlib-stdint.h +++ b/gcc/config/newlib-stdint.h
@@ -25,7 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see @@ -25,7 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
@@ -36,19 +23,32 @@ index f46e797..fd39e64 100644
#endif #endif
#define SIG_ATOMIC_TYPE "int" #define SIG_ATOMIC_TYPE "int"
diff --git a/gcc/config/rs6000/eabi.h b/gcc/config/rs6000/eabi.h
index 5bfc377e0de..342ed1932b9 100644
--- a/gcc/config/rs6000/eabi.h
+++ b/gcc/config/rs6000/eabi.h
@@ -36,6 +36,8 @@
builtin_assert ("system=embedded"); \
builtin_assert ("cpu=powerpc"); \
builtin_assert ("machine=powerpc"); \
+ builtin_define ("__DEVKITPPC__"); \
+ builtin_define ("__DEVKITPRO__"); \
TARGET_OS_SYSV_CPP_BUILTINS (); \
} \
while (0)
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index b83b304..b85359e 100644 index 3503614efbd..b0a1b8e4ad7 100644
--- a/gcc/config/rs6000/rs6000.h --- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h
@@ -212,6 +212,7 @@ @@ -199,6 +199,7 @@ ASM_OPT_ANY
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
SUBTARGET_EXTRA_SPECS
+#if 0
/* -mcpu=native handling only makes sense with compiler running on /* -mcpu=native handling only makes sense with compiler running on
an PowerPC chip. If changing this condition, also change an PowerPC chip. If changing this condition, also change
the condition in driver-rs6000.c. */ the condition in driver-rs6000.cc. */
@@ -226,6 +227,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); +#if 0
#if defined(__powerpc__) || defined(__POWERPC__) || defined(_AIX)
/* In driver-rs6000.cc. */
extern const char *host_detect_local_cpu (int argc, const char **argv);
@@ -210,6 +211,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#else #else
#define ASM_CPU_NATIVE_SPEC "%(asm_default)" #define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#endif #endif
@@ -57,42 +57,11 @@ index b83b304..b85359e 100644
#ifndef CC1_CPU_SPEC #ifndef CC1_CPU_SPEC
#ifdef HAVE_LOCAL_CPU_DETECT #ifdef HAVE_LOCAL_CPU_DETECT
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 4d69c1d..af2d7b5 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -5625,19 +5625,19 @@
tmp = gen_reg_rtx (DImode);
emit_insn (gen_fctiwz_<mode> (tmp, src));
- if (MEM_P (dest))
+ if (TARGET_POWERPC64 && (TARGET_MFPGPR || TARGET_DIRECT_MOVE))
{
- dest = rs6000_address_for_fpconvert (dest);
- emit_insn (gen_stfiwx (dest, tmp));
+ dest = gen_lowpart (DImode, dest);
+ emit_move_insn (dest, tmp);
DONE;
}
- else if (TARGET_POWERPC64 && (TARGET_MFPGPR || TARGET_DIRECT_MOVE))
+ else if (MEM_P (dest) && MEM_ALIGN (dest) >= 32)
{
- dest = gen_lowpart (DImode, dest);
- emit_move_insn (dest, tmp);
+ dest = rs6000_address_for_fpconvert (dest);
+ emit_insn (gen_stfiwx (dest, tmp));
DONE;
}
- else
+ else
{
rtx stack = rs6000_allocate_stack_temp (SImode, false, true);
emit_insn (gen_stfiwx (stack, tmp));
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index bb19d0d..74d1e47 100644 index ae932fc22f0..527b48878b8 100644
--- a/gcc/config/rs6000/sysv4.h --- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h
@@ -565,7 +565,11 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) @@ -581,7 +581,11 @@ GNU_USER_TARGET_CC1_SPEC
/* Default starting address if specified. */ /* Default starting address if specified. */
#define LINK_START_SPEC "\ #define LINK_START_SPEC "\
@@ -105,7 +74,7 @@ index bb19d0d..74d1e47 100644
myellowknife : %(link_start_yellowknife) ; \ myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \ mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \ msim : %(link_start_sim) ; \
@@ -596,7 +600,8 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) @@ -612,7 +616,8 @@ GNU_USER_TARGET_CC1_SPEC
/* Any specific OS flags. */ /* Any specific OS flags. */
#define LINK_OS_SPEC "\ #define LINK_OS_SPEC "\
@@ -115,7 +84,7 @@ index bb19d0d..74d1e47 100644
myellowknife : %(link_os_yellowknife) ; \ myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \ mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \ msim : %(link_os_sim) ; \
@@ -614,7 +619,10 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) @@ -627,7 +632,10 @@ GNU_USER_TARGET_CC1_SPEC
/* Override rs6000.h definition. */ /* Override rs6000.h definition. */
#undef CPP_SPEC #undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \ #define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
@@ -127,7 +96,7 @@ index bb19d0d..74d1e47 100644
myellowknife : %(cpp_os_yellowknife) ; \ myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \ mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \ msim : %(cpp_os_sim) ; \
@@ -628,7 +636,10 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) @@ -641,7 +649,10 @@ GNU_USER_TARGET_CC1_SPEC
#undef STARTFILE_SPEC #undef STARTFILE_SPEC
#define STARTFILE_SPEC "\ #define STARTFILE_SPEC "\
@@ -139,7 +108,7 @@ index bb19d0d..74d1e47 100644
myellowknife : %(startfile_yellowknife) ; \ myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \ mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \ msim : %(startfile_sim) ; \
@@ -642,7 +653,8 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) @@ -655,7 +666,8 @@ GNU_USER_TARGET_CC1_SPEC
#undef LIB_SPEC #undef LIB_SPEC
#define LIB_SPEC "\ #define LIB_SPEC "\
@@ -149,7 +118,7 @@ index bb19d0d..74d1e47 100644
myellowknife : %(lib_yellowknife) ; \ myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \ mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \ msim : %(lib_sim) ; \
@@ -652,11 +664,12 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) @@ -665,11 +677,12 @@ GNU_USER_TARGET_CC1_SPEC
mcall-openbsd: %(lib_openbsd) ; \ mcall-openbsd: %(lib_openbsd) ; \
: %(lib_default) }" : %(lib_default) }"
@@ -164,7 +133,7 @@ index bb19d0d..74d1e47 100644
myellowknife : %(endfile_yellowknife) ; \ myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \ mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \ msim : %(endfile_sim) ; \
@@ -672,16 +685,27 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) @@ -685,16 +698,27 @@ GNU_USER_TARGET_CC1_SPEC
/* Motorola ADS support. */ /* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group" #define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
@@ -192,7 +161,7 @@ index bb19d0d..74d1e47 100644
/* Motorola Yellowknife support. */ /* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group" #define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -882,6 +906,7 @@ ncrtn.o%s" @@ -842,6 +866,7 @@ ncrtn.o%s"
#undef SUBTARGET_EXTRA_SPECS #undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \ #define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \ { "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
@@ -200,7 +169,7 @@ index bb19d0d..74d1e47 100644
{ "lib_ads", LIB_ADS_SPEC }, \ { "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \ { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \ { "lib_mvme", LIB_MVME_SPEC }, \
@@ -891,6 +916,7 @@ ncrtn.o%s" @@ -851,6 +876,7 @@ ncrtn.o%s"
{ "lib_netbsd", LIB_NETBSD_SPEC }, \ { "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \ { "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \ { "lib_default", LIB_DEFAULT_SPEC }, \
@@ -208,7 +177,7 @@ index bb19d0d..74d1e47 100644
{ "startfile_ads", STARTFILE_ADS_SPEC }, \ { "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \ { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \ { "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -900,6 +926,7 @@ ncrtn.o%s" @@ -860,6 +886,7 @@ ncrtn.o%s"
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \ { "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \ { "startfile_default", STARTFILE_DEFAULT_SPEC }, \
@@ -216,7 +185,7 @@ index bb19d0d..74d1e47 100644
{ "endfile_ads", ENDFILE_ADS_SPEC }, \ { "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \ { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \ { "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -911,7 +938,11 @@ ncrtn.o%s" @@ -871,7 +898,11 @@ ncrtn.o%s"
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \ { "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \ { "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_start", LINK_START_SPEC }, \ { "link_start", LINK_START_SPEC }, \
@@ -228,7 +197,7 @@ index bb19d0d..74d1e47 100644
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \ { "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \ { "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \ { "link_start_sim", LINK_START_SIM_SPEC }, \
@@ -921,6 +952,7 @@ ncrtn.o%s" @@ -881,6 +912,7 @@ ncrtn.o%s"
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \ { "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \ { "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \ { "link_os", LINK_OS_SPEC }, \
@@ -236,7 +205,7 @@ index bb19d0d..74d1e47 100644
{ "link_os_ads", LINK_OS_ADS_SPEC }, \ { "link_os_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \ { "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \ { "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -932,6 +964,9 @@ ncrtn.o%s" @@ -892,6 +924,9 @@ ncrtn.o%s"
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \ { "link_os_default", LINK_OS_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \ { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
{ "link_secure_plt", LINK_SECURE_PLT_SPEC }, \ { "link_secure_plt", LINK_SECURE_PLT_SPEC }, \
@@ -247,7 +216,7 @@ index bb19d0d..74d1e47 100644
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
diff --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt diff --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt
index 34fea0d..084a8ae 100644 index 691e0d3d2e8..2eb60bc56b6 100644
--- a/gcc/config/rs6000/sysv4.opt --- a/gcc/config/rs6000/sysv4.opt
+++ b/gcc/config/rs6000/sysv4.opt +++ b/gcc/config/rs6000/sysv4.opt
@@ -124,6 +124,26 @@ mads @@ -124,6 +124,26 @@ mads
@@ -278,33 +247,33 @@ index 34fea0d..084a8ae 100644
Target RejectNegative Target RejectNegative
Link with libyk.a, libc.a and crt0.o. Link with libyk.a, libc.a and crt0.o.
diff --git a/gcc/configure b/gcc/configure diff --git a/gcc/configure b/gcc/configure
index 6121e16..6584112 100755 index c7b26d1927d..d1e32ef9ec5 100755
--- a/gcc/configure --- a/gcc/configure
+++ b/gcc/configure +++ b/gcc/configure
@@ -11692,7 +11692,7 @@ case ${enable_threads} in @@ -13011,7 +13011,7 @@ case ${enable_threads} in
# default # default
target_thread_file='single' target_thread_file='single'
;; ;;
- aix | dce | lynx | mipssde | posix | rtems | \ - aix | dce | lynx | mipssde | posix | rtems | \
+ aix | dce | dkp | lynx | mipssde | posix | rtems | \ + aix | dce | dkp | lynx | mipssde | posix | rtems | \
single | tpf | vxworks | win32) single | tpf | vxworks | win32 | mcf)
target_thread_file=${enable_threads} target_thread_file=${enable_threads}
;; ;;
diff --git a/gcc/configure.ac b/gcc/configure.ac diff --git a/gcc/configure.ac b/gcc/configure.ac
index b066cc6..c42b3ef 100644 index 09082e8ccae..f5700df9455 100644
--- a/gcc/configure.ac --- a/gcc/configure.ac
+++ b/gcc/configure.ac +++ b/gcc/configure.ac
@@ -1611,7 +1611,7 @@ case ${enable_threads} in @@ -2020,7 +2020,7 @@ case ${enable_threads} in
# default # default
target_thread_file='single' target_thread_file='single'
;; ;;
- aix | dce | lynx | mipssde | posix | rtems | \ - aix | dce | lynx | mipssde | posix | rtems | \
+ aix | dce | dkp | lynx | mipssde | posix | rtems | \ + aix | dce | dkp | lynx | mipssde | posix | rtems | \
single | tpf | vxworks | win32) single | tpf | vxworks | win32 | mcf)
target_thread_file=${enable_threads} target_thread_file=${enable_threads}
;; ;;
diff --git a/libgcc/config/rs6000/crtrestvr.S b/libgcc/config/rs6000/crtrestvr.S diff --git a/libgcc/config/rs6000/crtrestvr.S b/libgcc/config/rs6000/crtrestvr.S
index ba2b262..8d86610 100644 index cf7f71ae123..7e0892a845f 100644
--- a/libgcc/config/rs6000/crtrestvr.S --- a/libgcc/config/rs6000/crtrestvr.S
+++ b/libgcc/config/rs6000/crtrestvr.S +++ b/libgcc/config/rs6000/crtrestvr.S
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
@@ -322,7 +291,7 @@ index ba2b262..8d86610 100644
#endif #endif
+#endif +#endif
diff --git a/libgcc/config/rs6000/crtsavevr.S b/libgcc/config/rs6000/crtsavevr.S diff --git a/libgcc/config/rs6000/crtsavevr.S b/libgcc/config/rs6000/crtsavevr.S
index 077e33f..b7be68b 100644 index 19de2128714..d116593062d 100644
--- a/libgcc/config/rs6000/crtsavevr.S --- a/libgcc/config/rs6000/crtsavevr.S
+++ b/libgcc/config/rs6000/crtsavevr.S +++ b/libgcc/config/rs6000/crtsavevr.S
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
@@ -341,10 +310,10 @@ index 077e33f..b7be68b 100644
+#endif +#endif
diff --git a/libgcc/config/rs6000/gthr-dkp.c b/libgcc/config/rs6000/gthr-dkp.c diff --git a/libgcc/config/rs6000/gthr-dkp.c b/libgcc/config/rs6000/gthr-dkp.c
new file mode 100644 new file mode 100644
index 0000000..94d6ba9 index 00000000000..26180aa7f36
--- /dev/null --- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.c +++ b/libgcc/config/rs6000/gthr-dkp.c
@@ -0,0 +1,349 @@ @@ -0,0 +1,319 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */ +/* Compile this one with gcc. */
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
@@ -370,336 +339,306 @@ index 0000000..94d6ba9
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */ +<http://www.gnu.org/licenses/>. */
+ +
+#define _BUILDING_LIBGCC
+#include "gthr-dkp.h" +#include "gthr-dkp.h"
+#include <stddef.h> +#include <stddef.h>
+ +
+__gthread_impl_t __gthread_impl = {
+ NULL, // active
+ NULL, // create
+ NULL, // join
+ NULL, // detach
+ NULL, // equal
+ NULL, // self
+ NULL, // yield
+ NULL, // once
+ NULL, // key_create
+ NULL, // key_delete
+ NULL, // getspecific
+ NULL, // setspecific
+ NULL, // mutex_init_function
+ NULL, // mutex_destroy
+ NULL, // mutex_lock
+ NULL, // mutex_trylock
+ NULL, // mutex_unlock
+ NULL, // recursive_mutex_init_function
+ NULL, // recursive_mutex_lock
+ NULL, // recursive_mutex_trylock
+ NULL, // recursive_mutex_unlock
+ NULL, // recursive_mutex_destroy
+ NULL, // cond_init_function
+ NULL, // cond_broadcast
+ NULL, // cond_signal
+ NULL, // cond_wait
+ NULL, // cond_timedwait
+ NULL, // cond_wait_recursive
+ NULL, // cond_destroy
+};
+ +
+int +int
+__gthread_active_p (void) +__gthread_active_p (void)
+{ +{
+ if (!__gthread_impl.active) { + if (!__has_gthr_impl(active)) {
+ return 0; + return 0;
+ } + }
+ +
+ return __gthread_impl.active(); + return __gthr_impl_active();
+} +}
+ +
+int +int
+__gthread_create (__gthread_t *__threadid, void *(*__func) (void*), +__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
+ void *__args) + void *__args)
+{ +{
+ if (!__gthread_impl.create) { + if (!__has_gthr_impl(create)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.create(__threadid, __func, __args); + return __gthr_impl_create(__threadid, __func, __args);
+} +}
+ +
+int +int
+__gthread_join (__gthread_t __threadid, void **__value_ptr) +__gthread_join (__gthread_t __threadid, void **__value_ptr)
+{ +{
+ if (!__gthread_impl.join) { + if (!__has_gthr_impl(join)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.join(__threadid, __value_ptr); + return __gthr_impl_join(__threadid, __value_ptr);
+} +}
+ +
+int +int
+__gthread_detach (__gthread_t __threadid) +__gthread_detach (__gthread_t __threadid)
+{ +{
+ if (!__gthread_impl.detach) { + if (!__has_gthr_impl(detach)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.detach(__threadid); + return __gthr_impl_detach(__threadid);
+} +}
+ +
+int +int
+__gthread_equal (__gthread_t __t1, __gthread_t __t2) +__gthread_equal (__gthread_t __t1, __gthread_t __t2)
+{ +{
+ if (!__gthread_impl.equal) { + if (!__has_gthr_impl(equal)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.equal(__t1, __t2); + return __gthr_impl_equal(__t1, __t2);
+} +}
+ +
+__gthread_t +__gthread_t
+__gthread_self (void) +__gthread_self (void)
+{ +{
+ if (!__gthread_impl.self) { + if (!__has_gthr_impl(self)) {
+ __gthread_t result = { 0 }; + __gthread_t result = { 0 };
+ return result; + return result;
+ } + }
+ +
+ return __gthread_impl.self(); + return __gthr_impl_self();
+} +}
+ +
+int +int
+__gthread_yield (void) +__gthread_yield (void)
+{ +{
+ if (!__gthread_impl.yield) { + if (!__has_gthr_impl(yield)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.yield(); + return __gthr_impl_yield();
+} +}
+ +
+int +int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void)) +__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{ +{
+ if (!__gthread_impl.once) { + if (!__has_gthr_impl(once)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.once(__once, __func); + return __gthr_impl_once(__once, __func);
+} +}
+ +
+int +int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) +__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{ +{
+ if (!__gthread_impl.key_create) { + if (!__has_gthr_impl(key_create)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.key_create(__key, __dtor); + return __gthr_impl_key_create(__key, __dtor);
+} +}
+ +
+int +int
+__gthread_key_delete (__gthread_key_t __key) +__gthread_key_delete (__gthread_key_t __key)
+{ +{
+ if (!__gthread_impl.key_delete) { + if (!__has_gthr_impl(key_delete)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.key_delete(__key); + return __gthr_impl_key_delete(__key);
+} +}
+ +
+void * +void *
+__gthread_getspecific (__gthread_key_t __key) +__gthread_getspecific (__gthread_key_t __key)
+{ +{
+ if (!__gthread_impl.getspecific) { + if (!__has_gthr_impl(getspecific)) {
+ return NULL; + return NULL;
+ } + }
+ +
+ return __gthread_impl.getspecific(__key); + return __gthr_impl_getspecific(__key);
+} +}
+ +
+int +int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr) +__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{ +{
+ if (!__gthread_impl.setspecific) { + if (!__has_gthr_impl(setspecific)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.setspecific(__key, __ptr); + return __gthr_impl_setspecific(__key, __ptr);
+} +}
+ +
+void +void
+__gthread_mutex_init_function (__gthread_mutex_t *__mutex) +__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
+{ +{
+ if (__gthread_impl.mutex_init_function) { + if (__has_gthr_impl(mutex_init_function)) {
+ __gthread_impl.mutex_init_function(__mutex); + __gthr_impl_mutex_init_function(__mutex);
+ } + }
+} +}
+ +
+int +int
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex) +__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.mutex_destroy) { + if (!__has_gthr_impl(mutex_destroy)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.mutex_destroy(__mutex); + return __gthr_impl_mutex_destroy(__mutex);
+} +}
+ +
+int +int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex) +__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.mutex_lock) { + if (!__has_gthr_impl(mutex_lock)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.mutex_lock(__mutex); + return __gthr_impl_mutex_lock(__mutex);
+} +}
+ +
+int +int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex) +__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.mutex_trylock) { + if (!__has_gthr_impl(mutex_trylock)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.mutex_trylock(__mutex); + return __gthr_impl_mutex_trylock(__mutex);
+} +}
+ +
+int +int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex) +__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.mutex_unlock) { + if (!__has_gthr_impl(mutex_unlock)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.mutex_unlock(__mutex); + return __gthr_impl_mutex_unlock(__mutex);
+} +}
+ +
+int +int
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex) +__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.recursive_mutex_init_function) { + if (!__has_gthr_impl(recursive_mutex_init_function)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.recursive_mutex_init_function(__mutex); + return __gthr_impl_recursive_mutex_init_function(__mutex);
+} +}
+ +
+int +int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.recursive_mutex_lock) { + if (!__has_gthr_impl(recursive_mutex_lock)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.recursive_mutex_lock(__mutex); + return __gthr_impl_recursive_mutex_lock(__mutex);
+} +}
+ +
+int +int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.recursive_mutex_trylock) { + if (!__has_gthr_impl(recursive_mutex_trylock)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.recursive_mutex_trylock(__mutex); + return __gthr_impl_recursive_mutex_trylock(__mutex);
+} +}
+ +
+int +int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.recursive_mutex_unlock) { + if (!__has_gthr_impl(recursive_mutex_unlock)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.recursive_mutex_unlock(__mutex); + return __gthr_impl_recursive_mutex_unlock(__mutex);
+} +}
+ +
+int +int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.recursive_mutex_destroy) { + if (!__has_gthr_impl(recursive_mutex_destroy)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.recursive_mutex_destroy(__mutex); + return __gthr_impl_recursive_mutex_destroy(__mutex);
+} +}
+ +
+void +void
+__gthread_cond_init_function (__gthread_cond_t *__cond) +__gthread_cond_init_function (__gthread_cond_t *__cond)
+{ +{
+ if (__gthread_impl.cond_init_function) { + if (__has_gthr_impl(cond_init_function)) {
+ __gthread_impl.cond_init_function(__cond); + __gthr_impl_cond_init_function(__cond);
+ } + }
+} +}
+ +
+int +int
+__gthread_cond_broadcast (__gthread_cond_t *__cond) +__gthread_cond_broadcast (__gthread_cond_t *__cond)
+{ +{
+ if (!__gthread_impl.cond_broadcast) { + if (!__has_gthr_impl(cond_broadcast)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.cond_broadcast(__cond); + return __gthr_impl_cond_broadcast(__cond);
+} +}
+ +
+int +int
+__gthread_cond_signal (__gthread_cond_t *__cond) +__gthread_cond_signal (__gthread_cond_t *__cond)
+{ +{
+ if (!__gthread_impl.cond_signal) { + if (!__has_gthr_impl(cond_signal)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.cond_signal(__cond); + return __gthr_impl_cond_signal(__cond);
+} +}
+ +
+int +int
+__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) +__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.cond_wait) { + if (!__has_gthr_impl(cond_wait)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.cond_wait(__cond, __mutex); + return __gthr_impl_cond_wait(__cond, __mutex);
+} +}
+ +
+int +int
+__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, +__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout) + const __gthread_time_t *__abs_timeout)
+{ +{
+ if (!__gthread_impl.cond_timedwait) { + if (!__has_gthr_impl(cond_timedwait)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.cond_timedwait(__cond, __mutex, __abs_timeout); + return __gthr_impl_cond_timedwait(__cond, __mutex, __abs_timeout);
+} +}
+ +
+int +int
+__gthread_cond_wait_recursive (__gthread_cond_t *__cond, +__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex) + __gthread_recursive_mutex_t *__mutex)
+{ +{
+ if (!__gthread_impl.cond_wait_recursive) { + if (!__has_gthr_impl(cond_wait_recursive)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.cond_wait_recursive(__cond, __mutex); + return __gthr_impl_cond_wait_recursive(__cond, __mutex);
+} +}
+ +
+int +int
+__gthread_cond_destroy (__gthread_cond_t* __cond) +__gthread_cond_destroy (__gthread_cond_t* __cond)
+{ +{
+ if (!__gthread_impl.cond_destroy) { + if (!__has_gthr_impl(cond_destroy)) {
+ return -1; + return -1;
+ } + }
+ +
+ return __gthread_impl.cond_destroy(__cond); + return __gthr_impl_cond_destroy(__cond);
+} +}
diff --git a/libgcc/config/rs6000/gthr-dkp.h b/libgcc/config/rs6000/gthr-dkp.h diff --git a/libgcc/config/rs6000/gthr-dkp.h b/libgcc/config/rs6000/gthr-dkp.h
new file mode 100644 new file mode 100644
index 0000000..281c19d index 00000000000..72ecf82ab83
--- /dev/null --- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.h +++ b/libgcc/config/rs6000/gthr-dkp.h
@@ -0,0 +1,185 @@ @@ -0,0 +1,187 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */ +/* Compile this one with gcc. */
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
@@ -753,42 +692,44 @@ index 0000000..281c19d
+#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function +#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function +#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
+ +
+typedef struct { +#ifdef _BUILDING_LIBGCC
+ int (*active) (void); +#define __GTHR_IMPL(_name) __attribute__((weak)) __gthr_impl_##_name
+ int (*create) (__gthread_t *__threadid, void *(*__func) (void*), +#define __has_gthr_impl(_name) (&__gthr_impl_##_name)
+ void *__args); +#else
+ int (*join) (__gthread_t __threadid, void **__value_ptr); +#define __GTHR_IMPL(_name) __gthr_impl_##_name
+ int (*detach) (__gthread_t __threadid); +#endif
+ int (*equal) (__gthread_t __t1, __gthread_t __t2);
+ __gthread_t (*self) (void);
+ int (*yield) (void);
+ int (*once) (__gthread_once_t *__once, void (*__func) (void));
+ int (*key_create) (__gthread_key_t *__key, void (*__dtor) (void *));
+ int (*key_delete) (__gthread_key_t __key);
+ void * (*getspecific) (__gthread_key_t __key);
+ int (*setspecific) (__gthread_key_t __key, const void *__ptr);
+ void (*mutex_init_function) (__gthread_mutex_t *__mutex);
+ int (*mutex_destroy) (__gthread_mutex_t *__mutex);
+ int (*mutex_lock) (__gthread_mutex_t *__mutex);
+ int (*mutex_trylock) (__gthread_mutex_t *__mutex);
+ int (*mutex_unlock) (__gthread_mutex_t *__mutex);
+ int (*recursive_mutex_init_function) (__gthread_recursive_mutex_t *__mutex);
+ int (*recursive_mutex_lock) (__gthread_recursive_mutex_t *__mutex);
+ int (*recursive_mutex_trylock) (__gthread_recursive_mutex_t *__mutex);
+ int (*recursive_mutex_unlock) (__gthread_recursive_mutex_t *__mutex);
+ int (*recursive_mutex_destroy) (__gthread_recursive_mutex_t *__mutex);
+ void (*cond_init_function) (__gthread_cond_t *__cond);
+ int (*cond_broadcast) (__gthread_cond_t *__cond);
+ int (*cond_signal) (__gthread_cond_t *__cond);
+ int (*cond_wait) (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex);
+ int (*cond_timedwait) (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout);
+ int (*cond_wait_recursive) (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex);
+ int (*cond_destroy) (__gthread_cond_t* __cond);
+} __gthread_impl_t;
+ +
+extern __gthread_impl_t __gthread_impl; +int __GTHR_IMPL(active) (void);
+int __GTHR_IMPL(create) (__gthread_t *__threadid, void *(*__func) (void*), void *__args);
+int __GTHR_IMPL(join) (__gthread_t __threadid, void **__value_ptr);
+int __GTHR_IMPL(detach) (__gthread_t __threadid);
+int __GTHR_IMPL(equal) (__gthread_t __t1, __gthread_t __t2);
+__gthread_t __GTHR_IMPL(self) (void);
+int __GTHR_IMPL(yield) (void);
+int __GTHR_IMPL(once) (__gthread_once_t *__once, void (*__func) (void));
+int __GTHR_IMPL(key_create) (__gthread_key_t *__key, void (*__dtor) (void *));
+int __GTHR_IMPL(key_delete) (__gthread_key_t __key);
+void * __GTHR_IMPL(getspecific) (__gthread_key_t __key);
+int __GTHR_IMPL(setspecific) (__gthread_key_t __key, const void *__ptr);
+void __GTHR_IMPL(mutex_init_function) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(mutex_destroy) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(mutex_lock) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(mutex_trylock) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(mutex_unlock) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_init_function) (__gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_lock) (__gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_trylock) (__gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_unlock) (__gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_destroy) (__gthread_recursive_mutex_t *__mutex);
+void __GTHR_IMPL(cond_init_function) (__gthread_cond_t *__cond);
+int __GTHR_IMPL(cond_broadcast) (__gthread_cond_t *__cond);
+int __GTHR_IMPL(cond_signal) (__gthread_cond_t *__cond);
+int __GTHR_IMPL(cond_wait) (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex);
+int __GTHR_IMPL(cond_timedwait) (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout);
+int __GTHR_IMPL(cond_wait_recursive) (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(cond_destroy) (__gthread_cond_t* __cond);
+ +
+int +int
+__gthread_active_p (void); +__gthread_active_p (void);
@@ -886,7 +827,7 @@ index 0000000..281c19d
+ +
+#endif /* ! _GLIBCXX_GCC_GTHR_DKP_H */ +#endif /* ! _GLIBCXX_GCC_GTHR_DKP_H */
diff --git a/libgcc/config/rs6000/t-ppccomm b/libgcc/config/rs6000/t-ppccomm diff --git a/libgcc/config/rs6000/t-ppccomm b/libgcc/config/rs6000/t-ppccomm
index fb812d3..7f6669d 100644 index fb812d3801f..7f6669d530f 100644
--- a/libgcc/config/rs6000/t-ppccomm --- a/libgcc/config/rs6000/t-ppccomm
+++ b/libgcc/config/rs6000/t-ppccomm +++ b/libgcc/config/rs6000/t-ppccomm
@@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
@@ -896,38 +837,140 @@ index fb812d3..7f6669d 100644
# This can't end up in shared libgcc # This can't end up in shared libgcc
diff --git a/libgcc/configure b/libgcc/configure diff --git a/libgcc/configure b/libgcc/configure
index b2f3f87..c6f93f8 100644 index be5d45f1755..5c5aa253655 100755
--- a/libgcc/configure --- a/libgcc/configure
+++ b/libgcc/configure +++ b/libgcc/configure
@@ -5442,6 +5442,7 @@ tm_file="${tm_file_}" @@ -5690,6 +5690,7 @@ tm_file="${tm_file_}"
case $target_thread_file in case $target_thread_file in
aix) thread_header=config/rs6000/gthr-aix.h ;; aix) thread_header=config/rs6000/gthr-aix.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
dce) thread_header=config/pa/gthr-dce.h ;; dce) thread_header=config/pa/gthr-dce.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;; lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 5e89445..f234745 100644 index 93ff5b81dc5..20c0fe89a28 100644
--- a/libgcc/crtstuff.c --- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c +++ b/libgcc/crtstuff.c
@@ -47,6 +47,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see @@ -326,7 +326,7 @@ register_tm_clones (void)
/* Target machine header files require this define. */ #ifdef OBJECT_FORMAT_ELF
#define IN_LIBGCC2
+#define USED_FOR_TARGET
/* FIXME: Including auto-host is incorrect, but until we have -#if DEFAULT_USE_CXA_ATEXIT
identified the set of defines that need to go into auto-target.h, +#if 1 /* DEFAULT_USE_CXA_ATEXIT */
/* Declare the __dso_handle variable. It should have a unique value
in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 5535bfa..9f86d5d 100755 index 68ee94c9e28..1e17f789b89 100755
--- a/libstdc++-v3/configure --- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure +++ b/libstdc++-v3/configure
@@ -15180,6 +15180,7 @@ $as_echo "$target_thread_file" >&6; } @@ -15800,6 +15800,7 @@ $as_echo "$target_thread_file" >&6; }
case $target_thread_file in case $target_thread_file in
aix) thread_header=config/rs6000/gthr-aix.h ;; aix) thread_header=config/rs6000/gthr-aix.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
dce) thread_header=config/pa/gthr-dce.h ;; dce) thread_header=config/pa/gthr-dce.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;; lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream
index 3dff4e5e74e..7835a727321 100644
--- a/libstdc++-v3/include/std/fstream
+++ b/libstdc++-v3/include/std/fstream
@@ -48,7 +48,7 @@
// This can be overridden by the target's os_defines.h
#ifndef _GLIBCXX_BUFSIZ
-# define _GLIBCXX_BUFSIZ BUFSIZ
+# define _GLIBCXX_BUFSIZ (BUFSIZ+1)
#endif
namespace std _GLIBCXX_VISIBILITY(default)
diff --git a/libstdc++-v3/libsupc++/eh_alloc.cc b/libstdc++-v3/libsupc++/eh_alloc.cc
index 8380052c9f3..100de070f20 100644
--- a/libstdc++-v3/libsupc++/eh_alloc.cc
+++ b/libstdc++-v3/libsupc++/eh_alloc.cc
@@ -143,6 +143,7 @@ namespace
{
public:
pool() noexcept;
+ ~pool();
_GLIBCXX_NODISCARD void *allocate (std::size_t) noexcept;
void free (void *) noexcept;
@@ -248,6 +249,15 @@ namespace
first_free_entry->next = NULL;
}
+ pool::~pool()
+ {
+ if (arena)
+ {
+ ::free(arena);
+ arena = 0;
+ }
+ }
+
void *pool::allocate (std::size_t size) noexcept
{
__scoped_lock sentry(emergency_mutex);
diff --git a/libstdc++-v3/src/c++17/fs_ops.cc b/libstdc++-v3/src/c++17/fs_ops.cc
index c94d260632f..74c7a06a90d 100644
--- a/libstdc++-v3/src/c++17/fs_ops.cc
+++ b/libstdc++-v3/src/c++17/fs_ops.cc
@@ -1124,6 +1124,7 @@ fs::permissions(const path& p, perms prms, perm_options opts,
}
int err = 0;
+#ifndef __DEVKITPPC__
#if _GLIBCXX_USE_FCHMODAT
const int flag = (nofollow && is_symlink(st)) ? AT_SYMLINK_NOFOLLOW : 0;
if (::fchmodat(AT_FDCWD, p.c_str(), static_cast<mode_t>(prms), flag))
@@ -1133,6 +1134,7 @@ fs::permissions(const path& p, perms prms, perm_options opts,
ec = std::__unsupported();
else if (posix::chmod(p.c_str(), static_cast<posix::mode_t>(prms)))
err = errno;
+#endif
#endif
if (err)
diff --git a/libstdc++-v3/src/filesystem/ops-common.h b/libstdc++-v3/src/filesystem/ops-common.h
index c95511b5c95..f9be4529bb2 100644
--- a/libstdc++-v3/src/filesystem/ops-common.h
+++ b/libstdc++-v3/src/filesystem/ops-common.h
@@ -486,6 +486,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
return false;
}
+#ifndef __DEVKITPPC__
#if defined _GLIBCXX_USE_FCHMOD && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
if (::fchmod(out.fd, from_st->st_mode))
#elif defined _GLIBCXX_USE_FCHMODAT && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
@@ -497,6 +498,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
ec.assign(errno, std::generic_category());
return false;
}
+#endif
size_t count = from_st->st_size;
#if defined _GLIBCXX_USE_SENDFILE && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc
index d33c13d7f15..7c343cdc30e 100644
--- a/libstdc++-v3/src/filesystem/ops.cc
+++ b/libstdc++-v3/src/filesystem/ops.cc
@@ -972,6 +972,7 @@ fs::permissions(const path& p, perms prms, error_code& ec) noexcept
}
int err = 0;
+#ifndef __DEVKITPPC__
#if _GLIBCXX_USE_FCHMODAT
const int flag = (nofollow && is_symlink(st)) ? AT_SYMLINK_NOFOLLOW : 0;
if (::fchmodat(AT_FDCWD, p.c_str(), static_cast<mode_t>(prms), flag))
@@ -981,6 +982,7 @@ fs::permissions(const path& p, perms prms, error_code& ec) noexcept
ec = std::__unsupported();
else if (posix::chmod(p.c_str(), static_cast<mode_t>(prms)))
err = errno;
+#endif
#endif
if (err)

View File

@@ -1,60 +0,0 @@
diff -NBaur gdb-8.2.1/gdb/dtrace-probe.c gdb-8.2.1-apple/gdb/dtrace-probe.c
--- gdb-8.2.1/gdb/dtrace-probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/dtrace-probe.c 2019-02-19 17:30:16.449175937 +0000
@@ -100,7 +100,7 @@
/* DTrace static_probe_ops. */
-const dtrace_static_probe_ops dtrace_static_probe_ops;
+const dtrace_static_probe_ops dtrace_static_probe_ops = {};
/* The following structure represents a dtrace probe. */
diff -NBaur gdb-8.2.1/gdb/probe.c gdb-8.2.1-apple/gdb/probe.c
--- gdb-8.2.1/gdb/probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/probe.c 2019-02-19 17:31:05.266578008 +0000
@@ -60,7 +60,7 @@
/* Static operations associated with a generic probe. */
-const any_static_probe_ops any_static_probe_ops;
+const any_static_probe_ops any_static_probe_ops = {};
/* A helper for parse_probes that decodes a probe specification in
SEARCH_PSPACE. It appends matching SALs to RESULT. */
diff -NBaur gdb-8.2.1/gdb/record-btrace.c gdb-8.2.1-apple/gdb/record-btrace.c
--- gdb-8.2.1/gdb/record-btrace.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/record-btrace.c 2019-02-19 17:31:33.301731324 +0000
@@ -144,7 +144,7 @@
/* Token associated with a new-thread observer enabling branch tracing
for the new thread. */
-static const gdb::observers::token record_btrace_thread_observer_token;
+static const gdb::observers::token record_btrace_thread_observer_token = {};
/* Memory access types used in set/show record btrace replay-memory-access. */
static const char replay_memory_access_read_only[] = "read-only";
diff -NBaur gdb-8.2.1/gdb/stap-probe.c gdb-8.2.1-apple/gdb/stap-probe.c
--- gdb-8.2.1/gdb/stap-probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/stap-probe.c 2019-02-19 17:29:35.744567941 +0000
@@ -119,7 +119,7 @@
/* SystemTap static_probe_ops. */
-const stap_static_probe_ops stap_static_probe_ops;
+const stap_static_probe_ops stap_static_probe_ops = {};
class stap_probe : public probe
{
diff -NBaur gdb-8.2.1/gdb/tui/tui-hooks.c gdb-8.2.1-apple/gdb/tui/tui-hooks.c
--- gdb-8.2.1/gdb/tui/tui-hooks.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/tui/tui-hooks.c 2019-02-19 17:28:53.178460364 +0000
@@ -205,7 +205,7 @@
/* Token associated with observers registered while TUI hooks are
installed. */
-static const gdb::observers::token tui_observers_token;
+static const gdb::observers::token tui_observers_token = {};
/* Attach or detach a single observer, according to ATTACH. */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

16
dkppc/scripts/build-crtls.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/sh
#---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH
export DEVKITPPC=$DEVKITPRO/devkitPPC
#---------------------------------------------------------------------------------
# Install the rules files
#---------------------------------------------------------------------------------
cd $BUILDDIR
tar -xvf $SRCDIR/devkitppc-rules-$DKPPC_RULES_VER.tar.gz
cd devkitppc-rules-$DKPPC_RULES_VER
make install

View File

@@ -12,7 +12,7 @@ cd $target/binutils
if [ ! -f configured-binutils ] if [ ! -f configured-binutils ]
then then
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \ ../../binutils-$BINUTILS_VER/configure \
--prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \ --prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \
--disable-werror \ --disable-werror \
--enable-poison-system-directories \ --enable-poison-system-directories \
@@ -40,12 +40,15 @@ cd $BUILDDIR
# build and install mn10200 binutils # build and install mn10200 binutils
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Use modern config.sub for aarch64 host
cp binutils-$BINUTILS_VER/config.sub binutils-$MN_BINUTILS_VER/config.sub
mkdir -p mn10200/binutils mkdir -p mn10200/binutils
cd mn10200/binutils cd mn10200/binutils
if [ ! -f configured-binutils ] if [ ! -f configured-binutils ]
then then
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$MN_BINUTILS_VER/configure \ ../../binutils-$MN_BINUTILS_VER/configure \
--prefix=$prefix --target=mn10200 --disable-nls --disable-debug \ --prefix=$prefix --target=mn10200 --disable-nls --disable-debug \
--disable-multilib \ --disable-multilib \
--disable-werror $CROSS_PARAMS \ --disable-werror $CROSS_PARAMS \
@@ -73,11 +76,10 @@ cd $BUILDDIR
mkdir -p $target/gcc mkdir -p $target/gcc
cd $target/gcc cd $target/gcc
export gcc_cv_libc_provides_ssp=yes
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS="$cflags" \
CXXFLAGS="$cflags" \
LDFLAGS="$ldflags" \
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \ CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \ CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
LDFLAGS_FOR_TARGET="" \ LDFLAGS_FOR_TARGET="" \
@@ -91,15 +93,18 @@ then
--disable-libstdcxx-verbose \ --disable-libstdcxx-verbose \
--enable-libstdcxx-time=yes \ --enable-libstdcxx-time=yes \
--enable-libstdcxx-filesystem-ts \ --enable-libstdcxx-filesystem-ts \
--disable-tm-clone-registry \
--disable-__cxa_atexit \
--disable-libssp \
--enable-cxx-flags='-ffunction-sections -fdata-sections' \ --enable-cxx-flags='-ffunction-sections -fdata-sections' \
--target=$target \ --target=$target \
--with-newlib \ --with-newlib \
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \ --with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--prefix=$prefix\ --prefix=$prefix \
--with-system-zlib\ --with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 45" \
--with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 35" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \ CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|| { echo "Error configuring gcc stage 1"; exit 1; } || { echo "Error configuring gcc stage 1"; exit 1; }
touch configured-gcc touch configured-gcc
@@ -134,11 +139,12 @@ unset CXX
if [ ! -f configured-newlib ] if [ ! -f configured-newlib ]
then then
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \ CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections -DCUSTOM_MALLOC_LOCK" \
../../newlib-$NEWLIB_VER/configure \ ../../newlib-$NEWLIB_VER/configure \
--target=$target \ --target=$target \
--prefix=$prefix \ --prefix=$prefix \
--enable-newlib-mb \ --enable-newlib-mb \
--enable-newlib-register-fini \
|| { echo "Error configuring newlib"; exit 1; } || { echo "Error configuring newlib"; exit 1; }
touch configured-newlib touch configured-newlib
fi fi
@@ -187,31 +193,3 @@ echo "installing linkscripts ..."
cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/ cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/
cd $BUILDDIR cd $BUILDDIR
#---------------------------------------------------------------------------------
# build and install the debugger
#---------------------------------------------------------------------------------
mkdir -p $target/gdb
cd $target/gdb
if [ ! -f configured-gdb ]
then
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS || { echo "Error configuring gdb"; exit 1; }
touch configured-gdb
fi
if [ ! -f built-gdb ]
then
$MAKE || { echo "Error building gdb"; exit 1; }
touch built-gdb
fi
if [ ! -f installed-gdb ]
then
$MAKE install || { echo "Error installing gdb"; exit 1; }
touch installed-gdb
fi

View File

@@ -1,27 +0,0 @@
#!/bin/bash
export DEVKITPPC=$TOOLPATH/devkitPPC
export DEVKITPRO=$TOOLPATH
cd $BUILDDIR
mkdir -p rules
cd rules
tar -xvf $SRCDIR/devkitppc-rules-$DKPPC_RULES_VER.tar.xz
make install
cd $BUILDDIR/libogc-$LIBOGC_VER
if [ ! -f installed ]; then
echo "Building & installing libogc"
$MAKE install || { echo "libogc install failed"; exit 1; }
touch installed
fi
cd $BUILDDIR/libfat-$LIBFAT_VER
if [ ! -f installed ]; then
echo "Building & installing libfat"
$MAKE ogc-install || { echo "libfat install failed"; exit 1; }
touch installed
fi

View File

@@ -1,20 +0,0 @@
#!/bin/bash
cd $BUILDDIR
for archive in $hostarchives
do
dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' )
cd $BUILDDIR/$dir
if [ ! -f configured ]; then
CXXFLAGS=$cflags CFLAGS=$cflags LDFLAGS=$ldflags ./configure --prefix=$toolsprefix --disable-dependency-tracking $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; }
touch configured
fi
if [ ! -f built ]; then
$MAKE || { echo "error building $archive"; exit 1; }
touch built
fi
if [ ! -f installed ]; then
$MAKE install || { echo "error installing $archive"; exit 1; }
touch installed
fi
done

View File

@@ -30,31 +30,28 @@ done
case "$VERSION" in case "$VERSION" in
"1" ) "1" )
GCC_VER=8.3.0 GCC_VER=13.2.0
BINUTILS_VER=2.32 BINUTILS_VER=2.41
NEWLIB_VER=3.1.0 NEWLIB_VER=4.4.0.20231231
GDB_VER=8.2.1
basedir='dkarm-eabi' basedir='dkarm-eabi'
package=devkitARM package=devkitARM
target=arm-none-eabi target=arm-none-eabi
toolchain=DEVKITARM toolchain=DEVKITARM
;; ;;
"2" ) "2" )
GCC_VER=8.3.0 GCC_VER=13.2.0
BINUTILS_VER=2.32 BINUTILS_VER=2.41
MN_BINUTILS_VER=2.17 MN_BINUTILS_VER=2.24
NEWLIB_VER=3.1.0 NEWLIB_VER=4.4.0.20231231
GDB_VER=8.2.1
basedir='dkppc' basedir='dkppc'
package=devkitPPC package=devkitPPC
target=powerpc-eabi target=powerpc-eabi
toolchain=DEVKITPPC toolchain=DEVKITPPC
;; ;;
"3" ) "3" )
GCC_VER=8.2.0 GCC_VER=13.2.0
BINUTILS_VER=2.31.1 BINUTILS_VER=2.41
NEWLIB_VER=3.0.0 NEWLIB_VER=4.3.0.20230120
GDB_VER=8.0
basedir='dka64' basedir='dka64'
package=devkitA64 package=devkitA64
target=aarch64-none-elf target=aarch64-none-elf

0
strip_bins.sh Normal file → Executable file
View File