Compare commits

...

575 Commits

Author SHA1 Message Date
Dave Murphy
d2c48d04c2 ignore .xz files 2021-04-29 22:53:42 +01:00
Dave Murphy
289d6a6aa0 use latest crtls & rules 2021-04-29 22:53:42 +01:00
Dave Murphy
c33f389df1 add zstd to configure options 2021-04-29 22:53:42 +01:00
Dave Murphy
2938af4ed5 add isl to configure options 2021-04-29 22:53:42 +01:00
Dave Murphy
0f4422c92c devkitA64: allow external gcc config params 2021-04-29 22:53:42 +01:00
Dave Murphy
dc5b7bb5a6 remove cross build scripts 2021-04-29 22:53:42 +01:00
Dave Murphy
a87f68d4dd devkitA64: update gcc to 11.1.0 2021-04-29 22:53:26 +01:00
Dave Murphy
a9b611e134 dlls no longer required 2021-04-27 16:49:40 +01:00
Dave Murphy
6015da5cab devkitA64: update newlib to 4.1.0 2021-04-27 16:49:31 +01:00
Dave Murphy
6a74f83616 devkitPPC: use modern config.sub for mn10200 binutils 2020-07-25 14:58:45 +01:00
Dave Murphy
953cf2a761 devkitPPC: update gcc to 10.2.0, next release is r38 2020-07-25 13:10:46 +01:00
Dave Murphy
60efdbd109 devkitPPC: stop building gdb here 2020-07-25 11:13:00 +01:00
Dave Murphy
ef789eddb7 don't download crtls & rules archives if not building them 2020-07-25 03:45:56 +01:00
Dave Murphy
502f832a5b fixup rules archive downloading 2020-07-25 03:29:50 +01:00
Dave Murphy
848924d332 devkitARM: update rules to 1.2.0 2020-07-25 03:07:30 +01:00
Dave Murphy
1f5f5eedf5 devkitARM: update gcc to 10.2.0 2020-07-25 03:05:58 +01:00
Dave Murphy
5664d84c44 devkitARM: update rules to 1.1.0 2020-07-25 03:02:16 +01:00
Dave Murphy
6e8de1b1d2 devkitARM: next release is 55 2020-07-25 03:02:16 +01:00
Dave Murphy
b16276e9da devkitARM: separate gdb 2020-07-25 03:02:16 +01:00
Dave Murphy
7f142c7583 devkitARM: use binutils 2.34 2020-07-25 03:02:16 +01:00
Dave Murphy
1a1b35aa3b devkitARM: disable tm clone registry and cxa-atexit 2020-07-25 03:02:16 +01:00
Dave Murphy
70c8df8709 devkitA64 now release 16 2020-07-25 02:53:33 +01:00
Dave Murphy
bc52f6ac2b devkitA64: next release is r16 2020-07-24 23:41:39 +01:00
Dave Murphy
81719c49e3 devkitA64: disable cxa_atexit & tm clone registry 2020-07-24 23:41:39 +01:00
Dave Murphy
d4a84c9884 devkitA64: separate rules package 2020-07-24 23:41:39 +01:00
Dave Murphy
25f22b6c93 devkitA64: don't build gdb 2020-07-24 23:41:39 +01:00
Dave Murphy
a0fe0c5297 devkitA64: update to gcc 10.2.0 2020-07-24 23:41:39 +01:00
Dave Murphy
77ad8b785c add native tools to path when cross building 2020-07-24 23:40:16 +01:00
Dave Murphy
e4b1370595 remove redundant toolsprefix 2020-07-24 23:38:05 +01:00
Dave Murphy
dcfd0e271e add dummy cross build script for linux PKGBUILD 2020-07-24 23:34:26 +01:00
Dave Murphy
9bf0973c2a ensure newly built tools on front of path 2020-07-24 16:02:56 +01:00
Dave Murphy
0b31c7ab1c stop building gdb here 2020-07-24 15:55:13 +01:00
Dave Murphy
90e2936222 add cross build for aarch64 linux 2020-06-30 18:18:19 +01:00
Dave Murphy
556a2a2e02 devkitPPC: refill buffer for large reads 2020-06-08 20:01:52 +01:00
Dave Murphy
6da9ea33f7 devkitPPC: use binutils 2.34 2020-06-08 19:59:53 +01:00
Dave Murphy
433a4bdd80 devkitPPC: releease 37 2020-05-16 03:17:05 +01:00
Dave Murphy
20bf4948a1 devkitPPC: update to gcc 10 2020-05-16 03:15:39 +01:00
Dave Murphy
5e720e01c1 devkitPPC: rework syscalls 2020-05-16 03:14:57 +01:00
Dave Murphy
183ab79cfc flag for building crtls & rules 2020-05-12 14:04:01 +01:00
Dave Murphy
ad4246dfc4 oops, forgot to update rules script for devkitPPC 2020-05-12 11:37:27 +00:00
Dave Murphy
9165c280f3 restore building of crtls and rules files 2020-05-11 13:43:17 +01:00
Dave Murphy
116613adc8 devkitARM: next release is r54 2020-05-08 10:04:40 +01:00
Dave Murphy
fbc790a8dd devkitARM: upgrade newlib to 3.3.0 2020-05-08 10:01:17 +01:00
Dave Murphy
91789e0ca8 devkitARM: upgrade gcc to 10.1.0 2020-05-08 10:00:10 +01:00
Dave Murphy
fddf563787 devkitA64: next release is r15 2020-05-08 09:59:14 +01:00
Dave Murphy
45bf89586f devkitA64: upgrade gdb to 9.1 2020-05-08 09:57:51 +01:00
Dave Murphy
ddaf472951 devkitA64: upgrade newlib to 3.3.0 2020-05-08 09:56:51 +01:00
Dave Murphy
0adc00806f devkitA64: upgrade gcc to 10.1.0 2020-05-08 09:54:21 +01:00
Dave Murphy
fa1972f5e9 gdb requires CPPFLAGS for cross compile 2020-05-08 09:51:51 +01:00
Dave Murphy
2a306b5e49 strip bins script should be executable 2020-05-08 09:50:02 +01:00
Dave Murphy
1857d52ede copy dll to libexec folder for windows tools 2020-05-08 09:49:26 +01:00
Dave Murphy
57ec7b67ac script builds devkitPPC release 36 2020-04-12 02:12:22 +01:00
Dave Murphy
d9392f8f56 stop downloading and building outdated tools archives 2020-04-12 02:10:35 +01:00
Dave Murphy
e0c908dfc2 devkitPPC: next release is r35 2020-04-12 01:38:45 +01:00
Dave Murphy
2ddef0ade4 devkitPPC: update newlib to 3.3.0 2020-04-12 01:38:08 +01:00
Dave Murphy
e68aaf8cdd devkitPPC: update gcc to 8.4.0 2020-04-12 01:37:13 +01:00
Dave Murphy
0add4d1b5c changes for devkitA64 r14 2019-12-11 01:18:57 +00:00
Dave Murphy
736db33e06 devkitARM: remove old gcc patch 2019-06-28 16:07:20 +01:00
Dave Murphy
96f7acc919 remove library building from scripts 2019-06-25 22:04:51 +01:00
Dave Murphy
c2aae79d59 devkitARM: latest newlib patch 2019-06-25 20:28:26 +01:00
Dave Murphy
fe202a6f50 devkitARM: update gcc to 9.1.0 2019-06-23 10:54:29 +01:00
Dave Murphy
aeb6482da9 devkitARM: update gdb patch 2019-05-14 10:22:19 +01:00
Dave Murphy
b1d5f5c7a6 fix macOS build 2019-03-29 20:17:09 +00:00
fincs
1974c8ae38 Update devkitA64 newlib patch, remove old stale patch 2019-03-29 20:17:09 +00:00
fincs
65c1a1256a devkitA64: update binutils patch with latest changes 2019-03-29 20:17:09 +00:00
Dave Murphy
ade65bab03 fix uselocal 2019-03-29 20:17:09 +00:00
Dave Murphy
bcb3bff114 update devkitA64 version 2019-03-29 20:17:09 +00:00
Dave Murphy
a48e515bd6 devkitA64: update newlib to 3.1.0 2019-03-29 20:16:16 +00:00
Dave Murphy
fec37937b7 devkitA64: update gdb to 8.2.1 2019-03-29 20:16:16 +00:00
Dave Murphy
2c8ae62e8e devkitA64: update gcc to 8.3.0 2019-03-29 20:16:16 +00:00
Dave Murphy
383ebe76c8 devkitA64: update binutils to 2.32 2019-03-29 20:16:16 +00:00
Dave Murphy
d604cafce3 devkitPPC: update gdb to 8.2.1 2019-03-19 11:53:46 +00:00
Dave Murphy
d0d158bd80 devkitPPC: update newlib to 3.1.0 2019-03-19 11:53:46 +00:00
Dave Murphy
fe39e87d88 devkitPPC: update gcc to 8.3.0 2019-03-19 11:53:46 +00:00
Dave Murphy
5ddee95920 add latest consoles to lists 2019-03-15 02:22:29 +00:00
Dave Murphy
58b9db7650 devkitARM: update to gcc 8.3.0 2019-03-15 02:22:29 +00:00
Eix
43415d430a there was an extra unneeded space, it was bothering me 2019-03-13 09:22:21 +00:00
Dave Murphy
223bc0823d now building devkitARM r51 2019-02-20 16:21:06 +00:00
Dave Murphy
c6675ab007 devkitARM: update newlib to 3.1.0 2019-02-20 16:16:55 +00:00
Dave Murphy
af02813a13 devkitARM: update gdb patch for macOS 2019-02-20 16:15:57 +00:00
Dave Murphy
21d8bd0e46 devkitARM: use new devkitarm-crtls package 2019-02-19 16:05:07 +00:00
Dave Murphy
b10d1e133f remove stale patches 2019-02-19 16:05:07 +00:00
Dave Murphy
c38b9e9425 update libgba version 2019-02-19 16:05:07 +00:00
Dave Murphy
d643106bf8 devkitARM: update gdb to 8.2.1 2019-02-19 16:05:07 +00:00
Dave Murphy
dd40237a2a use latest 3ds libs 2019-02-19 16:05:07 +00:00
Dave Murphy
6530f0a3c3 devkitARM: use new devkitarm-rules package 2019-02-19 16:04:53 +00:00
Dave Murphy
0bd88d5ac8 devkitARM: upgrade binutils to 2.32 2019-02-18 23:18:24 +00:00
Dave Murphy
ec6543e3c0 devkitPPC rules files moved to separate package 2019-02-18 14:05:55 +00:00
Carsten Teibes
11d640cd77 Add citro2d library to devkitARM build targets 2019-02-18 14:03:12 +00:00
Dave Murphy
d2614153c5 update to binutils 2.32 2019-02-11 19:28:58 +00:00
Dave Murphy
37b381ea1f proper fix for struct timeval 2019-02-11 19:28:09 +00:00
Dave Murphy
a6c67408af devkitPPC: separate rules files for independent update 2019-01-30 12:49:32 +00:00
Dave Murphy
bd5c0ba3ec remove old wii-u attempt 2019-01-30 11:04:48 +00:00
Dave Murphy
41b418fd8c consolidate paths 2019-01-30 08:57:46 +00:00
Dave Murphy
8421d92bcb always use --build 2018-12-15 21:36:53 +00:00
Dave Murphy
20dc1324d4 increase devices to 32 2018-12-15 21:36:53 +00:00
Dave Murphy
118896fb1a add gdb 8.2 patch 2018-12-15 21:36:53 +00:00
Dave Murphy
ab95988007 update devkitARM version 2018-12-15 21:36:53 +00:00
Dave Murphy
596d710c3b use gdb 8.2 2018-12-15 21:35:15 +00:00
Dave Murphy
f0463ecba1 update to binutils 2.31.1 2018-12-15 21:35:15 +00:00
Dave Murphy
0bbc2be394 update to gcc 8.2 2018-12-15 21:35:15 +00:00
Dave Murphy
61dec9401a add note about devkitPro pacman 2018-11-14 19:34:07 +00:00
Dave Murphy
a9712ae81e use gdb 8.2 2018-11-14 19:34:07 +00:00
Dave Murphy
83f1b5cf02 remove old gcc patch 2018-11-14 19:34:07 +00:00
Dave Murphy
0c9af4df25 use binutils 2.31.1 2018-11-14 19:34:07 +00:00
Dave Murphy
4191cbef14 use gcc 8.2 2018-11-14 19:34:07 +00:00
PoroCYon
b0d0a3b3a3 fix symbol names in bin2o-generated header files sometimes being invalid C identifiers 2018-09-18 17:16:49 +01:00
Dave Murphy
da8d9c793b explicitly MPL crt0 files. Closes #31 2018-08-15 02:02:59 +01:00
Dave Murphy
e477403617 update devkitA64 gcc to 8.2.0 2018-07-28 15:57:51 +01:00
Dave Murphy
c84da440c4 update devkitA64 binutils 2018-07-28 15:56:01 +01:00
Dave Murphy
e0aebb7afb devkitA64 r11 updates 2018-07-15 16:56:12 +01:00
Dave Murphy
eed906eda5 update newlib 2018-07-15 16:04:56 +01:00
Dave Murphy
893eeef9c5 set prefix 2018-07-15 16:04:38 +01:00
Dave Murphy
9f518e2f8d disable git scripts 2018-07-03 10:52:02 +01:00
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
Dave Murphy
0bf1f46cc7 enable buildscripts for release 2017-01-17 04:20:20 +00:00
Dave Murphy
30cd94818b remove devkitPSP 2017-01-17 04:19:29 +00:00
Dave Murphy
945640b296 add OSX sysroot to gdb CXXFLAGS 2017-01-16 23:55:58 +00:00
Dave Murphy
53375e9a69 update libgba version 2017-01-16 22:41:01 +00:00
Dave Murphy
833b03483f update versions 2017-01-16 20:08:40 +00:00
Dave Murphy
5138849459 allow building for arm7 iwram 2017-01-16 18:33:45 +00:00
Dave Murphy
4a1190df4a reduce newlib wide-char code 2017-01-16 12:59:11 +00:00
Dave Murphy
029f3b8d51 really get arm7i LMA from header 2017-01-15 20:19:22 +00:00
Dave Murphy
888cbdfd02 allow external relocation of arm7i LMA 2017-01-15 00:20:40 +00:00
Dave Murphy
467a1a00f9 remove stray no$ breakpoint 2017-01-15 00:20:03 +00:00
Dave Murphy
114896f06f allow external relocation of arm9i binary load address 2017-01-14 23:56:43 +00:00
Dave Murphy
6832220265 allow arm9i binary to be relocated externally 2017-01-13 00:08:39 +00:00
Dave Murphy
b0cce58512 use makefile to build 3dsx crt0 2017-01-12 00:10:18 +00:00
Dave Murphy
f897e4be15 build vram crt0 2017-01-12 00:08:35 +00:00
Dave Murphy
0467bcd3d6 use dead code elimination options 2017-01-11 19:04:39 +00:00
Dave Murphy
ff9de37d63 update libsysbase configure 2017-01-11 19:03:52 +00:00
Dave Murphy
32224d9c6d Merge 'devkitPPC_r29' and devkitARM_r46 branches 2017-01-11 12:37:26 +00:00
fincs
49165d1d26 Fix lma address error in DS ARM7 crt0 2017-01-10 16:09:49 +01:00
fincs
e2600d9ac1 Refactor DS ARM9/ARM7 crt0s/linkscripts to support DSi section loading 2017-01-10 01:03:23 +01:00
Dave Murphy
0e0f7eff77 place secure area 2017-01-09 21:15:53 +00:00
Dave Murphy
23fe354d16 reference __secure_area__ so it gets linked 2017-01-09 06:22:59 +00:00
Dave Murphy
bf52a02c77 allow arm7 to be relocated externally 2017-01-08 17:07:59 +00:00
Dave Murphy
788935c0ce add dsi specific section 2017-01-08 17:07:05 +00:00
Dave Murphy
b27ebb170b 2.17 mn10200 compiles on 64bit linux 2017-01-06 19:02:25 +00:00
Dave Murphy
360ad438b8 don't need multilib 2017-01-06 19:01:38 +00:00
Dave Murphy
4e38d36c72 use separate binutils version for mn10200 2017-01-06 14:31:35 +00:00
Dave Murphy
b4cc3ab98f allow for different versions of same package 2017-01-06 14:29:53 +00:00
Dave Murphy
206e3b8469 adjust for new arm7 crt0 2017-01-05 14:46:41 +00:00
Dave Murphy
0c55dc8db9 adjust arm7 code lma
DSi firmware requires arm7 code to start in ewram
2017-01-05 14:46:41 +00:00
Dave Murphy
ccc156d51d adjust ewram size
reboot stub is placed at ramtop - 48K
2017-01-05 14:46:40 +00:00
Dave Murphy
902fd855ae use latest libfat 2017-01-05 14:45:07 +00:00
Dave Murphy
028795f23f latest ndstool 2017-01-05 14:23:24 +00:00
Dave Murphy
019e34dc06 update libraries 2017-01-05 13:50:21 +00:00
Dave Murphy
11a4af700a new release number 2017-01-05 13:44:03 +00:00
Dave Murphy
8f796e749e update to newlib 2.5.0 2017-01-05 13:42:09 +00:00
Dave Murphy
57c4253ed5 update to gcc 6.3.0 2017-01-05 13:41:23 +00:00
Dave Murphy
169dd7d013 update to newlib 2.5.0 2016-12-28 21:30:17 +00:00
Dave Murphy
79d292090a update to gdb 7.12 2016-12-28 21:29:08 +00:00
Dave Murphy
3512ecc00e use bzip for gdb archives 2016-12-28 21:28:42 +00:00
Dave Murphy
c4ed9722f2 update to gcc 6.3.0 2016-12-28 21:27:12 +00:00
Dave Murphy
0e07b7eb5b remove old patches 2016-12-22 16:35:47 +00:00
Dave Murphy
b34e58ca08 update newlib snapshot 2016-12-22 16:34:26 +00:00
Dave Murphy
4b7796c2d5 restore .init section 2016-12-18 02:29:01 +00:00
Dave Murphy
a0f7e4e2da still need .init section 2016-12-18 02:28:59 +00:00
Dave Murphy
7b9a6387f4 use system zlib 2016-12-10 19:17:21 +00:00
Dave Murphy
c34ecdd92f remove old patches 2016-12-10 14:02:32 +00:00
Dave Murphy
3cc3d56b05 reinstate big endian 2016-12-10 14:01:56 +00:00
Dave Murphy
1fe74a378b use crt0 as startup section 2016-11-21 12:24:08 +00:00
Dave Murphy
676638c26a mark startup code as allocatable & executable 2016-11-21 12:23:36 +00:00
Dave Murphy
ec195d5a7e allow both vram banks 2016-11-16 21:27:56 +00:00
Dave Murphy
17308cb52e fix ino_t & dev_t 2016-11-16 21:27:56 +00:00
Dave Murphy
75c9d393bf move OSX to 10.5+ & single arch 2016-11-16 21:27:56 +00:00
Dave Murphy
a827bc2dfa use binutils 2.27 2016-11-16 21:26:46 +00:00
Dave Murphy
2aa4c64cb6 use gcc 6.2.0 2016-11-16 21:26:46 +00:00
Dave Murphy
85cec53554 update newlib patch 2016-11-16 21:26:46 +00:00
Dave Murphy
26852f8830 update newlib 2016-11-16 21:26:46 +00:00
Dave Murphy
80c6a22d4a update binutils to 2.26.1 2016-11-16 21:26:46 +00:00
Dave Murphy
6c05ff5a85 update to gdb 7.11 2016-11-16 21:26:46 +00:00
Dave Murphy
66d4bfd627 update to gcc 6.1 2016-11-16 21:26:46 +00:00
Dave Murphy
e075a370c4 disable libmirko 2016-11-16 21:26:46 +00:00
Dave Murphy
2a7de310e1 fixup findDevice 2016-11-16 21:25:58 +00:00
Dave Murphy
c4f89e210b enable 64bit off_t 2016-11-16 21:25:58 +00:00
Dave Murphy
a0c0c6ae7b add parallel make 2016-11-16 21:25:58 +00:00
Dave Murphy
0f6e0d6db9 keep host libs out of cross build 2016-11-16 21:25:58 +00:00
Dave Murphy
8a98027fe0 build citro3d 2016-11-16 21:25:58 +00:00
Dave Murphy
d38202370e add citro3d 2016-11-16 21:25:58 +00:00
Dave Murphy
88e9abb8a0 update devkitARM version 2016-11-16 21:25:13 +00:00
Dave Murphy
46d03677c6 update newlib patch 2016-11-16 21:25:13 +00:00
Dave Murphy
2af70e5e76 update binutils, newlib & gdb 2016-11-16 21:25:13 +00:00
Dave Murphy
138aa4cb17 use xz for gdb 2016-11-16 21:25:13 +00:00
Dave Murphy
1f3b6c97aa update 3ds tool and library versions 2016-11-16 21:25:13 +00:00
Dave Murphy
05f343d12b disable git buildscripts 2016-11-16 21:08:36 +00:00
Dave Murphy
bc708a543c enable scripts for release tarball 2016-11-15 23:20:58 +00:00
Dave Murphy
9e5843b414 use libogc-1.8.15 2016-11-15 23:20:20 +00:00
Dave Murphy
811c6a45b4 remove unused patches 2016-11-15 22:12:52 +00:00
Dave Murphy
b1e0b0abd8 move OSX to 10.5+ and single arch 2016-11-15 22:12:52 +00:00
Dave Murphy
be6c50e32e fix 750cl opcodes 2016-11-15 22:12:52 +00:00
Dave Murphy
3ef75548cf use binutils 2.27 2016-11-15 22:12:52 +00:00
Dave Murphy
cb663299d1 use libogc 1.8.14 2016-11-15 22:12:52 +00:00
Dave Murphy
3ba03b29f2 use gcc 6.2.0 2016-11-15 22:11:45 +00:00
Steven Smith
64492fe29c Add Wii U support. 2016-11-15 22:11:45 +00:00
Dave Murphy
0026b3450c update gcc to 6.1.0 2016-11-15 22:11:45 +00:00
Dave Murphy
7f9fa7a161 remove spurious file 2016-11-15 22:11:45 +00:00
Dave Murphy
cd8a1b3c85 update binutils to 2.26 2016-11-15 22:11:45 +00:00
Dave Murphy
ca40deb9ee don't patch out zlib 2016-11-15 22:11:45 +00:00
Dave Murphy
3a2688063a use bz2 for OSX 2016-11-15 22:11:45 +00:00
Dave Murphy
4c47502632 upgrade gdb to 7.11 2016-11-15 22:11:44 +00:00
Dave Murphy
eb23f198ad size improvemnets for libstdc++ 2016-11-15 22:09:51 +00:00
Dave Murphy
a1221bad50 remove .orig file from patch 2016-11-15 22:09:51 +00:00
Dave Murphy
1b65df77a3 use gcc 5.3.0 2016-11-15 22:09:51 +00:00
Dave Murphy
e48ba38ce5 remove unused patches 2016-11-15 22:09:51 +00:00
Dave Murphy
1d6cd5b344 update to binutils 2.25.1 2016-11-15 22:09:51 +00:00
Dave Murphy
e2d1ec8882 update library & tool versions 2016-11-15 22:09:51 +00:00
Dave Murphy
25e4deb095 testing with gcc 5.2.0 2016-11-15 22:07:13 +00:00
Dave Murphy
ff9b2dd329 update gdb to 7.10 2016-11-15 22:07:13 +00:00
Dave Murphy
b6511b156c revert to newlib 2.0.0 2016-11-15 22:07:13 +00:00
Dave Murphy
ca6443a27c add binutils 2.25 patch 2016-11-15 22:07:13 +00:00
Dave Murphy
5b1d0458dc update patch for gcc 4.9.3 2016-11-15 22:07:13 +00:00
Dave Murphy
116ad3bfc4 restore _wrapup_reent 2016-11-15 22:07:13 +00:00
Dave Murphy
d8e737b988 remove old newlib patch 2016-11-15 22:07:13 +00:00
Dave Murphy
b033aa91b2 upgrade to newlib 2.2.0 2016-11-15 22:07:13 +00:00
Dave Murphy
3f149af10d update binutils patch 2016-11-15 22:07:13 +00:00
Dave Murphy
dc93157478 update devkitPPC version in script 2016-11-15 22:07:13 +00:00
Dave Murphy
a62a3f6379 remove silly stdint.h patching 2016-11-15 22:05:36 +00:00
Dave Murphy
6698343534 upgrade to gdb 4.8.2 2016-11-15 22:05:36 +00:00
Dave Murphy
c8d5125ac3 upgrade to gcc 4.9.2 2016-11-15 22:05:36 +00:00
Dave Murphy
e257f22430 update bintils to 2.25 2016-11-15 22:05:36 +00:00
Dave Murphy
3b8d9c702d add extra debian package names 2016-05-28 20:21:33 +01:00
Dave Murphy
f9dd6655ec Merge pull request #9 from yifanlu/master
Add support for changing start address in 3dsx linker script
2016-03-26 14:38:02 +00:00
Yifan Lu
3fcebd74b2 Add support for changing start address in 3dsx linker script
Use LDFLAGS --defsym="__start__=0x14000000" for example to change start address
2016-03-26 01:58:59 -05:00
Dave Murphy
ac39e253ff disable repository scripts 2015-12-13 00:17:07 +00:00
Dave Murphy
ca6674a81d update libnds and default arm7 versions. Enable script for release 2015-12-13 00:15:32 +00:00
Dave Murphy
cf2e5124ce strip unused sections at link time 2015-12-12 11:38:41 +00:00
Dave Murphy
c4a55871e4 size improvements for libstdc++ 2015-12-12 11:37:57 +00:00
Dave Murphy
67f27e6455 update 3dslink 2015-12-11 21:11:21 +00:00
Dave Murphy
ff6e2b58c6 update to gcc 5.3.0 2015-12-11 21:11:01 +00:00
Dave Murphy
50514b3c7f don't fail on writes to null device 2015-12-11 09:53:31 +00:00
Dave Murphy
5e86d85526 fix chdir when no device string set 2015-11-29 18:37:59 +00:00
Dave Murphy
f8998e03ce update binutils to 2.25.1 2015-11-29 18:37:05 +00:00
Dave Murphy
af4c3ff66a update binutils to 2.25.1 2015-11-29 18:36:39 +00:00
Dave Murphy
0ca5bf65c0 remove default crt0 2015-11-28 22:27:09 +00:00
Dave Murphy
564fa0e0af Merge branch 'devkitARM_r45' of github.com:devkitPro/buildscripts into devkitARM_r45 2015-11-28 22:25:04 +00:00
Dave Murphy
47ddd93e55 add support for TLS 2015-11-28 18:24:01 +00:00
Dave Murphy
fea87e834c allow override of CTRULIB variable 2015-11-28 18:03:29 +00:00
Dave Murphy
bb1c5bba94 garbage collect sections when linking 2015-11-23 20:11:37 +00:00
Dave Murphy
0e404ac683 use lto aware tools 2015-11-23 20:10:50 +00:00
Dave Murphy
dd0500e539 tidying libsysbase and implementing locks 2015-11-22 16:45:08 +00:00
Dave Murphy
46989bb607 grit update 2015-11-21 13:52:21 +00:00
Dave Murphy
827f20a398 update 3dstools 2015-11-14 00:25:17 +00:00
Dave Murphy
e4270dc3d2 use latest libctru 2015-11-03 20:57:07 +00:00
Dave Murphy
ac72c96c00 fix freeimage dll path 2015-11-01 02:01:08 +00:00
Dave Murphy
83fb7448d8 use latest 3dstools & latest picasso 2015-10-30 22:21:51 +00:00
Dave Murphy
6e94598966 update to gdb 7.10 2015-10-30 22:21:04 +00:00
Dave Murphy
14359b772f update to gcc 5.2.0 2015-10-25 15:28:45 +00:00
Dave Murphy
1f4243ead0 upgrade to gcc 5.1.0 2015-05-22 11:13:51 +01:00
Dave Murphy
207d78ae00 update 3dstools 2015-03-17 22:41:47 +00:00
Dave Murphy
9362ca7bac add picasso to provided tools 2015-03-17 16:49:09 +00:00
Dave Murphy
f6d47b4005 update libctru 2015-03-17 10:47:58 +00:00
Dave Murphy
c384a5097c prepping devkitARM r45 2015-03-16 18:12:42 +00:00
Dave Murphy
074ceec36c update gdb patch 2015-03-16 18:05:19 +00:00
Dave Murphy
e0c31cded7 update to gdb 7.9 2015-03-16 17:01:42 +00:00
Dave Murphy
fdc132d773 disable git scripts 2015-02-16 00:55:24 +00:00
Dave Murphy
cb1caec39b enable scripts for release 2015-02-16 00:53:58 +00:00
Dave Murphy
35fe7968da update to latest ds libraries 2015-02-16 00:53:00 +00:00
Dave Murphy
c1cca846a3 use latest libctru 2015-02-15 16:26:09 +00:00
Dave Murphy
5b64b79621 fix OSX building of gcc 2015-02-14 21:28:58 +00:00
Dave Murphy
598983a38a add 3dslink 2015-02-14 21:28:31 +00:00
Dave Murphy
e88c516694 temp removal of lock.h overrides 2015-02-13 23:34:41 +00:00
Dave Murphy
d3505fdf69 update ndstool 2015-02-13 23:34:05 +00:00
Dave Murphy
62b2adce92 implement dup/dup2 2015-01-27 23:41:06 +00:00
Dave Murphy
4fbb8b8b54 update dstools version 2015-01-22 21:24:33 +00:00
Dave Murphy
9fb5310f7d update dfu-util version 2015-01-21 22:26:20 +00:00
Dave Murphy
2a8f1980d8 changed install location 2015-01-21 18:32:38 +00:00
Dave Murphy
0b9a5d7f76 update to gdb 7.8.2 2015-01-21 17:24:24 +00:00
Dave Murphy
bfdab38a67 read direct to user buffer when request is greater than internal buffer size 2015-01-21 15:51:42 +00:00
Dave Murphy
802007e17f updated ndstool 2015-01-07 15:14:26 +00:00
Dave Murphy
7f5147f4ec update to binutils 2.25 2015-01-07 15:13:29 +00:00
Dave Murphy
2e2905ee72 update libgba for latest tools 2015-01-06 16:48:01 +00:00
Dave Murphy
08f90d3343 allow different portlibs per console 2015-01-05 14:06:06 +00:00
Dave Murphy
59cbc65a94 latest 3dstools version 2015-01-05 13:00:04 +00:00
Dave Murphy
3d49b7287a Merge branch 'master' into devkitARM_r44 2015-01-01 22:19:48 +00:00
Dave Murphy
5305d2e77e always set shell to bash on OSX 2015-01-01 22:09:08 +00:00
Dave Murphy
742742f275 set portlibs base path in base rules, add individual portlibs for each console 2015-01-01 22:08:39 +00:00
Dave Murphy
c3248e2ed5 remove previous newlib patch 2014-12-31 18:43:03 +00:00
Dave Murphy
9a1e7dfb06 newlib 2.2.0 for devkitARM 2014-12-31 17:59:33 +00:00
Dave Murphy
bb4be681cb reinstate gp32 tools 2014-12-31 17:23:46 +00:00
Dave Murphy
c6f7acb7eb mark config.sh.sample as executable 2014-12-31 17:22:45 +00:00
Dave Murphy
939f373da5 update for latest tools 2014-12-22 15:03:33 +00:00
Dave Murphy
84d9590a9c reinstate gp32 tools 2014-12-22 12:36:38 +00:00
Dave Murphy
b28d86537e mark config.sh.sample as executable 2014-12-22 12:36:10 +00:00
Dave Murphy
dab44c9fe2 Merge branch 'master' into devkitARM_r44 2014-12-21 15:44:10 +00:00
Dave Murphy
94f707c93e elf2dol, gcdspsuite & gxtexconv merged into gamecube-tools package 2014-12-21 15:43:28 +00:00
Dave Murphy
5522eb47bc new dstools version 2014-12-18 16:58:28 +00:00
Dave Murphy
ad68b25d09 expose handle manager calls and gethostid 2014-12-17 23:28:44 +00:00
Dave Murphy
ff7a467958 tidy up libsysbase
add rmdir
set errno appropriately
getcwd(NULL,0) now allocates buffer
2014-12-10 22:14:09 +00:00
Dave Murphy
a31587e78a remove unreferenced BUILD_DKPRO_DOWNLOAD var 2014-12-06 15:25:50 +00:00
Dave Murphy
f846fe610b add __DYNAMIC_REENT__, use constructor/destructor to init/close lock, add __getreent syscall callback 2014-12-06 04:48:41 +00:00
Dave Murphy
47e4fcbee5 enable-threads 2014-12-06 04:16:27 +00:00
Dave Murphy
7a6994a1c7 update 3dstools version 2014-12-03 11:44:54 +00:00
Dave Murphy
fdd2a20b33 add gettimeofday callback, add locks to handle manager 2014-12-03 11:33:46 +00:00
fincs
7546e1e65a Update for new 3dsxtool 2014-11-30 21:38:04 +01:00
Dave Murphy
c2be5b3865 keep compatibility with previous devkitARM 2014-11-30 06:46:03 +00:00
Dave Murphy
18b81c32e8 fix missing _rename_r 2014-11-28 23:13:00 +00:00
Dave Murphy
9c53de7304 correct multilib setup 2014-11-28 23:11:50 +00:00
Dave Murphy
be191f464a put 3ds crt0 only in armv6k/fpu multilib 2014-11-28 21:48:03 +00:00
Dave Murphy
466748e63c update devkitARM release number 2014-11-27 10:26:42 +00:00
Dave Murphy
213b8b293d update newlib with lock stub support 2014-11-27 10:26:11 +00:00
Dave Murphy
63fc9bb5e5 add armv6k hard float multilib 2014-11-27 10:21:57 +00:00
Dave Murphy
fe1d504432 update gdb to 7.8 2014-11-27 10:21:18 +00:00
Dave Murphy
970e965ba5 add instructions for getting GL/gl.h 2014-11-27 10:10:54 +00:00
Dave Murphy
192c28db55 check for already extracted host archives before extracting 2014-11-22 16:34:38 +00:00
Dave Murphy
c4ab14acb2 update 3dstools version 2014-11-22 16:33:38 +00:00
Dave Murphy
334b3ab083 use name of dir to report errors instead of archive name 2014-11-22 16:31:23 +00:00
Dave Murphy
958eb2bae6 disable repo script 2014-11-21 18:02:31 +00:00
Dave Murphy
30c83ed3d0 update libnds, libfat and default arm7 versions. Enable script for release 2014-11-21 17:59:15 +00:00
fincs
f7de61f3c9 3dsx.ld: add missing .fini section 2014-11-21 16:34:33 +01:00
Dave Murphy
e897a44640 build and install libctru for devkitARM 2014-11-21 09:47:21 +00:00
Dave Murphy
e0caf9ea02 enable CTRULIB 2014-11-21 00:39:04 +00:00
Dave Murphy
e454bd0dd7 build 3ds support stuff 2014-11-20 16:34:42 +00:00
Dave Murphy
ac53b3f62f remove old gcc patch 2014-11-20 16:33:37 +00:00
Dave Murphy
bb77177e7b add 3ds support files 2014-11-20 16:32:23 +00:00
Dave Murphy
00dfc2dbbb use gcc 4.9.2 2014-11-20 16:31:07 +00:00
Dave Murphy
98596aad6d add support for positional arguments 2014-08-20 16:51:30 +01:00
Dave Murphy
2f10349942 enable newlib c99 format io 2014-05-29 12:24:46 +01:00
Dave Murphy
ae01482942 upgrade gdb to 7.7.1 2014-05-24 00:00:32 +01:00
Dave Murphy
b8b237c88d adjust path sizes again, crashes on DS with bigger sizes 2014-05-18 17:01:01 +01:00
Dave Murphy
2ebf134e6f update patches for gcc 4.9.0 2014-04-28 21:47:26 +01:00
Dave Murphy
1689594d0a update for devkitARM release 43 2014-04-28 16:20:06 +01:00
Dave Murphy
ccae1fd3bc update readme 2014-04-28 16:14:33 +01:00
Dave Murphy
97f020d9dd CXXFLAGS needs OSX extras
Signed-off-by: Dave Murphy <wntrmute@users.sourceforge.net>
2014-04-02 22:12:51 +01:00
Dave Murphy
a9486a0343 update to binutils 2.24
Signed-off-by: Dave Murphy <wntrmute@users.sourceforge.net>
2014-04-02 22:12:51 +01:00
Dave Murphy
4abda470f2 update to gcc 4.8.2
Signed-off-by: Dave Murphy <wntrmute@users.sourceforge.net>
2014-04-02 22:12:50 +01:00
Dave Murphy
423bf8e261 update gdb for devkitPPC
Signed-off-by: Dave Murphy <wntrmute@users.sourceforge.net>
2014-04-02 22:12:50 +01:00
Dave Murphy
e012872028 changes for devkitPPC release 27
Signed-off-by: Dave Murphy <wntrmute@users.sourceforge.net>
2014-04-02 22:12:50 +01:00
Dave Murphy
695eb60d08 exclude OSX flags from target CXXFLAGS 2014-04-02 12:54:05 +01:00
Dave Murphy
98ed1540dd put OSX flags in CXXFLAGS too 2014-04-01 23:19:11 +01:00
Dave Murphy
2f624a1c28 fix newlib patch 2014-04-01 17:13:59 +01:00
Dave Murphy
f31d3ff732 update devkitARM newlib to 2.1.0 2014-04-01 15:03:28 +01:00
Dave Murphy
d6ea5c780e remove old devkitARM patches 2014-03-24 15:38:22 +00:00
Dave Murphy
2c11d43aef update patchsets for devkitARM 2014-02-16 21:58:35 +00:00
Dave Murphy
dcc84df004 fix archive name 2013-09-06 20:00:03 +01:00
Dave Murphy
496091cd3d update lib versions 2013-09-06 19:53:37 +01:00
Dave Murphy
365d7f8e70 add dstools 2013-09-06 19:37:12 +01:00
Dave Murphy
acde84974f ignore gedit backup files 2013-09-06 19:34:58 +01:00
Dave Murphy
b72392a9f1 put PKG_CONFIG_PATH in cross build shell scripts instead 2013-09-06 19:33:53 +01:00
Dave Murphy
8bb0b846dc new grit version 2013-09-06 17:46:52 +01:00
Dave Murphy
814731ce26 use proper url for devkitPro 2013-09-06 16:11:09 +01:00
Dave Murphy
2088ec214e fix libdl issue with MinGW 2013-09-04 10:32:59 +01:00
Dave Murphy
722d723f96 update gdb & stlink for devkitARM 2013-09-04 10:06:31 +01:00
Dave Murphy
0c0cf5f076 move to gcc 4.8.1 2013-07-02 01:14:05 +01:00
Dave Murphy
fc5620fcfa minor changes to allow sources on network share 2013-07-01 20:51:33 +01:00
Dave Murphy
ea2bddb2ed add patch for gdb 7.6 2013-07-01 20:50:49 +01:00
Dave Murphy
27249e6df4 patch binutils for devkitPPC 2013-03-23 05:31:50 +00:00
Dave Murphy
9eca385eea update grit & filesystem versions 2013-03-23 05:30:33 +00:00
Dave Murphy
ad8c286e3f delete obsolete patch 2013-02-02 10:09:01 +00:00
Dave Murphy
3b602dd277 simplify cross building 2013-01-30 13:56:54 +00:00
Dave Murphy
2719a32a3c add changes for cross compiling 64bit windows toolchains 2013-01-30 10:55:39 +00:00
Dave Murphy
bddbc05347 separate base tools, Snow Leopard fix & MSVC error filter from build rules 2013-01-28 21:17:28 +00:00
Jaeden Amero
31a3aebd97 .gitignore: Ignore .bz2 and .gz archives 2013-01-19 10:57:47 -06:00
Jaeden Amero
398f970194 build-devkit.sh: Allow autocompletion
Allow autocompletion of the devkitPro install path.
2013-01-19 10:57:47 -06:00
Dave Murphy
8adc6c5a3a disable scripts for push 2013-01-19 16:18:23 +00:00
Dave Murphy
9c99a85093 remove .orig from patches 2013-01-19 00:09:34 +00:00
Dave Murphy
3a50a29076 move to gcc 4.7.2 & gdb 7.5.1 2013-01-05 13:12:29 +00:00
Dave Murphy
71c4499626 update devkitPPC to gcc 4.7.1 and gdb 7.4.1 2013-01-05 13:12:29 +00:00
Dave Murphy
93040254e6 latest libfat & dswifi versions 2013-01-04 23:52:00 +00:00
Dave Murphy
6cd779bb23 disable scripts for push 2013-01-04 23:24:52 +00:00
Dave Murphy
0b27b8fd31 add newlib 2.0.0 for devkitARM r42 2013-01-03 20:59:14 +00:00
Dave Murphy
7467c56259 update patches and versions for devkitARM r42 2012-12-16 17:59:12 +00:00
mtheall
c372699fc7 fix some buildscript problems 2012-09-25 20:50:04 -05:00
Dave Murphy
4572684bf5 disable git buildscripts 2012-06-25 13:48:43 +01:00
Dave Murphy
89fa563280 final adjustments for devkitARM release 41 2012-06-25 13:43:44 +01:00
Dave Murphy
c9b0f0a993 changes for devkitARM release 41 2012-06-18 12:44:30 +01:00
Dave Murphy
def31f974b latest stlink version 2012-05-16 23:07:19 +01:00
Dave Murphy
1baf7cd020 new stlink version 2012-05-14 23:56:15 +01:00
Dave Murphy
edbd8b0249 strip dll debug info 2012-05-14 23:55:47 +01:00
Dave Murphy
471ea1e10e add i1686-w64-mingw32 pkgconfig path when cross building, copy libusb dll for windows devkitARM 2012-05-10 12:59:39 +01:00
Dave Murphy
c970193166 update devkitARM, libogc & libnds versions 2012-05-09 15:03:18 +01:00
Dave Murphy
4a41ed304e reinstate --with-gnu-as etc, bump package version 2012-05-09 15:02:23 +01:00
Dave Murphy
bf3a5359b4 add dswifi to build 2012-05-09 15:01:19 +01:00
Dave Murphy
93f3a57a16 new stlink version, builds & works on windows 2012-04-29 19:47:02 +01:00
Dave Murphy
fb92e0d43e add extra tools, next devkitARM is r39 2012-04-28 10:52:25 +01:00
Dave Murphy
98adbbcc9b fix gcc build dir 2012-04-27 13:27:34 +01:00
Dave Murphy
d98429e0fa volatiles fix 2012-04-26 15:07:14 +01:00
81 changed files with 30017 additions and 37664 deletions

6
.gitignore vendored
View File

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

View File

@@ -1,59 +1,91 @@
devkitPro build scripts devkitPro build scripts
-------------------------- --------------------------
This readme will guide you through building devkitARM, devkitPPC or devkitPSP from source using a set of scripts. This readme will guide you through building devkitARM, devkitPPC or devkitA64
from source using a set of scripts.
To use these scripts under minsys and MinGW you will need some additional packages over and above the base install. 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 minsys developer toolkit The windows versions of the toolchains are now cross compiled on linux using
mingw-w64
http://prdownloads.sourceforge.net/mingw/msysDTK-1.0.1.exe?download Preparing to build
--------------------------
Bison, Flex and Wget from the gnuwin32 project
http://sourceforge.net/projects/gnuwin32/
For devkitPSP a command line subversion client is required to get the PSP SDK http://www.tigris.org
required packages for building on debian/*buntu required packages for building on debian/*buntu
sudo apt-get install build-essential autoconf automake bison flex libncurses5-dev libreadline-dev texinfo sudo apt-get install build-essential autoconf automake bison flex libncurses5-dev
libreadline-dev texinfo pkg-config
for building gcc libgmp, libmpfr and libmpc are required For building gcc libgmp, libmpfr and libmpc are required - these are built as
static libraries to make packaging simpler. If you're building the tools for
personal use then the versions packaged by your chosen distro should suffice.
http://gmplib.org/ http://gmplib.org/
http://www.mpfr.org/ http://www.mpfr.org/
http://www.multiprecision.org/ http://www.multiprecision.org/
Some of the tools for devkitARM and devkitPPC also require FreeImage and zlib sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib,
expat, and libusb. Again these are built as static libraries for ease of
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://expat.sourceforge.net/
Downloading the source packages sudo apt-get install libfreeimage-dev zlib1g-dev libusb-dev libudev-dev libexpat1-dev
-------------------------------
When you run the build script it will ask you to choose from one of two options, one for if you have already downloaded the source packages and another for if you want it to download them for you (using wget or curl).
The top level shell script has now been unified and offers the option of devkitARM, devkitPPC or devkitPSP. Building gxtexconv for cube/wii needs GL/gl.h which can be obtained with
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
read variables from config.sh if it exists. Copy config.sh.sample to config.sh
and set the variables as appropriate for your build.
The script will download the source packages it needs. These will be downloaded
to the script directory by default but you can set BUILD_DKPRO_SRCDIR if you want
to put them somewhere else. When its finished you have the option to delete
all temporary files, sources and their source packages.
Building the devkits Building the devkits
-------------------- --------------------
Simply run the "build-devkit.sh" script in the same directory as this text file as shown below, then follow the prompts; Simply run the "build-devkit.sh" script in the same directory as this text file
as shown below, then follow the prompts;
./build-devkit.sh ./build-devkit.sh
Once the script finds the source packages they will be decompressed and the build process will begin. When its finished you have the option to delete all temporary files, sources and their source packages. Several examples tarballs are provided for the platforms supported by devkitARM &
devkitPPC, these include basic templates for starting your own projects.
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 and set the variables as appropriate for your build. See http://wiki.devkitpro.org/index.php/Getting_Started for links.
Several examples tarballs are provided for the platforms supported by devkitARM & devkitPPC, these include basic templates for starting your own projects. See http://wiki.devkitpro.org/index.php/Getting_Started for links.
Using devkitARM Using devkitARM
--------------- ---------------
to use the built in crt0 and linkscript use arm-eabi-gcc to link your project to use the built in crt0 and linkscript use arm-none-eabi-gcc to link your project
Several specs files are built in for the various platforms Several specs files are built in for the various platforms
@@ -65,25 +97,21 @@ Several specs files are built in for the various platforms
-specs=ds_cart for a DS arm7 binary which runs from GBA cart. -specs=ds_cart for a DS arm7 binary which runs from GBA cart.
-specs=gp32.specs for standard GP32 app. -specs=gp32.specs for standard GP32 app.
-specs=gp32_gpsdk.specs for official gamepark SDK GP32 app. -specs=gp32_gpsdk.specs for official gamepark SDK GP32 app.
-specs=3dsx.specs for a 3DS homebrew binary.
Using devkitPPC Using devkitPPC
--------------- ---------------
to use the built in crt0 and linkscript use powerpc-gekko-gcc to link your project, 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. to use the built in crt0 and linkscript use powerpc-eabi-gcc to link your project,
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.
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
--------------- ---------------
The best thing to do next is test the compiler, so grab an examples tarball from sourceforge & run make in the top level. The best thing to do next is test the compiler, so grab an examples tarball
from sourceforge & run make in the top level.
Credits Credits
------- -------
@@ -91,6 +119,7 @@ Credits
* Thanks to WinterMute for bringing us devkitPro, the website is http://www.devkitpro.org * Thanks to WinterMute for bringing us devkitPro, the website is http://www.devkitpro.org
* Build scripts written by WinterMute and tied together by GreenGianT * Build scripts written by WinterMute and tied together by GreenGianT
* Thanks to Mr Spiv, Honkey Kong, Raleigh and JoostP for OS X testing * Thanks to Mr Spiv, Honkey Kong, Raleigh and JoostP for OS X testing
* libctru by Smealum, YellowS8, fincs, mtheall & WinterMute with contributions from many others.
* libogc written and supplied by Shagkur. Additional code by WinterMute, Bushing, Marcan & Tybor * libogc written and supplied by Shagkur. Additional code by WinterMute, Bushing, Marcan & Tybor
* libgba by WinterMute * libgba by WinterMute
* libnds by Joat, Dovoto and WinterMute with contributions from many others. * libnds by Joat, Dovoto and WinterMute with contributions from many others.

View File

@@ -1,18 +1,17 @@
#!/bin/bash #!/bin/bash
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Build scripts for # devkitARM release 55
# devkitARM release 38 # devkitPPC release 38
# devkitPPC release 26 # devkitA64 release 17
# devkitPSP release 17
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ 1 -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 svn are quite often dependent on things which currently only exist on developer" echo "The scripts in the git repository may be dependent on things which currently only exist"
echo "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
@@ -20,53 +19,36 @@ 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 "Users should use devkitPro pacman to maintain toolchain installations where possible"
echo "https://sourceforge.net/tracker/?group_id=114505&atid=668553" echo "See https://devkitpro.org/wiki/devkitPro_pacman"
echo
echo "Patches and improvements are of course welcome, please submit a PR"
echo "https://github.com/devkitPro/buildscripts/pulls"
echo echo
LIBOGC_VER=1.8.10
LIBGBA_VER=20090222
LIBNDS_VER=1.5.5 DKARM_RULES_VER=1.2.1
DEFAULT_ARM7_VER=0.5.24 DKARM_CRTLS_VER=1.1.1
DSWIFI_VER=0.3.13
LIBMIRKO_VER=0.9.7 DKPPC_RULES_VER=1.1.0
MAXMOD_VER=1.0.7
FILESYSTEM_VER=0.9.9 DKA64_RULES_VER=1.0.1
LIBFAT_VER=1.0.11
PSPSDK_VER=20120404 OSXMIN=${OSXMIN:-10.9}
GBATOOLS_VER=1.0.0
GRIT_VER=0.8.10
NDSTOOL_VER=1.50.1
GENERAL_TOOLS_VER=1.0.0
DLDITOOL_VER=1.24.0
GXTEXCONV_VER=0.1.9
GCDSPSUITE_VER=1.4.0
ELF2DOL_VER=1.0.0
WIILOAD_VER=0.5.1
MMUTIL_VER=1.8.6
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
function extract_and_patch { function extract_and_patch {
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ ! -f extracted-$1 ]; then if [ ! -f extracted-$1-$2 ]; then
echo "extracting $1" echo "extracting $1-$2"
if [ $3 == "bz2" ]; then tar -xf "$SRCDIR/$1-$2.tar.$3" || { echo "Error extracting "$1; exit 1; }
extractflags="-xjf" touch extracted-$1-$2
archivetype=".tar.bz2"
elif [ $3 == "gz" ]; then
extractflags="-xzf"
archivetype=".tar.gz"
else
echo "invalid archive type"
exit 1
fi
tar $extractflags $SRCDIR/$1-$2$archivetype || { echo "Error extracting "$1; exit 1; }
touch extracted-$1
fi fi
if [[ ! -f patched-$1 && -f $patchdir/$1-$2.patch ]]; then if [[ ! -f patched-$1-$2 && -f $patchdir/$1-$2.patch ]]; then
echo "patching $1" echo "patching $1-$2"
patch -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; } patch -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; }
touch patched-$1 touch patched-$1-$2
fi fi
} }
@@ -109,7 +91,7 @@ else
echo "for mingw/msys you must use <drive>:/<install path> or you will have include path problems" echo "for mingw/msys you must use <drive>:/<install path> or you will have include path problems"
echo "this is the top level directory for devkitpro, i.e. e:/devkitPro" echo "this is the top level directory for devkitpro, i.e. e:/devkitPro"
read INSTALLDIR read -e INSTALLDIR
echo echo
fi fi
@@ -138,23 +120,27 @@ fi
echo use $MAKE as make echo use $MAKE as make
export MAKE export MAKE
#--------------------------------------------------------------------------------- CROSS_PARAMS="--build=`./config.guess`"
# Add installed devkit to the path, adjusting path on minsys
#---------------------------------------------------------------------------------
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH=$PATH:$TOOLPATH/$package/bin
if [ ! -z $CROSSBUILD ]; then if [ ! -z $CROSSBUILD ]; then
export PATH=/opt/devkitpro/$package/bin:$PATH
prefix=$INSTALLDIR/$CROSSBUILD/$package prefix=$INSTALLDIR/$CROSSBUILD/$package
CROSS_PARAMS="--build=`./config.guess` --host=$CROSSBUILD" CROSS_PARAMS="$CROSS_PARAMS --host=$CROSSBUILD"
CROSS_GCC_PARAMS="--with-gmp=$CROSSPATH --with-mpfr=$CROSSPATH --with-mpc=$CROSSPATH --with-isl=$CROSSPATH --with-zstd=$CROSSPATH"
else else
prefix=$INSTALLDIR/$package prefix=$INSTALLDIR/$package
fi fi
#---------------------------------------------------------------------------------
# Add installed devkit to the path, adjusting path on minsys
#---------------------------------------------------------------------------------
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH=$TOOLPATH/$package/bin:$PATH
if [ "$BUILD_DKPRO_AUTOMATED" != "1" ] ; then if [ "$BUILD_DKPRO_AUTOMATED" != "1" ] ; then
echo echo
echo 'Ready to install '$package' in '$INSTALLDIR echo 'Ready to install '$package' in '$prefix
echo echo
echo 'press return to continue' echo 'press return to continue'
@@ -164,47 +150,55 @@ PLATFORM=`uname -s`
case $PLATFORM in case $PLATFORM in
Darwin ) Darwin )
cflags="-mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" cppflags="-mmacosx-version-min=${OSXMIN} -I/usr/local/include"
ldflags="-mmacosx-version-min=10.4 -arch i386 -arch ppc -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk" ldflags="-mmacosx-version-min=${OSXMIN} -L/usr/local/lib"
export CC=gcc-4.0 if [ "x${OSXSDKPATH}x" != "xx" ]; then
export CXX=g++-4.0 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.xz gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz"
if [ $VERSION -eq 1 ]; then
targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2
libmirko-src-${LIBMIRKO_VER}.tar.bz2 dswifi-src-${DSWIFI_VER}.tar.bz2 maxmod-src-${MAXMOD_VER}.tar.bz2
default-arm7-src-${DEFAULT_ARM7_VER}.tar.bz2 libfilesystem-src-${FILESYSTEM_VER}.tar.bz2
libfat-src-${LIBFAT_VER}.tar.bz2"
hostarchives="gbatools-$GBATOOLS_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"
fi
if [ $VERSION -eq 2 ]; then if [ $VERSION -eq 2 ]; then
targetarchives="libogc-src-${LIBOGC_VER}.tar.bz2 libfat-src-${LIBFAT_VER}.tar.bz2" archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives"
hostarchives="gxtexconv-$GXTEXCONV_VER.tar.bz2 gcdspsuite-$GCDSPSUITE_VER.tar.bz2
wiiload-$WIILOAD_VER.tar.bz2 elf2dol-$ELF2DOL_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2"
fi fi
if [ $VERSION -eq 3 ]; then if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ]; then
targetarchives="pspsdk-src-${PSPSDK_VER}.tar.bz2" if [ $VERSION -eq 1 ]; then
archives="devkitarm-rules-$DKARM_RULES_VER.tar.gz devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz $archives"
fi
if [ $VERSION -eq 2 ]; then
archives="devkitppc-rules-$DKPPC_RULES_VER.tar.gz $archives"
fi
if [ $VERSION -eq 3 ]; then
archives="devkita64-rules-$DKA64_RULES_VER.tar.gz $archives"
fi
fi fi
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
@@ -213,12 +207,12 @@ else
SRCDIR=`pwd` SRCDIR=`pwd`
fi fi
cd $SRCDIR cd "$SRCDIR"
for archive in $archives $targetarchives $hostarchives for archive in $archives
do do
echo $archive echo $archive
if [ ! -f $archive ]; then if [ ! -f $archive ]; then
$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
@@ -226,43 +220,24 @@ cd $BUILDSCRIPTDIR
mkdir -p $BUILDDIR mkdir -p $BUILDDIR
cd $BUILDDIR cd $BUILDDIR
extract_and_patch binutils $BINUTILS_VER bz2 extract_and_patch binutils $BINUTILS_VER xz
extract_and_patch gcc $GCC_VER bz2 extract_and_patch gcc $GCC_VER xz
rm -fr gcc-$GCC_VER/zlib
extract_and_patch newlib $NEWLIB_VER gz extract_and_patch newlib $NEWLIB_VER gz
extract_and_patch gdb $GDB_VER bz2
for archive in $targetarchives if [ $VERSION -eq 2 ]; then extract_and_patch binutils $MN_BINUTILS_VER bz2; fi
do
destdir=$(echo $archive | sed -e 's/\(.*\)-src-\(.*\)\.tar\.bz2/\1-\2/' )
echo $destdir
if [ ! -d $destdir ]; then
mkdir -p $destdir
bzip2 -cd $SRCDIR/$archive | tar -xf - -C $destdir || { echo "Error extracting "$archive; exit 1; }
fi
done
for archive in $hostarchives
do
tar -xjf $SRCDIR/$archive
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 [ "$CROSSBUILD" = "i686-w64-mingw32" ]; then
if [ $VERSION -ne 3 ]; then if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ] && [ -f $scriptdir/build-crtls.sh ]; then
cp -v /opt/i686-w64-mingw32/mingw/lib/FreeImage.dll $prefix/bin . $scriptdir/build-crtls.sh || { echo "Error building crtls & rules"; exit 1; }; cd $BUILDSCRIPTDIR;
fi
cp -v /opt/i686-w64-mingw32/mingw/lib/libstdc++-6.dll \
/opt/i686-w64-mingw32/mingw/lib/libgcc_s_sjlj-1.dll \
$prefix/bin
fi fi
cd $BUILDSCRIPTDIR
echo "stripping installed binaries" echo "stripping installed binaries"
. ./strip_bins.sh . ./strip_bins.sh
@@ -288,5 +263,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

29
config.sh.sample Normal file → Executable file
View File

@@ -9,19 +9,10 @@
# 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
#---------------------------------------------------------------------------------
# Download source packages
#---------------------------------------------------------------------------------
# 0: User selects manually
# 1: already downloaded
# 2: download packages
#---------------------------------------------------------------------------------
BUILD_DKPRO_DOWNLOAD=0
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Toolchain installation directory, comment if not specified # Toolchain installation directory, comment if not specified
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -31,12 +22,28 @@ BUILD_DKPRO_DOWNLOAD=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 crtls and rules files
#---------------------------------------------------------------------------------
#BUILD_DKPRO_SKIP_CRTLS=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

@@ -1,3 +0,0 @@
#!/bin/bash
export CROSSBUILD=i686-w64-mingw32
export PATH=/opt/i686-w64-mingw32/bin:$PATH

View File

@@ -0,0 +1,604 @@
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 5741c60264..fb5d9d069c 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1789,6 +1789,14 @@ struct output_elf_obj_tdata
asection *sec;
} build_id;
+ /* Data for .nx-module-name. */
+ struct
+ {
+ bfd_boolean (*after_write_object_contents) (bfd *);
+ const char *name;
+ asection *sec;
+ } nx_module_name;
+
/* Records the result of `get_program_header_size'. */
bfd_size_type program_header_size;
diff --git a/bfd/elf.c b/bfd/elf.c
index eb3e1828e9..bc6bb48804 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6514,6 +6514,14 @@ _bfd_elf_write_object_contents (bfd *abfd)
if (!bed->s->write_shdrs_and_ehdr (abfd))
return FALSE;
+ /* Write out the NX module name. */
+ if (t->o->nx_module_name.after_write_object_contents != NULL)
+ {
+ failed = !(*t->o->nx_module_name.after_write_object_contents) (abfd);
+ if (failed)
+ return FALSE;
+ }
+
/* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
if (t->o->build_id.after_write_object_contents != NULL)
return (*t->o->build_id.after_write_object_contents) (abfd);
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index faa27611d4..888af6bcd8 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -2341,6 +2341,12 @@ enum elf_aarch64_stub_type
aarch64_stub_erratum_843419_veneer,
};
+/* Is an undefined weak symbol resolved to 0 ? */
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
+ && bfd_link_executable (INFO) \
+ && !(INFO)->dynamic_undefined_weak)
+
struct elf_aarch64_stub_hash_entry
{
/* Base hash table entry structure. */
@@ -6436,11 +6442,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
Elf_Internal_Sym *sym;
asection *sec;
struct elf_link_hash_entry *h;
+ struct elf_aarch64_link_hash_entry *eh;
bfd_vma relocation;
bfd_reloc_status_type r;
arelent bfd_reloc;
char sym_type;
bfd_boolean unresolved_reloc = FALSE;
+ bfd_boolean resolved_to_zero = FALSE;
char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -6576,6 +6584,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
h, &unresolved_reloc,
save_addend, &addend, sym);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ resolved_to_zero = (eh != NULL
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
+
switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -6599,7 +6611,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6694,7 +6706,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6743,7 +6755,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7086,6 +7098,26 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
return FALSE;
}
+/* Remove undefined weak symbol from the dynamic symbol table if it
+ is resolved to 0. */
+
+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
@@ -8286,6 +8318,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
struct elf_aarch64_link_hash_table *htab;
struct elf_aarch64_link_hash_entry *eh;
struct elf_dyn_relocs *p;
+ 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)
@@ -8305,6 +8338,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */
if (h->type == STT_GNU_IFUNC
@@ -8314,7 +8351,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (h->dynindx == -1 && !h->forced_local
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8348,6 +8385,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
of relaxing into these from the large model PLT entries. */
s->size += 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;
@@ -8370,6 +8412,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
htab->root.srelplt->reloc_count++;
}
+ }
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8382,9 +8425,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
h->needs_plt = 0;
}
- eh = (struct elf_aarch64_link_hash_entry *) h;
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
-
if (h->got.refcount > 0)
{
bfd_boolean dyn;
@@ -8396,7 +8436,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (dyn && h->dynindx == -1 && !h->forced_local
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8410,7 +8450,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
@@ -8446,7 +8486,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
}
indx = h && h->dynindx != -1 ? h->dynindx : 0;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (!bfd_link_executable (info)
|| indx != 0
@@ -8512,7 +8552,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
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;
@@ -8532,7 +8572,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
symbols which turn out to need copy relocs or are not
dynamic. */
- if (!h->non_got_ref
+ if (!(h->non_got_ref
+ || (h->root.type == bfd_link_hash_undefweak
+ && !resolved_to_zero))
&& ((h->def_dynamic
&& !h->def_regular)
|| (htab->root.dynamic_sections_created
@@ -8543,6 +8585,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1
&& !h->forced_local
+ && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h))
return FALSE;
@@ -9163,8 +9206,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Sym *sym)
{
struct elf_aarch64_link_hash_table *htab;
+ struct elf_aarch64_link_hash_entry *eh;
+ 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;
@@ -9199,7 +9251,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
return FALSE;
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
- if (!h->def_regular)
+ if (!local_undefweak && !h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. */
@@ -9218,10 +9270,11 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
}
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;
@@ -9715,6 +9768,9 @@ const struct elf_size_info elfNN_aarch64_size_info =
#define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections
+#define elf_backend_fixup_symbol \
+ elfNN_aarch64_elf_fixup_symbol
+
#define elf_backend_finish_dynamic_sections \
elfNN_aarch64_finish_dynamic_sections
diff --git a/ld/Makefile.am b/ld/Makefile.am
index c2c798b4fe..a0073d27fe 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -1509,19 +1509,23 @@ ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \
$(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 --git a/ld/Makefile.in b/ld/Makefile.in
index fc687fc516..7d85865d92 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -3114,18 +3114,22 @@ ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \
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 \
diff --git a/ld/emulparams/aarch64elf.sh b/ld/emulparams/aarch64elf.sh
index 4a59342722..2aa1ec7712 100644
--- a/ld/emulparams/aarch64elf.sh
+++ b/ld/emulparams/aarch64elf.sh
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64
MACHINE=
NOP=0x1f2003d5
diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh
index 38bcd4bbb0..da0f411feb 100644
--- a/ld/emulparams/aarch64elf32.sh
+++ b/ld/emulparams/aarch64elf32.sh
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32"
MACHINE=
NOP=0x1f2003d5
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index 45e40b510c..916ef2086a 100644
--- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em
@@ -380,7 +380,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
'
-PARSE_AND_LIST_OPTIONS='
+PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}'
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
" enum sizes\n"));
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n"
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index f4f7ad6b4e..8428a54697 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -192,6 +192,9 @@ static char *depaudit; /* colon (typically) separated list of libs */
/* Style of .note.gnu.build-id section. */
static const char *emit_note_gnu_build_id;
+/* NX module name. */
+static const char *emit_nx_module_name;
+
/* On Linux, it's possible to have different versions of the same
shared library linked against different versions of libc. The
dynamic linker somehow tags which libc version to use in
@@ -1217,6 +1220,92 @@ setup_build_id (bfd *ibfd)
return FALSE;
}
+static bfd_boolean
+write_nx_module_name (bfd *abfd)
+{
+ struct elf_obj_tdata *t = elf_tdata (abfd);
+ const char *name;
+ asection *asec;
+ Elf_Internal_Shdr *i_shdr;
+ unsigned char *contents;
+ bfd_size_type size;
+ file_ptr position;
+
+ name = t->o->nx_module_name.name;
+ asec = t->o->nx_module_name.sec;
+ if (bfd_is_abs_section (asec->output_section))
+ {
+ einfo (_("%P: warning: .nx-module-name section discarded,"
+ " --build-id ignored\n"));
+ return TRUE;
+ }
+ i_shdr = &elf_section_data (asec->output_section)->this_hdr;
+
+ if (i_shdr->contents == NULL)
+ {
+ if (asec->contents == NULL)
+ asec->contents = (unsigned char *) xmalloc (asec->size);
+ contents = asec->contents;
+ }
+ else
+ contents = i_shdr->contents + asec->output_offset;
+
+ size = asec->size;
+ bfd_h_put_32 (abfd, 0, &contents[0]);
+ bfd_h_put_32 (abfd, size - 9, &contents[4]);
+ memcpy (&contents[8], name, size - 9);
+ contents[size - 1] = 0; /* ensure null termination for AMS */
+
+ position = i_shdr->sh_offset + asec->output_offset;
+
+ return (bfd_seek (abfd, position, SEEK_SET) == 0
+ && bfd_bwrite (contents, size, abfd) == size);
+}
+
+/* Make .nx-module-name section, and set up elf_tdata->nx_module_name. */
+
+static bfd_boolean
+setup_nx_module_name (bfd *ibfd, bfd *obfd)
+{
+ asection *s;
+ bfd_size_type size;
+ flagword flags;
+
+ if (emit_nx_module_name[0] == '\0')
+ {
+ /* Extract the basename of the output bfd and use it as the module name. */
+ char *dot_pos;
+ free ((char *) emit_nx_module_name);
+ emit_nx_module_name = (char *) lbasename (bfd_get_filename (obfd));
+ emit_nx_module_name = xstrdup (emit_nx_module_name);
+ dot_pos = strrchr (emit_nx_module_name, '.');
+ if (dot_pos != NULL)
+ {
+ /* Remove extension. */
+ *dot_pos = 0;
+ }
+ }
+
+ size = 8 + strlen(emit_nx_module_name) + 1; /* extra null terminator for AMS */
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED | SEC_READONLY | SEC_DATA);
+ s = bfd_make_section_with_flags (ibfd, ".nx-module-name", flags);
+ if (s != NULL && bfd_set_section_alignment (ibfd, s, 4))
+ {
+ struct elf_obj_tdata *t = elf_tdata (link_info.output_bfd);
+ t->o->nx_module_name.after_write_object_contents = &write_nx_module_name;
+ t->o->nx_module_name.name = emit_nx_module_name;
+ t->o->nx_module_name.sec = s;
+ elf_section_type (s) = SHT_PROGBITS;
+ s->size = size;
+ return TRUE;
+ }
+
+ einfo (_("%P: warning: cannot create .nx-module-name section,"
+ " --nx-module-name ignored\n"));
+ return FALSE;
+}
+
/* This is called after all the input files have been opened. */
static void
@@ -1267,6 +1356,24 @@ gld${EMULATION_NAME}_after_open (void)
}
}
+ if (emit_nx_module_name != NULL)
+ {
+ /* Find an ELF input. */
+ for (abfd = link_info.input_bfds;
+ abfd != (bfd *) NULL; abfd = abfd->link.next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && bfd_count_sections (abfd) != 0
+ && !((lang_input_statement_type *) abfd->usrdata)->flags.just_syms)
+ break;
+
+ /* If there are no ELF input files do not try to create a .nx-module-name section. */
+ if (abfd == NULL || !setup_nx_module_name (abfd, link_info.output_bfd))
+ {
+ free ((char *) emit_nx_module_name);
+ emit_nx_module_name = NULL;
+ }
+ }
+
get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
if (bfd_link_relocatable (&link_info))
@@ -2720,6 +2827,7 @@ enum elf_options
OPTION_EXCLUDE_LIBS,
OPTION_HASH_STYLE,
OPTION_BUILD_ID,
+ OPTION_NX_MODULE_NAME,
OPTION_AUDIT,
OPTION_COMPRESS_DEBUG
};
@@ -2750,6 +2858,7 @@ EOF
fi
fragment <<EOF
{"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+ {"nx-module-name", optional_argument, NULL, OPTION_NX_MODULE_NAME},
{"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
@@ -2814,6 +2923,16 @@ gld${EMULATION_NAME}_handle_option (int optc)
einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"),
optarg);
break;
+ case OPTION_NX_MODULE_NAME:
+ if (emit_nx_module_name != NULL)
+ {
+ free ((char *) emit_nx_module_name);
+ emit_nx_module_name = NULL;
+ }
+ if (optarg == NULL)
+ optarg = "";
+ emit_nx_module_name = xstrdup (optarg);
+ break;
EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
diff --git a/ld/ldgram.y b/ld/ldgram.y
index c3eadeb392..59ab143526 100644
--- a/ld/ldgram.y
+++ b/ld/ldgram.y
@@ -819,6 +819,7 @@ origin_spec:
ORIGIN '=' mustbe_exp
{
region->origin_exp = $3;
+ region->current = region->origin;
}
;
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 33f6bda292..7161f4210a 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -7381,9 +7381,6 @@ lang_process (void)
current_target = default_target;
lang_statement_iteration++;
open_input_bfds (statement_list.head, OPEN_BFD_NORMAL);
- /* open_input_bfds also handles assignments, so we can give values
- to symbolic origin/length now. */
- lang_do_memory_regions ();
#ifdef ENABLE_PLUGINS
if (link_info.lto_plugin_active)
@@ -7526,6 +7523,8 @@ lang_process (void)
/* PR 13683: We must rerun the assignments prior to running garbage
collection in order to make sure that all symbol aliases are resolved. */
lang_do_assignments (lang_mark_phase_enum);
+
+ lang_do_memory_regions();
expld.phase = lang_first_phase_enum;
/* Size up the common data. */
@@ -7610,11 +7609,8 @@ lang_process (void)
/* Fix any __start, __stop, .startof. or .sizeof. symbols. */
lang_finalize_start_stop ();
- /* Do all the assignments again, to report errors. Assignment
- statements are processed multiple times, updating symbols; In
- open_input_bfds, lang_do_assignments, and lang_size_sections.
- Since lang_relax_sections calls lang_do_assignments, symbols are
- also updated in ldemul_after_allocation. */
+ /* Do all the assignments, now that we know the final resting places
+ of all the symbols. */
lang_do_assignments (lang_final_phase_enum);
ldemul_finish ();

View File

@@ -0,0 +1,456 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 357b0bed067..6b1e254785a 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1090,7 +1090,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
tmake_file="${tmake_file} aarch64/t-aarch64"
case $target in
aarch64-*-elf*)
+ default_use_cxa_atexit=yes
use_gcc_stdint=wrap
+ tm_file="${tm_file} devkitpro.h"
+ tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
+ extra_options="${extra_options} devkitpro.opt"
+ case ${enable_threads} in
+ "" | yes | posix) thread_file='posix' ;;
+ esac
;;
aarch64-*-fuchsia*)
tm_file="${tm_file} fuchsia.h"
diff --git a/gcc/config.host b/gcc/config.host
index 0a02c33cc80..38f7adc655e 100644
--- a/gcc/config.host
+++ b/gcc/config.host
@@ -251,6 +251,10 @@ case ${host} in
host_extra_gcc_objs="${host_extra_gcc_objs} driver-mingw32.o"
host_lto_plugin_soname=liblto_plugin.dll
;;
+ aarch64-*-darwin*)
+ out_host_hook_obj="${out_host_hook_obj} host-aarch64-darwin.o"
+ host_xmake_file="${host_xmake_file} aarch64/x-darwin"
+ ;;
i[34567]86-*-darwin* | x86_64-*-darwin*)
out_host_hook_obj="${out_host_hook_obj} host-i386-darwin.o"
host_xmake_file="${host_xmake_file} i386/x-darwin"
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index e986149e400..9264d53f32c 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -22,6 +22,7 @@
#ifndef GCC_AARCH64_ELF_RAW_H
#define GCC_AARCH64_ELF_RAW_H
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
#define ENDFILE_SPEC \
" crtend%O%s crtn%O%s " \
diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h
index af3b7364a74..6df7a0dc8a1 100644
--- a/gcc/config/aarch64/aarch64-opts.h
+++ b/gcc/config/aarch64/aarch64-opts.h
@@ -48,6 +48,12 @@ enum aarch64_tls_type {
TLS_DESCRIPTORS
};
+/* Which thread pointer access sequence to use. */
+enum aarch64_tp_type {
+ TP_HARD,
+ TP_SOFT
+};
+
/* The code model defines the address generation strategy.
Most have a PIC and non-PIC variant. */
enum aarch64_code_model {
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 12625a4bee3..4353e2658a1 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -18053,8 +18053,24 @@ aarch64_load_tp (rtx target)
|| !register_operand (target, Pmode))
target = gen_reg_rtx (Pmode);
- /* Can return in any reg. */
- emit_insn (gen_aarch64_load_tp_hard (target));
+ if (TARGET_HARD_TP)
+ {
+ /* Can return in any reg. */
+ emit_insn (gen_aarch64_load_tp_hard (target));
+ }
+ else
+ {
+ /* Always returned in r0. Immediately copy the result into a pseudo,
+ otherwise other uses of r0 (e.g. setting up function arguments) may
+ clobber the value. */
+
+ rtx tmp;
+
+ emit_insn (gen_aarch64_load_tp_soft ());
+
+ tmp = gen_rtx_REG (DImode, R0_REGNUM);
+ emit_move_insn (target, tmp);
+ }
return target;
}
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index bfffbcd6abf..814de8c2918 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -1191,6 +1191,10 @@ typedef struct
/* Check TLS Descriptors mechanism is selected. */
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
+/* Check selected thread pointer access sequence to use. */
+#define TARGET_HARD_TP (target_thread_pointer == TP_HARD)
+#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT)
+
extern enum aarch64_code_model aarch64_cmodel;
/* When using the tiny addressing model conditional and unconditional branches
@@ -1236,7 +1240,7 @@ extern const char *aarch64_rewrite_mcpu (int argc, const char **argv);
#define MCPU_TO_MARCH_SPEC_FUNCTIONS \
{ "rewrite_mcpu", aarch64_rewrite_mcpu },
-#if defined(__aarch64__)
+#if 0 // defined(__aarch64__)
extern const char *host_detect_local_cpu (int argc, const char **argv);
#define HAVE_LOCAL_CPU_DETECT
# define EXTRA_SPEC_FUNCTIONS \
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index abfd8452674..8b9f4423adb 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -6771,11 +6771,22 @@
(define_insn "aarch64_load_tp_hard"
[(set (match_operand:DI 0 "register_operand" "=r")
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
- ""
- "mrs\\t%0, tpidr_el0"
+ "TARGET_HARD_TP"
+ "mrs\\t%0, tpidr_el0\\t// aarch64_load_tp_hard"
[(set_attr "type" "mrs")]
)
+(define_insn "aarch64_load_tp_soft"
+ [(set (reg:DI 0) (unspec:DI [(const_int 0)] UNSPEC_TLS))
+ (clobber (reg:DI IP0_REGNUM))
+ (clobber (reg:DI IP1_REGNUM))
+ (clobber (reg:DI LR_REGNUM))
+ (clobber (reg:CC CC_REGNUM))]
+ "TARGET_SOFT_TP"
+ "bl\\t__aarch64_read_tp\\t// aarch64_load_tp_soft"
+ [(set_attr "type" "branch")]
+)
+
;; The TLS ABI specifically requires that the compiler does not schedule
;; instructions in the TLS stubs, in order to enable linker relaxation.
;; Therefore we treat the stubs as an atomic sequence.
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 32191cf1acf..49b03937bdd 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -122,6 +122,21 @@ Enum(aarch64_tls_size) String(32) Value(32)
EnumValue
Enum(aarch64_tls_size) String(48) Value(48)
+mtp=
+Target RejectNegative Joined Enum(aarch64_tp_type) Var(target_thread_pointer) Init(TP_HARD)
+Specify how to access the thread pointer.
+
+Enum
+Name(aarch64_tp_type) Type(enum aarch64_tp_type)
+Valid arguments to -mtp=:
+
+EnumValue
+Enum(aarch64_tp_type) String(hard) Value(TP_HARD)
+
+EnumValue
+Enum(aarch64_tp_type) String(soft) Value(TP_SOFT)
+
+
march=
Target RejectNegative Negative(march=) ToLower Joined Var(aarch64_arch_string)
Use features of architecture ARCH.
@@ -260,7 +275,7 @@ TargetVariable
long aarch64_stack_protector_guard_offset = 0
moutline-atomics
-Target Var(aarch64_flag_outline_atomics) Init(2) Save
+Target Var(aarch64_flag_outline_atomics) Save
Generate local calls to out-of-line atomic operations.
-param=aarch64-sve-compare-costs=
diff --git a/gcc/config/aarch64/host-aarch64-darwin.c b/gcc/config/aarch64/host-aarch64-darwin.c
new file mode 100644
index 00000000000..92c38b0b9db
--- /dev/null
+++ b/gcc/config/aarch64/host-aarch64-darwin.c
@@ -0,0 +1,32 @@
+/* i386-darwin host-specific hook definitions.
+ Copyright (C) 2003-2021 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#define IN_TARGET_CODE 1
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "hosthooks.h"
+#include "hosthooks-def.h"
+#include "config/host-darwin.h"
+
+/* Darwin doesn't do anything special for aarch64 hosts; this file exists just
+ to include config/host-darwin.h. */
+
+const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER;
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
index 7e1606c47ac..3b650075724 100644
--- a/gcc/config/aarch64/t-aarch64
+++ b/gcc/config/aarch64/t-aarch64
@@ -165,8 +165,10 @@ aarch64-cc-fusion.o: $(srcdir)/config/aarch64/aarch64-cc-fusion.cc \
$(srcdir)/config/aarch64/aarch64-cc-fusion.cc
comma=,
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
-MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG))
+MULTILIB_OPTIONS = mcmodel=large fPIC
+MULTILIB_DIRNAMES = large pic
+MULTILIB_REQUIRED = mcmodel=large fPIC
+MULTILIB_MATCHES = fPIC=fpic fPIC=fpie fPIC=fPIE
insn-conditions.md: s-check-sve-md
s-check-sve-md: $(srcdir)/config/aarch64/check-sve-md.awk \
diff --git a/gcc/config/aarch64/x-darwin b/gcc/config/aarch64/x-darwin
new file mode 100644
index 00000000000..6d788d5e89c
--- /dev/null
+++ b/gcc/config/aarch64/x-darwin
@@ -0,0 +1,3 @@
+host-aarch64-darwin.o : $(srcdir)/config/aarch64/host-aarch64-darwin.c
+ $(COMPILE) $<
+ $(POSTCOMPILE)
diff --git a/gcc/config/devkitpro.h b/gcc/config/devkitpro.h
new file mode 100644
index 00000000000..11ba0f5ab1c
--- /dev/null
+++ b/gcc/config/devkitpro.h
@@ -0,0 +1,31 @@
+/* Definitions for devkitPro toolchains.
+ Copyright (C) 2016-2018 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do { \
+ builtin_define ("__DEVKITA64__"); \
+ } while (0)
+
+
diff --git a/gcc/config/devkitpro.opt b/gcc/config/devkitpro.opt
new file mode 100644
index 00000000000..9acbbf9d27c
--- /dev/null
+++ b/gcc/config/devkitpro.opt
@@ -0,0 +1,29 @@
+; Options for devkitPro toolchains.
+
+; Copyright (C) 2011-2018 Free Software Foundation, Inc.
+;
+; This file is part of GCC.
+;
+; GCC is free software; you can redistribute it and/or modify it under
+; the terms of the GNU General Public License as published by the Free
+; Software Foundation; either version 3, or (at your option) any later
+; version.
+;
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
+; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+; for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with GCC; see the file COPYING3. If not see
+; <http://www.gnu.org/licenses/>.
+
+; See the GCC internals manual (options.texi) for a description of
+; this file's format.
+
+; Please try to keep this file in ASCII collating order.
+
+pthread
+Driver
+
+; This comment is to ensure we retain the blank line above.
diff --git a/gcc/config/i386/host-mingw32.c b/gcc/config/i386/host-mingw32.c
index 360a280b23a..2c03947999a 100644
--- a/gcc/config/i386/host-mingw32.c
+++ b/gcc/config/i386/host-mingw32.c
@@ -45,7 +45,11 @@ static size_t mingw32_gt_pch_alloc_granularity (void);
static inline void w32_error(const char*, const char*, int, const char*);
/* FIXME: Is this big enough? */
+#if __MINGW64__
+static const size_t pch_VA_max_size = UINT64_C(64 * 1024 * 1024 * 1024);
+#else
static const size_t pch_VA_max_size = 128 * 1024 * 1024;
+#endif
/* Granularity for reserving address space. */
static size_t va_granularity = 0x10000;
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 7837553958b..69d7a798e2e 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -853,6 +853,11 @@ proper position among the other output files. */
#endif
#endif
+#ifndef LIBGLOSS_SPEC
+# define LIBGLOSS_SPEC "-lsysbase"
+#endif
+
+
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1197,6 +1202,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
+static const char *libgloss_spec = LIBGLOSS_SPEC;
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1702,6 +1708,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 675930db043..bdfd6f6b0bb 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -325,7 +325,7 @@ register_tm_clones (void)
#ifdef OBJECT_FORMAT_ELF
-#if DEFAULT_USE_CXA_ATEXIT
+#if 1 /* DEFAULT_USE_CXA_ATEXIT */
/* Declare the __dso_handle variable. It should have a unique value
in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance
diff --git a/libgcc/gthr.h b/libgcc/gthr.h
index cca3f294b7b..deffea4107b 100644
--- a/libgcc/gthr.h
+++ b/libgcc/gthr.h
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* The pe-coff weak support isn't fully compatible to ELF's weak.
For static libraries it might would work, but as we need to deal
with shared versions too, we disable it for mingw-targets. */
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(__DEVKITA64__)
#undef GTHREAD_USE_WEAK
#define GTHREAD_USE_WEAK 0
#endif
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 40a41ef2a1c..4d06c6f9953 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -1347,6 +1347,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
+ -e 's/_GLIBCXX___DEVKITA64_GLIBCXX___/__DEVKITA64__/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index fcd2b5b2d40..c034367994a 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -1830,6 +1830,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
+ -e 's/_GLIBCXX___DEVKITA64_GLIBCXX___/__DEVKITA64__/g' \
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@
diff --git a/libstdc++-v3/include/c_compatibility/fenv.h b/libstdc++-v3/include/c_compatibility/fenv.h
index 0413e3b7c25..ff5f8bbe1a1 100644
--- a/libstdc++-v3/include/c_compatibility/fenv.h
+++ b/libstdc++-v3/include/c_compatibility/fenv.h
@@ -26,6 +26,10 @@
* This is a Standard C++ Library header.
*/
+#if !defined __cplusplus || defined _GLIBCXX_INCLUDE_NEXT_C_HEADERS
+# include_next <fenv.h>
+#else
+
#ifndef _GLIBCXX_FENV_H
#define _GLIBCXX_FENV_H 1
@@ -79,3 +83,5 @@ namespace std
#endif // C++11
#endif // _GLIBCXX_FENV_H
+
+#endif // __cplusplus
diff --git a/libstdc++-v3/include/c_global/cfenv b/libstdc++-v3/include/c_global/cfenv
index 0b0ec35a837..d24cb1a3c81 100644
--- a/libstdc++-v3/include/c_global/cfenv
+++ b/libstdc++-v3/include/c_global/cfenv
@@ -37,9 +37,11 @@
#include <bits/c++config.h>
-#if _GLIBCXX_HAVE_FENV_H
-# include <fenv.h>
-#endif
+// Need to ensure this finds the C library's <fenv.h> not a libstdc++
+// wrapper that might already be installed later in the include search path.
+#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
+#include_next <fenv.h>
+#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
#ifdef _GLIBCXX_USE_C99_FENV_TR1

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/' -e 's/[^A-Za-z0-9_]/_/g')`"_end[];" > `(echo $(<F) | tr . _)`.h
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' -e 's/[^A-Za-z0-9_]/_/g')`"[];" >> `(echo $(<F) | tr . _)`.h
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' -e 's/[^A-Za-z0-9_]/_/g')`_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

View File

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

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

@@ -0,0 +1,153 @@
#!/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=yes \
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--prefix=$prefix \
--enable-lto $plugin_ld\
--with-system-zlib \
--disable-tm-clone-registry \
--disable-__cxa_atexit \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 17" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
$EXTRA_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

View File

@@ -1,5 +0,0 @@
include $(DEVKITARM)/base_rules
all:
$(CC) -x assembler-with-cpp -marm -c $(CRT)_crt0.s -o$(CRT)_crt0.o
$(CC) -x assembler-with-cpp -mthumb -c $(CRT)_crt0.s -o thumb/$(CRT)_crt0.o

View File

@@ -1,190 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY {
/* This base address is chosen to be a reserved instruction in THUMB mode,
and SWILT in ARM mode, with an impossible SWI value. This should allow
the patcher / linker to find all shifted addresses within each section.
Changed sections are: glue_7, got
*/
ddmem : ORIGIN = 0xBF800000, LENGTH = 32K
}
SECTIONS
{
.init :
{
__text_start = . ;
KEEP (*(.init))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.text : /* ALIGN (4): */
{
*(.text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
__glue_start = ABSOLUTE(.);
*(.glue_7)
*(.glue_7t)
__glue_end = ABSOLUTE(.);
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.fini :
{
KEEP (*(.fini))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem =0xff
__text_end = . ;
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ddmem
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ddmem
__exidx_end = .;
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >ddmem = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >ddmem = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >ddmem = 0xff
PROVIDE (__fini_array_end = .);
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.jcr : { KEEP (*(.jcr)) } >ddmem = 0
__got_start = . ;
.got :
{
*(.got.plt)
*(.got)
*(.rel.got)
} >ddmem = 0
__got_end = . ;
.data ALIGN(4) : {
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >ddmem = 0xff
__data_end = . ;
.bss ALIGN(4) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem
__bss_end = . ;
__bss_end__ = . ;
_end = . ;
__end__ = . ;
PROVIDE (end = _end);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@@ -1,176 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
}
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
__sp_irq = __iwram_top - 0x100;
__sp_svc = __sp_irq - 0x100;
__sp_usr = __sp_svc - 0x100;
__irq_flags = 0x04000000 - 8;
__irq_flagsaux = 0x04000000 - 0x40;
__irq_vector = 0x04000000 - 4;
SECTIONS
{
.init :
{
__text_start = . ;
KEEP (*(.init))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.plt : { *(.plt) } >iwram = 0xff
.text : /* ALIGN (4): */
{
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.fini :
{
KEEP (*(.fini))
} >iwram =0xff
__text_end = . ;
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >iwram
__exidx_end = .;
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >iwram = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >iwram = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >iwram = 0xff
PROVIDE (__fini_array_end = .);
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.jcr : { KEEP (*(.jcr)) } >iwram = 0
.got : { *(.got.plt) *(.got) } >iwram = 0
.data ALIGN(4) : {
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >iwram = 0xff
.bss ALIGN(4) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} >iwram
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_arm7.ld%s
*startfile:
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,97 +0,0 @@
@---------------------------------------------------------------------------------
.section ".init"
.global _start
@---------------------------------------------------------------------------------
.align 4
.arm
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
mov r0, #0x04000000 @ IME = 0;
mov r1, #0
str r1, [r0, #0x208]
mov r0, #0x12 @ Switch to IRQ Mode
msr cpsr, r0
ldr sp, =__sp_irq @ Set IRQ stack
mov r0, #0x13 @ Switch to SVC Mode
msr cpsr, r0
ldr sp, =__sp_svc @ Set SVC stack
mov r0, #0x1F @ Switch to System Mode
msr cpsr, r0
ldr sp, =__sp_usr @ Set user stack
ldr r0, =__bss_start__ @ Clear BSS section to 0x00
ldr r1, =__bss_end__
sub r1, r1, r0
bl ClearMem
ldr r3, =__libc_init_array @ global constructors
bl _blx_r3_stub
mov r0, #0 @ int argc
mov r1, #0 @ char *argv[]
ldr r3, =main
ldr lr,=__libnds_exit
bx r3
@---------------------------------------------------------------------------------
_blx_r3_stub:
@---------------------------------------------------------------------------------
bx r3
@---------------------------------------------------------------------------------
@ Clear memory to 0x00 if length != 0
@ r0 = Start Address
@ r1 = Length
@---------------------------------------------------------------------------------
ClearMem:
@---------------------------------------------------------------------------------
mov r2, #3 @ Round down to nearest word boundary
add r1, r1, r2 @ Shouldn't be needed
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
bxeq lr @ Quit if copy size is 0
mov r2, #0
ClrLoop:
stmia r0!, {r2}
subs r1, r1, #4
bne ClrLoop
bx lr
@---------------------------------------------------------------------------------
@ Copy memory if length != 0
@ r1 = Source Address
@ r2 = Dest Address
@ r4 = Dest Address + Length
@---------------------------------------------------------------------------------
CopyMemCheck:
@---------------------------------------------------------------------------------
sub r3, r4, r2 @ Is there any data to copy?
@---------------------------------------------------------------------------------
@ Copy memory
@ r1 = Source Address
@ r2 = Dest Address
@ r3 = Length
@---------------------------------------------------------------------------------
CopyMem:
@---------------------------------------------------------------------------------
mov r0, #3 @ These commands are used in cases where
add r3, r3, r0 @ the length is not a multiple of 4,
bics r3, r3, r0 @ even though it should be.
bxeq lr @ Length is zero, so exit
CIDLoop:
ldmia r1!, {r0}
stmia r2!, {r0}
subs r3, r3, #4
bne CIDLoop
bx lr
@---------------------------------------------------------------------------------
.align
.pool
.end
@---------------------------------------------------------------------------------

View File

@@ -1,180 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
vram : ORIGIN = 0x06000000, LENGTH = 128K
}
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
__sp_irq = __iwram_top - 0x100;
__sp_svc = __sp_irq - 0x100;
__sp_usr = __sp_svc - 0x100;
__irq_flags = 0x04000000 - 8;
__irq_flagsaux = 0x04000000 - 0x40;
__irq_vector = 0x04000000 - 4;
SECTIONS
{
.init :
{
__text_start = . ;
KEEP (*(.init))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.plt : { *(.plt) } >vram = 0xff
.text : /* ALIGN (4): */
{
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.fini :
{
KEEP (*(.fini))
} >vram =0xff
__text_end = . ;
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >vram
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >vram
__exidx_end = .;
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >vram = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >vram = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >vram = 0xff
PROVIDE (__fini_array_end = .);
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.jcr : { KEEP (*(.jcr)) } >vram = 0
.got : { *(.got.plt) *(.got) } >vram = 0
.data ALIGN(4) : {
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >vram = 0xff
.bss ALIGN(4) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} >vram
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_arm7_vram.ld%s
*startfile:
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,242 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
__vectors_start = ORIGIN(vectors);
__itcm_start = ORIGIN(itcm);
__ewram_end = ORIGIN(ewram) + LENGTH(ewram);
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
__dtcm_start = ORIGIN(dtcm);
__dtcm_top = ORIGIN(dtcm) + LENGTH(dtcm);
__irq_flags = __dtcm_top - 0x08;
__irq_vector = __dtcm_top - 0x04;
__sp_svc = __dtcm_top - 0x100;
__sp_irq = __sp_svc - 0x100;
__sp_usr = __sp_irq - 0x100;
SECTIONS
{
.init :
{
__text_start = . ;
KEEP (*(.init))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.plt : { *(.plt) } >ewram = 0xff
.text : /* ALIGN (4): */
{
*(EXCLUDE_FILE (*.itcm*) .text)
*(.text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
*(.glue_7)
*(.glue_7t)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.fini :
{
KEEP (*(.fini))
} >ewram =0xff
__text_end = . ;
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram
__exidx_start = .;
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram
__exidx_end = .;
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >ewram = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array :
{
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
} >ewram = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array :
{
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
} >ewram = 0xff
PROVIDE (__fini_array_end = .);
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.jcr : { KEEP (*(.jcr)) } >ewram = 0
.got : { *(.got.plt) *(.got) *(.rel.got) } >ewram = 0
.ewram ALIGN(4) :
{
__ewram_start = ABSOLUTE(.) ;
*(.ewram)
*ewram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.data ALIGN(4) :
{
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >ewram = 0xff
__dtcm_lma = . ;
__bss_vma = . ;
.dtcm __dtcm_start : AT (__dtcm_lma)
{
*(.dtcm)
*(.dtcm.*)
. = ALIGN(4);
__dtcm_end = ABSOLUTE(.);
} >dtcm = 0xff
__itcm_lma = __dtcm_lma + SIZEOF(.dtcm);
.itcm __itcm_start : AT (__itcm_lma)
{
*(.itcm)
*itcm.*(.text)
. = ALIGN(4);
__itcm_end = ABSOLUTE(.);
} >itcm = 0xff
__vectors_lma = __itcm_lma + SIZEOF(.itcm);
.vectors __vectors_start : AT (__vectors_lma)
{
*(.vectors)
*vectors.*(.text)
. = ALIGN(4);
__vectors_end = ABSOLUTE(.);
} >vectors = 0xff
.sbss __dtcm_end (NOLOAD):
{
__sbss_start = ABSOLUTE(.);
__sbss_start__ = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__sbss_end = ABSOLUTE(.);
} >dtcm
.bss __bss_vma (NOLOAD):
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.) ;
__end__ = ABSOLUTE(.) ;
} AT>ewram
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@@ -1,8 +0,0 @@
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
ewram : ORIGIN = 0x02000000, LENGTH = 4M - 4k
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
vectors : ORIGIN = 0x01000000, LENGTH = 256
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_arm9.mem%s -T ds_arm9.ld%s
*startfile:
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,208 +0,0 @@
@---------------------------------------------------------------------------------
@ DS processor selection
@---------------------------------------------------------------------------------
.arch armv5te
.cpu arm946e-s
@---------------------------------------------------------------------------------
.equ _libnds_argv,0x02FFFE70
@---------------------------------------------------------------------------------
.section ".init"
.global _start
@---------------------------------------------------------------------------------
.align 4
.arm
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
mov r0, #0x04000000 @ IME = 0;
str r0, [r0, #0x208]
@ set sensible stacks to allow bios call
mov r0, #0x13 @ Switch to SVC Mode
msr cpsr, r0
mov r1,#0x03000000
sub r1,r1,#0x1000
mov sp,r1
mov r0, #0x1F @ Switch to System Mode
msr cpsr, r0
sub r1,r1,#0x100
mov sp,r1
ldr r3, =__libnds_mpu_setup
blx r3
mov r0, #0x12 @ Switch to IRQ Mode
msr cpsr, r0
ldr sp, =__sp_irq @ Set IRQ stack
mov r0, #0x13 @ Switch to SVC Mode
msr cpsr, r0
ldr sp, =__sp_svc @ Set SVC stack
mov r0, #0x1F @ Switch to System Mode
msr cpsr, r0
ldr sp, =__sp_usr @ Set user stack
ldr r1, =__itcm_lma @ Copy instruction tightly coupled memory (itcm section) from LMA to VMA
ldr r2, =__itcm_start
ldr r4, =__itcm_end
bl CopyMemCheck
ldr r1, =__vectors_lma @ Copy reserved vectors area (itcm section) from LMA to VMA
ldr r2, =__vectors_start
ldr r4, =__vectors_end
bl CopyMemCheck
ldr r1, =__dtcm_lma @ Copy data tightly coupled memory (dtcm section) from LMA to VMA
ldr r2, =__dtcm_start
ldr r4, =__dtcm_end
bl CopyMemCheck
bl checkARGV @ check and process argv trickery
ldr r0, =__bss_start__ @ Clear BSS section
ldr r1, =__bss_end__
sub r1, r1, r0
bl ClearMem
ldr r0, =__sbss_start @ Clear SBSS section
ldr r1, =__sbss_end
sub r1, r1, r0
bl ClearMem
ldr r0, =_libnds_argv
@ reset heap base
ldr r2, [r0,#20] @ newheap base
ldr r1,=fake_heap_start
str r2,[r1]
ldr r1, =fake_heap_end @ set heap end
sub r8, r8,#0xc000
str r8, [r1]
push {r0}
ldr r3, =initSystem
blx r3 @ system initialisation
ldr r3, =__libc_init_array @ global constructors
blx r3
pop {r0}
ldr r1, [r0,#16] @ argv
ldr r0, [r0,#12] @ argc
ldr r3, =main
ldr lr, =__libnds_exit
bx r3 @ jump to user code
@---------------------------------------------------------------------------------
@ check for a commandline
@---------------------------------------------------------------------------------
checkARGV:
@---------------------------------------------------------------------------------
ldr r0, =_libnds_argv @ argv structure
mov r1, #0
str r1, [r0,#12] @ clear argc
str r1, [r0,#16] @ clear argv
ldr r3, [r0] @ argv magic number
ldr r2, =0x5f617267 @ '_arg'
cmp r3, r2
strne r1, [r0,#20]
bxne lr @ bail out if no magic
ldr r1, [r0, #4] @ command line address
ldr r2, [r0, #8] @ length of command line
@ copy to heap
ldr r3, =__end__ @ initial heap base
str r3, [r0, #4] @ set command line address
cmp r2, #0
subnes r4, r3, r1 @ dst-src
bxeq lr @ dst == src || len==0 : nothing to do.
cmphi r2, r4 @ len > (dst-src)
bhi .copybackward
.copyforward:
ldrb r4, [r1], #1
strb r4, [r3], #1
subs r2, r2, #1
bne .copyforward
b .copydone
.copybackward:
subs r2, r2, #1
ldrb r4, [r1, r2]
strb r4, [r3, r2]
bne .copybackward
.copydone:
push {lr}
ldr r3, =build_argv
blx r3
pop {lr}
bx lr
@---------------------------------------------------------------------------------
@ Clear memory to 0x00 if length != 0
@ r0 = Start Address
@ r1 = Length
@---------------------------------------------------------------------------------
ClearMem:
@---------------------------------------------------------------------------------
mov r2, #3 @ Round down to nearest word boundary
add r1, r1, r2 @ Shouldn't be needed
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
bxeq lr @ Quit if copy size is 0
mov r2, #0
ClrLoop:
stmia r0!, {r2}
subs r1, r1, #4
bne ClrLoop
bx lr
@---------------------------------------------------------------------------------
@ Copy memory if length != 0
@ r1 = Source Address
@ r2 = Dest Address
@ r4 = Dest Address + Length
@---------------------------------------------------------------------------------
CopyMemCheck:
@---------------------------------------------------------------------------------
sub r3, r4, r2 @ Is there any data to copy?
@---------------------------------------------------------------------------------
@ Copy memory
@ r1 = Source Address
@ r2 = Dest Address
@ r3 = Length
@---------------------------------------------------------------------------------
CopyMem:
@---------------------------------------------------------------------------------
mov r0, #3 @ These commands are used in cases where
add r3, r3, r0 @ the length is not a multiple of 4,
bics r3, r3, r0 @ even though it should be.
bxeq lr @ Length is zero, so exit
CIDLoop:
ldmia r1!, {r0}
stmia r2!, {r0}
subs r3, r3, #4
bne CIDLoop
bx lr
@---------------------------------------------------------------------------------
.align
.pool
.end
@---------------------------------------------------------------------------------

View File

@@ -1,213 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x03800000, LENGTH = 64K
ewram : ORIGIN = 0x02000000, LENGTH = 4M
}
__ewram_start = ORIGIN(ewram);
__eheap_end = ORIGIN(ewram)+ LENGTH(ewram);
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
__sp_irq = __iwram_top - 0x60;
__sp_svc = __sp_irq - 0x100;
__sp_usr = __sp_svc - 0x100;
__irq_flags = __iwram_top - 8;
__irq_vector = __iwram_top - 4;
SECTIONS
{
.init :
{
__text_start = . ;
KEEP (*(.init))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.plt : { *(.plt) } >rom = 0xff
.text : /* ALIGN (4): */
{
*(EXCLUDE_FILE (*.iwram*) .text)
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.fini :
{
KEEP (*(.fini))
} >rom =0xff
__text_end = . ;
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >rom = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >rom = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >rom = 0xff
PROVIDE (__fini_array_end = .);
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.jcr : { KEEP (*(.jcr)) } >rom = 0
.got : { *(.got.plt) *(.got) } >rom = 0
__ewram_lma = . ;
.ewram __ewram_start : AT (__ewram_lma)
{
__ewram_start = ABSOLUTE(.) ;
*(.ewram)
*ewram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.sbss ALIGN(4):
{
__sbss_start = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4);
} >ewram
__sbss_end = . ;
_end = . ;
__end__ = . ;
PROVIDE (end = _end);
__iwram_lma = __ewram_lma + SIZEOF(.ewram) + SIZEOF(.sbss);
.iwram __iwram_start : AT (__iwram_lma)
{
__iwram_start = ABSOLUTE(.) ;
*(.iwram)
*iwram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
__iwram_end = . ;
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
.data ALIGN(4) : AT (__data_lma)
{
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
} >iwram = 0xff
__data_end = . ;
__appended_data = __data_lma + SIZEOF(.data) ;
.bss ALIGN(4) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} >iwram
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_cart.ld%s
*startfile:
ds_cart_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,160 +0,0 @@
@---------------------------------------------------------------------------------
.section ".init"
.global _start
.arm
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
b rom_header_end
@---------------------------------------------------------------------------------
.fill 156,1,0 @ Nintendo Logo Character Data (8000004h)
.fill 16,1,0 @ Game Title
.byte 0x30,0x31 @ Maker Code (80000B0h)
.byte 0x96 @ Fixed Value (80000B2h)
.byte 0x00 @ Main Unit Code (80000B3h)
.byte 0x00 @ Device Type (80000B4h)
.fill 7,1,0 @ unused
.byte 0x00 @ Software Version No (80000BCh)
.byte 0xf0 @ Complement Check (80000BDh)
.byte 0x00,0x00 @ Checksum (80000BEh)
rom_header_end:
b start_vector @ This branch must be here for proper
@ positioning of the following header.
.GLOBAL __boot_method, __slave_number
__boot_method:
.byte 0 @ boot method (0=ROM boot, 3=Multiplay boot)
__slave_number:
.byte 0 @ slave # (1=slave#1, 2=slave#2, 3=slave#3)
.byte 0 @ reserved
.byte 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
@---------------------------------------------------------------------------------
.align 4
.arm
@---------------------------------------------------------------------------------
start_vector:
@---------------------------------------------------------------------------------
mov r0, #0x04000000 @ IME = 0;
str r0, [r0, #0x208]
mov r0, #0x12 @ Switch to IRQ Mode
msr cpsr, r0
ldr sp, =__sp_irq @ Set IRQ stack
mov r0, #0x13 @ Switch to SVC Mode
msr cpsr, r0
ldr sp, =__sp_svc @ Set SVC stack
mov r0, #0x1F @ Switch to System Mode
msr cpsr, r0
ldr sp, =__sp_usr @ Set user stack
mov r1, #0x42
strb r1, [r7], #1
mov r1, #0x35
strb r1, [r7], #1
mov r1, #0x2B
strb r1, [r7], #1
mov r1, #0x2B
strb r1, [r7], #1
ldr r1, =__data_lma @ Copy initialized data (data section) from LMA to VMA (ROM to RAM)
ldr r2, =__data_start
ldr r4, =__data_end
bl CopyMemChk
ldr r1, =__iwram_lma @ Copy internal work ram (iwram section) from LMA to VMA (ROM to RAM)
ldr r2, =__iwram_start
ldr r4, =__iwram_end
bl CopyMemChk
ldr r0, =__bss_start @ Clear BSS section to 0x00
ldr r1, =__bss_end
sub r1, r1, r0
bl ClearMem
ldr r0, =__sbss_start @ Clear SBSS section to 0x00
ldr r1, =__sbss_end
sub r1, r1, r0
bl ClearMem
ldr r1, =fake_heap_end @ set heap end
ldr r0, =__eheap_end
str r0, [r1]
ldr r3, =__libc_init_array @ global constructors
bl _call_via_r3
mov r0, #0 @ int argc
mov r1, #0 @ char *argv[]
ldr r3, =main
bl _call_via_r3 @ jump to user code
@---------------------------------------------------------------------------------
@ Clear memory to 0x00 if length != 0
@ r0 = Start Address
@ r1 = Length
@---------------------------------------------------------------------------------
ClearMem:
mov r2, #3 @ Round down to nearest word boundary
add r1, r1, r2 @ Shouldn't be needed
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
bxeq lr @ Quit if copy size is 0
mov r2, #0
@---------------------------------------------------------------------------------
ClrLoop:
@---------------------------------------------------------------------------------
stmia r0!, {r2}
subs r1, r1, #4
bne ClrLoop
bx lr
@---------------------------------------------------------------------------------
@ Copy memory if length != 0
@ r1 = Source Address
@ r2 = Dest Address
@ r4 = Dest Address + Length
@---------------------------------------------------------------------------------
CopyMemChk:
@---------------------------------------------------------------------------------
sub r3, r4, r2 @ Is there any data to copy?
@---------------------------------------------------------------------------------
@ Copy memory
@ r1 = Source Address
@ r2 = Dest Address
@ r3 = Length
@---------------------------------------------------------------------------------
CopyMem:
@---------------------------------------------------------------------------------
mov r0, #3 @ These commands are used in cases where
add r3, r3, r0 @ the length is not a multiple of 4,
bics r3, r3, r0 @ even though it should be.
bxeq lr @ Length is zero so exit
@---------------------------------------------------------------------------------
CIDLoop:
@---------------------------------------------------------------------------------
ldmia r1!, {r0}
stmia r2!, {r0}
subs r3, r3, #4
bne CIDLoop
bx lr
@---------------------------------------------------------------------------------
.align
.pool
@---------------------------------------------------------------------------------
.end
@---------------------------------------------------------------------------------

View File

@@ -1,8 +0,0 @@
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
ewram : ORIGIN = 0x02000000, LENGTH = 16M - 4k
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
vectors : ORIGIN = 0x01000000, LENGTH = 256
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T dsi_arm9.mem%s -T ds_arm9.ld%s
*startfile:
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,56 +0,0 @@
@---------------------------------------------------------------------------------
@ nintendo e-reader startup code
@---------------------------------------------------------------------------------
@ author : tim schuerewegen
@ version : 1.0
@---------------------------------------------------------------------------------
.section ".init"
.global _start
.align
.arm
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
b start_vector
.long 0
.long 0x02000000
start_vector:
@ enter thumb mode
adr r0, _start_thumb + 1
bx r0
.thumb
_start_thumb:
@ save return address (rom)
mov r3, lr
@ clear bss section
ldr r0, =__bss_start
ldr r1, =__bss_end
mov r2, #0
_loop_bss_clear:
strb r2, [r0]
add r0, #1
cmp r0, r1
blt _loop_bss_clear
@ set return address (rom)
mov lr, r3
@ jump to main
ldr r3, =main
bx r3
.align
.pool
.end
.align
.pool
.end

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T gba_cart.ld%s
*startfile:
gba_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,312 +0,0 @@
/* Linker Script Original v1.3 by Jeff Frohwein */
/* v1.0 - Original release */
/* v1.1 - Added proper .data section support */
/* v1.2 - Added support for c++ & iwram overlays */
/* - Major contributions by Jason Wilkins. */
/* v1.3 - .ewram section now can be used when */
/* compiling for MULTIBOOT mode. This fixes */
/* malloc() in DevKitAdvance which depends */
/* on __eheap_start instead of end to define*/
/* the starting location of heap space. */
/* External global variable __gba_iwram_heap*/
/* support added to allow labels end, _end, */
/* & __end__ to point to end of iwram or */
/* the end of ewram. */
/* Additions by WinterMute */
/* v1.4 - .sbss section added for unitialised */
/* data in ewram */
/* v1.5 - padding section added to stop EZF */
/* stripping important data */
/* This file is released into the public domain */
/* for commercial or non-commercial use with no */
/* restrictions placed upon it. */
/* NOTE!!!: This linker script defines the RAM & */
/* ROM start addresses. In order for it to work */
/* properly, remove -Ttext and -Tbss linker */
/* options from your makefile if they are */
/* present. */
/* You can use the following to view section */
/* addresses in your .elf file: */
/* objdump -h file.elf */
/* Please note that empty sections may incorrectly*/
/* list the lma address as the vma address for */
/* some versions of objdump. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
/* SEARCH_DIR(/bin/arm); */
/* The linker script function "var1 += var2;" sometimes */
/* reports incorrect values in the *.map file but the */
/* actual value it calculates is usually, if not always, */
/* correct. If you leave out the ". = ALIGN(4);" at the */
/* end of each section then the return value of SIZEOF() */
/* is sometimes incorrect and "var1 += var2;" appears to */
/* not work as well. "var1 += var2" style functions are */
/* avoided below as a result. */
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x03000000, LENGTH = 32K
ewram : ORIGIN = 0x02000000, LENGTH = 256K
}
__text_start = ORIGIN(rom);
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram) + LENGTH(iwram);;
__sp_irq = __iwram_top - 0x060;
__sp_usr = __sp_irq - 0x0a0;
__irq_flags = 0x03007ff8;
SECTIONS
{
. = __text_start;
.init :
{
KEEP (*(.init))
. = ALIGN(4);
} >rom =0xff
.plt :
{
*(.plt)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom
.text : /* ALIGN (4): */
{
*(EXCLUDE_FILE (*.iwram*) .text)
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
__text_end = .;
.fini :
{
KEEP (*(.fini))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom =0
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >rom
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >rom
__exidx_end = .;
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0
__iwram_lma = .;
.iwram __iwram_start : AT (__iwram_lma)
{
__iwram_start__ = ABSOLUTE(.) ;
*(.iwram)
*iwram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__iwram_end__ = ABSOLUTE(.) ;
} >iwram = 0xff
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
.bss ALIGN(4) (NOLOAD) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.);
} AT>iwram
.data ALIGN(4) : AT (__data_lma)
{
__data_start__ = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
} >iwram = 0xff
__preinit_lma = __data_lma + SIZEOF(.data);
.preinit_array ALIGN(4) : AT (__preinit_lma)
{
__preinit_array_start = ABSOLUTE(.);
KEEP (*(.preinit_array))
__preinit_array_end = ABSOLUTE(.);
} >iwram
__init_lma = __preinit_lma + SIZEOF(.preinit_array);
.init_array ALIGN(4) : AT (__init_lma)
{
__init_array_start = ABSOLUTE(.);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
__init_array_end = ABSOLUTE(.);
} >iwram
__fini_lma = __init_lma + SIZEOF(.init_array);
.fini_array ALIGN(4) : AT (__fini_lma)
{
__fini_array_start = ABSOLUTE(.);
KEEP (*(SORT(.fini_array.*)))
KEEP (*(.fini_array))
__fini_array_end = ABSOLUTE(.);
} >iwram
__jcr_lma = __fini_lma + SIZEOF(.fini_array);
.jcr ALIGN(4) : AT (__jcr_lma) { KEEP (*(.jcr)) } >iwram
__data_end__ = ABSOLUTE(.);
__iwram_overlay_lma = __jcr_lma + SIZEOF(.jcr);
__iwram_overlay_start = . ;
OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
{
.iwram0 { *(.iwram0) . = ALIGN(4);}
.iwram1 { *(.iwram1) . = ALIGN(4);}
.iwram2 { *(.iwram2) . = ALIGN(4);}
.iwram3 { *(.iwram3) . = ALIGN(4);}
.iwram4 { *(.iwram4) . = ALIGN(4);}
.iwram5 { *(.iwram5) . = ALIGN(4);}
.iwram6 { *(.iwram6) . = ALIGN(4);}
.iwram7 { *(.iwram7) . = ALIGN(4);}
.iwram8 { *(.iwram8) . = ALIGN(4);}
.iwram9 { *(.iwram9) . = ALIGN(4);}
}>iwram = 0xff
__iwram_overlay_end = . ;
__ewram_lma = __iwram_overlay_lma + (__iwram_overlay_end - __iwram_overlay_start) ;
__iheap_start = . ;
__ewram_start = ORIGIN(ewram);
.ewram __ewram_start : AT (__ewram_lma)
{
*(.ewram)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__ewram_end = ABSOLUTE(.);
}>ewram = 0xff
__pad_lma = __ewram_lma + SIZEOF(.ewram);
.sbss ALIGN(4)(NOLOAD):
{
__sbss_start__ = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4);
__sbss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
__eheap_start = ABSOLUTE(.);
} AT>ewram
/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */
.pad ALIGN(4) : AT (__pad_lma)
{
LONG(0x52416b64)
LONG(0x4d)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} = 0xff
__rom_end__ = __pad_lma + SIZEOF(.pad);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }
/DISCARD/ : { *(.note.GNU-stack) }
}

View File

@@ -1,246 +0,0 @@
.section ".init"
.global _start
.align
.arm
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
b rom_header_end
.fill 156,1,0 @ Nintendo Logo Character Data (8000004h)
.fill 16,1,0 @ Game Title
.byte 0x30,0x31 @ Maker Code (80000B0h)
.byte 0x96 @ Fixed Value (80000B2h)
.byte 0x00 @ Main Unit Code (80000B3h)
.byte 0x00 @ Device Type (80000B4h)
.fill 7,1,0 @ unused
.byte 0x00 @ Software Version No (80000BCh)
.byte 0xf0 @ Complement Check (80000BDh)
.byte 0x00,0x00 @ Checksum (80000BEh)
@---------------------------------------------------------------------------------
rom_header_end:
@---------------------------------------------------------------------------------
b start_vector @ This branch must be here for proper
@ positioning of the following header.
.GLOBAL __boot_method, __slave_number
@---------------------------------------------------------------------------------
__boot_method:
@---------------------------------------------------------------------------------
.byte 0 @ boot method (0=ROM boot, 3=Multiplay boot)
@---------------------------------------------------------------------------------
__slave_number:
@---------------------------------------------------------------------------------
.byte 0 @ slave # (1=slave#1, 2=slave#2, 3=slave#3)
.byte 0 @ reserved
.byte 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.word 0 @ reserved
.global start_vector
.align
@---------------------------------------------------------------------------------
start_vector:
@---------------------------------------------------------------------------------
mov r0, #0x4000000 @ REG_BASE
str r0, [r0, #0x208]
mov r0, #0x12 @ Switch to IRQ Mode
msr cpsr, r0
ldr sp, =__sp_irq @ Set IRQ stack
mov r0, #0x1f @ Switch to System Mode
msr cpsr, r0
ldr sp, =__sp_usr @ Set user stack
@---------------------------------------------------------------------------------
@ Enter Thumb mode
@---------------------------------------------------------------------------------
add r0, pc, #1
bx r0
.thumb
ldr r0, =__text_start
lsl r0, #5 @ Was code compiled at 0x08000000 or higher?
bcs DoEWRAMClear @ yes, you can not run it in external WRAM
mov r0, pc
lsl r0, #5 @ Are we running from ROM (0x8000000 or higher) ?
bcc SkipEWRAMClear @ No, so no need to do a copy.
@---------------------------------------------------------------------------------
@ We were started in ROM, silly emulators. :P
@ So we need to copy to ExWRAM.
@---------------------------------------------------------------------------------
mov r2, #2
lsl r2, r2, #24 @ r2= 0x02000000
ldr r3, =__end__ @ last ewram address
sub r3, r2 @ r3= actual binary size
mov r6, r2 @ r6= 0x02000000
lsl r1, r2, #2 @ r1= 0x08000000
bl CopyMem
bx r6 @ Jump to the code to execute
@---------------------------------------------------------------------------------
DoEWRAMClear: @ Clear External WRAM to 0x00
@---------------------------------------------------------------------------------
mov r1, #0x40
lsl r1, #12 @ r1 = 0x40000
lsl r0, r1, #7 @ r0 = 0x2000000
bl ClearMem
@---------------------------------------------------------------------------------
SkipEWRAMClear: @ Clear Internal WRAM to 0x00
@---------------------------------------------------------------------------------
@---------------------------------------------------------------------------------
@ Clear BSS section to 0x00
@---------------------------------------------------------------------------------
ldr r0, =__bss_start__
ldr r1, =__bss_end__
sub r1, r0
bl ClearMem
@---------------------------------------------------------------------------------
@ Clear SBSS section to 0x00
@---------------------------------------------------------------------------------
ldr r0, =__sbss_start__
ldr r1, =__sbss_end__
sub r1, r0
bl ClearMem
@---------------------------------------------------------------------------------
@ Copy initialized data (data section) from LMA to VMA (ROM to RAM)
@---------------------------------------------------------------------------------
ldr r1, =__data_lma
ldr r2, =__data_start__
ldr r4, =__data_end__
bl CopyMemChk
@---------------------------------------------------------------------------------
@ Copy internal work ram (iwram section) from LMA to VMA (ROM to RAM)
@---------------------------------------------------------------------------------
ldr r1,= __iwram_lma
ldr r2,= __iwram_start__
ldr r4,= __iwram_end__
bl CopyMemChk
@---------------------------------------------------------------------------------
@ Copy internal work ram overlay 0 (iwram0 section) from LMA to VMA (ROM to RAM)
@---------------------------------------------------------------------------------
ldr r2,= __load_stop_iwram0
ldr r1,= __load_start_iwram0
sub r3, r2, r1 @ Is there any data to copy?
beq CIW0Skip @ no
ldr r2,= __iwram_overlay_start
bl CopyMem
@---------------------------------------------------------------------------------
CIW0Skip:
@---------------------------------------------------------------------------------
@ Copy external work ram (ewram section) from LMA to VMA (ROM to RAM)
@---------------------------------------------------------------------------------
ldr r1, =__ewram_lma
ldr r2, =__ewram_start
ldr r4, =__ewram_end
bl CopyMemChk
@---------------------------------------------------------------------------------
CEW0Skip:
@---------------------------------------------------------------------------------
@ set heap end
@---------------------------------------------------------------------------------
ldr r1, =fake_heap_end
ldr r0, =__eheap_end
str r0, [r1]
@---------------------------------------------------------------------------------
@ global constructors
@---------------------------------------------------------------------------------
ldr r3, =__libc_init_array
bl _blx_r3_stub
@---------------------------------------------------------------------------------
@ Jump to user code
@---------------------------------------------------------------------------------
mov r0, #0 @ int argc
mov r1, #0 @ char *argv[]
ldr r3, =main
bl _blx_r3_stub
@---------------------------------------------------------------------------------
@ Clear memory to 0x00 if length != 0
@---------------------------------------------------------------------------------
@ r0 = Start Address
@ r1 = Length
@---------------------------------------------------------------------------------
ClearMem:
@---------------------------------------------------------------------------------
mov r2,#3 @ These commands are used in cases where
add r1,r2 @ the length is not a multiple of 4,
bic r1,r2 @ even though it should be.
beq ClearMX @ Length is zero so exit
mov r2,#0
@---------------------------------------------------------------------------------
ClrLoop:
@---------------------------------------------------------------------------------
stmia r0!, {r2}
sub r1,#4
bne ClrLoop
@---------------------------------------------------------------------------------
ClearMX:
@---------------------------------------------------------------------------------
bx lr
@---------------------------------------------------------------------------------
_blx_r3_stub:
@---------------------------------------------------------------------------------
bx r3
@---------------------------------------------------------------------------------
@ Copy memory if length != 0
@---------------------------------------------------------------------------------
@ r1 = Source Address
@ r2 = Dest Address
@ r4 = Dest Address + Length
@---------------------------------------------------------------------------------
CopyMemChk:
@---------------------------------------------------------------------------------
sub r3, r4, r2 @ Is there any data to copy?
@---------------------------------------------------------------------------------
@ Copy memory
@---------------------------------------------------------------------------------
@ r1 = Source Address
@ r2 = Dest Address
@ r3 = Length
@---------------------------------------------------------------------------------
CopyMem:
@---------------------------------------------------------------------------------
mov r0, #3 @ These commands are used in cases where
add r3, r0 @ the length is not a multiple of 4,
bic r3, r0 @ even though it should be.
beq CIDExit @ Length is zero so exit
@---------------------------------------------------------------------------------
CIDLoop:
@---------------------------------------------------------------------------------
ldmia r1!, {r0}
stmia r2!, {r0}
sub r3, #4
bne CIDLoop
@---------------------------------------------------------------------------------
CIDExit:
@---------------------------------------------------------------------------------
bx lr
.align
.pool
.end

View File

@@ -1,49 +0,0 @@
/***********************************/
/* NINTENDO E-READER LINKER SCRIPT */
/***********************************/
/* Author : Tim Schuerewegen */
/* Version : 1.0 */
/***********************************/
OUTPUT_FORMAT( "elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH( arm)
ENTRY( _start)
SECTIONS
{
. = 0x02000000;
.init :
{
*(.init)
. = ALIGN(4);
} = 0xff
.text :
{
*(.text)
. = ALIGN(4);
} = 0xff
.rodata :
{
*(.rodata)
. = ALIGN(4);
} = 0xff
.data :
{
*(.data)
. = ALIGN(4);
} = 0xff
.bss :
{
__bss_start = .;
*(.bss)
. = ALIGN(4);
__bss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
}
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
%rename endfile old_endfile
*link:
-T gba_er.ld%s %(old_link)
*startfile:
er_crt0%O%s

View File

@@ -1,296 +0,0 @@
/* Linker Script Original v1.3 by Jeff Frohwein */
/* v1.0 - Original release */
/* v1.1 - Added proper .data section support */
/* v1.2 - Added support for c++ & iwram overlays */
/* - Major contributions by Jason Wilkins. */
/* v1.3 - .ewram section now can be used when */
/* compiling for MULTIBOOT mode. This fixes */
/* malloc() in DevKitAdvance which depends */
/* on __eheap_start instead of end to define*/
/* the starting location of heap space. */
/* External global variable __gba_iwram_heap*/
/* support added to allow labels end, _end, */
/* & __end__ to point to end of iwram or */
/* the end of ewram. */
/* Additions by WinterMute */
/* v1.4 - .sbss section added for unitialised */
/* data in ewram */
/* v1.5 - padding section added to stop EZF */
/* stripping important data */
/* v1.6 - added memory sections */
/* This file is released into the public domain */
/* for commercial or non-commercial use with no */
/* restrictions placed upon it. */
/* NOTE!!!: This linker script defines the RAM & */
/* ROM start addresses. In order for it to work */
/* properly, remove -Ttext and -Tbss linker */
/* options from your makefile if they are */
/* present. */
/* You can use the following to view section */
/* addresses in your .elf file: */
/* objdump -h file.elf */
/* Please note that empty sections may incorrectly*/
/* list the lma address as the vma address for */
/* some versions of objdump. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x03000000, LENGTH = 32K
ewram : ORIGIN = 0x02000000, LENGTH = 256K
}
__text_start = ORIGIN(ewram);
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram) + LENGTH(iwram);;
__sp_irq = __iwram_top - 0x060;
__sp_usr = __sp_irq - 0x0a0;
__irq_flags = 0x03007ff8;
SECTIONS
{
. = __text_start;
.init :
{
KEEP (*(.init))
. = ALIGN(4);
} >ewram =0xff
.plt :
{
*(.plt)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram
.text ALIGN (4):
{
*(EXCLUDE_FILE (*.iwram*) .text)
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
__text_end = .;
.fini :
{
KEEP (*(.fini))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram =0
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram
__exidx_end = .;
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >ewram = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >ewram = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >ewram = 0xff
PROVIDE (__fini_array_end = .);
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0
.jcr : { KEEP (*(.jcr)) } >ewram
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0
__iwram_lma = .;
.iwram __iwram_start : AT (__iwram_lma)
{
__iwram_start__ = ABSOLUTE(.) ;
*(.iwram)
*iwram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__iwram_end__ = ABSOLUTE(.) ;
} >iwram = 0xff
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
.bss ALIGN(4) (NOLOAD):
{
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.) ;
}
.data ALIGN(4) : AT (__data_lma)
{
__data_start__ = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__data_end__ = ABSOLUTE(.);
} >iwram = 0xff
__iwram_overlay_lma = __data_lma + SIZEOF(.data);
PROVIDE (edata = .);
__iwram_overlay_start = . ;
OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
{
.iwram0 { *(.iwram0) . = ALIGN(4);}
.iwram1 { *(.iwram1) . = ALIGN(4);}
.iwram2 { *(.iwram2) . = ALIGN(4);}
.iwram3 { *(.iwram3) . = ALIGN(4);}
.iwram4 { *(.iwram4) . = ALIGN(4);}
.iwram5 { *(.iwram5) . = ALIGN(4);}
.iwram6 { *(.iwram6) . = ALIGN(4);}
.iwram7 { *(.iwram7) . = ALIGN(4);}
.iwram8 { *(.iwram8) . = ALIGN(4);}
.iwram9 { *(.iwram9) . = ALIGN(4);}
} >iwram = 0xff
__ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9);
__iwram_overlay_end = __ewram_lma ;
/* v1.3 */
__ewram_start = __ewram_lma ;
.ewram __ewram_start : AT (__ewram_lma)
{
*(.ewram)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__ewram_end = ABSOLUTE(.);
} >ewram = 0xff
__ewram_overlay_lma = __ewram_lma + SIZEOF(.ewram);
.sbss ALIGN(4)(NOLOAD):
{
__sbss_start__ = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4);
__sbss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
__eheap_start = ABSOLUTE(.);
}
OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma)
{
.ewram0 { *(.ewram0) . = ALIGN(4);}
.ewram1 { *(.ewram1) . = ALIGN(4);}
.ewram2 { *(.ewram2) . = ALIGN(4);}
.ewram3 { *(.ewram3) . = ALIGN(4);}
.ewram4 { *(.ewram4) . = ALIGN(4);}
.ewram5 { *(.ewram5) . = ALIGN(4);}
.ewram6 { *(.ewram6) . = ALIGN(4);}
.ewram7 { *(.ewram7) . = ALIGN(4);}
.ewram8 { *(.ewram8) . = ALIGN(4);}
.ewram9 { *(.ewram9) . = ALIGN(4);}
} >ewram = 0xff
__ewram_overlay_end = ABSOLUTE(.);
__eheap_start = __ewram_overlay_end ;
_end = __ewram_overlay_end;
__end__ = __ewram_overlay_end;
__rom_end__ = __ewram_overlay_end;
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
-T gba_mb.ld%s %(old_link)
*startfile:
gba_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,165 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY
{
ram : ORIGIN = 0xc000000, LENGTH = 8M
}
SECTIONS
{
.init :
{
__text_start = . ;
KEEP (*(.init))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0xff
.plt : { *(.plt) } >ram = 0xff
.text : /* ALIGN (4): */
{
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0xff
.fini :
{
KEEP (*(.fini))
} >ram =0xff
__text_end = . ;
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ram
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ram
__exidx_end = .;
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >ram = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >ram = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >ram = 0xff
PROVIDE (__fini_array_end = .);
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0
.jcr : { KEEP (*(.jcr)) } >ram = 0
.got : { *(.got.plt) *(.got) } >ram = 0
__ro_end = . ;
.data ALIGN(4) :
{
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__data_end = ABSOLUTE(.);
} >ram = 0xff
.bss ALIGN(4) :
{
__bss_start = ABSOLUTE(.);
/* __bss_start__ = ABSOLUTE(.); */
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end = ABSOLUTE(.) ;
__end__ = ABSOLUTE(.) ;
} > ram
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T gp32.ld%s
*startfile:
gp32_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,74 +0,0 @@
.section ".init"
.code 32
.align
.global _start
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
b _start2
@---------------------------------------------------------------------------------
@ AXF addresses
@---------------------------------------------------------------------------------
_text_start:
.word __text_start
_ro_end:
.word __ro_end
_data_start:
.word __data_start
.word __bss_end
_bss_start:
.word __bss_start
_bss_end:
.word __bss_end
@---------------------------------------------------------------------------------
@ GamePark magic sequence
@---------------------------------------------------------------------------------
.word 0x44450011
.word 0x44450011
.word 0x01234567
.word 0x12345678
.word 0x23456789
.word 0x34567890
.word 0x45678901
.word 0x56789012
.word 0x23456789
.word 0x34567890
.word 0x45678901
.word 0x56789012
.word 0x23456789
.word 0x34567890
.word 0x45678901
.word 0x56789012
@---------------------------------------------------------------------------------
_start2:
@---------------------------------------------------------------------------------
mrs r0, CPSR
orr r0, r0, #0xC0
msr CPSR_ctl, r0
mrs r0, CPSR
bic r0, r0, #0xC0
orr r0, r0, #0x40
msr CPSR_ctl,r0
@---------------------------------------------------------------------------------
@ global constructors
@---------------------------------------------------------------------------------
ldr r3,=_call_main
mov lr,r3
ldr r3,=__libc_init_array
bx r3
@---------------------------------------------------------------------------------
@ Jump to user code
@---------------------------------------------------------------------------------
_call_main:
@---------------------------------------------------------------------------------
mov lr, #0
ldr r3, =main
bx r3
.pool
.end

View File

@@ -1,213 +0,0 @@
/* GP32 Linker Script v1.2 by Jeff F */
/* v1.0 - Original release */
/* v1.1 - Cleaned up and added MEMORY command */
/* v1.2 - DJWillis - Added propper .init and */
/* .fini for GCC 3.3.2 and above */
/* */
/* This file is released into the public domain */
/* for commercial or non-commercial use with no */
/* restrictions placed upon it. */
/* */
/* NOTE!!!: This linker script defines the RAM */
/* start addresses. In order for it to work */
/* properly, remove -Ttext and -Tbss linker */
/* options from your makefile if they are */
/* present. */
/* */
/* You can use the following to view section */
/* addresses in your .elf file: */
/* objdump -h file.elf */
/* */
/* Please note that empty sections may incorrectly*/
/* list the lma address as the vma address for */
/* some versions of objdump. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
/* SEARCH_DIR(/bin/arm); */
/* Then use it like this: IWRAMHEAP */
/* The linker script function "var1 += var2;" sometimes */
/* reports incorrect values in the *.map file but the */
/* actual value it calculates is usually, if not always, */
/* correct. If you leave out the ". = ALIGN(4);" at the */
/* end of each section then the return value of SIZEOF() */
/* is sometimes incorrect and "var1 += var2;" appears to */
/* not work as well. "var1 += var2" style functions are */
/* avoided below as a result. */
/* The linker script MEMORY directive is not used here due */
/* to the fact that __text_start is not always a fixed value. */
MEMORY
{
ram : ORIGIN = 0xc000000, LENGTH = 8M
}
SECTIONS
{
.text : /* ALIGN (4): */
{
__text_start = . ;
*(EXCLUDE_FILE (*text.iwram*) .text)
*(.text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
*(.glue_7)
*(.glue_7t)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0xff
__text_end = . ;
.init :
{
*(.init)
} > ram = 0xff
.jcr :
{
*(.jcr)
} > ram = 0xff
.fini :
{
*(.fini)
} > ram = 0xff
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ram
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ram
__exidx_end = .;
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >ram = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >ram = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >ram = 0xff
PROVIDE (__fini_array_end = .);
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0
__ro_end = . ;
.data ALIGN(4) :
{
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0xff
__data_end = . ;
.bss ALIGN(4) :
{
__bss_start = ABSOLUTE(.);
/* __bss_start__ = ABSOLUTE(.); */
*(.dynbss)
*(.gnu.linkonce.b*)
*(COMMON)
*(.bss*)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} > ram
__eheap_end = . ;
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T gp32_gpsdk.ld%s
*startfile:
gp32_gpsdk_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,246 +0,0 @@
@****************************************************
@* gp32 crt0.S v1.0 by Jeff F *
@****************************************************
@ v1.0 - Original release
@
@ This file is released into the public domain for commercial
@ or non-commercial usage with no restrictions placed upon it.
.TEXT
@ Note: Normally it is the job of crt0.S to clear the BSS
@ (Zero Initialized) section to 0x00, but in the case of
@ the gp32 we do not have to do this because it is done
@ by the gp32 bios after it loads the app.
@ The official sdt dev kit uses 'Main ()' as the entry
@ point. If you would rather use 'main ()' instead then
@ comment out the next line.
@
@ You have to use 'main ()' at some point in your program
@ if you want to do c++ code. GCC will do a call to constructor
@ setup before executing 'main ()'. Using 'main ()' also increases
@ your program size by ~5500 bytes.
@ .equ __OfficialEntry, 1
@ The official sdt dev kit initializes various things in init.o
@ Crt0.S performs similar tasks for compatibility. If you don't
@ wish to use the official libs, or those that are compatible,
@ then you need to comment out the next line to prevent link errors.
.equ __OfficialInits, 1
.GLOBAL _start
_start:
.ALIGN
.CODE 32
@ Start Vector
b _GpInit
.word __text_start @ Start of text (Read Only) section
_roe: .word __ro_end @ End "
_rws: .word __data_start @ Start of data (Read/Write) section
.word __bss_end @ End of bss (this is the way sdt does it for some reason)
_zis: .word __bss_start @ Start of bss (Zero Initialized) section
_zie: .word __bss_end @ End "
.word 0x44450011
.word 0x44450011
.word 0x01234567
.word 0x12345678
.word 0x23456789
.word 0x34567890
.word 0x45678901
.word 0x56789012
.word 0x23456789
.word 0x34567890
.word 0x45678901
.word 0x56789012
.word 0x23456789
.word 0x34567890
.word 0x45678901
.word 0x56789012
_GpInit:
mrs r0,CPSR
orr r0,r0,#0xc0
msr CPSR_fsxc,r0
.ifdef __OfficialInits
@ Call function in user_init.s
@ bl asm_user_entry
@ Get pointer to GpSurfaceSet routine
mov r0,#0
swi 0xb
ldr r1,=GpSurfaceSet
ldr r2,=GpSurfaceFlip
str r0,[r1]
str r0,[r2]
@ Get time passed
mov r0,#6
swi 0xb
ldr r1,=_timepassed
str r0,[r1]
@ Get button stuff
mov r0,#0
swi 0x10
ldr r2,=_reg_io_key_a
ldr r3,=_reg_io_key_b
str r0,[r2]
str r1,[r3]
@ Set heap start location
ldr r0,_zie
ldr r1,=HEAPSTART
str r0,[r1]
@ Set heap end location
mov r0,#5
swi 0xb
ldr r1,=HEAPEND
sub r0,r0,#255
bic r0,r0,#3
str r0,[r1]
@ Set App Argument
swi 0x15
mov r10,r0
mov r11,r1 @ possibly not needed but left in anyway
mrs r0,CPSR
bic r0,r0,#192
orr r0,r0,#64
msr CPSR_fsxc,r0
mov r0,r10
mov r1,r11 @ possibly not needed but left in anyway
.endif
@ Jump to Main ()
.ifdef __OfficialEntry
ldr r3,=Main
.else
ldr r3,=main
.endif
bx r3 @ Init.o uses 'mov pc,r3' but
@ 'bx r3' is used here instead. This way
@ the main function can be ARM or Thumb.
.ifdef __OfficialInits
swi 0x12
orr r1,r1,r2
and r1,r1,r3
eor r1,r1,r4
mov r5,r1,lsr #4
add r1,r1,r7
sub r7,r7,r1
mov r8,#0
mov pc,r8
b .
b .
b .
b .
b .
b .
b .
b .
b .
b .
b .
b .
nop
nop
nop
nop
nop
nop
.GLOBAL _fw_init_for_dbg
_fw_init_for_dbg:
stmdb sp!,{r0-r12}
mov r10,lr
mov r11,sp
bic r0,r0,#31 @ 0x1f
orr r1,r0,#17 @ 0x11
orr r2,r0,#19 @ 0x13
msr cpsr_cxsf,r1
mov r12,#4
add r12,r12,pc
msr cpsr_cxsf,r2
swi 0x1ff
@ bl asm_user_entry_path
mov r0,r11
mov r1,r10
add r0,r0,#52
ldr r2,[r0]
mov lr,r1
stmdb sp!,{r2}
stmdb sp!,{r0-r12,lr}
@ Copy RW Base - ZI Base
ldr r0,=_roe @ |Image$$RO$$Limit|
ldr r3,=_zis @ |Image$$ZI$$Base|
ldr r2,=_rws @ |Image$$RW$$Base|
sub r3,r3,r2
CopyRWData:
cmp r3,#36
blt CopyRWData2
ldmia r0!,{r4-r12}
stmia r2!,{r4-r12}
sub r3,r3,#36
b CopyRWData
CopyRWData2:
cmp r3,#0
ble CopyRWData3
ldr r4,[r0],#4
str r4,[r2],#4
sub r3,r3,#4
b CopyRWData2
CopyRWData3:
@ Clear ZI section
ldr r1,=_zie @ |Image$$ZI$$Limit|
ldr r0,=_zis @ |Image$$ZI$$Base|
mov r2,#0
mov r3,r2
mov r4,r2
mov r5,r2
mov r6,r2
mov r7,r2
mov r8,r2
mov r9,r2
mov r10,r2
mov r11,r2
mov r12,r2
CopyZIData:
stmia r0!,{r2-r12}
cmp r0,r1
blt CopyZIData
ldmia sp!,{r0-r12,pc}
.endif
.ALIGN
.POOL
.END

View File

@@ -1,162 +0,0 @@
diff -Nbaur binutils-2.22/bfd/bfd-in2.h binutils-2.22-arm/bfd/bfd-in2.h
--- binutils-2.22/bfd/bfd-in2.h 2011-09-16 02:15:18.000000000 +0100
+++ binutils-2.22-arm/bfd/bfd-in2.h 2012-04-01 12:58:20.000000000 +0100
@@ -38,6 +38,8 @@
#include "ansidecl.h"
#include "symcat.h"
+#include <sys/stat.h>
+
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
#ifndef SABER
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
@@ -308,8 +310,6 @@
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
-/* Forward define. */
-struct stat;
typedef enum bfd_print_symbol
{
diff -Nbaur binutils-2.22/bfd/bfd-in.h binutils-2.22-arm/bfd/bfd-in.h
--- binutils-2.22/bfd/bfd-in.h 2011-09-16 02:15:18.000000000 +0100
+++ binutils-2.22-arm/bfd/bfd-in.h 2012-04-01 12:58:20.000000000 +0100
@@ -31,6 +31,8 @@
#include "ansidecl.h"
#include "symcat.h"
+#include <sys/stat.h>
+
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
#ifndef SABER
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
@@ -301,8 +303,6 @@
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
-/* Forward define. */
-struct stat;
typedef enum bfd_print_symbol
{
diff -Nbaur binutils-2.22/bfd/config.in binutils-2.22-arm/bfd/config.in
--- binutils-2.22/bfd/config.in 2011-05-12 08:41:40.000000000 +0100
+++ binutils-2.22-arm/bfd/config.in 2012-04-03 17:35:45.000000000 +0100
@@ -245,6 +245,9 @@
/* Define if <sys/procfs.h> has win32_pstatus_t. */
#undef HAVE_WIN32_PSTATUS_T
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
/* Define to 1 if you have the <zlib.h> header file. */
#undef HAVE_ZLIB_H
diff -Nbaur binutils-2.22/bfd/configure binutils-2.22-arm/bfd/configure
--- binutils-2.22/bfd/configure 2011-11-21 11:55:48.000000000 +0000
+++ binutils-2.22-arm/bfd/configure 2012-04-03 17:35:45.000000000 +0100
@@ -13508,6 +13508,22 @@
fi
+
+for ac_header in windows.h dlfcn.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
if test "${gcc_cv_header_string+set}" = set; then :
diff -Nbaur binutils-2.22/bfd/configure.in binutils-2.22-arm/bfd/configure.in
--- binutils-2.22/bfd/configure.in 2011-11-21 11:55:46.000000000 +0000
+++ binutils-2.22-arm/bfd/configure.in 2012-04-03 17:35:45.000000000 +0100
@@ -190,6 +190,9 @@
GCC_HEADER_STDINT(bfd_stdint.h)
AC_HEADER_TIME
AC_HEADER_DIRENT
+
+AC_CHECK_HEADERS(windows.h dlfcn.h)
+
ACX_HEADER_STRING
AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno)
AC_CHECK_FUNCS(strtoull)
diff -Nbaur binutils-2.22/bfd/plugin.c binutils-2.22-arm/bfd/plugin.c
--- binutils-2.22/bfd/plugin.c 2011-07-11 16:03:07.000000000 +0100
+++ binutils-2.22-arm/bfd/plugin.c 2012-04-03 17:35:45.000000000 +0100
@@ -25,7 +25,13 @@
#if BFD_SUPPORTS_PLUGINS
#include <assert.h>
+#ifdef HAVE_DLFCN_H
#include <dlfcn.h>
+#elif defined (HAVE_WINDOWS_H)
+#include <windows.h>
+#else
+#error Unknown how to handle dynamic-load-libraries.
+#endif
#include <stdarg.h>
#include "plugin-api.h"
#include "sysdep.h"
@@ -34,6 +40,37 @@
#include "libiberty.h"
#include <dirent.h>
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
+
+#define RTLD_NOW 0 /* Dummy value. */
+
+static void *
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
+{
+ return LoadLibrary (file);
+}
+
+static void *
+dlsym (void *handle, const char *name)
+{
+ return GetProcAddress (handle, name);
+}
+
+static int ATTRIBUTE_UNUSED
+dlclose (void *handle)
+{
+ FreeLibrary (handle);
+ return 0;
+}
+
+static const char *
+dlerror (void)
+{
+ return "Unable to load DLL.";
+}
+
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) */
+
#define bfd_plugin_close_and_cleanup _bfd_generic_close_and_cleanup
#define bfd_plugin_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
#define bfd_plugin_new_section_hook _bfd_generic_new_section_hook
diff -Nbaur binutils-2.22/include/opcode/arm.h binutils-2.22-arm/include/opcode/arm.h
--- binutils-2.22/include/opcode/arm.h 2011-05-31 15:12:55.000000000 +0100
+++ binutils-2.22-arm/include/opcode/arm.h 2012-04-01 12:58:20.000000000 +0100
@@ -109,7 +109,8 @@
#define ARM_AEXT_V6KT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K)
#define ARM_AEXT_V6ZT2 (ARM_AEXT_V6T2 | ARM_EXT_SEC)
#define ARM_AEXT_V6ZKT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K | ARM_EXT_SEC)
-#define ARM_AEXT_V7_ARM (ARM_AEXT_V6KT2 | ARM_EXT_V7 | ARM_EXT_BARRIER)
+#define ARM_AEXT_V7_ARM (ARM_AEXT_V6KT2 | ARM_EXT_V7 | ARM_EXT_BARRIER \
+ | ARM_EXT_OS )
#define ARM_AEXT_V7A (ARM_AEXT_V7_ARM | ARM_EXT_V7A)
#define ARM_AEXT_V7R (ARM_AEXT_V7_ARM | ARM_EXT_V7R | ARM_EXT_DIV)
#define ARM_AEXT_NOTM \

View File

@@ -0,0 +1,251 @@
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 728be500b80..74c1abad635 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -392,7 +392,7 @@ begin arch armv6k
tune for mpcore
tune flags CO_PROC
base 6K
- isa ARMv6k
+ isa ARMv6k VFPv2 FP_DBL
option fp add VFPv2 FP_DBL
optalias vfpv2 fp
option nofp remove ALL_FP
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
index 3d92bd23322..35cefcde676 100644
--- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf
@@ -16,111 +16,14 @@
# 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 := armv4 armv4t armv5t
-
-all_early_arch := armv5tej armv6 armv6j armv6k armv6z armv6kz \
- armv6zk armv6t2 iwmmxt iwmmxt2
-
-all_v7_a_r := armv7-a armv7ve armv7-r
-
-all_v8_archs := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a armv8.4-a \
- armv8.5-a armv8.6-a
-
-# No floating point variants, require thumb1 softfp
-all_nofp_t := armv6-m armv6s-m armv8-m.base
-
-all_nofp_t2 := armv7-m
-
-all_sp_only := armv7e-m armv8-m.main
-
-MULTILIB_OPTIONS =
-MULTILIB_DIRNAMES =
+MULTILIB_OPTIONS = mthumb mbig-endian march=armv6k mfloat-abi=hard
+MULTILIB_DIRNAMES = thumb be armv6k fpu
MULTILIB_EXCEPTIONS =
MULTILIB_MATCHES =
-MULTILIB_REUSE =
-
-# PART 2 - multilib build rules
-
-MULTILIB_OPTIONS += marm/mthumb
-MULTILIB_DIRNAMES += arm thumb
-
-MULTILIB_OPTIONS += mfpu=auto
-MULTILIB_DIRNAMES += autofp
-
-MULTILIB_OPTIONS += march=armv5te+fp/march=armv7+fp
-MULTILIB_DIRNAMES += v5te v7
-
-MULTILIB_OPTIONS += mfloat-abi=hard
-MULTILIB_DIRNAMES += fpu
-
-# Build a total of 4 library variants (base options plus the following):
-MULTILIB_REQUIRED += mthumb
-MULTILIB_REQUIRED += marm/mfpu=auto/march=armv5te+fp/mfloat-abi=hard
-MULTILIB_REQUIRED += mthumb/mfpu=auto/march=armv7+fp/mfloat-abi=hard
-
-# PART 3 - Match rules
-
-# Map all supported FPUs onto mfpu=auto
-MULTILIB_MATCHES += $(foreach FPU, $(dp_fpus), \
- mfpu?auto=mfpu?$(FPU))
-
-MULTILIB_MATCHES += march?armv5te+fp=march?armv5te
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \
- march?armv5te+fp=march?$(ARCH) \
- march?armv5te+fp=march?$(ARCH)+fp)
-
-MULTILIB_MATCHES += march?armv7+fp=march?armv7
-
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7a_fps), \
- march?armv7+fp=march?armv7-a+$(FPARCH))
-
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7ve_fps), \
- march?armv7+fp=march?armv7ve+$(FPARCH))
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v7_a_r), \
- march?armv7+fp=march?$(ARCH) \
- march?armv7+fp=march?$(ARCH)+fp)
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v8_archs), \
- march?armv7+fp=march?$(ARCH) \
- $(foreach FPARCH, $(v8_fps), \
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
+MULTILIB_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard
-MULTILIB_MATCHES += $(foreach ARCH, armv7e-m armv8-m.mainline, \
- march?armv7+fp=march?$(ARCH)+fp.dp)
-# PART 4 - Reuse rules
+MULTILIB_MATCHES += march?armv6k=mtune?mpcore
+MULTILIB_MATCHES += march?armv6k=mcpu?mpcore
-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
diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
index 9ad2947505f..1790caa8e88 100644
--- a/gcc/config/arm/unknown-elf.h
+++ b/gcc/config/arm/unknown-elf.h
@@ -29,7 +29,7 @@
#endif
/* Now we define the strings used to build the spec file. */
-#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
+#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -93,4 +93,5 @@
udivmoddi4, which will depend on the exception unwind routines,
which will depend on abort, which is defined in libc. */
#undef LINK_GCC_C_SEQUENCE_SPEC
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:%L} --end-group"
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
+
diff --git a/gcc/config/i386/host-mingw32.c b/gcc/config/i386/host-mingw32.c
index 250fef59b55..36b2239aa5d 100644
--- a/gcc/config/i386/host-mingw32.c
+++ b/gcc/config/i386/host-mingw32.c
@@ -44,9 +44,6 @@ static size_t mingw32_gt_pch_alloc_granularity (void);
static inline void w32_error(const char*, const char*, int, const char*);
-/* FIXME: Is this big enough? */
-static const size_t pch_VA_max_size = 128 * 1024 * 1024;
-
/* Granularity for reserving address space. */
static size_t va_granularity = 0x10000;
@@ -88,9 +85,6 @@ static void *
mingw32_gt_pch_get_address (size_t size, int)
{
void* res;
- size = (size + va_granularity - 1) & ~(va_granularity - 1);
- if (size > pch_VA_max_size)
- return NULL;
/* FIXME: We let system determine base by setting first arg to NULL.
Allocating at top of available address space avoids unnecessary
@@ -100,7 +94,7 @@ mingw32_gt_pch_get_address (size_t size, int)
If we allocate at bottom we need to reserve the address as early
as possible and at the same point in each invocation. */
- res = VirtualAlloc (NULL, pch_VA_max_size,
+ res = VirtualAlloc (NULL, size,
MEM_RESERVE | MEM_TOP_DOWN,
PAGE_NOACCESS);
if (!res)
@@ -150,7 +144,7 @@ mingw32_gt_pch_use_address (void *addr, size_t size, int fd,
/* Offset must be also be a multiple of allocation granularity for
this to work. We can't change the offset. */
- if ((offset & (va_granularity - 1)) != 0 || size > pch_VA_max_size)
+ if ((offset & (va_granularity - 1)) != 0)
return -1;
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 9f790db0daf..97f52d0b893 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -793,6 +793,11 @@ proper position among the other output files. */
#endif
#endif
+#ifndef LIBGLOSS_SPEC
+# define LIBGLOSS_SPEC "-lsysbase"
+#endif
+
+
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1085,6 +1090,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
+static const char *libgloss_spec = LIBGLOSS_SPEC;
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1582,6 +1588,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
index dddddc7c444..c2502597953 100644
--- a/libgcc/config/arm/t-bpabi
+++ b/libgcc/config/arm/t-bpabi
@@ -17,4 +17,4 @@ SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver
# On ARM, specifying -fnon-call-exceptions will needlessly pull in
# the unwinder in simple programs which use 64-bit division. Omitting
# the option is safe.
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 3f769a1c660..e005d8304b7 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -325,7 +325,7 @@ register_tm_clones (void)
#ifdef OBJECT_FORMAT_ELF
-#if DEFAULT_USE_CXA_ATEXIT
+#if 1 /* DEFAULT_USE_CXA_ATEXIT */
/* Declare the __dso_handle variable. It should have a unique value
in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance

View File

@@ -1,167 +0,0 @@
diff -Nbaur gcc-4.7.0/gcc/config/arm/t-arm-elf gcc-4.7.0-arm/gcc/config/arm/t-arm-elf
--- gcc-4.7.0/gcc/config/arm/t-arm-elf 2011-11-02 15:23:48.000000000 +0000
+++ gcc-4.7.0-arm/gcc/config/arm/t-arm-elf 2012-04-05 20:36:17.000000000 +0100
@@ -26,22 +26,44 @@
#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
+#mfloat-abi=hard|mfpu=fpv4-sp-d16
+
+MULTILIB_OPTIONS += march=armv7/march=armv6-m/mcpu=cortex-m4
+MULTILIB_DIRNAMES += thumb2 armv6-m cortex-m4
+MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7*
+MULTILIB_EXCEPTIONS += march=armv6-m* marm/*march=armv6-m*
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* marm/*mcpu=cortex-m4*
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* mthumb/mcpu=cortex-m4
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* mthumb/mcpu=cortex-m4/mbig-endian
+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
+MULTILIB_MATCHES += march?armv6-m=mcpu?cortex-m0
+MULTILIB_MATCHES += march?armv6-m=mcpu?cortex-m1
+
+MULTILIB_OPTIONS += mfloat-abi=hard mfpu=fpv4-sp-d16
+MULTILIB_DIRNAMES += float-abi-hard fpuv4-sp-d16
+MULTILIB_EXCEPTIONS += mfloat* marm/mfloat*
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mfloat*
+MULTILIB_EXCEPTIONS += mfloat* mthumb*march=armv6-m*mfloat*
+MULTILIB_EXCEPTIONS += mfloat* mthumb*march=armv7*mfloat*
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mcpu=cortex-m4/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mcpu=cortex-m4/mfloat-abi=hard/mbig-endian
+MULTILIB_EXCEPTIONS += mfpu* mthumb*march=armv6-m*mfpu*
+MULTILIB_EXCEPTIONS += mfpu* mthumb*march=armv7*mfpu*
+MULTILIB_EXCEPTIONS += mfpu* mthumb/mcpu=cortex-m4/mfpu*
+MULTILIB_EXCEPTIONS += mfpu* mthumb/mfpu*
+MULTILIB_EXCEPTIONS += mfpu* marm/mfpu*
# 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*
@@ -49,9 +71,9 @@
# 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 += 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
diff -Nbaur gcc-4.7.0/gcc/config/arm/unknown-elf.h gcc-4.7.0-arm/gcc/config/arm/unknown-elf.h
--- gcc-4.7.0/gcc/config/arm/unknown-elf.h 2011-03-31 13:13:13.000000000 +0100
+++ gcc-4.7.0-arm/gcc/config/arm/unknown-elf.h 2012-04-05 20:36:17.000000000 +0100
@@ -94,4 +94,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-4.7.0/gcc/gcc.c gcc-4.7.0-arm/gcc/gcc.c
--- gcc-4.7.0/gcc/gcc.c 2012-02-28 17:31:38.000000000 +0000
+++ gcc-4.7.0-arm/gcc/gcc.c 2012-04-05 20:36:17.000000000 +0100
@@ -548,6 +548,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 \
@@ -717,6 +722,7 @@
static const char *mflib_spec = MFLIB_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;
@@ -1201,6 +1207,7 @@
INIT_STATIC_SPEC ("mflib", &mflib_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-4.7.0/libcpp/Makefile.in gcc-4.7.0-arm/libcpp/Makefile.in
--- gcc-4.7.0/libcpp/Makefile.in 2012-03-22 07:37:39.000000000 +0000
+++ gcc-4.7.0-arm/libcpp/Makefile.in 2012-04-05 20:36:17.000000000 +0100
@@ -214,8 +214,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-4.7.0/libgcc/crtstuff.c gcc-4.7.0-arm/libgcc/crtstuff.c
--- gcc-4.7.0/libgcc/crtstuff.c 2011-12-06 21:35:41.000000000 +0000
+++ gcc-4.7.0-arm/libgcc/crtstuff.c 2012-04-05 20:36:50.000000000 +0100
@@ -49,7 +49,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-4.7.0/libgcc/Makefile.in gcc-4.7.0-arm/libgcc/Makefile.in
--- gcc-4.7.0/libgcc/Makefile.in 2011-11-22 03:01:02.000000000 +0000
+++ gcc-4.7.0-arm/libgcc/Makefile.in 2012-04-05 20:36:17.000000000 +0100
@@ -500,14 +500,14 @@
lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
$(lib2-divmod-o): %$(objext): $(srcdir)/libgcc2.c
$(gcc_compile) -DL$* -c $< \
- -fexceptions -fnon-call-exceptions $(vis_hide)
+ -fno-exceptions -fnon-call-exceptions $(vis_hide)
libgcc-objects += $(lib2-divmod-o)
ifeq ($(enable_shared),yes)
lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
$(lib2-divmod-s-o): %_s$(objext): $(srcdir)/libgcc2.c
$(gcc_s_compile) -DL$* -c $< \
- -fexceptions -fnon-call-exceptions
+ -fno-exceptions -fnon-call-exceptions
libgcc-s-objects += $(lib2-divmod-s-o)
endif
@@ -810,7 +810,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,33 +0,0 @@
diff -Nbaur gdb-7.4/gdb/Makefile.in gdb-7.4-arm/gdb/Makefile.in
--- gdb-7.4/gdb/Makefile.in 2012-01-06 04:43:01.000000000 +0000
+++ gdb-7.4-arm/gdb/Makefile.in 2012-02-28 03:07:12.000000000 +0000
@@ -2195,10 +2195,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)
diff -Nbaur gdb-7.4/sim/common/Make-common.in gdb-7.4-arm/sim/common/Make-common.in
--- gdb-7.4/sim/common/Make-common.in 2012-01-06 04:54:38.000000000 +0000
+++ gdb-7.4-arm/sim/common/Make-common.in 2012-02-28 03:07:41.000000000 +0000
@@ -417,10 +417,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.
-@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@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

File diff suppressed because it is too large Load Diff

View File

@@ -1,137 +0,0 @@
#---------------------------------------------------------------------------------
# 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/arm
export PATH := $(DEVKITARM)/bin:$(PORTLIBS)/bin:$(PATH)
#---------------------------------------------------------------------------------
# the prefix on the compiler executables
#---------------------------------------------------------------------------------
PREFIX := arm-eabi-
export CC := $(PREFIX)gcc
export CXX := $(PREFIX)g++
export AS := $(PREFIX)as
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:
#---------------------------------------------------------------------------------
@echo $(notdir $@)
@rm -f $@
$(AR) -rc $@ $^
#---------------------------------------------------------------------------------
%.arm.o: %.arm.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CXXFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.arm.o: %.arm.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.arm.o: %.arm.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(OBJCFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.thumb.o: %.thumb.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CXXFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.thumb.o: %.thumb.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.thumb.o: %.thumb.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(OBJCFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.iwram.o: %.iwram.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.iwram.o: %.iwram.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.iwram.o: %.iwram.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(OBJCFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.itcm.o: %.itcm.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.itcm.o: %.itcm.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.itcm.o: %.itcm.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(OBJCFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.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: %.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(OBJCFLAGS) -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

View File

@@ -1,52 +0,0 @@
ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
endif
include $(DEVKITARM)/base_rules
LIBNDS := $(DEVKITPRO)/libnds
ifeq ($(strip $(GAME_TITLE)),)
GAME_TITLE := $(notdir $(OUTPUT))
endif
ifeq ($(strip $(GAME_SUBTITLE1)),)
GAME_SUBTITLE1 := www.devkitpro.org
endif
ifeq ($(strip $(GAME_SUBTITLE2)),)
GAME_SUBTITLE2 := www.drunkencoders.com
endif
ifeq ($(strip $(GAME_ICON)),)
GAME_ICON := $(DEVKITPRO)/libnds/icon.bmp
endif
ifneq ($(strip $(NITRO_FILES)),)
_ADDFILES := -d $(NITRO_FILES)
endif
#---------------------------------------------------------------------------------
%.nds: %.arm9
@ndstool -c $@ -9 $< -b $(GAME_ICON) "$(GAME_TITLE);$(GAME_SUBTITLE1);$(GAME_SUBTITLE2)" $(_ADDFILES)
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.nds: %.elf
@ndstool -c $@ -9 $< -b $(GAME_ICON) "$(GAME_TITLE);$(GAME_SUBTITLE1);$(GAME_SUBTITLE2)" $(_ADDFILES)
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.arm9: %.elf
@$(OBJCOPY) -O binary $< $@
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.arm7: %.elf
@$(OBJCOPY) -O binary $< $@
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.elf:
@echo linking $(notdir $@)
@$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@

View File

@@ -1,23 +0,0 @@
ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
endif
include $(DEVKITARM)/base_rules
LIBGBA := $(DEVKITPRO)/libgba
#---------------------------------------------------------------------------------
%.gba: %.elf
@$(OBJCOPY) -O binary $< $@
@echo built ... $(notdir $@)
@gbafix $@
#---------------------------------------------------------------------------------
%_mb.elf:
@echo linking multiboot
@$(LD) -specs=gba_mb.specs $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
#---------------------------------------------------------------------------------
%.elf:
@echo linking cartridge
@$(LD) $(LDFLAGS) -specs=gba.specs $(OFILES) $(LIBPATHS) $(LIBS) -o $@

View File

@@ -1,18 +0,0 @@
-include $(DEVKITARM)/base_rules
LIBMIRKO := $(DEVKITPRO)/libmirko
#---------------------------------------------------------------------------------
%.fxe: %.bin
@b2fxec -a "$(AUTHOR)" -t "$(TITLE)" $< $@
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.bin: %.elf
@$(OBJCOPY) -O binary $< $@
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.elf:
@echo linking binary
@$(LD) $(LDFLAGS) -specs=gp32.specs $(OFILES) $(LIBPATHS) $(LIBS) -o $@

49
dkarm-eabi/scripts/build-crtls.sh Normal file → Executable file
View File

@@ -1,47 +1,26 @@
#!/bin/sh #!/bin/sh
#---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH export DEVKITPRO=$TOOLPATH
export DEVKITARM=$DEVKITPRO/devkitARM export DEVKITARM=$DEVKITPRO/devkitARM
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# copy base rulesets # Install the rules files
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dkarm-eabi/rules/* $prefix cd $BUILDDIR
tar -xvf $SRCDIR/devkitarm-rules-$DKARM_RULES_VER.tar.gz
cd devkitarm-rules-$DKARM_RULES_VER
make install
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Install and build the gba crt # Install and build the crt0 files
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
cd $BUILDDIR
cp -v $BUILDSCRIPTDIR/dkarm-eabi/crtls/* $prefix/arm-eabi/lib/ tar -xvf $SRCDIR/devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz
cd $prefix/arm-eabi/lib/ cd devkitarm-crtls-$DKARM_CRTLS_VER
$MAKE CRT=gba make install
$MAKE CRT=gp32
$MAKE CRT=er
$MAKE CRT=gp32_gpsdk
$MAKE CRT=ds_arm7
$MAKE CRT=ds_arm9
$MAKE CRT=ds_cart
cd $BUILDDIR/libnds-$LIBNDS_VER
$MAKE || { echo "error building libnds"; exit 1; }
$MAKE install || { echo "error installing libnds"; exit 1; }
cd $BUILDDIR/default-arm7-$DEFAULT_ARM7_VER
$MAKE || { echo "error building default arm7"; exit 1; }
$MAKE install || { echo "error installing default arm7"; exit 1; }
cd $BUILDDIR/libfat-$LIBFAT_VER
$MAKE nds-install || { echo "error building nds libfat"; exit 1; }
$MAKE gba-install || { echo "error installing gba libfat"; exit 1; }
cd $BUILDDIR/maxmod-$MAXMOD_VER
$MAKE || { echo "error building maxmod"; exit 1; }
$MAKE install || { echo "error installing maxmod"; exit 1; }
cd $BUILDDIR/libmirko-$LIBMIRKO_VER
$MAKE || { echo "error building libmirko"; exit 1; }
$MAKE install || { echo "error installing libmirko"; exit 1; }
cd $BUILDDIR/libfilesystem-$FILESYSTEM_VER
$MAKE || { echo "error building libfilesystem"; exit 1; }
$MAKE install || { echo "error installing libfilesystem"; exit 1; }

82
dkarm-eabi/scripts/build-gcc.sh Normal file → Executable file
View File

@@ -10,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-dependency-tracking --disable-werror \ --prefix=$prefix --target=$target --disable-nls --disable-werror \
--enable-lto --enable-plugins --enable-poison-system-directories \ --enable-lto --enable-plugins \
--enable-poison-system-directories \
$CROSS_PARAMS \ $CROSS_PARAMS \
|| { echo "Error configuring binutils"; exit 1; } || { echo "Error configuring binutils"; exit 1; }
touch configured-binutils touch configured-binutils
@@ -34,27 +35,40 @@ cd $BUILDDIR
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# build and install just the c compiler # build and install just the c compiler
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
mkdir -p $target/gcc-stage1 mkdir -p $target/gcc
cd $target/gcc-stage1 cd $target/gcc
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \ CPPFLAGS="$cppflags $CPPFLAGS" \
--enable-languages=c,c++,objc,obj-c++ \ 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=armv4t\ --with-march=armv4t\
--enable-cxx-flags='-ffunction-sections' \
--disable-libstdcxx-verbose \
--enable-poison-system-directories \ --enable-poison-system-directories \
--enable-interwork --enable-multilib \ --enable-interwork --enable-multilib \
--disable-dependency-tracking \ --enable-threads --disable-win32-registry --disable-nls --disable-debug\
--disable-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-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 39" \ --with-system-zlib \
--disable-tm-clone-registry \
--disable-__cxa_atexit \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 55" \
$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
@@ -75,6 +89,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
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -83,10 +102,11 @@ cd $target/newlib
if [ ! -f configured-newlib ] if [ ! -f configured-newlib ]
then then
CFLAGS_FOR_TARGET="-DREENTRANT_SYSCALLS_PROVIDED -D__DEFAULT_UTF8__ -O2" ../../newlib-$NEWLIB_VER/configure \ CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
../../newlib-$NEWLIB_VER/configure \
--disable-newlib-supplied-syscalls \ --disable-newlib-supplied-syscalls \
--enable-newlib-mb \ --enable-newlib-mb \
--enable-newlib-io-long-long \ --disable-newlib-wide-orient \
--target=$target \ --target=$target \
--prefix=$prefix \ --prefix=$prefix \
|| { echo "Error configuring newlib"; exit 1; } || { echo "Error configuring newlib"; exit 1; }
@@ -102,10 +122,13 @@ 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
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -129,34 +152,3 @@ fi
rm -fr $prefix/$target/sys-include rm -fr $prefix/$target/sys-include
cd $BUILDDIR cd $BUILDDIR
#---------------------------------------------------------------------------------
# build and install the debugger
#---------------------------------------------------------------------------------
mkdir -p $target/gdb
cd $target/gdb
PLATFORM=`uname -s`
if [ ! -f configured-gdb ]
then
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \
--disable-dependency-tracking \
$CROSS_PARAMS \
|| { echo "Error configuring gdb"; exit 1; }
touch configured-gdb
fi
if [ ! -f built-gdb ]
then
$MAKE || { echo "Error building gdb"; exit 1; }
touch built-gdb
fi
if [ ! -f installed-gdb ]
then
$MAKE install || { echo "Error installing gdb"; exit 1; }
touch installed-gdb
fi

View File

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

View File

@@ -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,149 +0,0 @@
diff -Nbaur binutils-2.22/bfd/bfd-in2.h binutils-2.22-ppc/bfd/bfd-in2.h
--- binutils-2.22/bfd/bfd-in2.h 2011-09-16 02:15:18.000000000 +0100
+++ binutils-2.22-ppc/bfd/bfd-in2.h 2012-04-03 15:06:10.000000000 +0100
@@ -38,6 +38,8 @@
#include "ansidecl.h"
#include "symcat.h"
+#include <sys/stat.h>
+
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
#ifndef SABER
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
@@ -308,8 +310,6 @@
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
-/* Forward define. */
-struct stat;
typedef enum bfd_print_symbol
{
diff -Nbaur binutils-2.22/bfd/bfd-in.h binutils-2.22-ppc/bfd/bfd-in.h
--- binutils-2.22/bfd/bfd-in.h 2011-09-16 02:15:18.000000000 +0100
+++ binutils-2.22-ppc/bfd/bfd-in.h 2012-04-03 15:06:10.000000000 +0100
@@ -31,6 +31,8 @@
#include "ansidecl.h"
#include "symcat.h"
+#include <sys/stat.h>
+
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
#ifndef SABER
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
@@ -301,8 +303,6 @@
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
-/* Forward define. */
-struct stat;
typedef enum bfd_print_symbol
{
diff -Nbaur binutils-2.22/bfd/config.in binutils-2.22-ppc/bfd/config.in
--- binutils-2.22/bfd/config.in 2011-05-12 08:41:40.000000000 +0100
+++ binutils-2.22-ppc/bfd/config.in 2012-04-03 14:50:51.000000000 +0100
@@ -245,6 +245,9 @@
/* Define if <sys/procfs.h> has win32_pstatus_t. */
#undef HAVE_WIN32_PSTATUS_T
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
/* Define to 1 if you have the <zlib.h> header file. */
#undef HAVE_ZLIB_H
diff -Nbaur binutils-2.22/bfd/configure binutils-2.22-ppc/bfd/configure
--- binutils-2.22/bfd/configure 2011-11-21 11:55:48.000000000 +0000
+++ binutils-2.22-ppc/bfd/configure 2012-04-03 14:50:59.000000000 +0100
@@ -13508,6 +13508,22 @@
fi
+
+for ac_header in windows.h dlfcn.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+ if test "x$as_val" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
if test "${gcc_cv_header_string+set}" = set; then :
diff -Nbaur binutils-2.22/bfd/configure.in binutils-2.22-ppc/bfd/configure.in
--- binutils-2.22/bfd/configure.in 2011-11-21 11:55:46.000000000 +0000
+++ binutils-2.22-ppc/bfd/configure.in 2012-04-03 14:51:23.000000000 +0100
@@ -190,6 +190,9 @@
GCC_HEADER_STDINT(bfd_stdint.h)
AC_HEADER_TIME
AC_HEADER_DIRENT
+
+AC_CHECK_HEADERS(windows.h dlfcn.h)
+
ACX_HEADER_STRING
AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno)
AC_CHECK_FUNCS(strtoull)
diff -Nbaur binutils-2.22/bfd/plugin.c binutils-2.22-ppc/bfd/plugin.c
--- binutils-2.22/bfd/plugin.c 2011-07-11 16:03:07.000000000 +0100
+++ binutils-2.22-ppc/bfd/plugin.c 2012-04-03 14:51:32.000000000 +0100
@@ -25,7 +25,13 @@
#if BFD_SUPPORTS_PLUGINS
#include <assert.h>
+#ifdef HAVE_DLFCN_H
#include <dlfcn.h>
+#elif defined (HAVE_WINDOWS_H)
+#include <windows.h>
+#else
+#error Unknown how to handle dynamic-load-libraries.
+#endif
#include <stdarg.h>
#include "plugin-api.h"
#include "sysdep.h"
@@ -34,6 +40,37 @@
#include "libiberty.h"
#include <dirent.h>
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
+
+#define RTLD_NOW 0 /* Dummy value. */
+
+static void *
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
+{
+ return LoadLibrary (file);
+}
+
+static void *
+dlsym (void *handle, const char *name)
+{
+ return GetProcAddress (handle, name);
+}
+
+static int ATTRIBUTE_UNUSED
+dlclose (void *handle)
+{
+ FreeLibrary (handle);
+ return 0;
+}
+
+static const char *
+dlerror (void)
+{
+ return "Unable to load DLL.";
+}
+
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) */
+
#define bfd_plugin_close_and_cleanup _bfd_generic_close_and_cleanup
#define bfd_plugin_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
#define bfd_plugin_new_section_hook _bfd_generic_new_section_hook

View File

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

View File

@@ -0,0 +1,12 @@
diff -NBaur binutils-2.34/opcodes/ppc-opc.c binutils-2.34-ppc/opcodes/ppc-opc.c
--- binutils-2.34/opcodes/ppc-opc.c 2020-01-18 13:55:49.000000000 +0000
+++ binutils-2.34-ppc/opcodes/ppc-opc.c 2020-05-22 10:47:37.900308413 +0000
@@ -3747,7 +3747,7 @@
#define MFDEC2 (PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE \
| PPC_OPCODE_TITAN)
#define BOOKE PPC_OPCODE_BOOKE
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
#define PPCE300 PPC_OPCODE_E300
#define PPCSPE PPC_OPCODE_SPE
#define PPCSPE2 PPC_OPCODE_SPE2

View File

@@ -0,0 +1,904 @@
diff --git a/config/gthr.m4 b/config/gthr.m4
index 4b937306ad0..bfd0375bd60 100644
--- a/config/gthr.m4
+++ b/config/gthr.m4
@@ -13,6 +13,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER],
case $1 in
aix) thread_header=config/rs6000/gthr-aix.h ;;
dce) thread_header=config/pa/gthr-dce.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/gcc/config/i386/host-mingw32.c b/gcc/config/i386/host-mingw32.c
index 250fef59b55..36b2239aa5d 100644
--- a/gcc/config/i386/host-mingw32.c
+++ b/gcc/config/i386/host-mingw32.c
@@ -44,9 +44,6 @@ static size_t mingw32_gt_pch_alloc_granularity (void);
static inline void w32_error(const char*, const char*, int, const char*);
-/* FIXME: Is this big enough? */
-static const size_t pch_VA_max_size = 128 * 1024 * 1024;
-
/* Granularity for reserving address space. */
static size_t va_granularity = 0x10000;
@@ -88,9 +85,6 @@ static void *
mingw32_gt_pch_get_address (size_t size, int)
{
void* res;
- size = (size + va_granularity - 1) & ~(va_granularity - 1);
- if (size > pch_VA_max_size)
- return NULL;
/* FIXME: We let system determine base by setting first arg to NULL.
Allocating at top of available address space avoids unnecessary
@@ -100,7 +94,7 @@ mingw32_gt_pch_get_address (size_t size, int)
If we allocate at bottom we need to reserve the address as early
as possible and at the same point in each invocation. */
- res = VirtualAlloc (NULL, pch_VA_max_size,
+ res = VirtualAlloc (NULL, size,
MEM_RESERVE | MEM_TOP_DOWN,
PAGE_NOACCESS);
if (!res)
@@ -150,7 +144,7 @@ mingw32_gt_pch_use_address (void *addr, size_t size, int fd,
/* Offset must be also be a multiple of allocation granularity for
this to work. We can't change the offset. */
- if ((offset & (va_granularity - 1)) != 0 || size > pch_VA_max_size)
+ if ((offset & (va_granularity - 1)) != 0)
return -1;
diff --git a/gcc/config/newlib-stdint.h b/gcc/config/newlib-stdint.h
index 2e086f16de9..1c27c6467bc 100644
--- a/gcc/config/newlib-stdint.h
+++ b/gcc/config/newlib-stdint.h
@@ -25,7 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* newlib uses 32-bit long in certain cases for all non-SPU
targets. */
#ifndef STDINT_LONG32
-#define STDINT_LONG32 (LONG_TYPE_SIZE == 32)
+#define STDINT_LONG32 0
#endif
#define SIG_ATOMIC_TYPE "int"
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 132ca20fd7d..119ee5bbc8c 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -196,6 +196,7 @@ ASM_OPT_ANY
/* -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. */
+#if 0
#if defined(__powerpc__) || defined(__POWERPC__) || defined(_AIX)
/* In driver-rs6000.c. */
extern const char *host_detect_local_cpu (int argc, const char **argv);
@@ -207,6 +208,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 9ade72114e9..cede792d3a7 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -590,7 +590,11 @@ GNU_USER_TARGET_CC1_SPEC
/* 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) ; \
+ mads : %(link_start_ads) ; \
myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \
@@ -621,7 +625,8 @@ GNU_USER_TARGET_CC1_SPEC
/* Any specific OS flags. */
#define LINK_OS_SPEC "\
-%{mads : %(link_os_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
+ mads : %(link_os_ads) ; \
myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \
@@ -636,7 +641,10 @@ GNU_USER_TARGET_CC1_SPEC
/* 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) ; \
+ mads : %(cpp_os_ads) ; \
myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \
@@ -650,7 +658,10 @@ GNU_USER_TARGET_CC1_SPEC
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
-%{mads : %(startfile_ads) ; \
+%{mgcn : %(startfile_gcn) ; \
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
+ mrvl : %(startfile_ogc) ; \
+ mads : %(startfile_ads) ; \
myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \
@@ -664,7 +675,8 @@ GNU_USER_TARGET_CC1_SPEC
#undef LIB_SPEC
#define LIB_SPEC "\
-%{mads : %(lib_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
+ mads : %(lib_ads) ; \
myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \
@@ -674,11 +686,12 @@ GNU_USER_TARGET_CC1_SPEC
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) ; \
+ mads : %(endfile_ads) ; \
myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \
@@ -694,16 +707,27 @@ GNU_USER_TARGET_CC1_SPEC
/* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
+#define LIB_OGC_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 ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_OGC_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_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 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"
/* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -851,6 +875,7 @@ ncrtn.o%s"
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
+ { "lib_ogc", LIB_OGC_SPEC }, \
{ "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \
@@ -860,6 +885,7 @@ ncrtn.o%s"
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -869,6 +895,7 @@ ncrtn.o%s"
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -880,7 +907,11 @@ 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_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 }, \
@@ -890,6 +921,7 @@ 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_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -901,6 +933,9 @@ 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_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 b49ba261f3c..4eda763dfca 100644
--- a/gcc/config/rs6000/sysv4.opt
+++ b/gcc/config/rs6000/sysv4.opt
@@ -124,6 +124,26 @@ 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
+
myellowknife
Target RejectNegative
Link with libyk.a, libc.a and crt0.o.
diff --git a/gcc/configure b/gcc/configure
index eb6061c1631..4c6e993ca3a 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -12208,7 +12208,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 715fcba0482..779743b69ee 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1800,7 +1800,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 260fe4d1af6..664808cd19c 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 7e1d5c5df98..2c62480d165 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 00000000000..26180aa7f36
--- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.c
@@ -0,0 +1,319 @@
+/* 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/>. */
+
+#define _BUILDING_LIBGCC
+#include "gthr-dkp.h"
+#include <stddef.h>
+
+
+int
+__gthread_active_p (void)
+{
+ if (!__has_gthr_impl(active)) {
+ return 0;
+ }
+
+ return __gthr_impl_active();
+}
+
+int
+__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
+ void *__args)
+{
+ if (!__has_gthr_impl(create)) {
+ return -1;
+ }
+
+ return __gthr_impl_create(__threadid, __func, __args);
+}
+
+int
+__gthread_join (__gthread_t __threadid, void **__value_ptr)
+{
+ if (!__has_gthr_impl(join)) {
+ return -1;
+ }
+
+ return __gthr_impl_join(__threadid, __value_ptr);
+}
+
+int
+__gthread_detach (__gthread_t __threadid)
+{
+ if (!__has_gthr_impl(detach)) {
+ return -1;
+ }
+
+ return __gthr_impl_detach(__threadid);
+}
+
+int
+__gthread_equal (__gthread_t __t1, __gthread_t __t2)
+{
+ if (!__has_gthr_impl(equal)) {
+ return -1;
+ }
+
+ return __gthr_impl_equal(__t1, __t2);
+}
+
+__gthread_t
+__gthread_self (void)
+{
+ if (!__has_gthr_impl(self)) {
+ __gthread_t result = { 0 };
+ return result;
+ }
+
+ return __gthr_impl_self();
+}
+
+int
+__gthread_yield (void)
+{
+ if (!__has_gthr_impl(yield)) {
+ return -1;
+ }
+
+ return __gthr_impl_yield();
+}
+
+int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ if (!__has_gthr_impl(once)) {
+ return -1;
+ }
+
+ return __gthr_impl_once(__once, __func);
+}
+
+int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+ if (!__has_gthr_impl(key_create)) {
+ return -1;
+ }
+
+ return __gthr_impl_key_create(__key, __dtor);
+}
+
+int
+__gthread_key_delete (__gthread_key_t __key)
+{
+ if (!__has_gthr_impl(key_delete)) {
+ return -1;
+ }
+
+ return __gthr_impl_key_delete(__key);
+}
+
+void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+ if (!__has_gthr_impl(getspecific)) {
+ return NULL;
+ }
+
+ return __gthr_impl_getspecific(__key);
+}
+
+int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+ if (!__has_gthr_impl(setspecific)) {
+ return -1;
+ }
+
+ return __gthr_impl_setspecific(__key, __ptr);
+}
+
+void
+__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
+{
+ if (__has_gthr_impl(mutex_init_function)) {
+ __gthr_impl_mutex_init_function(__mutex);
+ }
+}
+
+int
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(mutex_destroy)) {
+ return -1;
+ }
+
+ return __gthr_impl_mutex_destroy(__mutex);
+}
+
+int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(mutex_lock)) {
+ return -1;
+ }
+
+ return __gthr_impl_mutex_lock(__mutex);
+}
+
+int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(mutex_trylock)) {
+ return -1;
+ }
+
+ return __gthr_impl_mutex_trylock(__mutex);
+}
+
+int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(mutex_unlock)) {
+ return -1;
+ }
+
+ return __gthr_impl_mutex_unlock(__mutex);
+}
+
+int
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(recursive_mutex_init_function)) {
+ return -1;
+ }
+
+ return __gthr_impl_recursive_mutex_init_function(__mutex);
+}
+
+int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(recursive_mutex_lock)) {
+ return -1;
+ }
+
+ return __gthr_impl_recursive_mutex_lock(__mutex);
+}
+
+int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(recursive_mutex_trylock)) {
+ return -1;
+ }
+
+ return __gthr_impl_recursive_mutex_trylock(__mutex);
+}
+
+int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(recursive_mutex_unlock)) {
+ return -1;
+ }
+
+ return __gthr_impl_recursive_mutex_unlock(__mutex);
+}
+
+int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(recursive_mutex_destroy)) {
+ return -1;
+ }
+
+ return __gthr_impl_recursive_mutex_destroy(__mutex);
+}
+
+void
+__gthread_cond_init_function (__gthread_cond_t *__cond)
+{
+ if (__has_gthr_impl(cond_init_function)) {
+ __gthr_impl_cond_init_function(__cond);
+ }
+}
+
+int
+__gthread_cond_broadcast (__gthread_cond_t *__cond)
+{
+ if (!__has_gthr_impl(cond_broadcast)) {
+ return -1;
+ }
+
+ return __gthr_impl_cond_broadcast(__cond);
+}
+
+int
+__gthread_cond_signal (__gthread_cond_t *__cond)
+{
+ if (!__has_gthr_impl(cond_signal)) {
+ return -1;
+ }
+
+ return __gthr_impl_cond_signal(__cond);
+}
+
+int
+__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(cond_wait)) {
+ return -1;
+ }
+
+ return __gthr_impl_cond_wait(__cond, __mutex);
+}
+
+int
+__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout)
+{
+ if (!__has_gthr_impl(cond_timedwait)) {
+ return -1;
+ }
+
+ return __gthr_impl_cond_timedwait(__cond, __mutex, __abs_timeout);
+}
+
+int
+__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex)
+{
+ if (!__has_gthr_impl(cond_wait_recursive)) {
+ return -1;
+ }
+
+ return __gthr_impl_cond_wait_recursive(__cond, __mutex);
+}
+
+int
+__gthread_cond_destroy (__gthread_cond_t* __cond)
+{
+ if (!__has_gthr_impl(cond_destroy)) {
+ return -1;
+ }
+
+ return __gthr_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 00000000000..72ecf82ab83
--- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.h
@@ -0,0 +1,187 @@
+/* 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
+
+#ifdef _BUILDING_LIBGCC
+#define __GTHR_IMPL(_name) __attribute__((weak)) __gthr_impl_##_name
+#define __has_gthr_impl(_name) (&__gthr_impl_##_name)
+#else
+#define __GTHR_IMPL(_name) __gthr_impl_##_name
+#endif
+
+int __GTHR_IMPL(active) (void);
+int __GTHR_IMPL(create) (__gthread_t *__threadid, void *(*__func) (void*), void *__args);
+int __GTHR_IMPL(join) (__gthread_t __threadid, void **__value_ptr);
+int __GTHR_IMPL(detach) (__gthread_t __threadid);
+int __GTHR_IMPL(equal) (__gthread_t __t1, __gthread_t __t2);
+__gthread_t __GTHR_IMPL(self) (void);
+int __GTHR_IMPL(yield) (void);
+int __GTHR_IMPL(once) (__gthread_once_t *__once, void (*__func) (void));
+int __GTHR_IMPL(key_create) (__gthread_key_t *__key, void (*__dtor) (void *));
+int __GTHR_IMPL(key_delete) (__gthread_key_t __key);
+void * __GTHR_IMPL(getspecific) (__gthread_key_t __key);
+int __GTHR_IMPL(setspecific) (__gthread_key_t __key, const void *__ptr);
+void __GTHR_IMPL(mutex_init_function) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(mutex_destroy) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(mutex_lock) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(mutex_trylock) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(mutex_unlock) (__gthread_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_init_function) (__gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_lock) (__gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_trylock) (__gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_unlock) (__gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(recursive_mutex_destroy) (__gthread_recursive_mutex_t *__mutex);
+void __GTHR_IMPL(cond_init_function) (__gthread_cond_t *__cond);
+int __GTHR_IMPL(cond_broadcast) (__gthread_cond_t *__cond);
+int __GTHR_IMPL(cond_signal) (__gthread_cond_t *__cond);
+int __GTHR_IMPL(cond_wait) (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex);
+int __GTHR_IMPL(cond_timedwait) (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+ const __gthread_time_t *__abs_timeout);
+int __GTHR_IMPL(cond_wait_recursive) (__gthread_cond_t *__cond,
+ __gthread_recursive_mutex_t *__mutex);
+int __GTHR_IMPL(cond_destroy) (__gthread_cond_t* __cond);
+
+int
+__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 fb812d3801f..7f6669d530f 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 26bf75789e0..1f663d2cfb0 100755
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -5640,6 +5640,7 @@ tm_file="${tm_file_}"
case $target_thread_file in
aix) thread_header=config/rs6000/gthr-aix.h ;;
dce) thread_header=config/pa/gthr-dce.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 3f769a1c660..e005d8304b7 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -325,7 +325,7 @@ register_tm_clones (void)
#ifdef OBJECT_FORMAT_ELF
-#if DEFAULT_USE_CXA_ATEXIT
+#if 1 /* DEFAULT_USE_CXA_ATEXIT */
/* Declare the __dso_handle variable. It should have a unique value
in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 9f9c5a2419a..c9bb6c548be 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -15637,6 +15637,7 @@ $as_echo "$target_thread_file" >&6; }
case $target_thread_file in
aix) thread_header=config/rs6000/gthr-aix.h ;;
dce) thread_header=config/pa/gthr-dce.h ;;
+ dkp) thread_header=config/rs6000/gthr-dkp.h ;;
gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;;

View File

@@ -1,237 +0,0 @@
diff -Nbaur gcc-4.6.3/gcc/config/rs6000/rs6000.h gcc-4.6.3-ppc/gcc/config/rs6000/rs6000.h
--- gcc-4.6.3/gcc/config/rs6000/rs6000.h 2011-07-27 19:17:15.000000000 +0100
+++ gcc-4.6.3-ppc/gcc/config/rs6000/rs6000.h 2012-04-21 22:54:04.000000000 +0100
@@ -200,6 +200,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. */
@@ -214,6 +215,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-4.6.3/gcc/config/rs6000/sysv4.h gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.h
--- gcc-4.6.3/gcc/config/rs6000/sysv4.h 2011-03-07 07:50:23.000000000 +0000
+++ gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.h 2012-04-21 22:54:04.000000000 +0100
@@ -603,7 +603,11 @@
/* 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) ; \
+ mads : %(link_start_ads) ; \
myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \
@@ -641,7 +645,8 @@
/* Any specific OS flags. */
#define LINK_OS_SPEC "\
-%{mads : %(link_os_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
+ mads : %(link_os_ads) ; \
myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \
@@ -660,7 +665,10 @@
/* 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) ; \
+ mads : %(cpp_os_ads) ; \
myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \
@@ -675,7 +683,10 @@
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
-%{mads : %(startfile_ads) ; \
+%{mgcn : %(startfile_gcn) ; \
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
+ mrvl : %(startfile_ogc) ; \
+ mads : %(startfile_ads) ; \
myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \
@@ -686,11 +697,12 @@
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) ; \
+ mads : %(lib_ads) ; \
myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \
@@ -701,11 +713,12 @@
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) ; \
+ mads : %(endfile_ads) ; \
myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \
@@ -722,16 +735,27 @@
/* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
+#define LIB_OGC_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 ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_OGC_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_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 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"
/* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -926,6 +950,7 @@
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
+ { "lib_ogc", LIB_OGC_SPEC }, \
{ "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \
@@ -936,6 +961,7 @@
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -946,6 +972,7 @@
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -959,7 +986,11 @@
{ "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_target", LINK_TARGET_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_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 }, \
@@ -970,6 +1001,7 @@
{ "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_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -984,6 +1016,9 @@
{ "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \
{ "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
+ { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
+ { "cpp_os_rvl", CPP_OS_RVL_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-4.6.3/gcc/config/rs6000/sysv4.opt gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.opt
--- gcc-4.6.3/gcc/config/rs6000/sysv4.opt 2011-01-03 20:52:22.000000000 +0000
+++ gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.opt 2012-04-21 22:54:04.000000000 +0100
@@ -108,6 +108,26 @@
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
+
myellowknife
Target RejectNegative
Link with libyk.a, libc.a and crt0.o
diff -Nbaur gcc-4.6.3/gcc/config.gcc gcc-4.6.3-ppc/gcc/config.gcc
--- gcc-4.6.3/gcc/config.gcc 2011-07-22 17:44:50.000000000 +0100
+++ gcc-4.6.3-ppc/gcc/config.gcc 2012-04-21 22:54:04.000000000 +0100
@@ -2133,7 +2133,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-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
use_gcc_stdint=wrap
diff -Nbaur gcc-4.6.3/libcpp/Makefile.in gcc-4.6.3-ppc/libcpp/Makefile.in
--- gcc-4.6.3/libcpp/Makefile.in 2012-03-01 12:03:46.000000000 +0000
+++ gcc-4.6.3-ppc/libcpp/Makefile.in 2012-04-21 22:54:04.000000000 +0100
@@ -212,8 +212,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)

View File

@@ -1,30 +0,0 @@
diff -Nbaur gdb-7.4/gdb/Makefile.in gdb-7.4-ppc/gdb/Makefile.in
--- gdb-7.4/gdb/Makefile.in 2012-01-06 04:43:01.000000000 +0000
+++ gdb-7.4-ppc/gdb/Makefile.in 2012-01-28 15:56:00.000000000 +0000
@@ -2195,10 +2195,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)
diff -Nbaur gdb-7.4/sim/ppc/Makefile.in gdb-7.4-ppc/sim/ppc/Makefile.in
--- gdb-7.4/sim/ppc/Makefile.in 2009-09-16 00:26:44.000000000 +0100
+++ gdb-7.4-ppc/sim/ppc/Makefile.in 2012-02-25 13:30:02.000000000 +0000
@@ -551,7 +551,7 @@
PACKAGE_OBJ = @sim_pk_obj@
-psim: $(TARGETLIB) main.o $(LIBIBERTY_LIB) $(BFD_LIB) $(LIBS) $(LIBINTL_DEP)
+psim: $(TARGETLIB) main.o $(LIBIBERTY_LIB) $(BFD_LIB) $(LIBINTL_DEP)
$(CC) $(CFLAGS) $(SIM_CFLAGS) $(LDFLAGS) -o psim$(EXEEXT) main.o $(TARGETLIB) $(BFD_LIB) $(LIBINTL) $(LIBIBERTY_LIB) $(LIBS)
run: psim

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,79 +0,0 @@
#---------------------------------------------------------------------------------
# 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:
#---------------------------------------------------------------------------------
@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: %.m
@echo $(notdir $<)
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(OBJCFLAGS) -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 -a 32 $< | $(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

View File

@@ -1,25 +0,0 @@
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPro/devkitPPC)
endif
export LIBOGC_INC := $(DEVKITPRO)/libogc/include
export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/cube
include $(DEVKITPPC)/base_rules
MACHDEP = -DGEKKO -mogc -mcpu=750 -meabi -mhard-float
#---------------------------------------------------------------------------------
%.dol: %.elf
@echo output ... $(notdir $@)
@elf2dol $< $@
#---------------------------------------------------------------------------------
%.tpl : %.scf
@echo $(notdir $<)
@gxtexconv -s $< -d $(DEPSDIR)/$*.d -o $@
#---------------------------------------------------------------------------------
%.elf:
@echo linking ... $(notdir $@)
@$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@

View File

@@ -1,25 +0,0 @@
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPro/devkitPPC)
endif
export LIBOGC_INC := $(DEVKITPRO)/libogc/include
export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/wii
MACHDEP = -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float
include $(DEVKITPPC)/base_rules
#---------------------------------------------------------------------------------
%.dol: %.elf
@echo output ... $(notdir $@)
@elf2dol $< $@
#---------------------------------------------------------------------------------
%.tpl : %.scf
@echo $(notdir $<)
@gxtexconv -s $< -d $(DEPSDIR)/$*.d -o $@
#---------------------------------------------------------------------------------
%.elf:
@echo linking ... $(notdir $@)
@$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@

36
dkppc/scripts/build-crtls.sh Normal file → Executable file
View File

@@ -1,32 +1,16 @@
#!/bin/bash #!/bin/sh
export DEVKITPPC=$TOOLPATH/devkitPPC #---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH export DEVKITPRO=$TOOLPATH
export DEVKITPPC=$DEVKITPRO/devkitPPC
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Install and build the gamecube crt and libogc # Install the rules files
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
cd $BUILDDIR
echo "installing linkscripts ..." tar -xvf $SRCDIR/devkitppc-rules-$DKPPC_RULES_VER.tar.gz
cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/ cd devkitppc-rules-$DKPPC_RULES_VER
#--------------------------------------------------------------------------------- make install
# 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

79
dkppc/scripts/build-gcc.sh Normal file → Executable file
View File

@@ -16,7 +16,7 @@ then
--prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \ --prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \
--disable-werror \ --disable-werror \
--enable-poison-system-directories \ --enable-poison-system-directories \
--enable-plugins --enable-lto --disable-dependency-tracking \ --enable-plugins --enable-lto \
--disable-werror $CROSS_PARAMS \ --disable-werror $CROSS_PARAMS \
|| { echo "Error configuing ppc binutils"; exit 1; } || { echo "Error configuing ppc binutils"; exit 1; }
touch configured-binutils touch configured-binutils
@@ -40,14 +40,17 @@ cd $BUILDDIR
# build and install mn10200 binutils # build and install mn10200 binutils
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Use modern config.sub for aarch64 host
cp binutils-$BINUTILS_VER/config.sub binutils-$MN_BINUTILS_VER/config.sub
mkdir -p mn10200/binutils mkdir -p mn10200/binutils
cd mn10200/binutils cd mn10200/binutils
if [ ! -f configured-binutils ] if [ ! -f configured-binutils ]
then then
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \ CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$MN_BINUTILS_VER/configure \
--prefix=$prefix --target=mn10200 --disable-nls --disable-debug \ --prefix=$prefix --target=mn10200 --disable-nls --disable-debug \
--disable-dependency-tracking \ --disable-multilib \
--disable-werror $CROSS_PARAMS \ --disable-werror $CROSS_PARAMS \
|| { echo "Error configuing mn10200 binutils"; exit 1; } || { echo "Error configuing mn10200 binutils"; exit 1; }
touch configured-binutils touch configured-binutils
@@ -75,20 +78,32 @@ cd $target/gcc
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_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 \
--enable-libstdcxx-time=yes \
--enable-libstdcxx-filesystem-ts \
--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\
--disable-dependency-tracking \ --with-system-zlib\
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPPC release 26" \ --with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 38" \
$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
@@ -115,13 +130,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
@@ -133,10 +153,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
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -159,31 +182,11 @@ 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/
cd $BUILDDIR cd $BUILDDIR
#---------------------------------------------------------------------------------
# build and install the debugger
#---------------------------------------------------------------------------------
mkdir -p $target/gdb
cd $target/gdb
if [ ! -f configured-gdb ]
then
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror --disable-dependency-tracking\
$CROSS_PARAMS || { echo "Error configuring gdb"; exit 1; }
touch configured-gdb
fi
if [ ! -f built-gdb ]
then
$MAKE || { echo "Error building gdb"; exit 1; }
touch built-gdb
fi
if [ ! -f installed-gdb ]
then
$MAKE install || { echo "Error installing gdb"; exit 1; }
touch installed-gdb
fi

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -1,843 +0,0 @@
diff -Nbaur gcc-4.6.3/config.sub gcc-4.6.3-psp/config.sub
--- gcc-4.6.3/config.sub 2010-05-25 14:22:07.000000000 +0100
+++ gcc-4.6.3-psp/config.sub 2012-04-04 22:37:30.000000000 +0100
@@ -279,6 +279,7 @@
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
| mipstx39 | mipstx39el \
+ | mipsallegrex | mipsallegrexel \
| mn10200 | mn10300 \
| moxie \
| mt \
@@ -375,6 +376,7 @@
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipstx39-* | mipstx39el-* \
+ | mipsallegrex-* | mipsallegrexel-* \
| mmix-* \
| mt-* \
| msp430-* \
@@ -771,6 +773,10 @@
basic_machine=m68k-atari
os=-mint
;;
+ psp)
+ basic_machine=mipsallegrexel-psp
+ os=-elf
+ ;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
diff -Nbaur gcc-4.6.3/gcc/config/mips/allegrex.md gcc-4.6.3-psp/gcc/config/mips/allegrex.md
--- gcc-4.6.3/gcc/config/mips/allegrex.md 1970-01-01 01:00:00.000000000 +0100
+++ gcc-4.6.3-psp/gcc/config/mips/allegrex.md 2012-04-04 22:37:30.000000000 +0100
@@ -0,0 +1,191 @@
+;; Sony ALLEGREX instructions.
+;; Copyright (C) 2005 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 2, or (at your option)
+;; any later version.
+;;
+;; GCC is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING. If not, write to
+;; the Free Software Foundation, 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+(define_c_enum "unspec" [
+ UNSPEC_WSBH
+ UNSPEC_CLO
+ UNSPEC_CTO
+ UNSPEC_CACHE
+ UNSPEC_CEIL_W_S
+ UNSPEC_FLOOR_W_S
+ UNSPEC_ROUND_W_S
+])
+
+;; Multiply Add and Subtract.
+;; Note: removed clobbering for madd and msub (testing needed)
+
+(define_insn "allegrex_madd"
+ [(set (match_operand:SI 0 "register_operand" "+l")
+ (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d"))
+ (match_dup 0)))]
+ "TARGET_ALLEGREX"
+ "madd\t%1,%2"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "allegrex_msub"
+ [(set (match_operand:SI 0 "register_operand" "+l")
+ (minus:SI (match_dup 0)
+ (mult:SI (match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d"))))]
+ "TARGET_ALLEGREX"
+ "msub\t%1,%2"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+
+;; Min and max.
+
+(define_insn "sminsi3"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (smin:SI (match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d")))]
+ "TARGET_ALLEGREX"
+ "min\t%0,%1,%2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "smaxsi3"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (smax:SI (match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d")))]
+ "TARGET_ALLEGREX"
+ "max\t%0,%1,%2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+
+;; Extended shift instructions.
+
+(define_insn "allegrex_bitrev"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")]
+ UNSPEC_BITREV))]
+ "TARGET_ALLEGREX"
+ "bitrev\t%0,%1"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "allegrex_wsbh"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")]
+ UNSPEC_WSBH))]
+ "TARGET_ALLEGREX"
+ "wsbh\t%0,%1"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "bswapsi2"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (bswap:SI (match_operand:SI 1 "register_operand" "d")))]
+ "TARGET_ALLEGREX"
+ "wsbw\t%0,%1"
+ [(set_attr "type" "shift")
+ (set_attr "mode" "SI")])
+
+
+;; Count leading ones, count trailing zeros, and count trailing ones (clz is
+;; already defined).
+
+(define_insn "allegrex_clo"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")]
+ UNSPEC_CLO))]
+ "TARGET_ALLEGREX"
+ "clo\t%0,%1"
+ [(set_attr "type" "clz")
+ (set_attr "mode" "SI")])
+
+(define_expand "ctzsi2"
+ [(set (match_operand:SI 0 "register_operand")
+ (ctz:SI (match_operand:SI 1 "register_operand")))]
+ "TARGET_ALLEGREX"
+{
+ rtx r1;
+
+ r1 = gen_reg_rtx (SImode);
+ emit_insn (gen_allegrex_bitrev (r1, operands[1]));
+ emit_insn (gen_clzsi2 (operands[0], r1));
+ DONE;
+})
+
+(define_expand "allegrex_cto"
+ [(set (match_operand:SI 0 "register_operand")
+ (unspec:SI [(match_operand:SI 1 "register_operand")]
+ UNSPEC_CTO))]
+ "TARGET_ALLEGREX"
+{
+ rtx r1;
+
+ r1 = gen_reg_rtx (SImode);
+ emit_insn (gen_allegrex_bitrev (r1, operands[1]));
+ emit_insn (gen_allegrex_clo (operands[0], r1));
+ DONE;
+})
+
+
+;; Misc.
+
+(define_insn "allegrex_sync"
+ [(unspec_volatile [(const_int 0)] UNSPEC_SYNC)]
+ "TARGET_ALLEGREX"
+ "sync"
+ [(set_attr "type" "unknown")
+ (set_attr "mode" "none")])
+
+(define_insn "allegrex_cache"
+ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "")
+ (match_operand:SI 1 "register_operand" "d")]
+ UNSPEC_CACHE)]
+ "TARGET_ALLEGREX"
+ "cache\t%0,0(%1)"
+ [(set_attr "type" "unknown")
+ (set_attr "mode" "none")])
+
+
+;; Floating-point builtins.
+
+(define_insn "allegrex_ceil_w_s"
+ [(set (match_operand:SI 0 "register_operand" "=f")
+ (unspec:SI [(match_operand:SF 1 "register_operand" "f")]
+ UNSPEC_CEIL_W_S))]
+ "TARGET_ALLEGREX"
+ "ceil.w.s\t%0,%1"
+ [(set_attr "type" "fcvt")
+ (set_attr "mode" "SF")])
+
+(define_insn "allegrex_floor_w_s"
+ [(set (match_operand:SI 0 "register_operand" "=f")
+ (unspec:SI [(match_operand:SF 1 "register_operand" "f")]
+ UNSPEC_FLOOR_W_S))]
+ "TARGET_ALLEGREX"
+ "floor.w.s\t%0,%1"
+ [(set_attr "type" "fcvt")
+ (set_attr "mode" "SF")])
+
+(define_insn "allegrex_round_w_s"
+ [(set (match_operand:SI 0 "register_operand" "=f")
+ (unspec:SI [(match_operand:SF 1 "register_operand" "f")]
+ UNSPEC_ROUND_W_S))]
+ "TARGET_ALLEGREX"
+ "round.w.s\t%0,%1"
+ [(set_attr "type" "fcvt")
+ (set_attr "mode" "SF")])
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips-ftypes.def gcc-4.6.3-psp/gcc/config/mips/mips-ftypes.def
--- gcc-4.6.3/gcc/config/mips/mips-ftypes.def 2009-02-20 15:20:38.000000000 +0000
+++ gcc-4.6.3-psp/gcc/config/mips/mips-ftypes.def 2012-04-04 22:37:31.000000000 +0100
@@ -53,9 +53,12 @@
DEF_MIPS_FTYPE (2, (SI, DI, SI))
DEF_MIPS_FTYPE (2, (SI, POINTER, SI))
+DEF_MIPS_FTYPE (1, (SI, HI))
+DEF_MIPS_FTYPE (1, (SI, SF))
DEF_MIPS_FTYPE (1, (SI, SI))
DEF_MIPS_FTYPE (2, (SI, SI, SI))
DEF_MIPS_FTYPE (3, (SI, SI, SI, SI))
+DEF_MIPS_FTYPE (1, (SI, QI))
DEF_MIPS_FTYPE (1, (SI, V2HI))
DEF_MIPS_FTYPE (2, (SI, V2HI, V2HI))
DEF_MIPS_FTYPE (1, (SI, V4QI))
@@ -124,3 +127,4 @@
DEF_MIPS_FTYPE (2, (VOID, SI, SI))
DEF_MIPS_FTYPE (2, (VOID, V2HI, V2HI))
DEF_MIPS_FTYPE (2, (VOID, V4QI, V4QI))
+DEF_MIPS_FTYPE (1, (VOID, VOID))
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips.c gcc-4.6.3-psp/gcc/config/mips/mips.c
--- gcc-4.6.3/gcc/config/mips/mips.c 2011-05-29 18:48:14.000000000 +0100
+++ gcc-4.6.3-psp/gcc/config/mips/mips.c 2012-04-04 22:37:31.000000000 +0100
@@ -239,7 +239,12 @@
MIPS_BUILTIN_CMP_SINGLE,
/* For generating bposge32 branch instructions in MIPS32 DSP ASE. */
- MIPS_BUILTIN_BPOSGE32
+ MIPS_BUILTIN_BPOSGE32,
+
+ /* The builtin corresponds to the ALLEGREX cache instruction. Operand 0
+ is the function code (must be less than 32) and operand 1 is the base
+ address. */
+ MIPS_BUILTIN_CACHE
};
/* Invoke MACRO (COND) for each C.cond.fmt condition. */
@@ -516,6 +521,10 @@
normal branch. */
static bool mips_branch_likely;
+/* Preferred stack boundary for proper stack vars alignment */
+unsigned int mips_preferred_stack_boundary;
+unsigned int mips_preferred_stack_align;
+
/* The current instruction-set architecture. */
enum processor mips_arch;
const struct mips_cpu_info *mips_arch_info;
@@ -691,6 +700,7 @@
/* MIPS II processors. */
{ "r6000", PROCESSOR_R6000, 2, 0 },
+ { "allegrex", PROCESSOR_ALLEGREX, 2, 0 },
/* MIPS III processors. */
{ "r4000", PROCESSOR_R4000, 3, 0 },
@@ -969,6 +979,9 @@
1, /* branch_cost */
4 /* memory_latency */
},
+ { /* Allegrex */
+ DEFAULT_COSTS
+ },
{ /* Loongson-2E */
DEFAULT_COSTS
},
@@ -12605,6 +12618,7 @@
AVAIL_NON_MIPS16 (dspr2_32, !TARGET_64BIT && TARGET_DSPR2)
AVAIL_NON_MIPS16 (loongson, TARGET_LOONGSON_VECTORS)
AVAIL_NON_MIPS16 (cache, TARGET_CACHE_BUILTIN)
+AVAIL_NON_MIPS16 (allegrex, TARGET_ALLEGREX)
/* Construct a mips_builtin_description from the given arguments.
@@ -12701,6 +12715,30 @@
MIPS_BUILTIN (bposge, f, "bposge" #VALUE, \
MIPS_BUILTIN_BPOSGE ## VALUE, MIPS_SI_FTYPE_VOID, AVAIL)
+/* Define a MIPS_BUILTIN_DIRECT function for instruction CODE_FOR_allegrex_<INSN>.
+ FUNCTION_TYPE and TARGET_FLAGS are builtin_description fields. */
+#define DIRECT_ALLEGREX_BUILTIN(INSN, FUNCTION_TYPE, TARGET_FLAGS) \
+ { CODE_FOR_allegrex_ ## INSN, MIPS_FP_COND_f, "__builtin_allegrex_" #INSN, \
+ MIPS_BUILTIN_DIRECT, FUNCTION_TYPE, mips_builtin_avail_allegrex }
+
+/* Same as the above, but mapped to an instruction that doesn't share the
+ NAME. NAME is the name of the builtin without the builtin prefix. */
+#define DIRECT_ALLEGREX_NAMED_BUILTIN(NAME, INSN, FUNCTION_TYPE, TARGET_FLAGS) \
+ { CODE_FOR_ ## INSN, MIPS_FP_COND_f, "__builtin_allegrex_" #NAME, \
+ MIPS_BUILTIN_DIRECT, FUNCTION_TYPE, mips_builtin_avail_allegrex }
+
+/* Define a MIPS_BUILTIN_DIRECT_NO_TARGET function for instruction
+ CODE_FOR_allegrex_<INSN>. FUNCTION_TYPE and TARGET_FLAGS are
+ builtin_description fields. */
+#define DIRECT_ALLEGREX_NO_TARGET_BUILTIN(INSN, FUNCTION_TYPE, TARGET_FLAGS) \
+ { CODE_FOR_allegrex_ ## INSN, MIPS_FP_COND_f, "__builtin_allegrex_" #INSN, \
+ MIPS_BUILTIN_DIRECT_NO_TARGET, FUNCTION_TYPE, mips_builtin_avail_allegrex }
+
+/* Define a builtin with a specific function TYPE. */
+#define SPECIAL_ALLEGREX_BUILTIN(TYPE, INSN, FUNCTION_TYPE, TARGET_FLAGS) \
+ { CODE_FOR_allegrex_ ## INSN, MIPS_FP_COND_f, "__builtin_allegrex_" #INSN, \
+ MIPS_BUILTIN_ ## TYPE, FUNCTION_TYPE, mips_builtin_avail_allegrex }
+
/* Define a Loongson MIPS_BUILTIN_DIRECT function __builtin_loongson_<FN_NAME>
for instruction CODE_FOR_loongson_<INSN>. FUNCTION_TYPE is a
builtin_description field. */
@@ -12945,6 +12983,40 @@
DIRECT_BUILTIN (dpsqx_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, dspr2_32),
DIRECT_BUILTIN (dpsqx_sa_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, dspr2_32),
+/* Builtin functions for the Sony ALLEGREX processor.
+
+ These have the `__builtin_allegrex_' prefix instead of `__builtin_mips_'
+ to maintain compatibility with Sony's ALLEGREX GCC port.
+
+ Some of the builtins may seem redundant, but they are the same as the
+ builtins defined in the Sony compiler. I chose to map redundant and
+ trivial builtins to the original instruction instead of creating
+ duplicate patterns specifically for the ALLEGREX (as Sony does). */
+
+ DIRECT_ALLEGREX_BUILTIN(bitrev, MIPS_SI_FTYPE_SI, 0),
+ DIRECT_ALLEGREX_BUILTIN(wsbh, MIPS_SI_FTYPE_SI, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(wsbw, bswapsi2, MIPS_SI_FTYPE_SI, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(clz, clzsi2, MIPS_SI_FTYPE_SI, 0),
+ DIRECT_ALLEGREX_BUILTIN(clo, MIPS_SI_FTYPE_SI, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(ctz, ctzsi2, MIPS_SI_FTYPE_SI, 0),
+ DIRECT_ALLEGREX_BUILTIN(cto, MIPS_SI_FTYPE_SI, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(rotr, rotrsi3, MIPS_SI_FTYPE_SI_SI, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(rotl, rotlsi3, MIPS_SI_FTYPE_SI_SI, 0),
+
+ DIRECT_ALLEGREX_NAMED_BUILTIN(seb, extendqisi2, MIPS_SI_FTYPE_QI, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(seh, extendhisi2, MIPS_SI_FTYPE_HI, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(max, smaxsi3, MIPS_SI_FTYPE_SI_SI, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(min, sminsi3, MIPS_SI_FTYPE_SI_SI, 0),
+
+ DIRECT_ALLEGREX_NO_TARGET_BUILTIN(sync, MIPS_VOID_FTYPE_VOID, 0),
+ SPECIAL_ALLEGREX_BUILTIN(CACHE, cache, MIPS_VOID_FTYPE_SI_SI, 0),
+
+ DIRECT_ALLEGREX_NAMED_BUILTIN(sqrt_s, sqrtsf2, MIPS_SF_FTYPE_SF, 0),
+ DIRECT_ALLEGREX_BUILTIN(ceil_w_s, MIPS_SI_FTYPE_SF, 0),
+ DIRECT_ALLEGREX_BUILTIN(floor_w_s, MIPS_SI_FTYPE_SF, 0),
+ DIRECT_ALLEGREX_BUILTIN(round_w_s, MIPS_SI_FTYPE_SF, 0),
+ DIRECT_ALLEGREX_NAMED_BUILTIN(trunc_w_s, fix_truncsfsi2_insn, MIPS_SI_FTYPE_SF, 0),
+
/* Builtin functions for ST Microelectronics Loongson-2E/2F cores. */
LOONGSON_BUILTIN (packsswh, MIPS_V4HI_FTYPE_V2SI_V2SI),
LOONGSON_BUILTIN (packsshb, MIPS_V8QI_FTYPE_V4HI_V4HI),
@@ -13096,6 +13168,8 @@
/* Standard mode-based argument types. */
#define MIPS_ATYPE_UQI unsigned_intQI_type_node
#define MIPS_ATYPE_SI intSI_type_node
+#define MIPS_ATYPE_HI intHI_type_node
+#define MIPS_ATYPE_QI intQI_type_node
#define MIPS_ATYPE_USI unsigned_intSI_type_node
#define MIPS_ATYPE_DI intDI_type_node
#define MIPS_ATYPE_UDI unsigned_intDI_type_node
@@ -13270,6 +13344,9 @@
switch (opno)
{
+ case 0:
+ emit_insn (GEN_FCN (icode) (0));
+ break;
case 2:
emit_insn (GEN_FCN (icode) (ops[0], ops[1]));
break;
@@ -13439,6 +13516,28 @@
const1_rtx, const0_rtx);
}
+/* Expand a __builtin_allegrex_cache() function. Make sure the passed
+ cache function code is less than 32. */
+
+static rtx
+mips_expand_builtin_cache (enum insn_code icode, rtx target, tree exp)
+{
+ rtx op0, op1;
+
+ op0 = mips_prepare_builtin_arg (icode, 0, exp, 0);
+ op1 = mips_prepare_builtin_arg (icode, 1, exp, 1);
+
+ if (GET_CODE (op0) == CONST_INT)
+ if (INTVAL (op0) < 0 || INTVAL (op0) > 0x1f)
+ {
+ error ("invalid function code '%d'", INTVAL (op0));
+ return const0_rtx;
+ }
+
+ emit_insn (GEN_FCN (icode) (op0, op1));
+ return target;
+}
+
/* Implement TARGET_EXPAND_BUILTIN. */
static rtx
@@ -13484,6 +13583,9 @@
case MIPS_BUILTIN_BPOSGE32:
return mips_expand_builtin_bposge (d->builtin_type, target);
+
+ case MIPS_BUILTIN_CACHE:
+ return mips_expand_builtin_cache (d->icode, target, exp);
}
gcc_unreachable ();
}
@@ -15918,6 +16020,22 @@
Do all CPP-sensitive stuff in non-MIPS16 mode; we'll switch to
MIPS16 mode afterwards if need be. */
mips_set_mips16_mode (false);
+
+ /* Validate -mpreferred-stack-boundary= value, or provide default.
+ The default of 128-bit is for newABI else 64-bit. */
+ mips_preferred_stack_boundary = (TARGET_NEWABI ? 128 : 64);
+ mips_preferred_stack_align = (TARGET_NEWABI ? 16 : 8);
+ if (mips_preferred_stack_boundary_string)
+ {
+ i = atoi (mips_preferred_stack_boundary_string);
+ if (i < 2 || i > 12)
+ error ("-mpreferred-stack-boundary=%d is not between 2 and 12", i);
+ else
+ {
+ mips_preferred_stack_align = (1 << i);
+ mips_preferred_stack_boundary = mips_preferred_stack_align * 8;
+ }
+ }
}
/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips.h gcc-4.6.3-psp/gcc/config/mips/mips.h
--- gcc-4.6.3/gcc/config/mips/mips.h 2011-03-08 20:51:11.000000000 +0000
+++ gcc-4.6.3-psp/gcc/config/mips/mips.h 2012-04-04 22:37:31.000000000 +0100
@@ -231,6 +231,7 @@
#define TARGET_SB1 (mips_arch == PROCESSOR_SB1 \
|| mips_arch == PROCESSOR_SB1A)
#define TARGET_SR71K (mips_arch == PROCESSOR_SR71000)
+#define TARGET_ALLEGREX (mips_arch == PROCESSOR_ALLEGREX)
/* Scheduling target defines. */
#define TUNE_20KC (mips_tune == PROCESSOR_20KC)
@@ -258,6 +259,7 @@
#define TUNE_OCTEON (mips_tune == PROCESSOR_OCTEON)
#define TUNE_SB1 (mips_tune == PROCESSOR_SB1 \
|| mips_tune == PROCESSOR_SB1A)
+#define TUNE_ALLEGREX (mips_tune == PROCESSOR_ALLEGREX)
/* Whether vector modes and intrinsics for ST Microelectronics
Loongson-2E/2F processors should be enabled. In o32 pairs of
@@ -852,6 +854,9 @@
/* ISA has LDC1 and SDC1. */
#define ISA_HAS_LDC1_SDC1 (!ISA_MIPS1 && !TARGET_MIPS16)
+/* ISA has just the integer condition move instructions (movn,movz) */
+#define ISA_HAS_INT_CONDMOVE (TARGET_ALLEGREX)
+
/* ISA has the mips4 FP condition code instructions: FP-compare to CC,
branch on CC, and move (both FP and non-FP) on CC. */
#define ISA_HAS_8CC (ISA_MIPS4 \
@@ -874,6 +879,7 @@
/* ISA has conditional trap instructions. */
#define ISA_HAS_COND_TRAP (!ISA_MIPS1 \
+ && !TARGET_ALLEGREX \
&& !TARGET_MIPS16)
/* ISA has integer multiply-accumulate instructions, madd and msub. */
@@ -910,6 +916,7 @@
/* ISA has count leading zeroes/ones instruction (not implemented). */
#define ISA_HAS_CLZ_CLO ((ISA_MIPS32 \
|| ISA_MIPS32R2 \
+ || TARGET_ALLEGREX \
|| ISA_MIPS64 \
|| ISA_MIPS64R2) \
&& !TARGET_MIPS16)
@@ -955,6 +962,7 @@
|| TARGET_MIPS5400 \
|| TARGET_MIPS5500 \
|| TARGET_SR71K \
+ || TARGET_ALLEGREX \
|| TARGET_SMARTMIPS) \
&& !TARGET_MIPS16)
@@ -984,11 +992,13 @@
/* ISA includes the MIPS32r2 seb and seh instructions. */
#define ISA_HAS_SEB_SEH ((ISA_MIPS32R2 \
+ || TARGET_ALLEGREX \
|| ISA_MIPS64R2) \
&& !TARGET_MIPS16)
/* ISA includes the MIPS32/64 rev 2 ext and ins instructions. */
#define ISA_HAS_EXT_INS ((ISA_MIPS32R2 \
+ || TARGET_ALLEGREX \
|| ISA_MIPS64R2) \
&& !TARGET_MIPS16)
@@ -1038,7 +1048,8 @@
|| ISA_MIPS64 \
|| ISA_MIPS64R2 \
|| TARGET_MIPS5500 \
- || TARGET_LOONGSON_2EF)
+ || TARGET_LOONGSON_2EF \
+ || TARGET_ALLEGREX)
/* ISA includes synci, jr.hb and jalr.hb. */
#define ISA_HAS_SYNCI ((ISA_MIPS32R2 \
@@ -2133,7 +2144,7 @@
`crtl->outgoing_args_size'. */
#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
-#define STACK_BOUNDARY (TARGET_NEWABI ? 128 : 64)
+#define STACK_BOUNDARY (mips_preferred_stack_boundary)
/* Symbolic macros for the registers used to return integer and floating
point values. */
@@ -2259,7 +2270,7 @@
/* Treat LOC as a byte offset from the stack pointer and round it up
to the next fully-aligned offset. */
#define MIPS_STACK_ALIGN(LOC) \
- (TARGET_NEWABI ? ((LOC) + 15) & -16 : ((LOC) + 7) & -8)
+ (((LOC) + (mips_preferred_stack_align - 1)) & -(mips_preferred_stack_align))
/* Output assembler code to FILE to increment profiler label # LABELNO
@@ -2911,6 +2922,9 @@
#endif
#endif
+extern unsigned int mips_preferred_stack_boundary;
+extern unsigned int mips_preferred_stack_align;
+
#ifndef HAVE_AS_TLS
#define HAVE_AS_TLS 0
#endif
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips.md gcc-4.6.3-psp/gcc/config/mips/mips.md
--- gcc-4.6.3/gcc/config/mips/mips.md 2012-01-09 22:09:53.000000000 +0000
+++ gcc-4.6.3-psp/gcc/config/mips/mips.md 2012-04-04 22:37:31.000000000 +0100
@@ -37,6 +37,7 @@
74kf2_1
74kf1_1
74kf3_2
+ allegrex
loongson_2e
loongson_2f
loongson_3a
@@ -598,7 +599,7 @@
;; This mode iterator allows :MOVECC to be used anywhere that a
;; conditional-move-type condition is needed.
(define_mode_iterator MOVECC [SI (DI "TARGET_64BIT")
- (CC "TARGET_HARD_FLOAT && !TARGET_LOONGSON_2EF")])
+ (CC "TARGET_HARD_FLOAT && !TARGET_LOONGSON_2EF && !TARGET_ALLEGREX")])
;; 32-bit integer moves for which we provide move patterns.
(define_mode_iterator IMOVE32
@@ -1885,11 +1886,11 @@
(mult:DI
(any_extend:DI (match_operand:SI 1 "register_operand" "d"))
(any_extend:DI (match_operand:SI 2 "register_operand" "d")))))]
- "!TARGET_64BIT && (ISA_HAS_MSAC || GENERATE_MADD_MSUB || ISA_HAS_DSP)"
+ "!TARGET_64BIT && (ISA_HAS_MSAC || GENERATE_MADD_MSUB || ISA_HAS_DSP || TARGET_ALLEGREX)"
{
if (ISA_HAS_DSP_MULT)
return "msub<u>\t%q0,%1,%2";
- else if (TARGET_MIPS5500 || GENERATE_MADD_MSUB)
+ else if (TARGET_MIPS5500 || GENERATE_MADD_MSUB || TARGET_ALLEGREX)
return "msub<u>\t%1,%2";
else
return "msac<u>\t$0,%1,%2";
@@ -2066,14 +2067,14 @@
(mult:DI (any_extend:DI (match_operand:SI 1 "register_operand" "d"))
(any_extend:DI (match_operand:SI 2 "register_operand" "d")))
(match_operand:DI 3 "register_operand" "0")))]
- "(TARGET_MAD || ISA_HAS_MACC || GENERATE_MADD_MSUB || ISA_HAS_DSP)
+ "(TARGET_MAD || ISA_HAS_MACC || GENERATE_MADD_MSUB || ISA_HAS_DSP || TARGET_ALLEGREX)
&& !TARGET_64BIT"
{
if (TARGET_MAD)
return "mad<u>\t%1,%2";
else if (ISA_HAS_DSP_MULT)
return "madd<u>\t%q0,%1,%2";
- else if (GENERATE_MADD_MSUB || TARGET_MIPS5500)
+ else if (GENERATE_MADD_MSUB || TARGET_MIPS5500 || TARGET_ALLEGREX)
return "madd<u>\t%1,%2";
else
/* See comment in *macc. */
@@ -2500,6 +2501,33 @@
;;
;; ....................
;;
+;; FIND FIRST BIT INSTRUCTION
+;;
+;; ....................
+;;
+
+(define_expand "ffs<mode>2"
+ [(set (match_operand:GPR 0 "register_operand" "")
+ (ffs:GPR (match_operand:GPR 1 "register_operand" "")))]
+ "ISA_HAS_CLZ_CLO"
+{
+ rtx r1, r2, r3, r4;
+
+ r1 = gen_reg_rtx (<MODE>mode);
+ r2 = gen_reg_rtx (<MODE>mode);
+ r3 = gen_reg_rtx (<MODE>mode);
+ r4 = gen_reg_rtx (<MODE>mode);
+ emit_insn (gen_neg<mode>2 (r1, operands[1]));
+ emit_insn (gen_and<mode>3 (r2, operands[1], r1));
+ emit_insn (gen_clz<mode>2 (r3, r2));
+ emit_move_insn (r4, GEN_INT (GET_MODE_BITSIZE (<MODE>mode)));
+ emit_insn (gen_sub<mode>3 (operands[0], r4, r3));
+ DONE;
+})
+
+;;
+;; ....................
+;;
;; NEGATION and ONE'S COMPLEMENT
;;
;; ....................
@@ -2550,6 +2578,25 @@
[(set_attr "alu_type" "not")
(set_attr "mode" "<MODE>")])
+(define_expand "rotl<mode>3"
+ [(set (match_operand:GPR 0 "register_operand")
+ (rotate:GPR (match_operand:GPR 1 "register_operand")
+ (match_operand:SI 2 "arith_operand")))]
+ "ISA_HAS_ROR"
+{
+ rtx temp;
+
+ if (GET_CODE (operands[2]) == CONST_INT)
+ temp = GEN_INT (GET_MODE_BITSIZE (<MODE>mode) - INTVAL (operands[2]));
+ else
+ {
+ temp = gen_reg_rtx (<MODE>mode);
+ emit_insn (gen_neg<mode>2 (temp, operands[2]));
+ }
+ emit_insn (gen_rotr<mode>3 (operands[0], operands[1], temp));
+ DONE;
+})
+
;;
;; ....................
;;
@@ -6301,7 +6348,7 @@
(const_int 0)])
(match_operand:GPR 2 "reg_or_0_operand" "dJ,0")
(match_operand:GPR 3 "reg_or_0_operand" "0,dJ")))]
- "ISA_HAS_CONDMOVE"
+ "ISA_HAS_CONDMOVE || ISA_HAS_INT_CONDMOVE"
"@
mov%T4\t%0,%z2,%1
mov%t4\t%0,%z3,%1"
@@ -6331,8 +6378,12 @@
(if_then_else:GPR (match_dup 5)
(match_operand:GPR 2 "reg_or_0_operand")
(match_operand:GPR 3 "reg_or_0_operand")))]
- "ISA_HAS_CONDMOVE"
+ "ISA_HAS_CONDMOVE || ISA_HAS_INT_CONDMOVE"
{
+ if (ISA_HAS_INT_CONDMOVE
+ && GET_MODE_CLASS (GET_MODE (operands[0])) == MODE_FLOAT)
+ FAIL;
+
mips_expand_conditional_move (operands);
DONE;
})
@@ -6481,6 +6532,9 @@
; ST-Microelectronics Loongson-2E/2F-specific patterns.
(include "loongson.md")
+; Sony ALLEGREX instructions.
+(include "allegrex.md")
+
(define_c_enum "unspec" [
UNSPEC_ADDRESS_FIRST
])
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips.opt gcc-4.6.3-psp/gcc/config/mips/mips.opt
--- gcc-4.6.3/gcc/config/mips/mips.opt 2011-02-17 01:59:04.000000000 +0000
+++ gcc-4.6.3-psp/gcc/config/mips/mips.opt 2012-04-04 22:37:31.000000000 +0100
@@ -306,5 +306,9 @@
Target Report Var(TARGET_XGOT)
Lift restrictions on GOT size
+mpreferred-stack-boundary=
+Target RejectNegative Joined Var(mips_preferred_stack_boundary_string)
+Attempt to keep stack aligned to this power of 2
+
noasmopt
Driver
diff -Nbaur gcc-4.6.3/gcc/config/mips/psp.h gcc-4.6.3-psp/gcc/config/mips/psp.h
--- gcc-4.6.3/gcc/config/mips/psp.h 1970-01-01 01:00:00.000000000 +0100
+++ gcc-4.6.3-psp/gcc/config/mips/psp.h 2012-04-04 22:37:31.000000000 +0100
@@ -0,0 +1,31 @@
+/* Support for Sony's Playstation Portable (PSP).
+ Copyright (C) 2005 Free Software Foundation, Inc.
+ Contributed by Marcus R. Brown <mrbrown@ocgnet.org>
+
+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 2, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* Override the startfile spec to include crt0.o. */
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "crt0%O%s crti%O%s crtbegin%O%s"
+
+#undef SUBTARGET_CPP_SPEC
+#define SUBTARGET_CPP_SPEC "-DPSP=1 -D__psp__=1 -D_PSP=1"
+
+/* Get rid of the .pdr section. */
+#undef SUBTARGET_ASM_SPEC
+#define SUBTARGET_ASM_SPEC "-mno-pdr"
diff -Nbaur gcc-4.6.3/gcc/config/mips/t-allegrex gcc-4.6.3-psp/gcc/config/mips/t-allegrex
--- gcc-4.6.3/gcc/config/mips/t-allegrex 1970-01-01 01:00:00.000000000 +0100
+++ gcc-4.6.3-psp/gcc/config/mips/t-allegrex 2012-04-04 22:37:31.000000000 +0100
@@ -0,0 +1,29 @@
+# Suppress building libgcc1.a, since the MIPS compiler port is complete
+# and does not need anything from libgcc1.a.
+LIBGCC1 =
+CROSS_LIBGCC1 =
+
+EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o
+# Don't let CTOR_LIST end up in sdata section.
+CRTSTUFF_T_CFLAGS = -G 0
+
+# Assemble startup files.
+$(T)crti.o: $(srcdir)/config/mips/crti.asm $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+ -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/mips/crti.asm
+
+$(T)crtn.o: $(srcdir)/config/mips/crtn.asm $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/mips/crtn.asm
+
+# We must build libgcc2.a with -G 0, in case the user wants to link
+# without the $gp register.
+TARGET_LIBGCC2_CFLAGS = -G 0
+
+# Build the libraries for both hard and soft floating point
+
+MULTILIB_OPTIONS =
+MULTILIB_DIRNAMES =
+
+LIBGCC = stmp-multilib
+INSTALL_LIBGCC = install-multilib
diff -Nbaur gcc-4.6.3/gcc/config.gcc gcc-4.6.3-psp/gcc/config.gcc
--- gcc-4.6.3/gcc/config.gcc 2011-07-22 17:44:50.000000000 +0100
+++ gcc-4.6.3-psp/gcc/config.gcc 2012-04-04 22:37:31.000000000 +0100
@@ -2033,6 +2033,18 @@
tm_file="elfos.h newlib-stdint.h ${tm_file} mips/r3900.h mips/elf.h"
tmake_file="mips/t-r3900 mips/t-libgcc-mips16"
;;
+mipsallegrex-*-elf* | mipsallegrexel-*-elf*)
+ tm_file="elfos.h ${tm_file} mips/elf.h"
+ tmake_file=mips/t-allegrex
+ target_cpu_default="MASK_SINGLE_FLOAT|MASK_DIVIDE_BREAKS"
+ tm_defines="MIPS_ISA_DEFAULT=2 MIPS_CPU_STRING_DEFAULT=\\\"allegrex\\\" MIPS_ABI_DEFAULT=ABI_EABI"
+ case ${target} in
+ mipsallegrex*-psp-elf*)
+ tm_file="${tm_file} mips/psp.h"
+ ;;
+ esac
+ use_fixproto=yes
+ ;;
mmix-knuth-mmixware)
tm_file="${tm_file} newlib-stdint.h"
need_64bit_hwint=yes
diff -Nbaur gcc-4.6.3/gcc/crtstuff.c gcc-4.6.3-psp/gcc/crtstuff.c
--- gcc-4.6.3/gcc/crtstuff.c 2010-12-23 12:08:21.000000000 +0000
+++ gcc-4.6.3-psp/gcc/crtstuff.c 2012-04-04 22:37:31.000000000 +0100
@@ -48,7 +48,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-4.6.3/libcpp/Makefile.in gcc-4.6.3-psp/libcpp/Makefile.in
--- gcc-4.6.3/libcpp/Makefile.in 2012-03-01 12:03:46.000000000 +0000
+++ gcc-4.6.3-psp/libcpp/Makefile.in 2012-04-05 09:32:31.000000000 +0100
@@ -212,8 +212,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.
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+COMPILE = $(COMPILE.base) -o $@
+POSTCOMPILE =
else
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
$(depcomp) $(COMPILE.base)
diff -Nbaur gcc-4.6.3/libgcc/config.host gcc-4.6.3-psp/libgcc/config.host
--- gcc-4.6.3/libgcc/config.host 2011-11-23 22:15:54.000000000 +0000
+++ gcc-4.6.3-psp/libgcc/config.host 2012-04-04 22:37:31.000000000 +0100
@@ -436,6 +436,8 @@
;;
mipstx39-*-elf* | mipstx39el-*-elf*)
;;
+mips*-psp-elf*)
+ ;;
mmix-knuth-mmixware)
extra_parts="crti.o crtn.o crtbegin.o crtend.o"
tmake_file="${tmake_file} ${cpu_type}/t-${cpu_type}"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,201 +0,0 @@
#!/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-debug \
--enable-lto --enable-plugins \
--enable-poison-system-directories \
--disable-dependency-tracking --disable-werror \
$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" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \
--enable-languages=c,c++,objc,obj-c++ \
--disable-multilib\
--disable-shared --disable-win32-registry --disable-nls\
--enable-cxx-flags="-G0" \
--disable-libstdcxx-pch \
--target=$target \
--with-newlib \
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--enable-lto $plugin_ld \
--prefix=$prefix \
--disable-dependency-tracking \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPSP release 17" \
$CROSS_PARAMS \
|| { echo "Error configuring gcc"; exit 1; }
touch configured-gcc
fi
if [ ! -f built-gcc ]
then
$MAKE all-gcc || { echo "Error building gcc"; 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/pspsdk-$PSPSDK_VER
if [ ! -f bootstrap-sdk ]
then
./bootstrap || { echo "ERROR RUNNING PSPSDK BOOTSTRAP"; exit 1; }
touch bootstrap-sdk
fi
if [ ! -f configured-sdk ]
then
CFLAGS_FOR_HOST=$cflags LDFLAGS=$ldflags ./configure --with-pspdev="$prefix" --disable-dependency-tracking $CROSS_PARAMS || { echo "ERROR RUNNING PSPSDK CONFIGURE"; exit 1; }
touch configured-sdk
fi
if [ ! -f install-sdk-data ]
then
$MAKE install-data || { echo "ERROR INSTALLING PSPSDK HEADERS"; exit 1; }
touch install-sdk-data
fi
cd $BUILDDIR
unset CFLAGS
unset CFLAGS_FOR_HOST
unset LDFLAGS
#---------------------------------------------------------------------------------
# build and install newlib
#---------------------------------------------------------------------------------
mkdir -p $target/newlib
cd $target/newlib
if [ ! -f configured-newlib ]
then
../../newlib-$NEWLIB_VER/configure \
--target=$target \
--prefix=$prefix \
--disable-dependency-tracking \
|| { 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 || { echo "Error installing newlib"; exit 1; }
touch installed-newlib
fi
#---------------------------------------------------------------------------------
# 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/pspsdk-$PSPSDK_VER
#---------------------------------------------------------------------------------
# build and install the psp sdk
#---------------------------------------------------------------------------------
echo "building pspsdk ..."
if [ ! -f built-sdk ]
then
$MAKE || { echo "ERROR BUILDING PSPSDK"; exit 1; }
touch built-sdk
fi
if [ ! -f installed-sdk ]
then
$MAKE install || { echo "ERROR INSTALLING PSPSDK"; exit 1; }
touch installed-sdk
fi
cd $BUILDDIR
#---------------------------------------------------------------------------------
# build and install the debugger
#---------------------------------------------------------------------------------
mkdir -p $target/gdb
cd $target/gdb
if [ ! -f configured-gdb ]
then
CFLAGS=$cflags LDFLAGS=$ldflags ../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \
--disable-dependency-tracking \
$CROSS_PARAMS \
|| { echo "Error configuring gdb"; exit 1; }
touch configured-gdb
fi
if [ ! -f built-gdb ]
then
$MAKE || { echo "Error building gdb"; exit 1; }
touch built-gdb
fi
if [ ! -f installed-gdb ]
then
$MAKE install || { echo "Error installing gdb"; exit 1; }
touch installed-gdb
fi

View File

@@ -1,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

50
select_toolchain.sh Normal file → Executable file
View File

@@ -1,13 +1,25 @@
#!/bin/bash #!/bin/bash
VERSION=0 VERSION=0
case "$BUILD_DKPRO_PACKAGE" in
"1" )
VERSION=1
;;
"2" )
VERSION=2
;;
"3" )
VERSION=3
;;
esac
while [ $VERSION -eq 0 ] while [ $VERSION -eq 0 ]
do do
echo echo
echo "Please select the toolchain you require" echo "Please select the toolchain you require"
echo echo
echo "1: devkitARM (gba gp32 ds)" echo "1: devkitARM (gba gp32 ds 3ds)"
echo "2: devkitPPC (gamecube wii)" echo "2: devkitPPC (gamecube wii wii-u)"
echo "3: devkitPSP (PSP)" 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 ]
@@ -18,33 +30,31 @@ done
case "$VERSION" in case "$VERSION" in
"1" ) "1" )
GCC_VER=4.7.0 GCC_VER=10.2.0
BINUTILS_VER=2.22 BINUTILS_VER=2.34
NEWLIB_VER=1.20.0 NEWLIB_VER=3.3.0
GDB_VER=7.4
basedir='dkarm-eabi' basedir='dkarm-eabi'
package=devkitARM package=devkitARM
target=arm-eabi target=arm-none-eabi
toolchain=DEVKITARM toolchain=DEVKITARM
;; ;;
"2" ) "2" )
GCC_VER=4.6.3 GCC_VER=10.2.0
BINUTILS_VER=2.22 BINUTILS_VER=2.34
NEWLIB_VER=1.20.0 MN_BINUTILS_VER=2.17
GDB_VER=7.4 NEWLIB_VER=3.3.0
basedir='dkppc' basedir='dkppc'
package=devkitPPC package=devkitPPC
target=powerpc-eabi target=powerpc-eabi
toolchain=DEVKITPPC toolchain=DEVKITPPC
;; ;;
"3" ) "3" )
GCC_VER=4.6.3 GCC_VER=11.1.0
BINUTILS_VER=2.22 BINUTILS_VER=2.32
NEWLIB_VER=1.20.0 NEWLIB_VER=4.1.0
GDB_VER=7.4 basedir='dka64'
basedir='dkpsp' package=devkitA64
package=devkitPSP target=aarch64-none-elf
target=psp toolchain=DEVKITA64
toolchain=DEVKITPSP
;; ;;
esac esac

4
strip_bins.sh Normal file → Executable file
View File

@@ -19,6 +19,10 @@ do
then then
$HOST_STRIP $f $HOST_STRIP $f
fi fi
if [[ "$f" == *.dll ]]
then
$HOST_STRIP -d $f
fi
done done
if [ $VERSION -eq 2 ]; then if [ $VERSION -eq 2 ]; then

View File

@@ -27,5 +27,5 @@ fi
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/') TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH=$PATH:$TOOLPATH/$package/bin export PATH=$PATH:$TOOLPATH/$package/bin
export prefix=$INSTALLDIR/$CROSSBUILD/$package
. ./strip_bins.sh . ./strip_bins.sh