Compare commits

..

198 Commits

Author SHA1 Message Date
Dave Murphy
df5a8f947a updates for devkitPPC r32 2018-07-03 09:37:08 +01:00
Dave Murphy
0778d4209c disable git buildscripts 2018-06-13 19:24:53 +01:00
Dave Murphy
bd9c326d2f building devkitPPC r31 2018-06-13 18:46:11 +01:00
Dave Murphy
b6ac481ccb enable objc 2018-06-13 18:45:55 +01:00
Dave Murphy
e427f0dfaa add scandir 2018-06-13 14:18:24 +01:00
Dave Murphy
27b541afae enable std::filesystem 2018-06-13 10:24:01 +01:00
Dave Murphy
c7de577a0c cleanup config sample 2018-06-13 10:24:01 +01:00
Dave Murphy
2a0d211c07 enable libstdcxx-time 2018-06-13 10:24:01 +01:00
Dave Murphy
8c1775ec31 add sleep functions 2018-06-13 10:24:01 +01:00
Dave Murphy
04e02ff214 remove old patches 2018-06-13 10:24:01 +01:00
Dave Murphy
ff680b5b27 update to newlib 3.0.0 2018-06-13 10:24:01 +01:00
Dave Murphy
741bc22322 update to binutils 2.30 2018-06-13 10:24:01 +01:00
Dave Murphy
3fde421759 add support for libstdc++ gthreads courtesy of exjam 2018-06-13 10:24:01 +01:00
Dave Murphy
afe1a727bc Enable scripts for release 2018-06-12 13:44:52 +01:00
Dave Murphy
0c2e648a04 add lto to languages 2018-06-11 13:27:09 +01:00
Dave Murphy
f0c6240d85 add scandir 2018-06-11 11:06:42 +01:00
Dave Murphy
b40a9147a5 restore poison system directories 2018-06-11 11:06:21 +01:00
Dave Murphy
5fcb44fb8f use CPPFLAGS for extra macros 2018-06-08 16:44:08 +00:00
Dave Murphy
e95e74c5bb enable libstdc++fs & clock functions 2018-06-08 16:42:25 +00:00
Dave Murphy
789ec8cf00 add aligned_alloc & scandir 2018-06-08 11:56:42 +01:00
Dave Murphy
ae6c2c125a use right tools prefix for cross builds 2018-06-08 11:56:42 +01:00
Dave Murphy
6cd9b70762 enable std::filesystem 2018-06-08 11:56:41 +01:00
Dave Murphy
caad8fafae build libraries when enabled 2018-06-06 03:03:26 +01:00
Dave Murphy
49d8b5dc46 use right prefix for tools 2018-06-06 03:00:46 +01:00
Dave Murphy
c021bf4c57 disable git scripts 2018-05-22 18:15:50 +01:00
Dave Murphy
ae79a8de3a enable scripts for release 2018-05-22 16:34:09 +00:00
Dave Murphy
3a3efdafd4 build libnx 2018-05-22 16:33:37 +00:00
Dave Murphy
ab8de4361a remove lto hack 2018-05-22 16:32:29 +00:00
Dave Murphy
26cc59f4f6 use latest versions 2018-05-22 16:30:18 +00:00
Dave Murphy
b8b26124cb put tools in /opt/devkitpro/tools/bin 2018-05-22 16:25:53 +00:00
Dave Murphy
108127de46 update switch tools & libs 2018-05-22 16:25:12 +00:00
Dave Murphy
a3ae2e737d update download links 2018-05-22 16:24:18 +00:00
Dave Murphy
09627572b9 fix newlib cross build 2018-05-22 09:04:39 +01:00
Dave Murphy
5bb8680c27 disable git scripts 2018-05-14 12:30:58 +01:00
Dave Murphy
2e9c460a7b only need 1 dll 2018-05-14 12:05:31 +01:00
Dave Murphy
8092439fb4 update tool versions 2018-05-14 04:56:06 +01:00
Dave Murphy
f14cd29e65 move devkitPPC to gcc 8.1.0 2018-05-14 04:48:24 +01:00
Dave Murphy
582cbfccf0 add portlibs bin to path 2018-05-14 02:53:17 +01:00
Dave Murphy
2c5d7c7aa6 dlditool now in dstools package 2018-05-12 10:27:08 +01:00
Dave Murphy
e5d204e8d7 upgrade to gcc 7.3.0 2018-05-12 01:52:51 +01:00
Dave Murphy
ef4026d7f5 clang as CC breaks newlib build 2018-05-11 23:31:31 +01:00
Dave Murphy
3208e8a40f devkitA64 r9 2018-05-11 23:30:48 +01:00
Dave Murphy
2a5ab41670 add cross compiling gcc options 2018-05-11 19:38:38 +01:00
Dave Murphy
e5bf7206ee add tools path to devkitPPC 2018-05-11 19:37:20 +01:00
Dave Murphy
af5014409c remove stale patches 2018-05-11 19:21:33 +01:00
Dave Murphy
0f779b9c71 use .xz for gcc 2018-05-11 18:52:24 +01:00
Dave Murphy
ae4678d8f2 implement access 2018-05-11 18:52:24 +01:00
Dave Murphy
082b2bcd23 separate tool & path settings 2018-05-11 18:52:24 +01:00
Dave Murphy
32faa8f8b0 move crtls to main script 2018-05-11 18:52:24 +01:00
Dave Murphy
342e3027f0 use latest libogc 2018-05-11 18:52:24 +01:00
Dave Murphy
9e2e3d8c83 fix merge marker 2018-05-11 18:52:24 +01:00
Dave Murphy
5559ee7f10 update version 2018-05-11 18:52:24 +01:00
Dave Murphy
b56e3bcd13 update binutils, gcc & gdb versions 2018-05-11 18:51:35 +01:00
Dave Murphy
3f96ad9f15 testing gcc 7.1.0 2018-05-11 18:51:35 +01:00
Dave Murphy
0ae581030f update to gdb 8.0 2018-05-11 18:51:35 +01:00
Dave Murphy
13e6fe4f73 add patch for bintutils 2.28 2018-05-11 18:51:35 +01:00
Dave Murphy
7aaf53694a use latest gamecube tools 2018-05-11 18:51:35 +01:00
Dave Murphy
c8d25bb1eb next version is release 30 2018-05-11 18:51:35 +01:00
Dave Murphy
e50653eda0 use binutils 2.28 2018-05-11 18:51:35 +01:00
Dave Murphy
d69416d0d0 patch whitespace cleanup 2018-05-11 18:51:35 +01:00
Dave Murphy
f9d48b38cd update gcc to 8.1.0 2018-05-11 18:49:04 +01:00
Dave Murphy
732a0a147c move tools to /opt/devkitpro/tools 2018-05-11 18:49:04 +01:00
Dave Murphy
ee0c0b0e25 allow skipping of libraries & tool building 2018-05-11 18:49:04 +01:00
Dave Murphy
ac90deb1b6 set path for gcc dependencies when cross compiling 2018-05-11 18:47:45 +01:00
Dave Murphy
65c611892d export CC & CXX for subshells 2018-05-11 18:43:56 +01:00
Dave Murphy
53f6f731ba explicit paths for deps when cross compiling 2018-05-11 18:42:22 +01:00
Dave Murphy
fec333d757 tweaks for osx cross compile 2018-05-11 10:28:05 +01:00
Dave Murphy
ecf9b7ff35 upgrade to gcc 8.1.0 2018-05-11 03:18:14 +01:00
Dave Murphy
2a5bce18e5 allow skipping tools 2018-05-11 03:17:24 +01:00
Dave Murphy
237116fd60 add tools path 2018-05-09 00:48:51 +01:00
Dave Murphy
9157139c4b update readme 2018-05-09 00:48:51 +01:00
Dave Murphy
f5db4fcdab ensure correct path on windows 2018-05-09 00:48:51 +01:00
Dave Murphy
d403a37ba3 need env vars for crtls 2018-05-09 00:48:51 +01:00
Dave Murphy
c2bddeeaba fix vectors section 2018-05-09 00:48:51 +01:00
Dave Murphy
8d172cbc54 restore (null) printing 2018-05-09 00:48:51 +01:00
Dave Murphy
4b9b525ece remove unused patch files 2018-05-09 00:48:51 +01:00
Dave Murphy
6b96e9cd37 allow for skipping target libraries 2018-05-09 00:48:51 +01:00
Dave Murphy
c8a4625d58 move crtls to main script 2018-05-09 00:48:51 +01:00
Dave Murphy
79c613e107 use newlib 3.0.0 2018-05-09 00:48:51 +01:00
Dave Murphy
ec7878a7f4 use gcc 7.3.0 & binutils 2.30 2018-05-09 00:48:51 +01:00
Dave Murphy
9703aa466d use latest picasso, add tex3ds 2018-05-09 00:48:51 +01:00
Dave Murphy
a63085cbab no longer need to disable dependency tracking 2018-05-09 00:48:51 +01:00
Dave Murphy
0e5742cffc use latest gdb 2018-05-09 00:48:51 +01:00
Dave Murphy
cacdb68a25 use latest ndstool 2018-05-09 00:48:51 +01:00
Dave Murphy
c0ad7d6b39 use latest gbatools 2018-05-09 00:48:51 +01:00
Dave Murphy
c3be8de5fd use latest libraries 2018-05-09 00:48:51 +01:00
Dave Murphy
0f5d3ff642 use binutils 2.29.1 2018-05-09 00:48:51 +01:00
Dave Murphy
34cbee2b35 use pkg-config wrapper 2018-05-09 00:48:51 +01:00
Dave Murphy
44e7b8a0d0 vram code needs to set dsimode flag too 2018-05-09 00:48:51 +01:00
Dave Murphy
440d1749e4 pad twl sections 2018-05-09 00:48:51 +01:00
Dave Murphy
a295eb3768 reduce get_arg bloat 2018-05-09 00:48:51 +01:00
Dave Murphy
2479a04370 update to gcc 7.2.0 2018-05-09 00:48:51 +01:00
Dave Murphy
bfe7e72e9c update to binutils 2.29 2018-05-09 00:48:51 +01:00
Dave Murphy
dd38d1be69 add tools path 2018-05-08 11:05:36 +01:00
Dave Murphy
dec468b641 update URLS and disable scripts 2018-04-01 01:20:39 +01:00
Dave Murphy
511c3a1b95 update version list 2018-03-26 15:35:13 +01:00
Dave Murphy
caa95f2456 let's call this a release 2018-03-26 15:30:46 +01:00
Dave Murphy
e92a6bc61f use latest switch tools 2018-03-26 15:30:46 +01:00
Dave Murphy
1a07597d9c update general tools 2018-03-14 22:28:05 +00:00
Dave Murphy
c3c0953fbd compensate for windows path in env var 2018-02-27 22:47:10 +00:00
Dave Murphy
552eb4380c enable clock features 2018-02-27 22:22:33 +00:00
Dave Murphy
ca17b44dc0 add access and clock functions 2018-02-23 00:54:45 +00:00
Dave Murphy
7109bbbc81 restore (null) printing 2018-02-18 15:12:48 +00:00
Dave Murphy
d94a7ead0b enable scripts for release 2018-02-11 20:52:02 +00:00
Dave Murphy
46d25cdbb9 ignore all toolchain build folders 2018-02-11 20:52:02 +00:00
Dave Murphy
ce64db576f use binutils 2.30 for devkitA64 2018-02-11 20:51:50 +00:00
Dave Murphy
573afd62d1 devkitA64 replaces devkitPSP 2018-02-11 12:24:35 +00:00
Dave Murphy
6ae9523383 use latest switch tools 2018-02-11 12:24:26 +00:00
Dave Murphy
c7876a99f7 add url for liblz4 2018-02-11 10:54:40 +00:00
Dave Murphy
afcea227f7 use .tar.xz for gdb 2018-02-11 10:52:40 +00:00
Dave Murphy
0c9c332716 add build system base files 2018-02-10 19:31:32 +00:00
Dave Murphy
c81687461c remove old patches 2018-02-10 19:31:32 +00:00
Dave Murphy
ee36d8e96c update to gcc 7.3.0 2018-02-10 19:31:32 +00:00
Dave Murphy
1342f07504 prepare for gcc 7.3.0 2018-02-10 19:31:32 +00:00
Dave Murphy
4b90e50fef update newlib 2018-02-10 19:31:32 +00:00
Dave Murphy
c3109cce09 prepare for 7.3.0 2018-02-10 19:31:32 +00:00
Dave Murphy
3c06e8d9dd use latest switch tools 2018-02-10 19:31:32 +00:00
Dave Murphy
38be3b48ba add switch tools 2018-02-10 19:31:32 +00:00
Dave Murphy
96af86ec08 allow dependency tracking 2018-02-10 19:31:32 +00:00
Dave Murphy
bcf9ffbea0 use gdb 8.0 - 8.0.1 currently doesn't build for windows 2018-02-10 19:31:32 +00:00
Dave Murphy
df4d5d3faa update truncate 2018-02-10 19:31:32 +00:00
Dave Murphy
6fe79e337e additional dependencies for devkitA64 2018-02-10 19:31:32 +00:00
Dave Murphy
971fed0fec update switch lock support 2018-02-10 19:31:32 +00:00
Dave Murphy
a26aa62b17 update newlib patch 2018-02-10 19:31:32 +00:00
Dave Murphy
b4c89fa4b3 update general tools 2018-02-10 19:31:32 +00:00
Dave Murphy
5a25d72841 add support for (no)dynamic-undefined-weak 2018-02-10 19:31:32 +00:00
Dave Murphy
4148ab6c73 remove stale patch files 2018-02-10 19:31:32 +00:00
Dave Murphy
c11289c218 use latest gdb 2018-02-10 19:31:32 +00:00
Dave Murphy
de76c68af9 actually build extra tools 2018-02-10 19:31:32 +00:00
Dave Murphy
5e5c9fea87 update version & bug url 2018-02-10 19:31:32 +00:00
fincs
23404816cd ignore devkitA64 build folder(s) 2018-02-10 19:31:32 +00:00
fincs
2502104350 dkA64 gcc patch: add support for -mtp=soft (needed for Switch TLS) 2018-02-10 19:31:31 +00:00
Dave Murphy
609cfef3f5 update newlib 2018-02-10 19:31:31 +00:00
Dave Murphy
95e681ef9b use latest binutils 2018-02-10 19:31:31 +00:00
Dave Murphy
4811245c09 move to alpha 4 2018-02-10 19:31:31 +00:00
Dave Murphy
d140c0833e use latest newlib snapshot for dkA64 2018-02-10 19:31:31 +00:00
fincs
11ae52d861 Bump version to devkitA64 alpha 3 2018-02-10 19:31:31 +00:00
fincs
447c310f7c Add -fPIC multilib for Switch 2018-02-10 19:31:31 +00:00
Dave Murphy
1c69d9b824 add comment for devkitA64 version 2018-02-10 19:31:31 +00:00
Dave Murphy
0613159be4 use gcc 7.2.0 2018-02-10 19:31:31 +00:00
Dave Murphy
018f1fb028 use latest newlib patch 2018-02-10 19:31:31 +00:00
Dave Murphy
55e002c9dc add general tools to devkitA64 2018-02-10 19:31:31 +00:00
Dave Murphy
d30d2fa318 add selection for devkitA64 2018-02-10 19:31:31 +00:00
Dave Murphy
03b624ffbb add script to build toolchain 2018-02-10 19:31:31 +00:00
Dave Murphy
a60b475388 add newlib patch 2018-02-10 19:31:31 +00:00
Dave Murphy
9f8c88ff88 no need to remove dependemcy generation 2018-02-10 19:31:31 +00:00
fincs
993c6681cb Add preliminary AArch64 GCC patch 2018-02-10 19:31:31 +00:00
Dave Murphy
abacc13bf7 update stlink version 2017-08-03 22:05:43 +01:00
Dave Murphy
b509e0fbd4 just copy all the dlls 2017-08-03 18:50:36 +01:00
Dave Murphy
dca15fb6d7 disable git buildscripts 2017-07-15 16:18:52 +01:00
Dave Murphy
7489d47923 scripts build devkitARM r47 2017-07-15 16:17:53 +01:00
Dave Murphy
bb3dda93dc remove obsolete patches 2017-07-15 16:14:42 +01:00
Dave Murphy
759b6bb8a1 align before sections 2017-07-14 23:39:04 +01:00
Dave Murphy
771c404dbc remove alpha designation 2017-07-14 21:17:15 +01:00
Dave Murphy
e972030770 use latest citro3d and libctru 2017-07-14 19:21:12 +01:00
Dave Murphy
5047819058 split common part of path 2017-06-27 19:49:13 +01:00
Dave Murphy
bd1c16fe50 provide stub __sync_synchronize 2017-06-27 18:34:13 +01:00
Dave Murphy
16de2cb293 use latest 3dslink 2017-06-27 18:33:18 +01:00
Dave Murphy
c7e940005d mininum OSX target is 10.9 thanks to gdb 2017-06-27 18:28:01 +01:00
Dave Murphy
e1fc813b17 update gp32 tools 2017-06-27 18:26:39 +01:00
Dave Murphy
b7699f8545 don't set OSXSDKPATH by default 2017-06-10 19:09:54 +01:00
Dave Murphy
8f77bb6da9 update picasso version 2017-06-10 19:05:45 +01:00
Dave Murphy
5c23673540 mark this as alpha 2017-06-09 15:08:11 +01:00
Dave Murphy
3970b7c5ad use gdb 8.0 for devkitARM 2017-06-09 15:07:23 +01:00
Dave Murphy
bd5a36b0ff allow C++ code in system headers 2017-06-09 15:06:08 +01:00
Dave Murphy
2c8fdb4f85 update to gdb 7.12.1 2017-05-12 23:27:18 +01:00
Dave Murphy
5d81b788b1 update to gcc 7.1.0 2017-05-04 21:42:00 +01:00
Dave Murphy
636e4ab786 objc has build issues 2017-05-04 21:38:56 +01:00
Dave Murphy
9c64ef65eb latest maxmod & dswifi 2017-05-04 21:37:47 +01:00
Dave Murphy
4733579ef0 use latest picasso 2017-05-04 21:37:26 +01:00
Dave Murphy
f803bbc861 restore objc by popular demand 2017-03-12 22:53:01 +00:00
Dave Murphy
6fa30085c6 proper UTF-8 defaults 2017-03-06 10:32:33 +00:00
Dave Murphy
0cc4623212 use latest ndstool version 2017-03-05 23:00:02 +00:00
Dave Murphy
1b0715ef2f next release is r47 2017-03-05 22:59:28 +00:00
Dave Murphy
13239c3800 use binutils 2.28 2017-03-05 22:58:53 +00:00
Dave Murphy
6c36362230 copy all dlls to install 2017-03-04 22:51:41 +00:00
Dave Murphy
b0f2701d30 update x86_64 cross 2017-03-04 22:51:11 +00:00
Dave Murphy
8731b42b20 use latest libctru version 2017-03-03 20:09:18 +00:00
Dave Murphy
f49dee7361 update notes for OSX 2017-03-03 19:49:53 +00:00
Dave Murphy
d16584234d no longer distributing devkitPSP 2017-03-03 19:41:40 +00:00
Dave Murphy
34eca34dcf increase bracket depth if compiling with clang 2017-03-03 16:13:25 +00:00
Dave Murphy
c42584594b build just c & c++ compilers 2017-03-03 15:34:10 +00:00
Dave Murphy
9ea6924b39 use github to download sources 2017-03-03 00:46:25 +00:00
Dave Murphy
3af916aa90 Allow easier switching and external setting of OSX SDK 2017-03-03 00:45:15 +00:00
Dave Murphy
5148cb347c update stlink & libnds 2017-02-06 19:01:45 +00:00
Dave Murphy
9e8a149558 parallel make breaks newlib install 2017-02-02 01:50:57 +00:00
Dave Murphy
c9109d8681 update gp32 tools 2017-02-02 01:12:34 +00:00
Dave Murphy
45b120b6e3 add to flags from environment 2017-02-02 01:12:06 +00:00
Dave Murphy
ce5d8243d4 move jobs configuration to config.sh 2017-02-01 21:16:35 +00:00
Dave Murphy
590464b4e5 use latest libnds, enable scripts for release 2017-01-26 09:23:48 +00:00
Dave Murphy
c852d90043 fix malloc lock/unlock stubs 2017-01-25 16:52:00 +00:00
Dave Murphy
be5546a122 add dead code elimination options 2017-01-25 16:52:00 +00:00
Dave Murphy
0ccd646fec update devkitPPC version 2017-01-25 16:52:00 +00:00
Dave Murphy
d1891441af update newlib patch
Properly default to UTF-8, expose (f)truncate, remove old malloc lock/unlock stubs
2017-01-25 16:52:00 +00:00
Dave Murphy
a53e338a21 remove old newlib patch 2017-01-25 16:52:00 +00:00
Dave Murphy
973ae4bdb7 Change the dldi size to match libnds updates 2017-01-20 22:51:14 +00:00
ichfly
bf6f1d0454 Update dldi.ld
changed the size according to new libnds updates
2017-01-20 23:36:40 +01:00
Dave Murphy
c34990450a disable git buildscripts 2017-01-19 12:12:59 +00:00
49 changed files with 13372 additions and 9456 deletions

2
.gitignore vendored
View File

@@ -1,7 +1,7 @@
config.sh config.sh
.devkitARM* .devkitARM*
.devkitPPC* .devkitPPC*
.devkitPSP* .devkitA64*
*.gz *.gz
*.bz2 *.bz2
*~ *~

View File

@@ -1,9 +1,14 @@
devkitPro build scripts devkitPro build scripts
-------------------------- --------------------------
This readme will guide you through building devkitARM, devkitPPC or devkitPSP This readme will guide you through building devkitARM, devkitPPC or devkitA64
from source using a set of scripts. from source using a set of scripts.
Please note that we can't guarantee that what you build with these scripts
will function in the same way as the binaries we distribute. Where possible
you should use the binary distributions. We also offer no support for any
problems you may encounter with these scripts.
The windows versions of the toolchains are now cross compiled on linux using The windows versions of the toolchains are now cross compiled on linux using
mingw-w64 mingw-w64
@@ -26,19 +31,35 @@ http://www.multiprecision.org/
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib, Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib,
and libusb. Again these are built as static libraries for ease of packaging expat, and libusb. Again these are built as static libraries for ease of
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/ http://freeimage.sourceforge.net/
http://www.zlib.net http://www.zlib.net
http://www.libusb.org http://www.libusb.org
http://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
Building gxtexconv for cube/wii needs GL/gl.h which can be obtained with Building gxtexconv for cube/wii needs GL/gl.h which can be obtained with
sudo apt-get install mesa-common-dev sudo apt-get install mesa-common-dev
Tools for devkitA64 require liblz4.
http://lz4.github.io/lz4/
sudo apt-get install liblz4-dev
The liblz4 with Ubuntu 14.04 isn't new enough. Either upgrade to at least 16.04 or
build this from source.
For building the OSX versions we install the Xcode commandline tools and build
pkg-config from source as well as static versions of the libraries listed above.
This helps keep the dependencies to a minimum so end users can use the tools
with only Xcode command line tools to obtain make.
To avoid having to manually answer prompts during the build the script will To avoid having to manually answer prompts during the build the script will
read variables from config.sh if it exists. Copy config.sh.sample to config.sh read variables from config.sh if it exists. Copy config.sh.sample to config.sh
and set the variables as appropriate for your build. and set the variables as appropriate for your build.
@@ -85,16 +106,6 @@ to use the built in crt0 and linkscript use powerpc-eabi-gcc to link your projec
using the command line switch -mgcn for a bare bones system, -mogc to use libogc and using the command line switch -mgcn for a bare bones system, -mogc to use libogc and
the multi-threaded microkernel for gamecube, -mrvl for wii, -mwup for wii u. the multi-threaded microkernel for gamecube, -mrvl for wii, -mwup for wii u.
Using devkitPSP
---------------
All you need to do now to use devkitPSP is make sure that your freshly built tools
are in your PATH, something like this;
export PATH=$PATH:<path to devkitPSP>/bin
(Obviously replace <path to devkitPSP> with the full path to the devkitPSP
installation directory)
Getting started Getting started
--------------- ---------------

View File

@@ -1,15 +1,15 @@
#!/bin/bash #!/bin/bash
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# devkitARM release 46 # devkitARM release 49
# devkitPPC release 29 # devkitPPC release 32
# devkitA64 release 10
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then if [ 0 -eq 1 ] ; then
echo "Currently in release cycle, proceed with caution, do not report problems, do not ask for support."
echo "Please use the latest release buildscripts unless advised otherwise by devkitPro staff." echo "Please use the latest release buildscripts unless advised otherwise by devkitPro staff."
echo "http://sourceforge.net/projects/devkitpro/files/buildscripts/" echo "https://github.com/devkitPro/buildscripts/releases/latest"
echo echo
echo "The scripts in the git repository are quite often dependent on things which currently only exist" echo "The scripts in the git repository may be dependent on things which currently only exist"
echo "on developer machines. This is not a bug, use stable releases." echo "on developer machines. This is not a bug, use stable releases."
exit 1 exit 1
fi fi
@@ -18,43 +18,49 @@ echo "Please note, these scripts are provided as a courtesy, toolchains built wi
echo "are for personal use only and may not be distributed by entities other than devkitPro." echo "are for personal use only and may not be distributed by entities other than devkitPro."
echo "See http://devkitpro.org/wiki/Trademarks" echo "See http://devkitpro.org/wiki/Trademarks"
echo echo
echo "Patches and improvements are of course welcome, please send these to the patch tracker" echo "Patches and improvements are of course welcome, please submit a PR"
echo "https://sourceforge.net/tracker/?group_id=114505&atid=668553" echo "https://github.com/devkitPro/buildscripts/pulls"
echo echo
GENERAL_TOOLS_VER=1.0.0 GENERAL_TOOLS_VER=1.0.2
LIBGBA_VER=0.5.0 LIBGBA_VER=0.5.1
GBATOOLS_VER=1.0.0 GBATOOLS_VER=1.1.0
LIBNDS_VER=1.6.0 LIBNDS_VER=1.7.2
DEFAULT_ARM7_VER=0.7.0 DEFAULT_ARM7_VER=0.7.4
DSWIFI_VER=0.4.0 DSWIFI_VER=0.4.2
MAXMOD_VER=1.0.10 MAXMOD_VER=1.0.11
FILESYSTEM_VER=0.9.13 FILESYSTEM_VER=0.9.14
LIBFAT_VER=1.1.0 LIBFAT_VER=1.1.3
DSTOOLS_VER=1.1.0 DSTOOLS_VER=1.2.1
GRIT_VER=0.8.14 GRIT_VER=0.8.15
NDSTOOL_VER=2.0.1 NDSTOOL_VER=2.1.1
DLDITOOL_VER=1.24.0 MMUTIL_VER=1.8.7
MMUTIL_VER=1.8.6
DFU_UTIL_VER=0.9.1 DFU_UTIL_VER=0.9.1
STLINK_VER=1.2.1 STLINK_VER=1.2.3
GAMECUBE_TOOLS_VER=1.0.1 GAMECUBE_TOOLS_VER=1.0.2
LIBOGC_VER=1.8.16 LIBOGC_VER=1.8.20
WIILOAD_VER=0.5.1 WIILOAD_VER=0.5.1
LIBCTRU_VER=1.2.0 LIBCTRU_VER=1.5.0
CITRO3D_VER=1.2.0 CITRO3D_VER=1.4.0
CITRO2D_VER=1.0.0
TOOLS3DS_VER=1.1.4 TOOLS3DS_VER=1.1.4
LINK3DS_VER=0.5.1 LINK3DS_VER=0.5.2
PICASSO_VER=2.5.0 PICASSO_VER=2.7.0
TEX3DS_VER=1.0.0
GP32_TOOLS_VER=1.0.1 GP32_TOOLS_VER=1.0.3
LIBMIRKO_VER=0.9.7 LIBMIRKO_VER=0.9.8
SWITCH_TOOLS_VER=1.4.0
LIBNX_VER=1.2.1
OSXMIN=${OSXMIN:-10.9}
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
function extract_and_patch { function extract_and_patch {
@@ -146,9 +152,13 @@ TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH=$PATH:$TOOLPATH/$package/bin export PATH=$PATH:$TOOLPATH/$package/bin
if [ ! -z $CROSSBUILD ]; then if [ ! -z $CROSSBUILD ]; then
toolsprefix=$INSTALLDIR/$CROSSBUILD/tools
prefix=$INSTALLDIR/$CROSSBUILD/$package prefix=$INSTALLDIR/$CROSSBUILD/$package
toolsprefix=$INSTALLDIR/$CROSSBUILD/tools
CROSS_PARAMS="--build=`./config.guess` --host=$CROSSBUILD" CROSS_PARAMS="--build=`./config.guess` --host=$CROSSBUILD"
CROSS_GCC_PARAMS="--with-gmp=$CROSSPATH --with-mpfr=$CROSSPATH --with-mpc=$CROSSPATH"
else else
toolsprefix=$INSTALLDIR/tools
prefix=$INSTALLDIR/$package prefix=$INSTALLDIR/$package
fi fi
@@ -165,40 +175,52 @@ PLATFORM=`uname -s`
case $PLATFORM in case $PLATFORM in
Darwin ) Darwin )
cflags="-mmacosx-version-min=10.5 -isysroot /Developer/SDKs/MacOSX10.5.sdk -I/usr/local/include" cppflags="-mmacosx-version-min=${OSXMIN} -I/usr/local/include"
ldflags="-mmacosx-version-min=10.5 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk -L/usr/local/lib" ldflags="-mmacosx-version-min=${OSXMIN} -L/usr/local/lib"
if [ "x${OSXSDKPATH}x" != "xx" ]; then
cppflags="$cppflags -isysroot ${OSXSDKPATH}"
ldflags="$ldflags -Wl,-syslibroot,${OSXSDKPATH}"
fi
TESTCC=`cc -v 2>&1 | grep clang`
if [ "x${TESTCC}x" != "xx" ]; then
cppflags="$cppflags -fbracket-depth=512"
fi
;; ;;
MINGW32* ) MINGW32* )
cflags="-D__USE_MINGW_ACCESS" cppflags="-D__USE_MINGW_ACCESS"
# horrid hack to get -flto to work on windows
plugin_ld="--with-plugin-ld=ld"
;; ;;
esac esac
if [ ! -z $CROSSBUILD ] && grep -q "mingw" <<<"$CROSSBUILD" ; then
cppflags="-D__USE_MINGW_ACCESS -D__USE_MINGW_ANSI_STDIO=1"
fi
BUILDSCRIPTDIR=$(pwd) BUILDSCRIPTDIR=$(pwd)
BUILDDIR=$(pwd)/.$package BUILDDIR=$(pwd)/.$package
if [ ! -z $CROSSBUILD ]; then if [ ! -z $CROSSBUILD ]; then
BUILDDIR=$BUILDDIR-$CROSSBUILD BUILDDIR=$BUILDDIR-$CROSSBUILD
fi fi
DEVKITPRO_URL="http://downloads.sourceforge.net/devkitpro"
patchdir=$(pwd)/$basedir/patches patchdir=$(pwd)/$basedir/patches
scriptdir=$(pwd)/$basedir/scripts scriptdir=$(pwd)/$basedir/scripts
archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.bz2 newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.bz2" archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.xz"
if [ $VERSION -eq 1 ]; then if [ $VERSION -eq 1 ]; then
targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2 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 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 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" 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="gbatools-$GBATOOLS_VER.tar.bz2 gp32tools-$GP32_TOOLS_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 dstools-$DSTOOLS_VER.tar.bz2 grit-$GRIT_VER.tar.bz2 ndstool-$NDSTOOL_VER.tar.bz2
general-tools-$GENERAL_TOOLS_VER.tar.bz2 dlditool-$DLDITOOL_VER.tar.bz2 mmutil-$MMUTIL_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 dfu-util-$DFU_UTIL_VER.tar.bz2 stlink-$STLINK_VER.tar.bz2 3dstools-$TOOLS3DS_VER.tar.bz2
picasso-$PICASSO_VER.tar.bz2 3dslink-$LINK3DS_VER.tar.bz2" picasso-$PICASSO_VER.tar.bz2 tex3ds-$TEX3DS_VER.tar.bz2 3dslink-$LINK3DS_VER.tar.bz2"
fi fi
if [ $VERSION -eq 2 ]; then if [ $VERSION -eq 2 ]; then
@@ -210,6 +232,14 @@ if [ $VERSION -eq 2 ]; then
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives" archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives"
fi fi
if [ $VERSION -eq 3 ]; then
targetarchives=" libnx-src-${LIBNX_VER}.tar.bz2"
hostarchives="general-tools-$GENERAL_TOOLS_VER.tar.bz2 switch-tools-$SWITCH_TOOLS_VER.tar.bz2"
fi
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
SRCDIR="$BUILD_DKPRO_SRCDIR" SRCDIR="$BUILD_DKPRO_SRCDIR"
@@ -222,7 +252,7 @@ for archive in $archives $targetarchives $hostarchives
do do
echo $archive echo $archive
if [ ! -f $archive ]; then if [ ! -f $archive ]; then
$FETCH http://downloads.sf.net/devkitpro/$archive || { echo "Error: Failed to download $archive"; exit 1; } $FETCH https://downloads.devkitpro.org/$archive || { echo "Error: Failed to download $archive"; exit 1; }
fi fi
done done
@@ -231,9 +261,9 @@ mkdir -p $BUILDDIR
cd $BUILDDIR cd $BUILDDIR
extract_and_patch binutils $BINUTILS_VER bz2 extract_and_patch binutils $BINUTILS_VER bz2
extract_and_patch gcc $GCC_VER bz2 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 bz2 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 extract_and_patch binutils $MN_BINUTILS_VER bz2
@@ -261,19 +291,17 @@ 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 [ -f $scriptdir/build-tools.sh ]; then . $scriptdir/build-tools.sh || { echo "Error building tools"; exit 1; }; cd $BUILDSCRIPTDIR; fi
if [ -f $scriptdir/build-crtls.sh ]; then . $scriptdir/build-crtls.sh || { echo "Error building crtls"; exit 1; }; cd $BUILDSCRIPTDIR; fi
if [ ! -z $CROSSBUILD ]; then if [ "$BUILD_DKPRO_SKIP_TOOLS" != "1" ] && [ -f $scriptdir/build-tools.sh ]; then
if [ $VERSION -ne 3 ]; then . $scriptdir/build-tools.sh || { echo "Error building tools"; exit 1; }; cd $BUILDSCRIPTDIR;
cp -v $CROSSBINPATH/FreeImage.dll $prefix/bin fi
fi
if [ $VERSION -eq 1 ]; then if [ "$BUILD_DKPRO_SKIP_LIBRARIES" != "1" ] && [ -f $scriptdir/build-libs.sh ]; then
cp -v $CROSSBINPATH/libusb-1.0.dll $prefix/bin . $scriptdir/build-libs.sh || { echo "Error building libraries"; exit 1; }; cd $BUILDSCRIPTDIR;
fi fi
cp -v $CROSSLIBPATH/libstdc++-6.dll \
$CROSSLIBPATH/libgcc_s_sjlj-1.dll \ if [ ! -z $CROSSBUILD ] && grep -q "mingw" <<<"$CROSSBUILD" ; then
$prefix/bin cp -v $CROSSBINPATH//libwinpthread-1.dll $prefix/bin
fi fi
echo "stripping installed binaries" echo "stripping installed binaries"
@@ -301,5 +329,13 @@ fi
echo echo
echo "note: Add the following to your environment; DEVKITPRO=$TOOLPATH $toolchain=$TOOLPATH/$package" echo "note: Add the following to your environment;"
echo
echo " DEVKITPRO=$TOOLPATH"
if [ "$toolchain" != "DEVKITA64" ]; then
echo " $toolchain=$TOOLPATH/$package"
fi
echo
echo "add $TOOLPATH/tools/bin to your PATH"
echo
echo echo

View File

@@ -9,7 +9,7 @@
# 0: User selects manually # 0: User selects manually
# 1: devkitARM # 1: devkitARM
# 2: devkitPPC # 2: devkitPPC
# 3: devkitPSP # 3: devkitA64
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
BUILD_DKPRO_PACKAGE=0 BUILD_DKPRO_PACKAGE=0
@@ -22,12 +22,34 @@ BUILD_DKPRO_PACKAGE=0
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Path to previously downloaded source packages, comment if not specified # Path to previously downloaded source packages, comment if not specified
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
#BUILD_DKPRO_SRCDIR=/d/projects/archives #BUILD_DKPRO_SRCDIR=~/projects/archives
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# MAKEFLAGS for building - use number of processors for jobs
#---------------------------------------------------------------------------------
#numcores=`getconf _NPROCESSORS_ONLN`
#export MAKEFLAGS="$MAKEFLAGS -j${numcores}"
#---------------------------------------------------------------------------------
# Uncomment to skip building of tools
#---------------------------------------------------------------------------------
#BUILD_DKPRO_SKIP_TOOLS=1
#---------------------------------------------------------------------------------
# Uncomment to skip building of libraries
#---------------------------------------------------------------------------------
#BUILD_DKPRO_SKIP_LIBRARIES=1
# Automated script execution # Automated script execution
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# 0: Ask to delete build folders & patched sources # 0: Ask to delete build folders & patched sources
# 1: Use defaults, don't pause for answers # 1: Use defaults, don't pause for answers
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
BUILD_DKPRO_AUTOMATED=0 BUILD_DKPRO_AUTOMATED=0
#---------------------------------------------------------------------------------
# set OSX SDK path if needed
#---------------------------------------------------------------------------------
#export OSXSDKPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX10.12.sdk

View File

@@ -3,5 +3,3 @@ export CROSSBUILD=i686-w64-mingw32
export CROSSLIBPATH=/opt/mingw32/mingw/lib export CROSSLIBPATH=/opt/mingw32/mingw/lib
export CROSSBINPATH=/opt/mingw32/mingw/bin export CROSSBINPATH=/opt/mingw32/mingw/bin
export PATH=/opt/mingw32/bin:$PATH export PATH=/opt/mingw32/bin:$PATH
export PKG_CONFIG_PATH=
export PKG_CONFIG_LIBDIR=$CROSSLIBPATH/pkgconfig

View File

@@ -0,0 +1,18 @@
#!/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 +1,7 @@
#!/bin/bash #!/bin/bash
export CROSSBUILD=x86_64-w64-mingw32 export CROSSBUILD=x86_64-w64-mingw32
export CROSSLIBPATH=/opt/x86_64-mingw-w64/mingw/lib export CROSSPATH=/opt/mingw64/mingw
export CROSSBINPATH=/opt/x86_64-mingw-w64/mingw/bin export CROSSLIBPATH=$CROSSPATH/lib
export PATH=/opt/x86_64-mingw-w64/bin:$PATH export CROSSBINPATH=$CROSSPATH/bin
export PKG_CONFIG_PATH=$CROSSLIBPATH/pkgconfig export PATH=/opt/mingw64/bin:$PATH

View File

@@ -0,0 +1,346 @@
diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarch64.c
--- binutils-2.30/bfd/elfnn-aarch64.c 2018-01-17 11:29:21.000000000 +0000
+++ binutils-2.30-dka64/bfd/elfnn-aarch64.c 2018-02-11 19:54:08.141257544 +0000
@@ -2097,6 +2097,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. */
@@ -6088,11 +6094,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);
@@ -6226,6 +6234,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 (r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -6249,7 +6261,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);
@@ -6344,7 +6356,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);
@@ -6393,7 +6405,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);
@@ -6735,6 +6747,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
@@ -7928,6 +7960,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)
@@ -7947,6 +7980,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
@@ -7956,7 +7993,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))
@@ -7990,6 +8027,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;
@@ -8012,6 +8054,7 @@
htab->root.srelplt->reloc_count++;
}
+ }
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8024,9 +8067,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;
@@ -8038,7 +8078,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))
@@ -8052,7 +8092,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))
@@ -8088,7 +8128,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
@@ -8154,7 +8194,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;
@@ -8174,7 +8214,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
@@ -8185,6 +8227,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;
@@ -8805,8 +8848,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;
@@ -8841,7 +8893,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. */
@@ -8860,10 +8912,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;
@@ -9357,6 +9410,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.30/ld/emulparams/aarch64elf32.sh binutils-2.30-dka64/ld/emulparams/aarch64elf32.sh
--- binutils-2.30/ld/emulparams/aarch64elf32.sh 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emulparams/aarch64elf32.sh 2018-02-11 19:48:08.997273556 +0000
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32"
MACHINE=
NOP=0
diff -NBaur binutils-2.30/ld/emulparams/aarch64elf.sh binutils-2.30-dka64/ld/emulparams/aarch64elf.sh
--- binutils-2.30/ld/emulparams/aarch64elf.sh 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emulparams/aarch64elf.sh 2018-02-11 19:48:09.009273555 +0000
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64
MACHINE=
NOP=0
diff -NBaur binutils-2.30/ld/emultempl/aarch64elf.em binutils-2.30-dka64/ld/emultempl/aarch64elf.em
--- binutils-2.30/ld/emultempl/aarch64elf.em 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emultempl/aarch64elf.em 2018-02-11 19:48:09.009273555 +0000
@@ -378,7 +378,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"
diff -NBaur binutils-2.30/ld/Makefile.am binutils-2.30-dka64/ld/Makefile.am
--- binutils-2.30/ld/Makefile.am 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/Makefile.am 2018-02-11 19:48:09.021273555 +0000
@@ -1654,19 +1654,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.30/ld/Makefile.in binutils-2.30-dka64/ld/Makefile.in
--- binutils-2.30/ld/Makefile.in 2018-01-27 15:03:10.000000000 +0000
+++ binutils-2.30-dka64/ld/Makefile.in 2018-02-11 19:48:09.037273554 +0000
@@ -3219,18 +3219,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,190 @@
diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.c gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.c
--- gcc-8.1.0/gcc/config/aarch64/aarch64.c 2018-03-15 08:55:04.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.c 2018-05-08 11:09:01.247467815 +0100
@@ -11963,8 +11963,24 @@
|| !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 -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64-elf-raw.h gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64-elf-raw.h
--- gcc-8.1.0/gcc/config/aarch64/aarch64-elf-raw.h 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64-elf-raw.h 2018-05-08 11:09:01.247467815 +0100
@@ -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 -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.h gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.h
--- gcc-8.1.0/gcc/config/aarch64/aarch64.h 2018-02-21 14:05:45.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.h 2018-05-08 11:09:01.255467862 +0100
@@ -957,6 +957,10 @@
/* 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 -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.md gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.md
--- gcc-8.1.0/gcc/config/aarch64/aarch64.md 2018-04-24 17:58:49.000000000 +0100
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.md 2018-05-08 11:09:01.255467862 +0100
@@ -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 -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.opt gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.opt
--- gcc-8.1.0/gcc/config/aarch64/aarch64.opt 2018-01-13 17:50:35.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.opt 2018-05-08 11:09:01.255467862 +0100
@@ -115,6 +115,20 @@
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 -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64-opts.h gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64-opts.h
--- gcc-8.1.0/gcc/config/aarch64/aarch64-opts.h 2018-01-13 17:50:35.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64-opts.h 2018-05-08 11:09:01.255467862 +0100
@@ -48,6 +48,12 @@
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 -NBaur gcc-8.1.0/gcc/config/aarch64/t-aarch64 gcc-8.1.0-aarch64/gcc/config/aarch64/t-aarch64
--- gcc-8.1.0/gcc/config/aarch64/t-aarch64 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/t-aarch64 2018-05-08 11:09:01.255467862 +0100
@@ -68,5 +68,7 @@
$(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 -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-aarch64/gcc/gcc.c
--- gcc-8.1.0/gcc/gcc.c 2018-02-09 06:44:06.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/gcc.c 2018-05-08 11:09:01.259467885 +0100
@@ -786,6 +786,11 @@
#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 *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 @@
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 -NBaur gcc-8.1.0/libgcc/crtstuff.c gcc-8.1.0-aarch64/libgcc/crtstuff.c
--- gcc-8.1.0/libgcc/crtstuff.c 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-aarch64/libgcc/crtstuff.c 2018-05-08 11:09:01.259467885 +0100
@@ -47,6 +47,7 @@
/* 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,
diff -NBaur gcc-8.1.0/libgcc/Makefile.in gcc-8.1.0-aarch64/libgcc/Makefile.in
--- gcc-8.1.0/libgcc/Makefile.in 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-aarch64/libgcc/Makefile.in 2018-05-08 11:09:01.259467885 +0100
@@ -847,7 +847,7 @@
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
# LIB2ADDEHSHARED matter. (Usually all three are identical.)
-c_flags := -fexceptions
+c_flags := -fno-exceptions
ifeq ($(enable_shared),yes)

File diff suppressed because it is too large Load Diff

40
dka64/rules/base_rules Normal file
View File

@@ -0,0 +1,40 @@
include $(DEVKITPRO)/devkitA64/base_tools
#---------------------------------------------------------------------------------
%.a:
#---------------------------------------------------------------------------------
@echo $(notdir $@)
@rm -f $@
$(AR) -rc $@ $^
#---------------------------------------------------------------------------------
%.o: %.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.s
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.S
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
# canned command sequence for binary data
#---------------------------------------------------------------------------------
define bin2o
bin2s $< | $(AS) -o $(@)
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
endef

41
dka64/rules/base_tools Normal file
View File

@@ -0,0 +1,41 @@
#---------------------------------------------------------------------------------
# make sure we have bash on OSX
#---------------------------------------------------------------------------------
UNAME_S := $(shell uname -s)
UNAME_R := $(shell uname -r)
ifneq (,$(findstring Darwin,$(UNAME_S)))
export SHELL=/bin/bash
endif
#---------------------------------------------------------------------------------
# path to tools
#---------------------------------------------------------------------------------
DEVKITPATH=$(shell echo "$(DEVKITPRO)" | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH := $(DEVKITPATH)/tools/bin:$(DEVKITPATH)/devkitA64/bin:$(PATH)
#---------------------------------------------------------------------------------
# add portlibs path
#---------------------------------------------------------------------------------
export PORTLIBS_PATH := $(DEVKITPATH)/portlibs
#---------------------------------------------------------------------------------
# the prefix on the compiler executables
#---------------------------------------------------------------------------------
PREFIX := aarch64-none-elf-
export CC := $(PREFIX)gcc
export CXX := $(PREFIX)g++
export AS := $(PREFIX)as
export AR := $(PREFIX)gcc-ar
export OBJCOPY := $(PREFIX)objcopy
export STRIP := $(PREFIX)strip
export NM := $(PREFIX)gcc-nm
export RANLIB := $(PREFIX)gcc-ranlib
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
ifneq (,$(ISVC))
ERROR_FILTER := 2>&1 | sed -e 's/\(.[a-zA-Z]\+\):\([0-9]\+\):/\1(\2):/g'
endif

189
dka64/scripts/build-gcc.sh Executable file
View File

@@ -0,0 +1,189 @@
#!/bin/sh
#---------------------------------------------------------------------------------
#---------------------------------------------------------------------------------
# build and install binutils
#---------------------------------------------------------------------------------
mkdir -p $target/binutils
cd $target/binutils
if [ ! -f configured-binutils ]
then
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
--prefix=$prefix --target=$target --disable-nls --disable-werror \
--enable-lto --enable-plugins --enable-poison-system-directories \
$CROSS_PARAMS \
|| { echo "Error configuring binutils"; exit 1; }
touch configured-binutils
fi
if [ ! -f built-binutils ]
then
$MAKE || { echo "Error building binutils"; exit 1; }
touch built-binutils
fi
if [ ! -f installed-binutils ]
then
$MAKE install || { echo "Error installing binutils"; exit 1; }
touch installed-binutils
fi
cd $BUILDDIR
#---------------------------------------------------------------------------------
# build and install just the c compiler
#---------------------------------------------------------------------------------
mkdir -p $target/gcc
cd $target/gcc
if [ ! -f configured-gcc ]
then
CFLAGS="$cflags" \
CXXFLAGS="$cflags" \
LDFLAGS="$ldflags" \
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
LDFLAGS_FOR_TARGET="" \
../../gcc-$GCC_VER/configure \
--enable-languages=c,c++,objc,lto \
--with-gnu-as --with-gnu-ld --with-gcc \
--with-march=armv8\
--enable-cxx-flags='-ffunction-sections' \
--disable-libstdcxx-verbose \
--enable-poison-system-directories \
--enable-interwork --enable-multilib \
--enable-threads --disable-win32-registry --disable-nls --disable-debug\
--disable-libmudflap --disable-libssp --disable-libgomp \
--disable-libstdcxx-pch \
--enable-libstdcxx-time \
--enable-libstdcxx-filesystem-ts \
--target=$target \
--with-newlib \
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--prefix=$prefix \
--enable-lto $plugin_ld\
--with-system-zlib \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 10" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
|| { echo "Error configuring gcc"; exit 1; }
touch configured-gcc
fi
if [ ! -f built-gcc ]
then
$MAKE all-gcc || { echo "Error building gcc stage1"; exit 1; }
touch built-gcc
fi
if [ ! -f installed-gcc ]
then
$MAKE install-gcc || { echo "Error installing gcc"; exit 1; }
touch installed-gcc
fi
unset CFLAGS
cd $BUILDDIR
OLD_CC=$CC
OLDCXX=$CXX
unset CC
unset CXX
#---------------------------------------------------------------------------------
# build and install newlib
#---------------------------------------------------------------------------------
mkdir -p $target/newlib
cd $target/newlib
if [ ! -f configured-newlib ]
then
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
../../newlib-$NEWLIB_VER/configure \
--disable-newlib-supplied-syscalls \
--enable-newlib-mb \
--disable-newlib-wide-orient \
--target=$target \
--prefix=$prefix \
|| { echo "Error configuring newlib"; exit 1; }
touch configured-newlib
fi
if [ ! -f built-newlib ]
then
$MAKE || { echo "Error building newlib"; exit 1; }
touch built-newlib
fi
if [ ! -f installed-newlib ]
then
$MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
touch installed-newlib
fi
export CC=$OLD_CC
export CXX=$OLD_CXX
#---------------------------------------------------------------------------------
# build and install the final compiler
#---------------------------------------------------------------------------------
cd $BUILDDIR
cd $target/gcc
if [ ! -f built-stage2 ]
then
$MAKE all || { echo "Error building gcc stage2"; exit 1; }
touch built-stage2
fi
if [ ! -f installed-stage2 ]
then
$MAKE install || { echo "Error installing gcc stage2"; exit 1; }
touch installed-stage2
fi
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

@@ -0,0 +1,7 @@
#!/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; }

20
dka64/scripts/build-tools.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/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

@@ -40,7 +40,9 @@ SECTIONS
/* =========== RODATA section =========== */ /* =========== RODATA section =========== */
.rodata ALIGN(0x1000) : . = ALIGN(0x1000);
.rodata :
{ {
*(.rodata) *(.rodata)
*(.roda) *(.roda)
@@ -58,7 +60,9 @@ SECTIONS
/* =========== DATA section =========== */ /* =========== DATA section =========== */
.data ALIGN(0x1000) : . = ALIGN(0x1000);
.data :
{ {
*(.data) *(.data)
*(.data.*) *(.data.*)

View File

@@ -8,7 +8,7 @@ MEMORY {
the patcher / linker to find all shifted addresses within each section. the patcher / linker to find all shifted addresses within each section.
Changed sections are: glue_7, got Changed sections are: glue_7, got
*/ */
ddmem : ORIGIN = 0xBF800000, LENGTH = 32K ddmem : ORIGIN = 0xBF800000, LENGTH = 16K
} }

View File

@@ -45,6 +45,7 @@ SECTIONS
*.twl*(.data) *.twl*(.data)
*.twl*(.data.*) *.twl*(.data.*)
*.twl*(.gnu.linkonce.d*) *.twl*(.gnu.linkonce.d*)
. = ALIGN(4);
__arm7i_end__ = .; __arm7i_end__ = .;
} >twl_iwram AT>twl_ewram :arm7i } >twl_iwram AT>twl_ewram :arm7i
@@ -56,6 +57,7 @@ SECTIONS
*.twl.*(.gnu.linkonce.b*) *.twl.*(.gnu.linkonce.b*)
*.twl.*(.bss*) *.twl.*(.bss*)
*.twl.*(COMMON) *.twl.*(COMMON)
. = ALIGN(4);
__twl_bss_end__ = .; __twl_bss_end__ = .;
} >twl_iwram :NONE } >twl_iwram :NONE

View File

@@ -51,12 +51,12 @@ _start:
sub r1, r1, r0 sub r1, r1, r0
bl ClearMem bl ClearMem
#ifndef VRAM
cmp r10, #1 cmp r10, #1
bne NotTWL bne NotTWL
ldr r1, =__dsimode @ set DSi mode flag ldr r1, =__dsimode @ set DSi mode flag
strb r10, [r1] strb r10, [r1]
#ifndef VRAM
ldr r1, =0x02ffe1d8 @ Get ARM7i LMA from header ldr r1, =0x02ffe1d8 @ Get ARM7i LMA from header
ldr r1, [r1] ldr r1, [r1]
ldr r2, =__arm7i_start__ ldr r2, =__arm7i_start__

View File

@@ -40,7 +40,7 @@ SECTIONS
.text : /* ALIGN (4): */ .text : /* ALIGN (4): */
{ {
*(.text .stub .text.* .gnu.linkonce.t.*) *(.text .stub .text.* .twl .gnu.linkonce.t.*)
KEEP (*(.text.*personality*)) KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */ /* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning) *(.gnu.warning)
@@ -139,13 +139,14 @@ SECTIONS
__arm7_end__ = .; __arm7_end__ = .;
.bss ALIGN(4) : .bss ALIGN(4) (NOLOAD) :
{ {
__bss_start = ABSOLUTE(.); __bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.); __bss_start__ = ABSOLUTE(.);
*(.dynbss) *(.dynbss)
*(.gnu.linkonce.b*) *(.gnu.linkonce.b*)
*(.bss*) *(.bss*)
*(.twl_bss)
*(COMMON) *(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.); __bss_end__ = ABSOLUTE(.);

View File

@@ -186,8 +186,7 @@ SECTIONS
{ {
__vectors_lma = LOADADDR(.vectors); __vectors_lma = LOADADDR(.vectors);
__vectors_start = ABSOLUTE(.); __vectors_start = ABSOLUTE(.);
*(.vectors) KEEP(*(.vectors .vectors.*))
*.vectors*(.text .stub .text.*)
. = ALIGN(4); . = ALIGN(4);
__vectors_end = ABSOLUTE(.); __vectors_end = ABSOLUTE(.);
} >vectors AT>ewram :vectors = 0xff } >vectors AT>ewram :vectors = 0xff

View File

@@ -1,120 +0,0 @@
diff -NBaur gcc-6.2.0/gcc/config/arm/t-arm-elf gcc-6.2.0-arm/gcc/config/arm/t-arm-elf
--- gcc-6.2.0/gcc/config/arm/t-arm-elf 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.2.0-arm/gcc/config/arm/t-arm-elf 2016-12-10 12:16:20.076000000 +0000
@@ -16,11 +16,19 @@
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
-MULTILIB_OPTIONS = marm/mthumb
-MULTILIB_DIRNAMES = arm thumb
+MULTILIB_OPTIONS = mthumb mbig-endian march=armv6k mfloat-abi=hard
+MULTILIB_DIRNAMES = thumb be armv6k fpu
MULTILIB_EXCEPTIONS =
MULTILIB_MATCHES =
+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
@@ -38,9 +46,9 @@
# 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_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*
diff -NBaur gcc-6.2.0/gcc/config/arm/unknown-elf.h gcc-6.2.0-arm/gcc/config/arm/unknown-elf.h
--- gcc-6.2.0/gcc/config/arm/unknown-elf.h 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.2.0-arm/gcc/config/arm/unknown-elf.h 2016-09-07 08:58:29.977682360 +0100
@@ -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 \
@@ -97,4 +97,4 @@
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"
diff -NBaur gcc-6.2.0/gcc/gcc.c gcc-6.2.0-arm/gcc/gcc.c
--- gcc-6.2.0/gcc/gcc.c 2016-08-15 12:19:34.000000000 +0100
+++ gcc-6.2.0-arm/gcc/gcc.c 2016-09-07 08:58:29.981682360 +0100
@@ -778,6 +778,11 @@
#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 \
@@ -1062,6 +1067,7 @@
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;
@@ -1563,6 +1569,7 @@
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 -NBaur gcc-6.2.0/libgcc/config/arm/t-bpabi gcc-6.2.0-arm/libgcc/config/arm/t-bpabi
--- gcc-6.2.0/libgcc/config/arm/t-bpabi 2012-08-17 16:06:06.000000000 +0100
+++ gcc-6.2.0-arm/libgcc/config/arm/t-bpabi 2016-09-07 08:58:29.985682360 +0100
@@ -17,4 +17,4 @@
# 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 -NBaur gcc-6.2.0/libgcc/crtstuff.c gcc-6.2.0-arm/libgcc/crtstuff.c
--- gcc-6.2.0/libgcc/crtstuff.c 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.2.0-arm/libgcc/crtstuff.c 2016-09-07 08:58:29.985682360 +0100
@@ -47,7 +47,7 @@
/* 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. */
diff -NBaur gcc-6.2.0/libgcc/Makefile.in gcc-6.2.0-arm/libgcc/Makefile.in
--- gcc-6.2.0/libgcc/Makefile.in 2016-02-25 12:23:52.000000000 +0000
+++ gcc-6.2.0-arm/libgcc/Makefile.in 2016-09-07 08:58:29.989682360 +0100
@@ -820,7 +820,7 @@
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
# LIB2ADDEHSHARED matter. (Usually all three are identical.)
-c_flags := -fexceptions
+c_flags := -fno-exceptions
ifeq ($(enable_shared),yes)

View File

@@ -0,0 +1,291 @@
diff -NBaur gcc-8.1.0/gcc/config/arm/arm-cpus.in gcc-8.1.0-arm/gcc/config/arm/arm-cpus.in
--- gcc-8.1.0/gcc/config/arm/arm-cpus.in 2018-01-11 15:21:26.000000000 +0000
+++ gcc-8.1.0-arm/gcc/config/arm/arm-cpus.in 2018-05-11 01:05:33.648236777 +0000
@@ -393,7 +393,7 @@
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 -NBaur gcc-8.1.0/gcc/config/arm/t-arm-elf gcc-8.1.0-arm/gcc/config/arm/t-arm-elf
--- gcc-8.1.0/gcc/config/arm/t-arm-elf 2018-01-11 15:21:26.000000000 +0000
+++ gcc-8.1.0-arm/gcc/config/arm/t-arm-elf 2018-05-10 23:15:13.124566279 +0000
@@ -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_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard
-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 += march?armv6k=mtune?mpcore
+MULTILIB_MATCHES += march?armv6k=mcpu?mpcore
-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_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 -NBaur gcc-8.1.0/gcc/config/arm/unknown-elf.h gcc-8.1.0-arm/gcc/config/arm/unknown-elf.h
--- gcc-8.1.0/gcc/config/arm/unknown-elf.h 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-arm/gcc/config/arm/unknown-elf.h 2018-05-10 23:01:02.432676190 +0000
@@ -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 -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-arm/gcc/gcc.c
--- gcc-8.1.0/gcc/gcc.c 2018-02-09 06:44:06.000000000 +0000
+++ gcc-8.1.0-arm/gcc/gcc.c 2018-05-10 23:01:02.440676328 +0000
@@ -786,6 +786,11 @@
#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 *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 @@
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 -NBaur gcc-8.1.0/libgcc/config/arm/t-bpabi gcc-8.1.0-arm/libgcc/config/arm/t-bpabi
--- gcc-8.1.0/libgcc/config/arm/t-bpabi 2012-08-17 15:06:06.000000000 +0000
+++ gcc-8.1.0-arm/libgcc/config/arm/t-bpabi 2018-05-10 23:01:02.440676328 +0000
@@ -17,4 +17,4 @@
# 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 -NBaur gcc-8.1.0/libgcc/crtstuff.c gcc-8.1.0-arm/libgcc/crtstuff.c
--- gcc-8.1.0/libgcc/crtstuff.c 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-arm/libgcc/crtstuff.c 2018-05-10 23:01:02.440676328 +0000
@@ -47,7 +47,7 @@
/* 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. */
diff -NBaur gcc-8.1.0/libgcc/Makefile.in gcc-8.1.0-arm/libgcc/Makefile.in
--- gcc-8.1.0/libgcc/Makefile.in 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-arm/libgcc/Makefile.in 2018-05-10 23:01:02.440676328 +0000
@@ -847,7 +847,7 @@
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
# LIB2ADDEHSHARED matter. (Usually all three are identical.)
-c_flags := -fexceptions
+c_flags := -fno-exceptions
ifeq ($(enable_shared),yes)

View File

@@ -1,32 +0,0 @@
diff -NBaur gdb-7.11/gdb/Makefile.in gdb-7.11-arm/gdb/Makefile.in
--- gdb-7.11/gdb/Makefile.in 2016-02-24 09:55:15.000000000 +0000
+++ gdb-7.11-arm/gdb/Makefile.in 2016-05-13 15:06:03.629019640 +0100
@@ -2726,10 +2726,8 @@
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file.
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
+@GMAKE_TRUE@override COMPILE.post = -c -o $@
+@GMAKE_TRUE@override POSTCOMPILE =
@GMAKE_TRUE@else
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
diff -NBaur gdb-7.11/sim/common/Make-common.in gdb-7.11-arm/sim/common/Make-common.in
--- gdb-7.11/sim/common/Make-common.in 2016-02-10 03:19:39.000000000 +0000
+++ gdb-7.11-arm/sim/common/Make-common.in 2016-05-13 15:06:03.633019640 +0100
@@ -402,10 +402,8 @@
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file.
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
+@GMAKE_TRUE@override COMPILE.post = -c -o $@
+@GMAKE_TRUE@override POSTCOMPILE =
@GMAKE_TRUE@else
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)

View File

@@ -0,0 +1,441 @@
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 1d2dbaf3f7..2d24f09c1b 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -779,6 +779,7 @@ ALL_64_TARGET_OBS = \
ALL_TARGET_OBS = \
arc-tdep.o \
arm.o \
+ arm-3ds-tdep.o \
arm-bsd-tdep.o \
arm-get-next-pcs.o \
arm-linux.o \
@@ -2487,6 +2488,7 @@ ALLDEPFILES = \
amd64-tdep.c \
arc-tdep.c \
arm.c \
+ arm-3ds-tdep.c \
arm-bsd-tdep.c \
arm-get-next-pcs.c \
arm-linux.c \
diff --git a/gdb/arm-3ds-tdep.c b/gdb/arm-3ds-tdep.c
new file mode 100644
index 0000000000..ad014e28db
--- /dev/null
+++ b/gdb/arm-3ds-tdep.c
@@ -0,0 +1,197 @@
+/* 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 VEC (CORE_ADDR) *
+arm_3ds_software_single_step (struct regcache *regcache)
+{
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ struct arm_get_next_pcs next_pcs_ctx;
+ CORE_ADDR pc;
+ int i;
+ VEC (CORE_ADDR) *next_pcs = NULL;
+ struct cleanup *old_chain;
+
+ /* If the target does have hardware single step, GDB doesn't have
+ to bother software single step. */
+ if (target_can_do_single_step () == 1)
+ return NULL;
+
+ old_chain = make_cleanup (VEC_cleanup (CORE_ADDR), &next_pcs);
+
+ arm_get_next_pcs_ctor (&next_pcs_ctx,
+ &arm_3ds_get_next_pcs_ops,
+ gdbarch_byte_order (gdbarch),
+ gdbarch_byte_order_for_code (gdbarch),
+ 1,
+ regcache);
+
+ next_pcs = arm_get_next_pcs (&next_pcs_ctx);
+
+ for (i = 0; VEC_iterate (CORE_ADDR, next_pcs, i, pc); i++)
+ {
+ pc = gdbarch_addr_bits_remove (gdbarch, pc);
+ VEC_replace (CORE_ADDR, next_pcs, i, pc);
+ }
+
+ discard_cleanups (old_chain);
+
+ return next_pcs;
+}
+
+static LONGEST
+arm_3ds_get_syscall_number (struct gdbarch *gdbarch,
+ ptid_t ptid)
+{
+ struct regcache *regs = get_thread_regcache (ptid);
+
+ 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_3ds_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);
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_arm_3ds_tdep;
+
+void
+_initialize_arm_3ds_tdep (void)
+{
+ gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_3DS,
+ arm_3ds_init_abi);
+}
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index fdcb7b1d69..d8fd1622b8 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -119,8 +119,8 @@ arm*-*-symbianelf*)
gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o arm-symbian-tdep.o"
;;
arm*-*-*)
- # Target: ARM embedded system
- gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o"
+ # Target: ARM embedded system (+ 3DS)
+ gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o arm-3ds-tdep.o"
gdb_sim=../sim/arm/libsim.a
;;
diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
index 304d4b05c0..2cf8986d3a 100644
--- a/gdb/data-directory/Makefile.in
+++ b/gdb/data-directory/Makefile.in
@@ -63,7 +63,7 @@ GEN_SYSCALLS_FILES = \
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 --git a/gdb/defs.h b/gdb/defs.h
index a0b586f401..a1508fd5b3 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -604,6 +604,7 @@ enum gdb_osabi
GDB_OSABI_LYNXOS178,
GDB_OSABI_NEWLIB,
GDB_OSABI_SDE,
+ GDB_OSABI_3DS,
GDB_OSABI_INVALID /* keep this last */
};
diff --git a/gdb/osabi.c b/gdb/osabi.c
index 84fa9c0273..c1c4bb1672 100644
--- a/gdb/osabi.c
+++ b/gdb/osabi.c
@@ -79,6 +79,7 @@ static const struct osabi_names gdb_osabi_names[] =
{ "LynxOS178", NULL },
{ "Newlib", NULL },
{ "SDE", NULL },
+ { "3DS", NULL },
{ "<invalid>", NULL }
};
diff --git a/gdb/syscalls/arm-3ds.xml b/gdb/syscalls/arm-3ds.xml
new file mode 100644
index 0000000000..48780b7bd5
--- /dev/null
+++ b/gdb/syscalls/arm-3ds.xml
@@ -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>

View File

@@ -4,7 +4,9 @@ endif
include $(DEVKITARM)/base_rules include $(DEVKITARM)/base_rules
PORTLIBS := $(PORTLIBS_PATH)/armv6k $(PORTLIBS_PATH)/3ds PORTLIBS := $(PORTLIBS_PATH)/3ds
export PATH := $(PORTLIBS_PATH)/3ds/bin:$(PATH)
CTRULIB ?= $(DEVKITPRO)/libctru CTRULIB ?= $(DEVKITPRO)/libctru

View File

@@ -10,7 +10,8 @@ endif
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# path to tools # path to tools
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
export PATH := $(DEVKITARM)/bin:$(PATH) DEVKITPATH=$(shell echo "$(DEVKITPRO)" | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH := $(DEVKITPATH)/tools/bin:$(DEVKITPATH)/devkitARM/bin:$(PATH)
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# the prefix on the compiler executables # the prefix on the compiler executables

View File

@@ -1,10 +1,6 @@
#!/bin/sh #!/bin/sh
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
numcores=`getconf _NPROCESSORS_ONLN`
numjobs=$(($numcores * 2 + 1))
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# build and install binutils # build and install binutils
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -14,9 +10,10 @@ cd $target/binutils
if [ ! -f configured-binutils ] if [ ! -f configured-binutils ]
then then
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \ CPPFLAGS="$cppflags $CPPFLAGS" LDFLAGS=$ldflags ../../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-gold \
--enable-poison-system-directories \
$CROSS_PARAMS \ $CROSS_PARAMS \
|| { echo "Error configuring binutils"; exit 1; } || { echo "Error configuring binutils"; exit 1; }
touch configured-binutils touch configured-binutils
@@ -24,7 +21,7 @@ fi
if [ ! -f built-binutils ] if [ ! -f built-binutils ]
then then
$MAKE -j$numjobs || { echo "Error building binutils"; exit 1; } $MAKE || { echo "Error building binutils"; exit 1; }
touch built-binutils touch built-binutils
fi fi
@@ -43,14 +40,13 @@ cd $target/gcc
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS="$cflags" \ CPPFLAGS="$cppflags $CPPFLAGS" \
CXXFLAGS="$cflags" \
LDFLAGS="$ldflags" \ 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="" \
../../gcc-$GCC_VER/configure \ ../../gcc-$GCC_VER/configure \
--enable-languages=c,c++,objc,obj-c++ \ --enable-languages=c,c++,objc,lto \
--with-gnu-as --with-gnu-ld --with-gcc \ --with-gnu-as --with-gnu-ld --with-gcc \
--with-march=armv4t\ --with-march=armv4t\
--enable-cxx-flags='-ffunction-sections' \ --enable-cxx-flags='-ffunction-sections' \
@@ -60,21 +56,24 @@ then
--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=yes \
--enable-libstdcxx-filesystem-ts \
--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 \
--enable-lto $plugin_ld\ --enable-lto\
--with-system-zlib \ --with-system-zlib \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 46" \ --with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 49" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \
|| { echo "Error configuring gcc"; exit 1; } || { echo "Error configuring gcc"; exit 1; }
touch configured-gcc touch configured-gcc
fi fi
if [ ! -f built-gcc ] if [ ! -f built-gcc ]
then then
$MAKE all-gcc -j$numjobs || { echo "Error building gcc stage1"; exit 1; } $MAKE all-gcc || { echo "Error building gcc stage1"; exit 1; }
touch built-gcc touch built-gcc
fi fi
@@ -88,6 +87,11 @@ fi
unset CFLAGS unset CFLAGS
cd $BUILDDIR cd $BUILDDIR
OLD_CC=$CC
OLDCXX=$CXX
unset CC
unset CXX
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# build and install newlib # build and install newlib
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -109,17 +113,20 @@ fi
if [ ! -f built-newlib ] if [ ! -f built-newlib ]
then then
$MAKE -j$numjobs || { echo "Error building newlib"; exit 1; } $MAKE || { echo "Error building newlib"; exit 1; }
touch built-newlib touch built-newlib
fi fi
if [ ! -f installed-newlib ] if [ ! -f installed-newlib ]
then then
$MAKE install || { echo "Error installing newlib"; exit 1; } $MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
touch installed-newlib touch installed-newlib
fi fi
export CC=$OLD_CC
export CXX=$OLD_CXX
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# build and install the final compiler # build and install the final compiler
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -130,7 +137,7 @@ cd $target/gcc
if [ ! -f built-stage2 ] if [ ! -f built-stage2 ]
then then
$MAKE all -j$numjobs || { echo "Error building gcc stage2"; exit 1; } $MAKE all || { echo "Error building gcc stage2"; exit 1; }
touch built-stage2 touch built-stage2
fi fi
@@ -144,6 +151,39 @@ rm -fr $prefix/$target/sys-include
cd $BUILDDIR cd $BUILDDIR
#---------------------------------------------------------------------------------
# copy base rulesets
#---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dkarm-eabi/rules/* $prefix
#---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH
export DEVKITARM=$DEVKITPRO/devkitARM
#---------------------------------------------------------------------------------
# Install and build the crt0 files
#---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dkarm-eabi/crtls/* $prefix/$target/lib/
cd $prefix/$target/lib/
$MAKE CRT=gba
$MAKE CRT=gp32
$MAKE CRT=er
$MAKE CRT=gp32_gpsdk
$MAKE CRT=ds_arm7
$MAKE CRT=ds_arm9
$MAKE CRT=ds_cart
$MAKE ds_arm7_vram_crt0
$MAKE 3dsx_crt0
cd $BUILDDIR
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# build and install the debugger # build and install the debugger
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -154,8 +194,7 @@ PLATFORM=`uname -s`
if [ ! -f configured-gdb ] if [ ! -f configured-gdb ]
then then
CFLAGS="$cflags" \ CPPFLAGS="$cppflags $CPPFLAGS" \
CXXFLAGS="$cflags" \
LDFLAGS="$ldflags" \ LDFLAGS="$ldflags" \
../../gdb-$GDB_VER/configure \ ../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \ --disable-nls --prefix=$prefix --target=$target --disable-werror \
@@ -166,7 +205,7 @@ fi
if [ ! -f built-gdb ] if [ ! -f built-gdb ]
then then
$MAKE -j$numjobs || { echo "Error building gdb"; exit 1; } $MAKE || { echo "Error building gdb"; exit 1; }
touch built-gdb touch built-gdb
fi fi

View File

@@ -3,27 +3,6 @@
export DEVKITPRO=$TOOLPATH export DEVKITPRO=$TOOLPATH
export DEVKITARM=$DEVKITPRO/devkitARM export DEVKITARM=$DEVKITPRO/devkitARM
#---------------------------------------------------------------------------------
# copy base rulesets
#---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dkarm-eabi/rules/* $prefix
#---------------------------------------------------------------------------------
# Install and build the gba crt
#---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dkarm-eabi/crtls/* $prefix/$target/lib/
cd $prefix/$target/lib/
$MAKE CRT=gba
$MAKE CRT=gp32
$MAKE CRT=er
$MAKE CRT=gp32_gpsdk
$MAKE CRT=ds_arm7
$MAKE CRT=ds_arm9
$MAKE CRT=ds_cart
$MAKE ds_arm7_vram_crt0
$MAKE 3dsx_crt0
cd $BUILDDIR/libgba-$LIBGBA_VER cd $BUILDDIR/libgba-$LIBGBA_VER
$MAKE || { echo "error building libgba"; exit 1; } $MAKE || { echo "error building libgba"; exit 1; }
$MAKE install || { echo "error installing libgba"; exit 1; } $MAKE install || { echo "error installing libgba"; exit 1; }

View File

@@ -6,7 +6,7 @@ do
dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' ) dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' )
cd $BUILDDIR/$dir cd $BUILDDIR/$dir
if [ ! -f configured ]; then if [ ! -f configured ]; then
CXXFLAGS=$cflags CFLAGS=$cflags LDFLAGS=$ldflags ./configure --prefix=$prefix --disable-dependency-tracking $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; } CPPFLAGS="$cppflags $CPPFLAGS" ./configure --prefix=$toolsprefix $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; }
touch configured touch configured
fi fi
if [ ! -f built ]; then if [ ! -f built ]; then

View File

@@ -93,7 +93,11 @@ SECTIONS
.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data
.rodata1 : { *(.rodata1) } .rodata1 : { *(.rodata1) }
.sdata2 : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) } .sdata2 : {
PROVIDE(_SDA2_BASE_ = . );
*(.sdata2) *(.sdata2.*)
*(.gnu.linkonce.s2.*)
}
.sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) } .sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) }
/* Adjust the address for the data segment. We want to adjust up to /* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */ the same address within the page on the next page up. */
@@ -174,6 +178,7 @@ SECTIONS
.sdata : .sdata :
{ {
PROVIDE(_SDA_BASE_ = . );
*(.sdata) *(.sdata)
*(.sdata.*) *(.sdata.*)
*(.gnu.linkonce.s.*) *(.gnu.linkonce.s.*)

View File

@@ -104,7 +104,12 @@ SECTIONS
.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data
.rodata1 : { *(.rodata1) } .rodata1 : { *(.rodata1) }
.sdata2 : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) } .sdata2 : {
PROVIDE(_SDA2_BASE_ = .);
*(.sdata2)
*(.sdata2.*)
*(.gnu.linkonce.s2.*)
}
.sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) } .sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) }
/* Adjust the address for the data segment. We want to adjust up to /* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */ the same address within the page on the next page up. */
@@ -185,6 +190,7 @@ SECTIONS
.sdata : .sdata :
{ {
PROVIDE(_SDA_BASE_ = .);
*(.sdata) *(.sdata)
*(.sdata.*) *(.sdata.*)
*(.gnu.linkonce.s.*) *(.gnu.linkonce.s.*)

View File

@@ -1,12 +0,0 @@
diff -Nbaur binutils-2.27/opcodes/ppc-opc.c binutils-2.27-ppc/opcodes/ppc-opc.c
--- binutils-2.27/opcodes/ppc-opc.c 2016-08-03 08:36:54.000000000 +0100
+++ binutils-2.27-ppc/opcodes/ppc-opc.c 2016-11-08 21:37:45.360000000 +0000
@@ -3037,7 +3037,7 @@
#define MFDEC1 PPC_OPCODE_POWER
#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 PPCISEL PPC_OPCODE_ISEL

View File

@@ -0,0 +1,12 @@
diff -NBaur binutils-2.30/opcodes/ppc-opc.c binutils-2.30-ppc/opcodes/ppc-opc.c
--- binutils-2.30/opcodes/ppc-opc.c 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-ppc/opcodes/ppc-opc.c 2018-05-27 22:33:42.302025484 +0100
@@ -3488,7 +3488,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

@@ -1,330 +0,0 @@
diff -NBaur gcc-6.1.0/gcc/config/rs6000/rs6000.h gcc-6.1.0-ppc/gcc/config/rs6000/rs6000.h
--- gcc-6.1.0/gcc/config/rs6000/rs6000.h 2016-01-20 20:30:24.000000000 +0000
+++ gcc-6.1.0-ppc/gcc/config/rs6000/rs6000.h 2016-05-20 12:10:24.645019640 +0100
@@ -205,6 +205,7 @@
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
SUBTARGET_EXTRA_SPECS
+#if 0
/* -mcpu=native handling only makes sense with compiler running on
an PowerPC chip. If changing this condition, also change
the condition in driver-rs6000.c. */
@@ -219,6 +220,8 @@
#else
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#endif
+#endif
+#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#ifndef CC1_CPU_SPEC
#ifdef HAVE_LOCAL_CPU_DETECT
diff -NBaur gcc-6.1.0/gcc/config/rs6000/sysv4.h gcc-6.1.0-ppc/gcc/config/rs6000/sysv4.h
--- gcc-6.1.0/gcc/config/rs6000/sysv4.h 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.1.0-ppc/gcc/config/rs6000/sysv4.h 2016-05-20 12:12:27.073019640 +0100
@@ -559,7 +559,12 @@
/* Default starting address if specified. */
#define LINK_START_SPEC "\
-%{mads : %(link_start_ads) ; \
+%{mgcn|mogc : %(link_start_ogc) ; \
+ mvgc : %(link_start_vgc) ; \
+ mgcbios : %(link_start_gcb) ; \
+ mrvl : %(link_start_rvl) ; \
+ mwup : %(link_start_wup) ; \
+ mads : %(link_start_ads) ; \
myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \
@@ -590,7 +594,9 @@
/* Any specific OS flags. */
#define LINK_OS_SPEC "\
-%{mads : %(link_os_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
+ mwup : %(link_os_wup) ; \
+ mads : %(link_os_ads) ; \
myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \
@@ -608,7 +613,11 @@
/* Override rs6000.h definition. */
#undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
-%{mads : %(cpp_os_ads) ; \
+%{mgcn : %(cpp_os_gcn) ; \
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
+ mrvl : %(cpp_os_rvl) ; \
+ mwup : %(cpp_os_wup) ; \
+ mads : %(cpp_os_ads) ; \
myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \
@@ -622,7 +630,11 @@
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
-%{mads : %(startfile_ads) ; \
+%{mgcn : %(startfile_gcn) ; \
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
+ mrvl : %(startfile_ogc) ; \
+ mwup : %(startfile_wup) ; \
+ mads : %(startfile_ads) ; \
myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \
@@ -632,11 +643,13 @@
mcall-openbsd: %(startfile_openbsd) ; \
: %(startfile_default) }"
-#define STARTFILE_DEFAULT_SPEC "ecrti.o%s crtbegin.o%s"
+#define STARTFILE_DEFAULT_SPEC "crt0.o%s ecrti.o%s crtbegin.o%s"
#undef LIB_SPEC
#define LIB_SPEC "\
-%{mads : %(lib_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
+ mwup : %(lib_wup) ; \
+ mads : %(lib_ads) ; \
myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \
@@ -646,11 +658,13 @@
mcall-openbsd: %(lib_openbsd) ; \
: %(lib_default) }"
-#define LIB_DEFAULT_SPEC "-lc"
+#define LIB_DEFAULT_SPEC "--start-group -lsysbase -lc --end-group"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "\
-%{mads : %(endfile_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
+ mwup : %(endfile_wup) ; \
+ mads : %(endfile_ads) ; \
myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \
@@ -666,16 +679,33 @@
/* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
+#define LIB_OGC_SPEC "--start-group -lsysbase -lc --end-group"
+#define LIB_WUP_SPEC "--start-group -lsysbase -lc --end-group"
#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s"
+#define STARTFILE_OGC_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
+#define STARTFILE_WUP_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_OGC_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_WUP_SPEC "crtend.o%s ecrtn.o%s"
#define LINK_START_ADS_SPEC "-T ads.ld%s"
+#define LINK_START_OGC_SPEC "-T ogc.ld%s"
+#define LINK_START_RVL_SPEC "-T rvl.ld%s"
+#define LINK_START_WUP_SPEC "-T wup.ld%s"
+#define LINK_START_VGC_SPEC "-T vgcogc.ld%s"
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
#define LINK_OS_ADS_SPEC ""
+#define LINK_OS_OGC_SPEC "--gc-sections"
+#define LINK_OS_WUP_SPEC "--gc-sections"
#define CPP_OS_ADS_SPEC ""
+#define CPP_OS_GCN_SPEC "-D__gamecube__ -ffunction-sections -fdata-sections"
+#define CPP_OS_OGC_SPEC "-D__gamecube__ -DHW_DOL -ffunction-sections -fdata-sections"
+#define CPP_OS_RVL_SPEC "-D__wii__ -DHW_RVL -ffunction-sections -fdata-sections"
+#define CPP_OS_WUP_SPEC "-D__wiiu__ -DHW_WUP -ffunction-sections -fdata-sections"
/* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -855,6 +879,8 @@
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
+ { "lib_ogc", LIB_OGC_SPEC }, \
+ { "lib_wup", LIB_WUP_SPEC }, \
{ "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \
@@ -864,6 +889,8 @@
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
+ { "startfile_wup", STARTFILE_WUP_SPEC }, \
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -873,6 +899,8 @@
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
+ { "endfile_wup", ENDFILE_WUP_SPEC }, \
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -884,7 +911,12 @@
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_start", LINK_START_SPEC }, \
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \
+ { "link_start_wup", LINK_START_WUP_SPEC }, \
{ "link_start_ads", LINK_START_ADS_SPEC }, \
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \
@@ -894,6 +925,8 @@
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \
+ { "link_os_wup", LINK_OS_WUP_SPEC }, \
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -905,6 +937,10 @@
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
{ "link_secure_plt", LINK_SECURE_PLT_SPEC }, \
+ { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
+ { "cpp_os_wup", CPP_OS_WUP_SPEC }, \
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
diff -NBaur gcc-6.1.0/gcc/config/rs6000/sysv4.opt gcc-6.1.0-ppc/gcc/config/rs6000/sysv4.opt
--- gcc-6.1.0/gcc/config/rs6000/sysv4.opt 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.1.0-ppc/gcc/config/rs6000/sysv4.opt 2016-05-20 12:10:24.649019640 +0100
@@ -120,6 +120,30 @@
Target RejectNegative
Link with libads.a, libc.a and crt0.o.
+mgcn
+Target RejectNegative
+Link with libsysbase.a and libc.a, use ogc linker script
+
+mogc
+Target RejectNegative
+Link with libsysbase.a and libc.a, use ogc linker script
+
+mgcbios
+Target RejectNegative
+Link with libsysbase.a and libc.a, use gcbogc linker script
+
+mvgc
+Target RejectNegative
+Link with libsysbase.a and libc.a, use gcbogc linker script
+
+mrvl
+Target RejectNegative
+Link with libsysbase.a and libc.a, use rvl linker script
+
+mwup
+Target RejectNegative
+Link with libsysbase.a and libc.a, use wup linker script
+
myellowknife
Target RejectNegative
Link with libyk.a, libc.a and crt0.o.
diff -NBaur gcc-6.1.0/gcc/config.gcc gcc-6.1.0-ppc/gcc/config.gcc
--- gcc-6.1.0/gcc/config.gcc 2016-04-11 11:14:59.000000000 +0100
+++ gcc-6.1.0-ppc/gcc/config.gcc 2016-05-20 12:10:24.661019640 +0100
@@ -2381,7 +2381,7 @@
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 rs6000/e500.h"
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.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 -NBaur gcc-6.1.0/gcc/Makefile.in gcc-6.1.0-ppc/gcc/Makefile.in
--- gcc-6.1.0/gcc/Makefile.in 2016-04-15 12:49:39.000000000 +0100
+++ gcc-6.1.0-ppc/gcc/Makefile.in 2016-05-20 12:10:24.641019640 +0100
@@ -1073,8 +1073,8 @@
# things like the go/%.o rule work properly; but we use $(*F) for the
# file part, as we just want the file part of the stem, not the entire
# file name.
-COMPILE = $(COMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
-POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
+COMPILE = $(COMPILE.base)
+POSTCOMPILE =
else
COMPILE = source='$<' object='$@' libtool=no \
DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) $(COMPILE.base)
diff -NBaur gcc-6.1.0/libcpp/Makefile.in gcc-6.1.0-ppc/libcpp/Makefile.in
--- gcc-6.1.0/libcpp/Makefile.in 2016-04-27 09:22:11.000000000 +0100
+++ gcc-6.1.0-ppc/libcpp/Makefile.in 2016-05-20 12:10:24.661019640 +0100
@@ -208,8 +208,7 @@
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file.
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+COMPILE = $(COMPILE.base) -o $@
else
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
$(depcomp) $(COMPILE.base)
diff -NBaur gcc-6.1.0/libgcc/config/rs6000/crtrestvr.S gcc-6.1.0-ppc/libgcc/config/rs6000/crtrestvr.S
--- gcc-6.1.0/libgcc/config/rs6000/crtrestvr.S 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.1.0-ppc/libgcc/config/rs6000/crtrestvr.S 2016-05-20 12:10:24.665019640 +0100
@@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__
-
+#if 0
#undef __ALTIVEC__
#define __ALTIVEC__ 1
#include "ppc-asm.h"
@@ -85,3 +85,4 @@
CFI_ENDPROC
#endif
+#endif
diff -NBaur gcc-6.1.0/libgcc/config/rs6000/crtsavevr.S gcc-6.1.0-ppc/libgcc/config/rs6000/crtsavevr.S
--- gcc-6.1.0/libgcc/config/rs6000/crtsavevr.S 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.1.0-ppc/libgcc/config/rs6000/crtsavevr.S 2016-05-20 12:10:24.665019640 +0100
@@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__
-
+#if 0
#undef __ALTIVEC__
#define __ALTIVEC__ 1
#include "ppc-asm.h"
@@ -85,3 +85,4 @@
CFI_ENDPROC
#endif
+#endif
diff -NBaur gcc-6.1.0/libgcc/crtstuff.c gcc-6.1.0-ppc/libgcc/crtstuff.c
--- gcc-6.1.0/libgcc/crtstuff.c 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.1.0-ppc/libgcc/crtstuff.c 2016-05-20 12:10:24.669019640 +0100
@@ -47,6 +47,7 @@
/* 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,
diff -NBaur gcc-6.1.0/libstdc++-v3/include/std/type_traits gcc-6.1.0-ppc/libstdc++-v3/include/std/type_traits
--- gcc-6.1.0/libstdc++-v3/include/std/type_traits 2016-01-12 21:19:58.000000000 +0000
+++ gcc-6.1.0-ppc/libstdc++-v3/include/std/type_traits 2016-05-20 12:10:24.669019640 +0100
@@ -38,7 +38,7 @@
#include <bits/c++config.h>
#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-# if defined (__UINT_LEAST16_TYPE__) && defined(__UINT_LEAST32_TYPE__)
+# if defined (__UINT_LEAST16_TYPE__) && defined(__UINT_LEAST32_TYPE__) && 0
namespace std
{
typedef __UINT_LEAST16_TYPE__ uint_least16_t;

View File

@@ -1,313 +0,0 @@
diff -NBaur gcc-6.3.0/gcc/config/rs6000/rs6000.h gcc-6.3.0-ppc/gcc/config/rs6000/rs6000.h
--- gcc-6.3.0/gcc/config/rs6000/rs6000.h 2016-07-07 20:42:07.000000000 +0100
+++ gcc-6.3.0-ppc/gcc/config/rs6000/rs6000.h 2017-01-05 02:42:41.980000000 +0000
@@ -205,6 +205,7 @@
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
SUBTARGET_EXTRA_SPECS
+#if 0
/* -mcpu=native handling only makes sense with compiler running on
an PowerPC chip. If changing this condition, also change
the condition in driver-rs6000.c. */
@@ -219,6 +220,8 @@
#else
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#endif
+#endif
+#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#ifndef CC1_CPU_SPEC
#ifdef HAVE_LOCAL_CPU_DETECT
diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.h gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.h
--- gcc-6.3.0/gcc/config/rs6000/sysv4.h 2016-05-16 14:47:47.000000000 +0100
+++ gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.h 2017-01-05 02:46:27.020000000 +0000
@@ -559,7 +559,12 @@
/* Default starting address if specified. */
#define LINK_START_SPEC "\
-%{mads : %(link_start_ads) ; \
+%{mgcn|mogc : %(link_start_ogc) ; \
+ mvgc : %(link_start_vgc) ; \
+ mgcbios : %(link_start_gcb) ; \
+ mrvl : %(link_start_rvl) ; \
+ mwup : %(link_start_wup) ; \
+ mads : %(link_start_ads) ; \
myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \
@@ -590,7 +595,9 @@
/* Any specific OS flags. */
#define LINK_OS_SPEC "\
-%{mads : %(link_os_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
+ mwup : %(link_os_wup) ; \
+ mads : %(link_os_ads) ; \
myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \
@@ -608,7 +615,11 @@
/* Override rs6000.h definition. */
#undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
-%{mads : %(cpp_os_ads) ; \
+%{mgcn : %(cpp_os_gcn) ; \
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
+ mrvl : %(cpp_os_rvl) ; \
+ mwup : %(cpp_os_wup) ; \
+ mads : %(cpp_os_ads) ; \
myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \
@@ -622,7 +633,11 @@
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
-%{mads : %(startfile_ads) ; \
+%{mgcn : %(startfile_gcn) ; \
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
+ mrvl : %(startfile_ogc) ; \
+ mwup : %(startfile_wup) ; \
+ mads : %(startfile_ads) ; \
myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \
@@ -636,7 +651,9 @@
#undef LIB_SPEC
#define LIB_SPEC "\
-%{mads : %(lib_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
+ mwup : %(lib_wup) ; \
+ mads : %(lib_ads) ; \
myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \
@@ -646,11 +663,13 @@
mcall-openbsd: %(lib_openbsd) ; \
: %(lib_default) }"
-#define LIB_DEFAULT_SPEC "-lc"
+#define LIB_DEFAULT_SPEC "--start-group -lsysbase -lc --end-group"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "\
-%{mads : %(endfile_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
+ mwup : %(endfile_wup) ; \
+ mads : %(endfile_ads) ; \
myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \
@@ -666,16 +685,33 @@
/* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
+#define LIB_OGC_SPEC "--start-group -lsysbase -lc --end-group"
+#define LIB_WUP_SPEC "--start-group -lsysbase -lc --end-group"
#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s"
+#define STARTFILE_OGC_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
+#define STARTFILE_WUP_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_OGC_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_WUP_SPEC "crtend.o%s ecrtn.o%s"
#define LINK_START_ADS_SPEC "-T ads.ld%s"
+#define LINK_START_OGC_SPEC "-T ogc.ld%s"
+#define LINK_START_RVL_SPEC "-T rvl.ld%s"
+#define LINK_START_WUP_SPEC "-T wup.ld%s"
+#define LINK_START_VGC_SPEC "-T vgcogc.ld%s"
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
#define LINK_OS_ADS_SPEC ""
+#define LINK_OS_OGC_SPEC "--gc-sections"
+#define LINK_OS_WUP_SPEC "--gc-sections"
#define CPP_OS_ADS_SPEC ""
+#define CPP_OS_GCN_SPEC "-D__gamecube__ -ffunction-sections -fdata-sections"
+#define CPP_OS_OGC_SPEC "-D__gamecube__ -DHW_DOL -ffunction-sections -fdata-sections"
+#define CPP_OS_RVL_SPEC "-D__wii__ -DHW_RVL -ffunction-sections -fdata-sections"
+#define CPP_OS_WUP_SPEC "-D__wiiu__ -DHW_WUP -ffunction-sections -fdata-sections"
/* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -866,6 +902,8 @@
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
+ { "lib_ogc", LIB_OGC_SPEC }, \
+ { "lib_wup", LIB_WUP_SPEC }, \
{ "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \
@@ -875,6 +913,8 @@
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
+ { "startfile_wup", STARTFILE_WUP_SPEC }, \
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -884,6 +924,8 @@
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
+ { "endfile_wup", ENDFILE_WUP_SPEC }, \
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -895,7 +937,12 @@
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_start", LINK_START_SPEC }, \
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \
+ { "link_start_wup", LINK_START_WUP_SPEC }, \
{ "link_start_ads", LINK_START_ADS_SPEC }, \
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \
@@ -905,6 +952,8 @@
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \
+ { "link_os_wup", LINK_OS_WUP_SPEC }, \
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -916,6 +965,10 @@
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
{ "link_secure_plt", LINK_SECURE_PLT_SPEC }, \
+ { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
+ { "cpp_os_wup", CPP_OS_WUP_SPEC }, \
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.opt gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.opt
--- gcc-6.3.0/gcc/config/rs6000/sysv4.opt 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.opt 2017-01-05 02:42:41.984000000 +0000
@@ -120,6 +120,30 @@
Target RejectNegative
Link with libads.a, libc.a and crt0.o.
+mgcn
+Target RejectNegative
+Link with libsysbase.a and libc.a, use ogc linker script
+
+mogc
+Target RejectNegative
+Link with libsysbase.a and libc.a, use ogc linker script
+
+mgcbios
+Target RejectNegative
+Link with libsysbase.a and libc.a, use gcbogc linker script
+
+mvgc
+Target RejectNegative
+Link with libsysbase.a and libc.a, use gcbogc linker script
+
+mrvl
+Target RejectNegative
+Link with libsysbase.a and libc.a, use rvl linker script
+
+mwup
+Target RejectNegative
+Link with libsysbase.a and libc.a, use wup linker script
+
myellowknife
Target RejectNegative
Link with libyk.a, libc.a and crt0.o.
diff -NBaur gcc-6.3.0/gcc/config.gcc gcc-6.3.0-ppc/gcc/config.gcc
--- gcc-6.3.0/gcc/config.gcc 2016-11-07 21:38:43.000000000 +0000
+++ gcc-6.3.0-ppc/gcc/config.gcc 2017-01-05 02:42:41.984000000 +0000
@@ -2390,7 +2390,7 @@
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 rs6000/e500.h"
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.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 -NBaur gcc-6.3.0/gcc/Makefile.in gcc-6.3.0-ppc/gcc/Makefile.in
--- gcc-6.3.0/gcc/Makefile.in 2016-11-22 17:33:07.000000000 +0000
+++ gcc-6.3.0-ppc/gcc/Makefile.in 2017-01-05 02:42:41.988000000 +0000
@@ -1073,8 +1073,8 @@
# things like the go/%.o rule work properly; but we use $(*F) for the
# file part, as we just want the file part of the stem, not the entire
# file name.
-COMPILE = $(COMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
-POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
+COMPILE = $(COMPILE.base)
+POSTCOMPILE =
else
COMPILE = source='$<' object='$@' libtool=no \
DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) $(COMPILE.base)
diff -NBaur gcc-6.3.0/libcpp/Makefile.in gcc-6.3.0-ppc/libcpp/Makefile.in
--- gcc-6.3.0/libcpp/Makefile.in 2016-12-21 07:53:39.000000000 +0000
+++ gcc-6.3.0-ppc/libcpp/Makefile.in 2017-01-05 02:42:41.988000000 +0000
@@ -208,8 +208,7 @@
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file.
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+COMPILE = $(COMPILE.base) -o $@
else
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
$(depcomp) $(COMPILE.base)
diff -NBaur gcc-6.3.0/libgcc/config/rs6000/crtrestvr.S gcc-6.3.0-ppc/libgcc/config/rs6000/crtrestvr.S
--- gcc-6.3.0/libgcc/config/rs6000/crtrestvr.S 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.3.0-ppc/libgcc/config/rs6000/crtrestvr.S 2017-01-05 02:42:41.988000000 +0000
@@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__
-
+#if 0
#undef __ALTIVEC__
#define __ALTIVEC__ 1
#include "ppc-asm.h"
@@ -85,3 +85,4 @@
CFI_ENDPROC
#endif
+#endif
diff -NBaur gcc-6.3.0/libgcc/config/rs6000/crtsavevr.S gcc-6.3.0-ppc/libgcc/config/rs6000/crtsavevr.S
--- gcc-6.3.0/libgcc/config/rs6000/crtsavevr.S 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.3.0-ppc/libgcc/config/rs6000/crtsavevr.S 2017-01-05 02:42:41.988000000 +0000
@@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__
-
+#if 0
#undef __ALTIVEC__
#define __ALTIVEC__ 1
#include "ppc-asm.h"
@@ -85,3 +85,4 @@
CFI_ENDPROC
#endif
+#endif
diff -NBaur gcc-6.3.0/libgcc/crtstuff.c gcc-6.3.0-ppc/libgcc/crtstuff.c
--- gcc-6.3.0/libgcc/crtstuff.c 2016-01-04 14:30:50.000000000 +0000
+++ gcc-6.3.0-ppc/libgcc/crtstuff.c 2017-01-05 02:42:41.988000000 +0000
@@ -47,6 +47,7 @@
/* 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,

View File

@@ -0,0 +1,911 @@
diff --git a/config/gthr.m4 b/config/gthr.m4
index 7b29f1f..814104f 100644
--- a/config/gthr.m4
+++ b/config/gthr.m4
@@ -12,6 +12,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER],
[
case $1 in
aix) thread_header=config/rs6000/gthr-aix.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
dce) thread_header=config/pa/gthr-dce.h ;;
lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/gcc/config.gcc b/gcc/config.gcc
index a5defb0..d714072 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2459,7 +2459,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/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index b9b58a8..7c86ac6 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -205,6 +205,7 @@
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
SUBTARGET_EXTRA_SPECS
+#if 0
/* -mcpu=native handling only makes sense with compiler running on
an PowerPC chip. If changing this condition, also change
the condition in driver-rs6000.c. */
@@ -219,6 +220,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#else
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#endif
+#endif
+#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#ifndef CC1_CPU_SPEC
#ifdef HAVE_LOCAL_CPU_DETECT
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index bb19d0d..ff5f80b 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -565,7 +565,12 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
/* Default starting address if specified. */
#define LINK_START_SPEC "\
-%{mads : %(link_start_ads) ; \
+%{mgcn|mogc : %(link_start_ogc) ; \
+ mvgc : %(link_start_vgc) ; \
+ mgcbios : %(link_start_gcb) ; \
+ mrvl : %(link_start_rvl) ; \
+ mwup : %(link_start_wup) ; \
+ mads : %(link_start_ads) ; \
myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \
@@ -596,7 +601,9 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
/* Any specific OS flags. */
#define LINK_OS_SPEC "\
-%{mads : %(link_os_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
+ mwup : %(link_os_wup) ; \
+ mads : %(link_os_ads) ; \
myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \
@@ -614,7 +621,11 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
/* Override rs6000.h definition. */
#undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
-%{mads : %(cpp_os_ads) ; \
+%{mgcn : %(cpp_os_gcn) ; \
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
+ mrvl : %(cpp_os_rvl) ; \
+ mwup : %(cpp_os_wup) ; \
+ mads : %(cpp_os_ads) ; \
myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \
@@ -628,7 +639,11 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
-%{mads : %(startfile_ads) ; \
+%{mgcn : %(startfile_gcn) ; \
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
+ mrvl : %(startfile_ogc) ; \
+ mwup : %(startfile_wup) ; \
+ mads : %(startfile_ads) ; \
myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \
@@ -642,7 +657,9 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
#undef LIB_SPEC
#define LIB_SPEC "\
-%{mads : %(lib_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
+ mwup : %(lib_wup) ; \
+ mads : %(lib_ads) ; \
myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \
@@ -652,11 +669,13 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
mcall-openbsd: %(lib_openbsd) ; \
: %(lib_default) }"
-#define LIB_DEFAULT_SPEC "-lc"
+#define LIB_DEFAULT_SPEC "--start-group -lsysbase -lc --end-group"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "\
-%{mads : %(endfile_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
+ mwup : %(endfile_wup) ; \
+ mads : %(endfile_ads) ; \
myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \
@@ -672,16 +691,33 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
/* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
+#define LIB_OGC_SPEC "--start-group -lsysbase -lc --end-group"
+#define LIB_WUP_SPEC "--start-group -lsysbase -lc --end-group"
#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s"
+#define STARTFILE_OGC_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
+#define STARTFILE_WUP_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_OGC_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_WUP_SPEC "crtend.o%s ecrtn.o%s"
#define LINK_START_ADS_SPEC "-T ads.ld%s"
+#define LINK_START_OGC_SPEC "-T ogc.ld%s"
+#define LINK_START_RVL_SPEC "-T rvl.ld%s"
+#define LINK_START_WUP_SPEC "-T wup.ld%s"
+#define LINK_START_VGC_SPEC "-T vgcogc.ld%s"
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
#define LINK_OS_ADS_SPEC ""
+#define LINK_OS_OGC_SPEC "--gc-sections"
+#define LINK_OS_WUP_SPEC "--gc-sections"
#define CPP_OS_ADS_SPEC ""
+#define CPP_OS_GCN_SPEC "-D__gamecube__ -ffunction-sections -fdata-sections"
+#define CPP_OS_OGC_SPEC "-D__gamecube__ -DHW_DOL -ffunction-sections -fdata-sections"
+#define CPP_OS_RVL_SPEC "-D__wii__ -DHW_RVL -ffunction-sections -fdata-sections"
+#define CPP_OS_WUP_SPEC "-D__wiiu__ -DHW_WUP -ffunction-sections -fdata-sections"
/* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -882,6 +918,8 @@ ncrtn.o%s"
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
+ { "lib_ogc", LIB_OGC_SPEC }, \
+ { "lib_wup", LIB_WUP_SPEC }, \
{ "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \
@@ -891,6 +929,8 @@ ncrtn.o%s"
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
+ { "startfile_wup", STARTFILE_WUP_SPEC }, \
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -900,6 +940,8 @@ ncrtn.o%s"
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
+ { "endfile_wup", ENDFILE_WUP_SPEC }, \
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -911,7 +953,12 @@ ncrtn.o%s"
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_start", LINK_START_SPEC }, \
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \
+ { "link_start_wup", LINK_START_WUP_SPEC }, \
{ "link_start_ads", LINK_START_ADS_SPEC }, \
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \
@@ -921,6 +968,8 @@ ncrtn.o%s"
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \
+ { "link_os_wup", LINK_OS_WUP_SPEC }, \
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -932,6 +981,10 @@ ncrtn.o%s"
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
{ "link_secure_plt", LINK_SECURE_PLT_SPEC }, \
+ { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
+ { "cpp_os_wup", CPP_OS_WUP_SPEC }, \
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
diff --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt
index 34fea0d..9451447 100644
--- a/gcc/config/rs6000/sysv4.opt
+++ b/gcc/config/rs6000/sysv4.opt
@@ -124,6 +124,30 @@ mads
Target RejectNegative
Link with libads.a, libc.a and crt0.o.
+mgcn
+Target RejectNegative
+Link with libsysbase.a and libc.a, use ogc linker script
+
+mogc
+Target RejectNegative
+Link with libsysbase.a and libc.a, use ogc linker script
+
+mgcbios
+Target RejectNegative
+Link with libsysbase.a and libc.a, use gcbogc linker script
+
+mvgc
+Target RejectNegative
+Link with libsysbase.a and libc.a, use gcbogc linker script
+
+mrvl
+Target RejectNegative
+Link with libsysbase.a and libc.a, use rvl linker script
+
+mwup
+Target RejectNegative
+Link with libsysbase.a and libc.a, use wup linker script
+
myellowknife
Target RejectNegative
Link with libyk.a, libc.a and crt0.o.
diff --git a/gcc/configure b/gcc/configure
index 6121e16..6584112 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -11692,7 +11692,7 @@ case ${enable_threads} in
# default
target_thread_file='single'
;;
- aix | dce | lynx | mipssde | posix | rtems | \
+ aix | dce | dkp | lynx | mipssde | posix | rtems | \
single | tpf | vxworks | win32)
target_thread_file=${enable_threads}
;;
diff --git a/gcc/configure.ac b/gcc/configure.ac
index b066cc6..c42b3ef 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1611,7 +1611,7 @@ case ${enable_threads} in
# default
target_thread_file='single'
;;
- aix | dce | lynx | mipssde | posix | rtems | \
+ aix | dce | dkp | lynx | mipssde | posix | rtems | \
single | tpf | vxworks | win32)
target_thread_file=${enable_threads}
;;
diff --git a/libgcc/config/rs6000/crtrestvr.S b/libgcc/config/rs6000/crtrestvr.S
index ba2b262..8d86610 100644
--- a/libgcc/config/rs6000/crtrestvr.S
+++ b/libgcc/config/rs6000/crtrestvr.S
@@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__
-
+#if 0
#undef __ALTIVEC__
#define __ALTIVEC__ 1
#include "ppc-asm.h"
@@ -86,3 +86,4 @@ FUNC_END(_restvr_20)
CFI_ENDPROC
#endif
+#endif
diff --git a/libgcc/config/rs6000/crtsavevr.S b/libgcc/config/rs6000/crtsavevr.S
index 077e33f..b7be68b 100644
--- a/libgcc/config/rs6000/crtsavevr.S
+++ b/libgcc/config/rs6000/crtsavevr.S
@@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__
-
+#if 0
#undef __ALTIVEC__
#define __ALTIVEC__ 1
#include "ppc-asm.h"
@@ -86,3 +86,4 @@ FUNC_END(_savevr_20)
CFI_ENDPROC
#endif
+#endif
diff --git a/libgcc/config/rs6000/gthr-dkp.c b/libgcc/config/rs6000/gthr-dkp.c
new file mode 100644
index 0000000..94d6ba9
--- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.c
@@ -0,0 +1,349 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */
+/* Copyright (C) 1997-2016 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/>. */
+
+#include "gthr-dkp.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
+__gthread_active_p (void)
+{
+ if (!__gthread_impl.active) {
+ return 0;
+ }
+
+ return __gthread_impl.active();
+}
+
+int
+__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
+ void *__args)
+{
+ if (!__gthread_impl.create) {
+ return -1;
+ }
+
+ return __gthread_impl.create(__threadid, __func, __args);
+}
+
+int
+__gthread_join (__gthread_t __threadid, void **__value_ptr)
+{
+ if (!__gthread_impl.join) {
+ return -1;
+ }
+
+ return __gthread_impl.join(__threadid, __value_ptr);
+}
+
+int
+__gthread_detach (__gthread_t __threadid)
+{
+ if (!__gthread_impl.detach) {
+ return -1;
+ }
+
+ return __gthread_impl.detach(__threadid);
+}
+
+int
+__gthread_equal (__gthread_t __t1, __gthread_t __t2)
+{
+ if (!__gthread_impl.equal) {
+ return -1;
+ }
+
+ return __gthread_impl.equal(__t1, __t2);
+}
+
+__gthread_t
+__gthread_self (void)
+{
+ if (!__gthread_impl.self) {
+ __gthread_t result = { 0 };
+ return result;
+ }
+
+ return __gthread_impl.self();
+}
+
+int
+__gthread_yield (void)
+{
+ if (!__gthread_impl.yield) {
+ return -1;
+ }
+
+ return __gthread_impl.yield();
+}
+
+int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ if (!__gthread_impl.once) {
+ return -1;
+ }
+
+ return __gthread_impl.once(__once, __func);
+}
+
+int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+ if (!__gthread_impl.key_create) {
+ return -1;
+ }
+
+ return __gthread_impl.key_create(__key, __dtor);
+}
+
+int
+__gthread_key_delete (__gthread_key_t __key)
+{
+ if (!__gthread_impl.key_delete) {
+ return -1;
+ }
+
+ return __gthread_impl.key_delete(__key);
+}
+
+void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+ if (!__gthread_impl.getspecific) {
+ return NULL;
+ }
+
+ return __gthread_impl.getspecific(__key);
+}
+
+int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+ if (!__gthread_impl.setspecific) {
+ return -1;
+ }
+
+ return __gthread_impl.setspecific(__key, __ptr);
+}
+
+void
+__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_impl.mutex_init_function) {
+ __gthread_impl.mutex_init_function(__mutex);
+ }
+}
+
+int
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{
+ if (!__gthread_impl.mutex_destroy) {
+ return -1;
+ }
+
+ return __gthread_impl.mutex_destroy(__mutex);
+}
+
+int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+ if (!__gthread_impl.mutex_lock) {
+ return -1;
+ }
+
+ return __gthread_impl.mutex_lock(__mutex);
+}
+
+int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+ if (!__gthread_impl.mutex_trylock) {
+ return -1;
+ }
+
+ return __gthread_impl.mutex_trylock(__mutex);
+}
+
+int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+ if (!__gthread_impl.mutex_unlock) {
+ return -1;
+ }
+
+ return __gthread_impl.mutex_unlock(__mutex);
+}
+
+int
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__gthread_impl.recursive_mutex_init_function) {
+ return -1;
+ }
+
+ return __gthread_impl.recursive_mutex_init_function(__mutex);
+}
+
+int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__gthread_impl.recursive_mutex_lock) {
+ return -1;
+ }
+
+ return __gthread_impl.recursive_mutex_lock(__mutex);
+}
+
+int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__gthread_impl.recursive_mutex_trylock) {
+ return -1;
+ }
+
+ return __gthread_impl.recursive_mutex_trylock(__mutex);
+}
+
+int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__gthread_impl.recursive_mutex_unlock) {
+ return -1;
+ }
+
+ return __gthread_impl.recursive_mutex_unlock(__mutex);
+}
+
+int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__gthread_impl.recursive_mutex_destroy) {
+ return -1;
+ }
+
+ return __gthread_impl.recursive_mutex_destroy(__mutex);
+}
+
+void
+__gthread_cond_init_function (__gthread_cond_t *__cond)
+{
+ if (__gthread_impl.cond_init_function) {
+ __gthread_impl.cond_init_function(__cond);
+ }
+}
+
+int
+__gthread_cond_broadcast (__gthread_cond_t *__cond)
+{
+ if (!__gthread_impl.cond_broadcast) {
+ return -1;
+ }
+
+ return __gthread_impl.cond_broadcast(__cond);
+}
+
+int
+__gthread_cond_signal (__gthread_cond_t *__cond)
+{
+ if (!__gthread_impl.cond_signal) {
+ return -1;
+ }
+
+ return __gthread_impl.cond_signal(__cond);
+}
+
+int
+__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
+{
+ if (!__gthread_impl.cond_wait) {
+ return -1;
+ }
+
+ return __gthread_impl.cond_wait(__cond, __mutex);
+}
+
+int
+__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout)
+{
+ if (!__gthread_impl.cond_timedwait) {
+ return -1;
+ }
+
+ return __gthread_impl.cond_timedwait(__cond, __mutex, __abs_timeout);
+}
+
+int
+__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex)
+{
+ if (!__gthread_impl.cond_wait_recursive) {
+ return -1;
+ }
+
+ return __gthread_impl.cond_wait_recursive(__cond, __mutex);
+}
+
+int
+__gthread_cond_destroy (__gthread_cond_t* __cond)
+{
+ if (!__gthread_impl.cond_destroy) {
+ return -1;
+ }
+
+ return __gthread_impl.cond_destroy(__cond);
+}
diff --git a/libgcc/config/rs6000/gthr-dkp.h b/libgcc/config/rs6000/gthr-dkp.h
new file mode 100644
index 0000000..281c19d
--- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.h
@@ -0,0 +1,185 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */
+/* Copyright (C) 1997-2016 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/>. */
+
+#ifndef _GLIBCXX_GCC_GTHR_DKP_H
+#define _GLIBCXX_GCC_GTHR_DKP_H
+
+#define __GTHREADS 1
+#define __GTHREADS_CXX0X 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void * __gthread_t;
+typedef struct { int padding[7]; } __gthread_cond_t;
+typedef struct { int padding; } __gthread_key_t;
+typedef struct { int padding[11]; } __gthread_mutex_t;
+typedef struct { int padding; } __gthread_once_t;
+typedef struct { int padding[11]; } __gthread_recursive_mutex_t;
+typedef struct timespec __gthread_time_t;
+
+#define __GTHREAD_HAS_COND 1
+#define _GTHREAD_USE_MUTEX_TIMEDLOCK 0
+
+#define __GTHREAD_ONCE_INIT { 0 }
+#define __GTHREAD_TIME_INIT { 0, 0 }
+
+#define __GTHREAD_COND_INIT_FUNCTION __gthread_cond_init_function
+#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
+
+typedef struct {
+ int (*active) (void);
+ int (*create) (__gthread_t *__threadid, void *(*__func) (void*),
+ void *__args);
+ int (*join) (__gthread_t __threadid, void **__value_ptr);
+ int (*detach) (__gthread_t __threadid);
+ 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
+__gthread_active_p (void);
+
+int
+__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
+ void *__args);
+
+int
+__gthread_join (__gthread_t __threadid, void **__value_ptr);
+
+int
+__gthread_detach (__gthread_t __threadid);
+
+int
+__gthread_equal (__gthread_t __t1, __gthread_t __t2);
+
+__gthread_t
+__gthread_self (void);
+
+int
+__gthread_yield (void);
+
+int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void));
+
+int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *));
+
+int
+__gthread_key_delete (__gthread_key_t __key);
+
+void *
+__gthread_getspecific (__gthread_key_t __key);
+
+int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr);
+
+void
+__gthread_mutex_init_function (__gthread_mutex_t *__mutex);
+
+int
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex);
+
+int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex);
+
+int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex);
+
+int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex);
+
+int
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex);
+
+int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex);
+
+int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex);
+
+int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex);
+
+int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex);
+
+void
+__gthread_cond_init_function (__gthread_cond_t *__cond);
+
+int
+__gthread_cond_broadcast (__gthread_cond_t *__cond);
+
+int
+__gthread_cond_signal (__gthread_cond_t *__cond);
+
+int
+__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex);
+
+int
+__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout);
+
+int
+__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex);
+
+int
+__gthread_cond_destroy (__gthread_cond_t* __cond);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! _GLIBCXX_GCC_GTHR_DKP_H */
diff --git a/libgcc/config/rs6000/t-ppccomm b/libgcc/config/rs6000/t-ppccomm
index fb812d3..7f6669d 100644
--- a/libgcc/config/rs6000/t-ppccomm
+++ b/libgcc/config/rs6000/t-ppccomm
@@ -1,4 +1,5 @@
LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c \
+ $(srcdir)/config/rs6000/gthr-dkp.c \
$(srcdir)/config/rs6000/tramp.S
# This can't end up in shared libgcc
diff --git a/libgcc/configure b/libgcc/configure
index b2f3f87..c6f93f8 100644
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -5442,6 +5442,7 @@ tm_file="${tm_file_}"
case $target_thread_file in
aix) thread_header=config/rs6000/gthr-aix.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
dce) thread_header=config/pa/gthr-dce.h ;;
lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 5e89445..f234745 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,
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index ba094be..ac53ee6 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -15178,6 +15178,7 @@ $as_echo "$target_thread_file" >&6; }
case $target_thread_file in
aix) thread_header=config/rs6000/gthr-aix.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
dce) thread_header=config/pa/gthr-dce.h ;;
lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;;

View File

@@ -1,18 +0,0 @@
diff -NBaur gdb-7.10/gdb/Makefile.in gdb-7.10-ppc/gdb/Makefile.in
--- gdb-7.10/gdb/Makefile.in 2015-08-28 22:22:07.000000000 +0100
+++ gdb-7.10-ppc/gdb/Makefile.in 2015-11-09 09:21:13.228003995 +0000
@@ -2676,10 +2676,10 @@
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file.
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
+#@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
+#@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
+#@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
+#@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
@GMAKE_TRUE@else
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)

File diff suppressed because it is too large Load Diff

View File

@@ -1,38 +1,4 @@
#--------------------------------------------------------------------------------- include $(DEVKITPPC)/base_tools
# change shell on Snow Leopard
#---------------------------------------------------------------------------------
UNAME_S := $(shell uname -s)
UNAME_R := $(shell uname -r)
ifneq (,$(findstring Darwin,$(UNAME_S)))
ifneq (,$(findstring 10.8.0,$(UNAME_R)))
export SHELL=/bin/bash
endif
endif
#---------------------------------------------------------------------------------
# path to tools
#---------------------------------------------------------------------------------
export PORTLIBS := $(DEVKITPRO)/portlibs/ppc
export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH)
#---------------------------------------------------------------------------------
# the prefix on the compiler executables
#---------------------------------------------------------------------------------
PREFIX := powerpc-eabi-
export AS := $(PREFIX)as
export CC := $(PREFIX)gcc
export CXX := $(PREFIX)g++
export AR := $(PREFIX)ar
export OBJCOPY := $(PREFIX)objcopy
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
ifneq (,$(ISVC))
ERROR_FILTER := 2>&1 | sed -e 's/\(.[a-zA-Z]\+\):\([0-9]\+\):/\1(\2):/g'
endif
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
%.a: %.a:
@@ -45,7 +11,7 @@ endif
%.o: %.cpp %.o: %.cpp
@echo $(notdir $<) @echo $(notdir $<)
@$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER) @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
%.o: %.c %.o: %.c
@echo $(notdir $<) @echo $(notdir $<)

37
dkppc/rules/base_tools Normal file
View File

@@ -0,0 +1,37 @@
#---------------------------------------------------------------------------------
# change shell on Snow Leopard
#---------------------------------------------------------------------------------
UNAME_S := $(shell uname -s)
UNAME_R := $(shell uname -r)
ifneq (,$(findstring Darwin,$(UNAME_S)))
ifneq (,$(findstring 10.8.0,$(UNAME_R)))
export SHELL=/bin/bash
endif
endif
#---------------------------------------------------------------------------------
# path to tools
#---------------------------------------------------------------------------------
DEVKITPATH=$(shell echo "$(DEVKITPRO)" | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PORTLIBS := $(DEVKITPATH)/portlibs/ppc
export PATH := $(DEVKITPATH)/tools/bin:$(DEVKITPATH)/devkitPPC/bin:$(PORTLIBS)/bin:$(PATH)
#---------------------------------------------------------------------------------
# the prefix on the compiler executables
#---------------------------------------------------------------------------------
PREFIX := powerpc-eabi-
export AS := $(PREFIX)as
export CC := $(PREFIX)gcc
export CXX := $(PREFIX)g++
export AR := $(PREFIX)ar
export OBJCOPY := $(PREFIX)objcopy
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
ifneq (,$(ISVC))
ERROR_FILTER := 2>&1 | sed -e 's/\(.[a-zA-Z]\+\):\([0-9]\+\):/\1(\2):/g'
endif

View File

@@ -1,32 +0,0 @@
#!/bin/bash
export DEVKITPPC=$TOOLPATH/devkitPPC
export DEVKITPRO=$TOOLPATH
#---------------------------------------------------------------------------------
# Install and build the gamecube crt and libogc
#---------------------------------------------------------------------------------
echo "installing linkscripts ..."
cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/
#---------------------------------------------------------------------------------
# copy base rulesets
#---------------------------------------------------------------------------------
cp $BUILDSCRIPTDIR/dkppc/rules/* $prefix
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

@@ -75,22 +75,32 @@ cd $target/gcc
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS="$cflags" CXXFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" CXXFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \ CFLAGS="$cflags" \
--enable-languages=c,c++,objc \ CXXFLAGS="$cflags" \
--enable-lto $plugin_ld \ LDFLAGS="$ldflags" \
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
LDFLAGS_FOR_TARGET="" \
../../gcc-$GCC_VER/configure \
--enable-languages=c,c++,objc,lto \
--enable-lto \
--with-cpu=750 \ --with-cpu=750 \
--disable-nls --disable-shared --enable-threads --disable-multilib \ --disable-nls --disable-shared --enable-threads=dkp --disable-multilib \
--disable-win32-registry \ --disable-win32-registry \
--disable-libstdcxx-pch \ --disable-libstdcxx-pch \
--disable-libstdcxx-verbose \ --disable-libstdcxx-verbose \
--enable-libstdcxx-time=yes \
--enable-libstdcxx-filesystem-ts \
--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-system-zlib\
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPPC release 29" \ --with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 32" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \
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
fi fi
@@ -117,13 +127,18 @@ cd $target/newlib
unset CFLAGS unset CFLAGS
unset LDFLAGS unset LDFLAGS
OLD_CC=$CC
OLD_CXX=$CXX
unset CC
unset CXX
if [ ! -f configured-newlib ] if [ ! -f configured-newlib ]
then then
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
../../newlib-$NEWLIB_VER/configure \ ../../newlib-$NEWLIB_VER/configure \
--target=$target \ --target=$target \
--prefix=$prefix \ --prefix=$prefix \
--enable-newlib-mb \ --enable-newlib-mb \
--enable-newlib-hw-fp \
|| { echo "Error configuring newlib"; exit 1; } || { echo "Error configuring newlib"; exit 1; }
touch configured-newlib touch configured-newlib
fi fi
@@ -135,10 +150,13 @@ then
fi fi
if [ ! -f installed-newlib ] if [ ! -f installed-newlib ]
then then
$MAKE install || { echo "Error installing newlib"; exit 1; } $MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
touch installed-newlib touch installed-newlib
fi fi
export CC=$OLD_CC
export CXX=$OLD_CXX
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# build and install the final compiler # build and install the final compiler
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -161,6 +179,17 @@ fi
rm -fr $prefix/$target/sys-include rm -fr $prefix/$target/sys-include
#---------------------------------------------------------------------------------
# Install and build the gamecube crt and libogc
#---------------------------------------------------------------------------------
echo "installing linkscripts ..."
cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/
#---------------------------------------------------------------------------------
# copy base rulesets
#---------------------------------------------------------------------------------
cp $BUILDSCRIPTDIR/dkppc/rules/* $prefix
cd $BUILDDIR cd $BUILDDIR
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -173,7 +202,8 @@ if [ ! -f configured-gdb ]
then then
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \ CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \ --disable-nls --prefix=$prefix --target=$target --disable-werror \
$CROSS_PARAMS || { echo "Error configuring gdb"; exit 1; } $CROSS_PARAMS \
$CROSS_GCC_PARAMS || { echo "Error configuring gdb"; exit 1; }
touch configured-gdb touch configured-gdb
fi fi

View File

@@ -0,0 +1,21 @@
#!/bin/bash
export DEVKITPPC=$TOOLPATH/devkitPPC
export DEVKITPRO=$TOOLPATH
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

@@ -6,7 +6,7 @@ do
dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' ) dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' )
cd $BUILDDIR/$dir cd $BUILDDIR/$dir
if [ ! -f configured ]; then if [ ! -f configured ]; then
CXXFLAGS=$cflags CFLAGS=$cflags LDFLAGS=$ldflags ./configure --prefix=$prefix --disable-dependency-tracking $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; } CXXFLAGS=$cflags CFLAGS=$cflags LDFLAGS=$ldflags ./configure --prefix=$toolsprefix --disable-dependency-tracking $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; }
touch configured touch configured
fi fi
if [ ! -f built ]; then if [ ! -f built ]; then

View File

@@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
DATESTRING=$(date +%Y)$(date +%m)$(date +%d) DATESTRING=$(date +%Y)$(date +%m)$(date +%d)
cd .. && tar --exclude=*CVS* --exclude=.svn --exclude=.git --exclude=*.log --exclude=*.bz2 \ cd .. && tar --exclude=*CVS* --exclude=.svn --exclude=.git --exclude=*.log --exclude=*.bz2 \
--exclude=*.gz --exclude=config.sh --exclude=.devkitARM --exclude=.devkitPPC \ --exclude=*.gz --exclude=config.sh --exclude=.devkitARM* --exclude=.devkitPPC* \
--exclude=.devkitPSP --exclude=.gitignore \ --exclude=.devkitA64* --exclude=.gitignore \
-cvjf buildscripts-$DATESTRING.tar.bz2 buildscripts -cvjf buildscripts-$DATESTRING.tar.bz2 buildscripts

View File

@@ -19,6 +19,7 @@ do
echo echo
echo "1: devkitARM (gba gp32 ds)" echo "1: devkitARM (gba gp32 ds)"
echo "2: devkitPPC (gamecube wii)" echo "2: devkitPPC (gamecube wii)"
echo "3: devkitA64 (switch)"
read VERSION read VERSION
if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ] if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ]
@@ -29,24 +30,34 @@ done
case "$VERSION" in case "$VERSION" in
"1" ) "1" )
GCC_VER=6.3.0 GCC_VER=8.1.0
BINUTILS_VER=2.27 BINUTILS_VER=2.30
NEWLIB_VER=2.5.0 NEWLIB_VER=3.0.0
GDB_VER=7.12 GDB_VER=8.0
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=6.3.0 GCC_VER=8.1.0
BINUTILS_VER=2.27 BINUTILS_VER=2.30
MN_BINUTILS_VER=2.17 MN_BINUTILS_VER=2.17
NEWLIB_VER=2.5.0 NEWLIB_VER=3.0.0
GDB_VER=7.11 GDB_VER=8.0.1
basedir='dkppc' basedir='dkppc'
package=devkitPPC package=devkitPPC
target=powerpc-eabi target=powerpc-eabi
toolchain=DEVKITPPC toolchain=DEVKITPPC
;; ;;
"3" )
GCC_VER=8.1.0
BINUTILS_VER=2.30
NEWLIB_VER=3.0.0
GDB_VER=8.0
basedir='dka64'
package=devkitA64
target=aarch64-none-elf
toolchain=DEVKITA64
;;
esac esac