Compare commits

...

207 Commits

Author SHA1 Message Date
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
59 changed files with 15387 additions and 22106 deletions

2
.gitignore vendored
View File

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

View File

@@ -1,7 +1,7 @@
devkitPro build scripts devkitPro build scripts
-------------------------- --------------------------
This readme will guide you through building devkitARM, devkitPPC or devkitPSP This readme will guide you through building devkitARM, devkitPPC or devkitA64
from source using a set of scripts. from source using a set of scripts.
The windows versions of the toolchains are now cross compiled on linux using The windows versions of the toolchains are now cross compiled on linux using
@@ -23,17 +23,36 @@ http://gmplib.org/
http://www.mpfr.org/ http://www.mpfr.org/
http://www.multiprecision.org/ http://www.multiprecision.org/
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib, Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib,
and libusb. Again these are built as static libraries for ease of packaging expat, and libusb. Again these are built as static libraries for ease of
but you can probably use the versions supplied by your distro. packaging but you can probably use the versions supplied by your distro.
http://freeimage.sourceforge.net/ http://freeimage.sourceforge.net/
http://www.zlib.net http://www.zlib.net
http://www.libusb.org http://www.libusb.org
http://expat.sourceforge.net/
sudo apt-get install libfreeimage-dev zlib1g-dev libusb-dev libexpat1-dev
Building gxtexconv for cube/wii needs GL/gl.h which can be obtained with Building gxtexconv for cube/wii needs GL/gl.h which can be obtained with
sudo apt-get install mesa-common-dev sudo apt-get install mesa-common-dev
Tools for devkitA64 require liblz4.
http://lz4.github.io/lz4/
sudo apt-get install liblz4-dev
For building the OSX versions we install the Xcode commandline tools and build
pkg-config from source as well as static versions of the libraries listed above.
This helps keep the dependencies to a minimum so end users can use the tools
with only Xcode command line tools to obtain make.
To avoid having to manually answer prompts during the build the script will To avoid having to manually answer prompts during the build the script will
read variables from config.sh if it exists. Copy config.sh.sample to config.sh read variables from config.sh if it exists. Copy config.sh.sample to config.sh
and set the variables as appropriate for your build. and set the variables as appropriate for your build.
@@ -78,18 +97,8 @@ Using devkitPPC
to use the built in crt0 and linkscript use powerpc-eabi-gcc to link your project, 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 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. the multi-threaded microkernel for gamecube, -mrvl for wii, -mwup for wii u.
Using devkitPSP
---------------
All you need to do now to use devkitPSP is make sure that your freshly built tools
are in your PATH, something like this;
export PATH=$PATH:<path to devkitPSP>/bin
(Obviously replace <path to devkitPSP> with the full path to the devkitPSP
installation directory)
Getting started Getting started
--------------- ---------------

View File

@@ -1,9 +1,8 @@
#!/bin/bash #!/bin/bash
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Build scripts for # devkitARM release 47
# devkitARM release 45 # devkitPPC release 29-1
# devkitPPC release 27 # devkitA64 alpha 7
# devkitPSP release 17
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then if [ 0 -eq 1 ] ; then
@@ -24,55 +23,57 @@ echo "Patches and improvements are of course welcome, please send these to the p
echo "https://sourceforge.net/tracker/?group_id=114505&atid=668553" echo "https://sourceforge.net/tracker/?group_id=114505&atid=668553"
echo echo
LIBOGC_VER=1.8.12
LIBGBA_VER=20150106 GENERAL_TOOLS_VER=1.0.1
LIBNDS_VER=1.5.12
LIBCTRU_VER=0.6.0 LIBGBA_VER=0.5.0
DEFAULT_ARM7_VER=0.6.0
DSWIFI_VER=0.3.17
LIBMIRKO_VER=0.9.7
MAXMOD_VER=1.0.9
FILESYSTEM_VER=0.9.12
LIBFAT_VER=1.0.14
PSPSDK_VER=20120404
GBATOOLS_VER=1.0.0 GBATOOLS_VER=1.0.0
DSTOOLS_VER=1.0.2
GP32_TOOLS_VER=1.0.1 LIBNDS_VER=1.6.2
GRIT_VER=0.8.13 DEFAULT_ARM7_VER=0.7.0
NDSTOOL_VER=1.50.3 DSWIFI_VER=0.4.1
GENERAL_TOOLS_VER=1.0.0 MAXMOD_VER=1.0.11
FILESYSTEM_VER=0.9.13
LIBFAT_VER=1.1.0
DSTOOLS_VER=1.1.0
GRIT_VER=0.8.14
NDSTOOL_VER=2.0.3
DLDITOOL_VER=1.24.0 DLDITOOL_VER=1.24.0
GAMECUBE_TOOLS_VER=1.0.0
WIILOAD_VER=0.5.1
MMUTIL_VER=1.8.6 MMUTIL_VER=1.8.6
DFU_UTIL_VER=0.8.1
STLINK_VER=0.5.8 DFU_UTIL_VER=0.9.1
TOOLS3DS_VER=1.1.1 STLINK_VER=1.2.3
LINK3DS_VER=0.5.1
PICASSO_VER=2.1.0 GAMECUBE_TOOLS_VER=1.0.1
LIBOGC_VER=1.8.16
WIILOAD_VER=0.5.1
LIBCTRU_VER=1.3.0
CITRO3D_VER=1.3.0
TOOLS3DS_VER=1.1.4
LINK3DS_VER=0.5.2
PICASSO_VER=2.6.2
GP32_TOOLS_VER=1.0.3
LIBMIRKO_VER=0.9.7
SWITCH_TOOLS_VER=1.1.1
LIBNX_VER=1.0.0
OSXMIN=${OSXMIN:-10.9}
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
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 fi
tar $extractflags "$SRCDIR/$1-$2$archivetype" || { echo "Error extracting "$1; exit 1; } if [[ ! -f patched-$1-$2 && -f $patchdir/$1-$2.patch ]]; then
touch extracted-$1 echo "patching $1-$2"
fi
if [[ ! -f patched-$1 && -f $patchdir/$1-$2.patch ]]; then
echo "patching $1"
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
} }
@@ -170,10 +171,16 @@ 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" cflags="-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 cflags="$cflags -isysroot ${OSXSDKPATH}"
ldflags="$ldflags -Wl,-syslibroot,${OSXSDKPATH}"
fi
TESTCC=`cc -v 2>&1 | grep clang`
if [ "x${TESTCC}x" != "xx" ]; then
cflags="$cflags -fbracket-depth=512"
fi
;; ;;
MINGW32* ) MINGW32* )
cflags="-D__USE_MINGW_ACCESS" cflags="-D__USE_MINGW_ACCESS"
@@ -182,24 +189,25 @@ case $PLATFORM in
;; ;;
esac esac
BUILDSCRIPTDIR=$(pwd) BUILDSCRIPTDIR=$(pwd)
BUILDDIR=$(pwd)/.$package BUILDDIR=$(pwd)/.$package
if [ ! -z $CROSSBUILD ]; then if [ ! -z $CROSSBUILD ]; then
BUILDDIR=$BUILDDIR-$CROSSBUILD BUILDDIR=$BUILDDIR-$CROSSBUILD
fi fi
DEVKITPRO_URL="http://downloads.sourceforge.net/devkitpro"
patchdir=$(pwd)/$basedir/patches patchdir=$(pwd)/$basedir/patches
scriptdir=$(pwd)/$basedir/scripts scriptdir=$(pwd)/$basedir/scripts
archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.bz2 newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.bz2" archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.bz2 newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.xz"
if [ $VERSION -eq 1 ]; then if [ $VERSION -eq 1 ]; then
targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2 targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2
libmirko-src-${LIBMIRKO_VER}.tar.bz2 dswifi-src-${DSWIFI_VER}.tar.bz2 maxmod-src-${MAXMOD_VER}.tar.bz2 libmirko-src-${LIBMIRKO_VER}.tar.bz2 dswifi-src-${DSWIFI_VER}.tar.bz2 maxmod-src-${MAXMOD_VER}.tar.bz2
default_arm7-src-${DEFAULT_ARM7_VER}.tar.bz2 libfilesystem-src-${FILESYSTEM_VER}.tar.bz2 default_arm7-src-${DEFAULT_ARM7_VER}.tar.bz2 libfilesystem-src-${FILESYSTEM_VER}.tar.bz2
libfat-src-${LIBFAT_VER}.tar.bz2 libctru-src-${LIBCTRU_VER}.tar.bz2" libfat-src-${LIBFAT_VER}.tar.bz2 libctru-src-${LIBCTRU_VER}.tar.bz2 citro3d-src-${CITRO3D_VER}.tar.bz2"
hostarchives="gbatools-$GBATOOLS_VER.tar.bz2 gp32tools-$GP32_TOOLS_VER.tar.bz2 hostarchives="gbatools-$GBATOOLS_VER.tar.bz2 gp32tools-$GP32_TOOLS_VER.tar.bz2
dstools-$DSTOOLS_VER.tar.bz2 grit-$GRIT_VER.tar.bz2 ndstool-$NDSTOOL_VER.tar.bz2 dstools-$DSTOOLS_VER.tar.bz2 grit-$GRIT_VER.tar.bz2 ndstool-$NDSTOOL_VER.tar.bz2
@@ -213,14 +221,17 @@ if [ $VERSION -eq 2 ]; then
targetarchives="libogc-src-${LIBOGC_VER}.tar.bz2 libfat-src-${LIBFAT_VER}.tar.bz2" targetarchives="libogc-src-${LIBOGC_VER}.tar.bz2 libfat-src-${LIBFAT_VER}.tar.bz2"
hostarchives="gamecube-tools-$GAMECUBE_TOOLS_VER.tar.bz2 wiiload-$WIILOAD_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2" hostarchives="gamecube-tools-$GAMECUBE_TOOLS_VER.tar.bz2 wiiload-$WIILOAD_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2"
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives"
fi fi
if [ $VERSION -eq 3 ]; then if [ $VERSION -eq 3 ]; then
targetarchives="pspsdk-src-${PSPSDK_VER}.tar.bz2" hostarchives="general-tools-$GENERAL_TOOLS_VER.tar.bz2 switch-tools-$SWITCH_TOOLS_VER.tar.bz2"
fi fi
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
SRCDIR="$BUILD_DKPRO_SRCDIR" SRCDIR="$BUILD_DKPRO_SRCDIR"
else else
@@ -232,7 +243,7 @@ for archive in $archives $targetarchives $hostarchives
do do
echo $archive echo $archive
if [ ! -f $archive ]; then if [ ! -f $archive ]; then
$FETCH http://downloads.sf.net/devkitpro/$archive || { echo "Error: Failed to download $archive"; exit 1; } $FETCH https://github.com/devkitPro/buildscripts/releases/download/sources/$archive || { echo "Error: Failed to download $archive"; exit 1; }
fi fi
done done
@@ -242,9 +253,12 @@ cd $BUILDDIR
extract_and_patch binutils $BINUTILS_VER bz2 extract_and_patch binutils $BINUTILS_VER bz2
extract_and_patch gcc $GCC_VER bz2 extract_and_patch gcc $GCC_VER bz2
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 extract_and_patch gdb $GDB_VER xz
if [ $VERSION -eq 2 ]; then
extract_and_patch binutils $MN_BINUTILS_VER bz2
fi
for archive in $targetarchives for archive in $targetarchives
do do
@@ -272,15 +286,7 @@ if [ -f $scriptdir/build-tools.sh ]; then . $scriptdir/build-tools.sh || { echo
if [ -f $scriptdir/build-crtls.sh ]; then . $scriptdir/build-crtls.sh || { echo "Error building crtls"; exit 1; }; cd $BUILDSCRIPTDIR; fi if [ -f $scriptdir/build-crtls.sh ]; then . $scriptdir/build-crtls.sh || { echo "Error building crtls"; exit 1; }; cd $BUILDSCRIPTDIR; fi
if [ ! -z $CROSSBUILD ]; then if [ ! -z $CROSSBUILD ]; then
if [ $VERSION -ne 3 ]; then cp -v $CROSSBINPATH/*.dll $CROSSLIBPATH/*.dll $prefix/bin
cp -v $CROSSBINPATH/FreeImage.dll $prefix/bin
fi
if [ $VERSION -eq 1 ]; then
cp -v $CROSSBINPATH/libusb-1.0.dll $prefix/bin
fi
cp -v $CROSSLIBPATH/libstdc++-6.dll \
$CROSSLIBPATH/libgcc_s_sjlj-1.dll \
$prefix/bin
fi fi
echo "stripping installed binaries" echo "stripping installed binaries"

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,342 @@
diff -Nbaur binutils-2.29.1-orig/bfd/elfnn-aarch64.c binutils-2.29.1-dka64/bfd/elfnn-aarch64.c
--- binutils-2.29.1-orig/bfd/elfnn-aarch64.c 2017-09-05 14:12:46.000000000 +0100
+++ binutils-2.29.1-dka64/bfd/elfnn-aarch64.c 2017-10-22 06:58:57.711591457 +0100
@@ -2097,6 +2097,12 @@
aarch64_stub_erratum_843419_veneer,
};
+/* Is an undefined weak symbol resolved to 0 ? */
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
+ && bfd_link_executable (INFO) \
+ && !(INFO)->dynamic_undefined_weak)
+
struct elf_aarch64_stub_hash_entry
{
/* Base hash table entry structure. */
@@ -6081,11 +6087,13 @@
Elf_Internal_Sym *sym;
asection *sec;
struct elf_link_hash_entry *h;
+ struct elf_aarch64_link_hash_entry *eh;
bfd_vma relocation;
bfd_reloc_status_type r;
arelent bfd_reloc;
char sym_type;
bfd_boolean unresolved_reloc = FALSE;
+ bfd_boolean resolved_to_zero = FALSE;
char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -6225,6 +6233,10 @@
h, &unresolved_reloc,
save_addend, &addend, sym);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ resolved_to_zero = (eh != NULL
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
+
switch (elfNN_aarch64_bfd_reloc_from_type (r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -6248,7 +6260,7 @@
need_relocs =
(bfd_link_pic (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);
@@ -6343,7 +6355,7 @@
need_relocs =
(bfd_link_pic (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);
@@ -6392,7 +6404,7 @@
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6891,6 +6903,26 @@
return FALSE;
}
+/* Remove undefined weak symbol from the dynamic symbol table if it
+ is resolved to 0. */
+
+extern bfd_boolean
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *, struct elf_link_hash_entry *);
+
+bfd_boolean
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *h)
+{
+ if (h->dynindx != -1
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_aarch64_hash_entry (h)))
+ {
+ h->dynindx = -1;
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
+ h->dynstr_index);
+ }
+ return TRUE;
+}
+
/* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the
dynamic object, but we're not including those sections. We have to
@@ -8068,6 +8100,7 @@
struct elf_aarch64_link_hash_table *htab;
struct elf_aarch64_link_hash_entry *eh;
struct elf_dyn_relocs *p;
+ bfd_boolean resolved_to_zero;
/* An example of a bfd_link_hash_indirect symbol is versioned
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -8087,6 +8120,10 @@
info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */
if (h->type == STT_GNU_IFUNC
@@ -8096,7 +8133,7 @@
{
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (h->dynindx == -1 && !h->forced_local
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8130,6 +8167,11 @@
of relaxing into these from the large model PLT entries. */
s->size += PLT_SMALL_ENTRY_SIZE;
+ /* There should be no PLT relocations against resolved undefined
+ weak symbols in the executable. */
+ if (!resolved_to_zero)
+ {
+
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
htab->root.sgotplt->size += GOT_ENTRY_SIZE;
@@ -8152,6 +8194,7 @@
htab->root.srelplt->reloc_count++;
}
+ }
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8164,9 +8207,6 @@
h->needs_plt = 0;
}
- eh = (struct elf_aarch64_link_hash_entry *) h;
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
-
if (h->got.refcount > 0)
{
bfd_boolean dyn;
@@ -8178,7 +8218,7 @@
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (dyn && h->dynindx == -1 && !h->forced_local
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8192,7 +8232,7 @@
{
h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
@@ -8225,7 +8265,7 @@
}
indx = h && h->dynindx != -1 ? h->dynindx : 0;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| indx != 0
@@ -8291,7 +8331,7 @@
visibility. */
if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
{
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero)
eh->dyn_relocs = NULL;
/* Make sure undefined weak symbols are output as a dynamic
@@ -8310,7 +8350,9 @@
symbols which turn out to need copy relocs or are not
dynamic. */
- if (!h->non_got_ref
+ if (!(h->non_got_ref
+ || (h->root.type == bfd_link_hash_undefweak
+ && !resolved_to_zero))
&& ((h->def_dynamic
&& !h->def_regular)
|| (htab->root.dynamic_sections_created
@@ -8321,6 +8363,7 @@
Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1
&& !h->forced_local
+ && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h))
return FALSE;
@@ -8940,8 +8983,17 @@
Elf_Internal_Sym *sym)
{
struct elf_aarch64_link_hash_table *htab;
+ struct elf_aarch64_link_hash_entry *eh;
+ bfd_boolean local_undefweak;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+
+ /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
+ resolved undefined weak symbols in executable so that their
+ references have value 0 at run-time. */
+ local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
if (h->plt.offset != (bfd_vma) - 1)
{
asection *plt, *gotplt, *relplt;
@@ -8976,7 +9028,7 @@
return FALSE;
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
- if (!h->def_regular)
+ if (!local_undefweak && !h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. */
@@ -8995,7 +9047,8 @@
}
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
+ && !local_undefweak)
{
Elf_Internal_Rela rela;
bfd_byte *loc;
@@ -9489,6 +9542,9 @@
#define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections
+#define elf_backend_fixup_symbol \
+ elfNN_aarch64_elf_fixup_symbol
+
#define elf_backend_finish_dynamic_sections \
elfNN_aarch64_finish_dynamic_sections
diff -Nbaur binutils-2.29.1-orig/ld/emulparams/aarch64elf32.sh binutils-2.29.1-dka64/ld/emulparams/aarch64elf32.sh
--- binutils-2.29.1-orig/ld/emulparams/aarch64elf32.sh 2017-07-10 10:54:42.000000000 +0100
+++ binutils-2.29.1-dka64/ld/emulparams/aarch64elf32.sh 2017-10-22 06:58:57.719591510 +0100
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32"
MACHINE=
NOP=0
diff -Nbaur binutils-2.29.1-orig/ld/emulparams/aarch64elf.sh binutils-2.29.1-dka64/ld/emulparams/aarch64elf.sh
--- binutils-2.29.1-orig/ld/emulparams/aarch64elf.sh 2017-07-10 10:54:42.000000000 +0100
+++ binutils-2.29.1-dka64/ld/emulparams/aarch64elf.sh 2017-10-22 06:58:57.719591510 +0100
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64
MACHINE=
NOP=0
diff -Nbaur binutils-2.29.1-orig/ld/emultempl/aarch64elf.em binutils-2.29.1-dka64/ld/emultempl/aarch64elf.em
--- binutils-2.29.1-orig/ld/emultempl/aarch64elf.em 2017-07-10 10:54:42.000000000 +0100
+++ binutils-2.29.1-dka64/ld/emultempl/aarch64elf.em 2017-10-22 06:58:57.719591510 +0100
@@ -375,7 +375,7 @@
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
'
-PARSE_AND_LIST_OPTIONS='
+PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}'
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
" enum sizes\n"));
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible"
diff -Nbaur binutils-2.29.1-orig/ld/Makefile.am binutils-2.29.1-dka64/ld/Makefile.am
--- binutils-2.29.1-orig/ld/Makefile.am 2017-07-10 10:54:42.000000000 +0100
+++ binutils-2.29.1-dka64/ld/Makefile.am 2017-10-22 06:58:57.719591510 +0100
@@ -1654,19 +1654,23 @@
$(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
diff -Nbaur binutils-2.29.1-orig/ld/Makefile.in binutils-2.29.1-dka64/ld/Makefile.in
--- binutils-2.29.1-orig/ld/Makefile.in 2017-09-15 12:38:08.000000000 +0100
+++ binutils-2.29.1-dka64/ld/Makefile.in 2017-10-22 06:58:57.719591510 +0100
@@ -3219,18 +3219,22 @@
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \

View File

@@ -0,0 +1,346 @@
diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarch64.c
--- binutils-2.30/bfd/elfnn-aarch64.c 2018-01-17 11:29:21.000000000 +0000
+++ binutils-2.30-dka64/bfd/elfnn-aarch64.c 2018-02-11 19:54:08.141257544 +0000
@@ -2097,6 +2097,12 @@
aarch64_stub_erratum_843419_veneer,
};
+/* Is an undefined weak symbol resolved to 0 ? */
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
+ && bfd_link_executable (INFO) \
+ && !(INFO)->dynamic_undefined_weak)
+
struct elf_aarch64_stub_hash_entry
{
/* Base hash table entry structure. */
@@ -6088,11 +6094,13 @@
Elf_Internal_Sym *sym;
asection *sec;
struct elf_link_hash_entry *h;
+ struct elf_aarch64_link_hash_entry *eh;
bfd_vma relocation;
bfd_reloc_status_type r;
arelent bfd_reloc;
char sym_type;
bfd_boolean unresolved_reloc = FALSE;
+ bfd_boolean resolved_to_zero = FALSE;
char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -6226,6 +6234,10 @@
h, &unresolved_reloc,
save_addend, &addend, sym);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ resolved_to_zero = (eh != NULL
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
+
switch (elfNN_aarch64_bfd_reloc_from_type (r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -6249,7 +6261,7 @@
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6344,7 +6356,7 @@
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6393,7 +6405,7 @@
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6735,6 +6747,26 @@
return FALSE;
}
+/* Remove undefined weak symbol from the dynamic symbol table if it
+ is resolved to 0. */
+
+extern bfd_boolean
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *, struct elf_link_hash_entry *);
+
+bfd_boolean
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *h)
+{
+ if (h->dynindx != -1
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_aarch64_hash_entry (h)))
+ {
+ h->dynindx = -1;
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
+ h->dynstr_index);
+ }
+ return TRUE;
+}
+
/* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the
dynamic object, but we're not including those sections. We have to
@@ -7928,6 +7960,7 @@
struct elf_aarch64_link_hash_table *htab;
struct elf_aarch64_link_hash_entry *eh;
struct elf_dyn_relocs *p;
+ bfd_boolean resolved_to_zero;
/* An example of a bfd_link_hash_indirect symbol is versioned
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -7947,6 +7980,10 @@
info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */
if (h->type == STT_GNU_IFUNC
@@ -7956,7 +7993,7 @@
{
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (h->dynindx == -1 && !h->forced_local
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -7990,6 +8027,11 @@
of relaxing into these from the large model PLT entries. */
s->size += PLT_SMALL_ENTRY_SIZE;
+ /* There should be no PLT relocations against resolved undefined
+ weak symbols in the executable. */
+ if (!resolved_to_zero)
+ {
+
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
htab->root.sgotplt->size += GOT_ENTRY_SIZE;
@@ -8012,6 +8054,7 @@
htab->root.srelplt->reloc_count++;
}
+ }
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8024,9 +8067,6 @@
h->needs_plt = 0;
}
- eh = (struct elf_aarch64_link_hash_entry *) h;
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
-
if (h->got.refcount > 0)
{
bfd_boolean dyn;
@@ -8038,7 +8078,7 @@
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
- if (dyn && h->dynindx == -1 && !h->forced_local
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8052,7 +8092,7 @@
{
h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
@@ -8088,7 +8128,7 @@
}
indx = h && h->dynindx != -1 ? h->dynindx : 0;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (!bfd_link_executable (info)
|| indx != 0
@@ -8154,7 +8194,7 @@
visibility. */
if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
{
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
eh->dyn_relocs = NULL;
@@ -8174,7 +8214,9 @@
symbols which turn out to need copy relocs or are not
dynamic. */
- if (!h->non_got_ref
+ if (!(h->non_got_ref
+ || (h->root.type == bfd_link_hash_undefweak
+ && !resolved_to_zero))
&& ((h->def_dynamic
&& !h->def_regular)
|| (htab->root.dynamic_sections_created
@@ -8185,6 +8227,7 @@
Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1
&& !h->forced_local
+ && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h))
return FALSE;
@@ -8805,8 +8848,17 @@
Elf_Internal_Sym *sym)
{
struct elf_aarch64_link_hash_table *htab;
+ struct elf_aarch64_link_hash_entry *eh;
+ bfd_boolean local_undefweak;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+
+ /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
+ resolved undefined weak symbols in executable so that their
+ references have value 0 at run-time. */
+ local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
if (h->plt.offset != (bfd_vma) - 1)
{
asection *plt, *gotplt, *relplt;
@@ -8841,7 +8893,7 @@
return FALSE;
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
- if (!h->def_regular)
+ if (!local_undefweak && !h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. */
@@ -8860,10 +8912,11 @@
}
if (h->got.offset != (bfd_vma) - 1
- && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
+ && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
/* Undefined weak symbol in static PIE resolves to 0 without
any dynamic relocations. */
- && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+ && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)
+ && !local_undefweak)
{
Elf_Internal_Rela rela;
bfd_byte *loc;
@@ -9357,6 +9410,9 @@
#define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections
+#define elf_backend_fixup_symbol \
+ elfNN_aarch64_elf_fixup_symbol
+
#define elf_backend_finish_dynamic_sections \
elfNN_aarch64_finish_dynamic_sections
diff -NBaur binutils-2.30/ld/emulparams/aarch64elf32.sh binutils-2.30-dka64/ld/emulparams/aarch64elf32.sh
--- binutils-2.30/ld/emulparams/aarch64elf32.sh 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emulparams/aarch64elf32.sh 2018-02-11 19:48:08.997273556 +0000
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32"
MACHINE=
NOP=0
diff -NBaur binutils-2.30/ld/emulparams/aarch64elf.sh binutils-2.30-dka64/ld/emulparams/aarch64elf.sh
--- binutils-2.30/ld/emulparams/aarch64elf.sh 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emulparams/aarch64elf.sh 2018-02-11 19:48:09.009273555 +0000
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64
MACHINE=
NOP=0
diff -NBaur binutils-2.30/ld/emultempl/aarch64elf.em binutils-2.30-dka64/ld/emultempl/aarch64elf.em
--- binutils-2.30/ld/emultempl/aarch64elf.em 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emultempl/aarch64elf.em 2018-02-11 19:48:09.009273555 +0000
@@ -378,7 +378,7 @@
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
'
-PARSE_AND_LIST_OPTIONS='
+PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}'
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
" enum sizes\n"));
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible"
diff -NBaur binutils-2.30/ld/Makefile.am binutils-2.30-dka64/ld/Makefile.am
--- binutils-2.30/ld/Makefile.am 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/Makefile.am 2018-02-11 19:48:09.021273555 +0000
@@ -1654,19 +1654,23 @@
$(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
diff -NBaur binutils-2.30/ld/Makefile.in binutils-2.30-dka64/ld/Makefile.in
--- binutils-2.30/ld/Makefile.in 2018-01-27 15:03:10.000000000 +0000
+++ binutils-2.30-dka64/ld/Makefile.in 2018-02-11 19:48:09.037273554 +0000
@@ -3219,18 +3219,22 @@
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \

View File

@@ -0,0 +1,190 @@
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.c gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.c
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.c 2017-11-03 15:01:10.970890000 +0000
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.c 2018-01-22 20:15:07.232099998 +0000
@@ -10009,8 +10009,24 @@
|| !register_operand (target, Pmode))
target = gen_reg_rtx (Pmode);
- /* Can return in any reg. */
- emit_insn (gen_aarch64_load_tp_hard (target));
+ if (TARGET_HARD_TP)
+ {
+ /* Can return in any reg. */
+ emit_insn (gen_aarch64_load_tp_hard (target));
+ }
+ else
+ {
+ /* Always returned in r0. Immediately copy the result into a pseudo,
+ otherwise other uses of r0 (e.g. setting up function arguments) may
+ clobber the value. */
+
+ rtx tmp;
+
+ emit_insn (gen_aarch64_load_tp_soft ());
+
+ tmp = gen_rtx_REG (DImode, R0_REGNUM);
+ emit_move_insn (target, tmp);
+ }
return target;
}
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64-elf-raw.h gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64-elf-raw.h
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64-elf-raw.h 2017-01-01 12:07:43.905435000 +0000
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64-elf-raw.h 2018-01-22 20:15:07.232099998 +0000
@@ -22,6 +22,7 @@
#ifndef GCC_AARCH64_ELF_RAW_H
#define GCC_AARCH64_ELF_RAW_H
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
#define ENDFILE_SPEC \
" crtend%O%s crtn%O%s " \
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.h gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.h
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.h 2017-09-21 13:16:31.171118000 +0100
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.h 2018-01-22 20:15:07.232099998 +0000
@@ -887,6 +887,10 @@
/* Check TLS Descriptors mechanism is selected. */
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
+/* Check selected thread pointer access sequence to use. */
+#define TARGET_HARD_TP (target_thread_pointer == TP_HARD)
+#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT)
+
extern enum aarch64_code_model aarch64_cmodel;
/* When using the tiny addressing model conditional and unconditional branches
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.md gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.md
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.md 2017-04-05 12:48:02.927619000 +0100
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.md 2018-01-22 20:15:07.236099934 +0000
@@ -5230,11 +5230,22 @@
(define_insn "aarch64_load_tp_hard"
[(set (match_operand:DI 0 "register_operand" "=r")
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
- ""
- "mrs\\t%0, tpidr_el0"
+ "TARGET_HARD_TP"
+ "mrs\\t%0, tpidr_el0\\t// aarch64_load_tp_hard"
[(set_attr "type" "mrs")]
)
+(define_insn "aarch64_load_tp_soft"
+ [(set (reg:DI 0) (unspec:DI [(const_int 0)] UNSPEC_TLS))
+ (clobber (reg:DI IP0_REGNUM))
+ (clobber (reg:DI IP1_REGNUM))
+ (clobber (reg:DI LR_REGNUM))
+ (clobber (reg:CC CC_REGNUM))]
+ "TARGET_SOFT_TP"
+ "bl\\t__aarch64_read_tp\\t// aarch64_load_tp_soft"
+ [(set_attr "type" "branch")]
+)
+
;; The TLS ABI specifically requires that the compiler does not schedule
;; instructions in the TLS stubs, in order to enable linker relaxation.
;; Therefore we treat the stubs as an atomic sequence.
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.opt gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.opt
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.opt 2017-03-17 17:05:23.131899000 +0000
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.opt 2018-01-22 20:15:07.236099934 +0000
@@ -115,6 +115,20 @@
EnumValue
Enum(aarch64_tls_size) String(48) Value(48)
+mtp=
+Target RejectNegative Joined Enum(aarch64_tp_type) Var(target_thread_pointer) Init(TP_HARD)
+Specify how to access the thread pointer.
+
+Enum
+Name(aarch64_tp_type) Type(enum aarch64_tp_type)
+Valid arguments to -mtp=:
+
+EnumValue
+Enum(aarch64_tp_type) String(hard) Value(TP_HARD)
+
+EnumValue
+Enum(aarch64_tp_type) String(soft) Value(TP_SOFT)
+
march=
Target RejectNegative ToLower Joined Var(aarch64_arch_string)
-march=ARCH Use features of architecture ARCH.
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64-opts.h gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64-opts.h
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64-opts.h 2017-01-20 00:03:20.347898000 +0000
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64-opts.h 2018-01-22 20:15:07.232099998 +0000
@@ -48,6 +48,12 @@
TLS_DESCRIPTORS
};
+/* Which thread pointer access sequence to use. */
+enum aarch64_tp_type {
+ TP_HARD,
+ TP_SOFT
+};
+
/* The code model defines the address generation strategy.
Most have a PIC and non-PIC variant. */
enum aarch64_code_model {
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/t-aarch64 gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/t-aarch64
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/t-aarch64 2017-01-01 12:07:43.905435000 +0000
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/t-aarch64 2018-01-22 20:15:07.236099934 +0000
@@ -68,5 +68,7 @@
$(srcdir)/config/aarch64/cortex-a57-fma-steering.c
comma=,
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
-MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG))
+MULTILIB_OPTIONS = mcmodel=large fPIC
+MULTILIB_DIRNAMES = large pic
+MULTILIB_REQUIRED = mcmodel=large fPIC
+MULTILIB_MATCHES = fPIC=fpic fPIC=fpie fPIC=fPIE
diff -NBaur gcc-7.3.0-RC-20180122/gcc/gcc.c gcc-7.3.0-RC-20180122-aarch64/gcc/gcc.c
--- gcc-7.3.0-RC-20180122/gcc/gcc.c 2017-09-15 09:18:34.015147000 +0100
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/gcc.c 2018-01-22 20:15:07.236099934 +0000
@@ -779,6 +779,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 \
@@ -1074,6 +1079,7 @@
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
+static const char *libgloss_spec = LIBGLOSS_SPEC;
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1579,6 +1585,7 @@
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff -NBaur gcc-7.3.0-RC-20180122/libgcc/crtstuff.c gcc-7.3.0-RC-20180122-aarch64/libgcc/crtstuff.c
--- gcc-7.3.0-RC-20180122/libgcc/crtstuff.c 2017-01-01 12:07:43.905435000 +0000
+++ gcc-7.3.0-RC-20180122-aarch64/libgcc/crtstuff.c 2018-01-22 20:15:07.236099934 +0000
@@ -47,6 +47,7 @@
/* Target machine header files require this define. */
#define IN_LIBGCC2
+#define USED_FOR_TARGET
/* FIXME: Including auto-host is incorrect, but until we have
identified the set of defines that need to go into auto-target.h,
diff -NBaur gcc-7.3.0-RC-20180122/libgcc/Makefile.in gcc-7.3.0-RC-20180122-aarch64/libgcc/Makefile.in
--- gcc-7.3.0-RC-20180122/libgcc/Makefile.in 2017-04-19 09:08:44.446150000 +0100
+++ gcc-7.3.0-RC-20180122-aarch64/libgcc/Makefile.in 2018-01-22 20:15:07.236099934 +0000
@@ -844,7 +844,7 @@
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
# LIB2ADDEHSHARED matter. (Usually all three are identical.)
-c_flags := -fexceptions
+c_flags := -fno-exceptions
ifeq ($(enable_shared),yes)

File diff suppressed because it is too large Load Diff

40
dka64/rules/base_rules Normal file
View File

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

38
dka64/rules/base_tools Normal file
View File

@@ -0,0 +1,38 @@
#---------------------------------------------------------------------------------
# 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
#---------------------------------------------------------------------------------
export PATH := $(DEVKITPRO)/devkitA64/bin:$(PATH)
#---------------------------------------------------------------------------------
# add portlibs path
#---------------------------------------------------------------------------------
export PORTLIBS_PATH := $(DEVKITPRO)/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

103
dkpsp/scripts/build-gcc.sh → dka64/scripts/build-gcc.sh Normal file → Executable file
View File

@@ -1,4 +1,5 @@
#!/bin/sh #!/bin/sh
#---------------------------------------------------------------------------------
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# build and install binutils # build and install binutils
@@ -10,10 +11,8 @@ cd $target/binutils
if [ ! -f configured-binutils ] if [ ! -f configured-binutils ]
then then
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \ CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
--prefix=$prefix --target=$target --disable-nls --disable-debug \ --prefix=$prefix --target=$target --disable-nls --disable-werror \
--enable-lto --enable-plugins \ --enable-lto --enable-plugins --enable-poison-system-directories \
--enable-poison-system-directories \
--disable-dependency-tracking --disable-werror \
$CROSS_PARAMS \ $CROSS_PARAMS \
|| { echo "Error configuring binutils"; exit 1; } || { echo "Error configuring binutils"; exit 1; }
touch configured-binutils touch configured-binutils
@@ -25,7 +24,6 @@ then
touch built-binutils touch built-binutils
fi fi
if [ ! -f installed-binutils ] if [ ! -f installed-binutils ]
then then
$MAKE install || { echo "Error installing binutils"; exit 1; } $MAKE install || { echo "Error installing binutils"; exit 1; }
@@ -39,68 +37,53 @@ cd $BUILDDIR
mkdir -p $target/gcc mkdir -p $target/gcc
cd $target/gcc 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,obj-c++ \ CXXFLAGS="$cflags" \
--disable-multilib\ LDFLAGS="$ldflags" \
--disable-shared --disable-win32-registry --disable-nls\ CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
--enable-cxx-flags="-G0" \ CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
LDFLAGS_FOR_TARGET="" \
../../gcc-$GCC_VER/configure \
--enable-languages=c,c++ \
--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 \ --disable-libstdcxx-pch \
--target=$target \ --target=$target \
--with-newlib \ --with-newlib \
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \ --with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--enable-lto $plugin_ld \
--prefix=$prefix \ --prefix=$prefix \
--disable-dependency-tracking \ --enable-lto $plugin_ld\
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPSP release 17" \ --with-system-zlib \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 alpha 7" \
$CROSS_PARAMS \ $CROSS_PARAMS \
|| { echo "Error configuring gcc"; exit 1; } || { echo "Error configuring gcc"; exit 1; }
touch configured-gcc touch configured-gcc
fi fi
if [ ! -f built-gcc ] if [ ! -f built-gcc ]
then then
$MAKE all-gcc || { echo "Error building gcc"; exit 1; } $MAKE all-gcc || { echo "Error building gcc stage1"; exit 1; }
touch built-gcc touch built-gcc
fi fi
if [ ! -f installed-gcc ] if [ ! -f installed-gcc ]
then then
$MAKE install-gcc || { echo "Error installing gcc"; exit 1; } $MAKE install-gcc || { echo "Error installing gcc"; exit 1; }
touch installed-gcc touch installed-gcc
fi fi
unset CFLAGS 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 cd $BUILDDIR
unset CFLAGS
unset CFLAGS_FOR_HOST
unset LDFLAGS
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# build and install newlib # build and install newlib
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -109,10 +92,13 @@ cd $target/newlib
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 \
--disable-newlib-supplied-syscalls \
--enable-newlib-mb \
--disable-newlib-wide-orient \
--target=$target \ --target=$target \
--prefix=$prefix \ --prefix=$prefix \
--disable-dependency-tracking \
|| { echo "Error configuring newlib"; exit 1; } || { echo "Error configuring newlib"; exit 1; }
touch configured-newlib touch configured-newlib
fi fi
@@ -123,9 +109,10 @@ then
touch built-newlib touch built-newlib
fi fi
if [ ! -f installed-newlib ] if [ ! -f installed-newlib ]
then then
$MAKE install || { echo "Error installing newlib"; exit 1; } $MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
touch installed-newlib touch installed-newlib
fi fi
@@ -150,24 +137,6 @@ then
fi fi
rm -fr $prefix/$target/sys-include 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 cd $BUILDDIR
@@ -177,11 +146,15 @@ cd $BUILDDIR
mkdir -p $target/gdb mkdir -p $target/gdb
cd $target/gdb cd $target/gdb
PLATFORM=`uname -s`
if [ ! -f configured-gdb ] if [ ! -f configured-gdb ]
then then
CFLAGS=$cflags LDFLAGS=$ldflags ../../gdb-$GDB_VER/configure \ CFLAGS="$cflags" \
CXXFLAGS="$cflags" \
LDFLAGS="$ldflags" \
../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \ --disable-nls --prefix=$prefix --target=$target --disable-werror \
--disable-dependency-tracking \
$CROSS_PARAMS \ $CROSS_PARAMS \
|| { echo "Error configuring gdb"; exit 1; } || { echo "Error configuring gdb"; exit 1; }
touch configured-gdb touch configured-gdb
@@ -199,3 +172,7 @@ then
touch installed-gdb touch installed-gdb
fi fi
#---------------------------------------------------------------------------------
# copy base rulesets
#---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dka64/rules/* $prefix

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

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

View File

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

View File

@@ -5,7 +5,7 @@
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.section ".crt0" .section ".crt0","ax"
.global _start, __service_ptr, __apt_appid, __heap_size, __linear_heap_size, __system_arglist, __system_runflags .global _start, __service_ptr, __apt_appid, __heap_size, __linear_heap_size, __system_arglist, __system_runflags
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.align 2 .align 2

View File

@@ -3,3 +3,11 @@ include $(DEVKITARM)/base_rules
all: all:
$(CC) -x assembler-with-cpp -marm -c $(CRT)_crt0.s -o$(CRT)_crt0.o $(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 $(CC) -x assembler-with-cpp -mthumb -c $(CRT)_crt0.s -o thumb/$(CRT)_crt0.o
ds_arm7_vram_crt0:
$(CC) -x assembler-with-cpp -marm -c -DVRAM ds_arm7_crt0.s -ods_arm7_vram_crt0.o
$(CC) -x assembler-with-cpp -mthumb -c -DVRAM ds_arm7_crt0.s -othumb/ds_arm7_vram_crt0.o
3dsx_crt0:
$(CC) -march=armv6k -mfloat-abi=hard -c 3dsx_crt0.s -o armv6k/fpu/3dsx_crt0.o

View File

@@ -8,16 +8,16 @@ MEMORY {
the patcher / linker to find all shifted addresses within each section. the patcher / linker to find all shifted addresses within each section.
Changed sections are: glue_7, got Changed sections are: glue_7, got
*/ */
ddmem : ORIGIN = 0xBF800000, LENGTH = 32K ddmem : ORIGIN = 0xBF800000, LENGTH = 16K
} }
SECTIONS SECTIONS
{ {
.init : .crt0 :
{ {
__text_start = . ; __text_start = . ;
KEEP (*(.init)) KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff } >ddmem = 0xff

View File

@@ -2,10 +2,21 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm) OUTPUT_ARCH(arm)
ENTRY(_start) ENTRY(_start)
MEMORY {
PHDRS {
crt0 PT_LOAD FLAGS(7);
arm7 PT_LOAD FLAGS(7);
arm7i PT_LOAD FLAGS(0x100007);
}
MEMORY {
ewram : ORIGIN = 0x02380000, LENGTH = 12M - 512K
rom : ORIGIN = 0x08000000, LENGTH = 32M rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x037f8000, LENGTH = 96K iwram : ORIGIN = 0x037f8000, LENGTH = 96K
twl_ewram : ORIGIN = 0x02e80000, LENGTH = 512K - 64K
twl_iwram : ORIGIN = 0x03000000, LENGTH = 256K
} }
__iwram_start = ORIGIN(iwram); __iwram_start = ORIGIN(iwram);
@@ -21,30 +32,57 @@ __irq_vector = 0x04000000 - 4;
SECTIONS SECTIONS
{ {
.init :
{
__text_start = . ;
KEEP (*(.init))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.plt : { *(.plt) } >iwram = 0xff
.text : /* ALIGN (4): */ .twl :
{ {
__arm7i_lma__ = LOADADDR(.twl);
__arm7i_start__ = .;
*(.twl)
*.twl*(.text .stub .text.* .gnu.linkonce.t.*)
*.twl*(.rodata)
*.twl*(.roda)
*.twl*(.rodata.*)
*.twl*(.data)
*.twl*(.data.*)
*.twl*(.gnu.linkonce.d*)
__arm7i_end__ = .;
} >twl_iwram AT>twl_ewram :arm7i
.twl_bss ALIGN(4) (NOLOAD) :
{
__twl_bss_start__ = .;
*(.twl_bss)
*.twl.*(.dynbss)
*.twl.*(.gnu.linkonce.b*)
*.twl.*(.bss*)
*.twl.*(COMMON)
__twl_bss_end__ = .;
} >twl_iwram :NONE
.crt0 :
{
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram :crt0
.text :
{
__arm7_lma__ = LOADADDR(.text);
__arm7_start__ = .;
KEEP (*(SORT_NONE(.init)))
*(.plt)
*(.text .stub .text.* .gnu.linkonce.t.*) *(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*)) KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */ /* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning) *(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff } >iwram AT>ewram :arm7
.fini : .fini :
{ {
KEEP (*(.fini)) KEEP (*(.fini))
} >iwram =0xff } >iwram AT>ewram
__text_end = . ;
.rodata : .rodata :
{ {
@@ -55,27 +93,38 @@ SECTIONS
*(.gnu.linkonce.r*) *(.gnu.linkonce.r*)
SORT(CONSTRUCTORS) SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff } >iwram AT>ewram
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram AT>ewram
.ARM.exidx : {
__exidx_start = .; __exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >iwram *(.ARM.exidx* .gnu.linkonce.armexidx.*)
__exidx_end = .; __exidx_end = .;
} >iwram AT>ewram
/* Ensure the __preinit_array_start label is properly aligned. We /* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to the linker would then create the section even if it turns out to
be empty, which isn't pretty. */ be empty, which isn't pretty. */
.preinit_array : {
. = ALIGN(32 / 8); . = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .); PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >iwram = 0xff KEEP (*(.preinit_array))
PROVIDE (__preinit_array_end = .); PROVIDE (__preinit_array_end = .);
} >iwram AT>ewram
.init_array : {
PROVIDE (__init_array_start = .); PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >iwram = 0xff KEEP (*(.init_array))
PROVIDE (__init_array_end = .); PROVIDE (__init_array_end = .);
} >iwram AT>ewram
.fini_array : {
PROVIDE (__fini_array_start = .); PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >iwram = 0xff KEEP (*(.fini_array))
PROVIDE (__fini_array_end = .); PROVIDE (__fini_array_end = .);
} >iwram AT>ewram
.ctors : .ctors :
{ {
@@ -90,7 +139,7 @@ SECTIONS
KEEP (*(SORT(.ctors.*))) KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors)) KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff } >iwram AT>ewram
.dtors : .dtors :
{ {
@@ -99,21 +148,21 @@ SECTIONS
KEEP (*(SORT(.dtors.*))) KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors)) KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff } >iwram AT>ewram
.eh_frame : .eh_frame :
{ {
KEEP (*(.eh_frame)) KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff } >iwram AT>ewram
.gcc_except_table : .gcc_except_table :
{ {
*(.gcc_except_table) *(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff } >iwram AT>ewram
.jcr : { KEEP (*(.jcr)) } >iwram = 0 .jcr : { KEEP (*(.jcr)) } >iwram AT>ewram
.got : { *(.got.plt) *(.got) } >iwram = 0 .got : { *(.got.plt) *(.got) } >iwram AT>ewram
.data ALIGN(4) : { .data ALIGN(4) : {
__data_start = ABSOLUTE(.); __data_start = ABSOLUTE(.);
@@ -123,10 +172,11 @@ SECTIONS
CONSTRUCTORS CONSTRUCTORS
. = ALIGN(4); . = ALIGN(4);
__data_end = ABSOLUTE(.) ; __data_end = ABSOLUTE(.) ;
} >iwram = 0xff } >iwram AT>ewram
.bss ALIGN(4) : .bss ALIGN(4) (NOLOAD) :
{ {
__arm7_end__ = .;
__bss_start = ABSOLUTE(.); __bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.); __bss_start__ = ABSOLUTE(.);
*(.dynbss) *(.dynbss)
@@ -171,6 +221,5 @@ SECTIONS
.debug_funcnames 0 : { *(.debug_funcnames) } .debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) } .debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) } .debug_varnames 0 : { *(.debug_varnames) }
.stack 0x80000 : { _stack = .; *(.stack) }
/* These must appear regardless of . */ /* These must appear regardless of . */
} }

View File

@@ -1,5 +1,5 @@
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.section ".init" .section ".crt0","ax"
.global _start .global _start
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.align 4 .align 4
@@ -23,11 +23,53 @@ _start:
msr cpsr, r0 msr cpsr, r0
ldr sp, =__sp_usr @ Set user stack ldr sp, =__sp_usr @ Set user stack
#ifndef VRAM
adr r1, __sync_start @ Perform ARM7<->ARM9 sync code
ldr r2, =__arm7_start__
mov r3, #(__sync_end-__sync_start)
mov r8, r2
bl CopyMem
mov r3, r8
bl _blx_r3_stub
@---------------------------------------------------------------------------------
@ Copy arm7 binary from LMA to VMA (EWRAM to IWRAM)
@---------------------------------------------------------------------------------
adr r0, arm7lma @ Calculate ARM7 LMA
ldr r1, [r0]
add r1, r1, r0
ldr r2, =__arm7_start__
ldr r4, =__arm7_end__
bl CopyMemCheck
#else
bl __sync_start
#endif
ldr r0, =__bss_start__ @ Clear BSS section to 0x00 ldr r0, =__bss_start__ @ Clear BSS section to 0x00
ldr r1, =__bss_end__ ldr r1, =__bss_end__
sub r1, r1, r0 sub r1, r1, r0
bl ClearMem bl ClearMem
#ifndef VRAM
cmp r10, #1
bne NotTWL
ldr r1, =__dsimode @ set DSi mode flag
strb r10, [r1]
ldr r1, =0x02ffe1d8 @ Get ARM7i LMA from header
ldr r1, [r1]
ldr r2, =__arm7i_start__
ldr r4, =__arm7i_end__
bl CopyMemCheck
ldr r0, =__twl_bss_start__ @ Clear TWL BSS section to 0x00
ldr r1, =__twl_bss_end__
sub r1, r1, r0
bl ClearMem
#endif
NotTWL:
ldr r3, =__libc_init_array @ global constructors ldr r3, =__libc_init_array @ global constructors
bl _blx_r3_stub bl _blx_r3_stub
@@ -35,14 +77,51 @@ _start:
mov r1, #0 @ char *argv[] mov r1, #0 @ char *argv[]
ldr r3, =main ldr r3, =main
ldr lr,=__libnds_exit ldr lr,=__libnds_exit
bx r3 mov r12, #0x4000000 @ tell arm9 we are ready
mov r9, #0
str r9, [r12, #0x180]
@---------------------------------------------------------------------------------
_blx_r3_stub: _blx_r3_stub:
@---------------------------------------------------------------------------------
bx r3 bx r3
#ifndef VRAM
arm7lma:
.word __arm7_lma__ - .
#endif
.pool
@---------------------------------------------------------------------------------
@ ARM7<->ARM9 synchronization code
@---------------------------------------------------------------------------------
__sync_start:
push {lr}
mov r12, #0x4000000
mov r9, #0x0
bl IPCSync
mov r9, #(0x9<<8)
str r9, [r12, #0x180]
mov r9, #0xA
bl IPCSync
mov r9, #(0xB<<8)
str r9, [r12, #0x180]
mov r9, #0xC
bl IPCSync
mov r9, #(0xD<<8)
str r9, [r12, #0x180]
IPCRecvFlag:
ldr r10, [r12, #0x180]
and r10, r10, #0xF
cmp r10, #0xC
beq IPCRecvFlag
pop {pc}
IPCSync:
ldr r10, [r12, #0x180]
and r10, r10, #0xF
cmp r10, r9
bne IPCSync
bx lr
__sync_end:
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
@ Clear memory to 0x00 if length != 0 @ Clear memory to 0x00 if length != 0
@ r0 = Start Address @ r0 = Start Address
@@ -70,6 +149,9 @@ ClrLoop:
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
CopyMemCheck: CopyMemCheck:
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
cmp r1, r2
bxeq lr
sub r3, r4, r2 @ Is there any data to copy? sub r3, r4, r2 @ Is there any data to copy?
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
@ Copy memory @ Copy memory

View File

@@ -0,0 +1,187 @@
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
{
.crt0 :
{
__text_start = . ;
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >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
__arm7_end__ = .;
.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

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

View File

@@ -6,7 +6,7 @@ MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x037f8000, LENGTH = 96K iwram : ORIGIN = 0x037f8000, LENGTH = 96K
vram : ORIGIN = 0x06000000, LENGTH = 128K vram : ORIGIN = 0x06000000, LENGTH = 256K
} }
__iwram_start = ORIGIN(iwram); __iwram_start = ORIGIN(iwram);
@@ -22,12 +22,20 @@ __irq_vector = 0x04000000 - 4;
SECTIONS SECTIONS
{ {
.init : .crt0 :
{ {
__text_start = . ; __text_start = . ;
KEEP (*(.init)) KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff } >vram = 0xff
__arm7_lma__ = .;
__arm7_start__ = .;
.init :
{
KEEP (*(SORT_NONE(.init)))
} >vram = 0xff
.plt : { *(.plt) } >vram = 0xff .plt : { *(.plt) } >vram = 0xff
.text : /* ALIGN (4): */ .text : /* ALIGN (4): */
@@ -128,6 +136,8 @@ SECTIONS
} >vram = 0xff } >vram = 0xff
__arm7_end__ = .;
.bss ALIGN(4) : .bss ALIGN(4) :
{ {

View File

@@ -4,5 +4,5 @@
%(old_link) -T ds_arm7_vram.ld%s %(old_link) -T ds_arm7_vram.ld%s
*startfile: *startfile:
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s ds_arm7_vram_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -2,11 +2,9 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm) OUTPUT_ARCH(arm)
ENTRY(_start) ENTRY(_start)
__vectors_start = ORIGIN(vectors);
__itcm_start = ORIGIN(itcm);
__ewram_end = ORIGIN(ewram) + LENGTH(ewram); __ewram_end = ORIGIN(ewram) + LENGTH(ewram);
__eheap_end = ORIGIN(ewram) + LENGTH(ewram); __eheap_end = ORIGIN(ewram) + LENGTH(ewram);
__dtcm_start = ORIGIN(dtcm);
__dtcm_top = ORIGIN(dtcm) + LENGTH(dtcm); __dtcm_top = ORIGIN(dtcm) + LENGTH(dtcm);
__irq_flags = __dtcm_top - 0x08; __irq_flags = __dtcm_top - 0x08;
__irq_vector = __dtcm_top - 0x04; __irq_vector = __dtcm_top - 0x04;
@@ -15,52 +13,67 @@ __sp_svc = __dtcm_top - 0x100;
__sp_irq = __sp_svc - 0x100; __sp_irq = __sp_svc - 0x100;
__sp_usr = __sp_irq - 0x100; __sp_usr = __sp_irq - 0x100;
PHDRS {
main PT_LOAD FLAGS(7);
dtcm PT_LOAD FLAGS(7);
itcm PT_LOAD FLAGS(7);
vectors PT_LOAD FLAGS(7);
twl PT_LOAD FLAGS(0x100007);
}
SECTIONS SECTIONS
{ {
.init : /* Secure area crap */
.secure : { *(.secure) } >ewram :main = 0
.crt0 :
{ {
__text_start = . ; __text_start = . ;
KEEP (*(.init)) KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff } >ewram :main = 0x00
.plt : { *(.plt) } >ewram = 0xff .plt : { *(.plt) } >ewram :main = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >ewram :main
.text : /* ALIGN (4): */ .text : /* ALIGN (4): */
{ {
*(EXCLUDE_FILE (*.itcm*) .text) *(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .text)
*(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .stub)
*(.text.*) *(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */ /* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning) *(EXCLUDE_FILE(*.twl*) .gnu.warning)
*(.gnu.linkonce.t*) *(EXCLUDE_FILE(*.twl*) .gnu.linkonce.t*)
*(.glue_7) *(.glue_7)
*(.glue_7t) *(.glue_7t)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff } >ewram :main = 0xff
.fini : .fini :
{ {
KEEP (*(.fini)) KEEP (*(.fini))
} >ewram =0xff } >ewram :main =0xff
__text_end = . ; __text_end = . ;
.rodata : .rodata :
{ {
*(.rodata) *(EXCLUDE_FILE(*.twl*) .rodata)
*all.rodata*(*) *all.rodata*(*)
*(.roda) *(EXCLUDE_FILE(*.twl*) .roda)
*(.rodata.*) *(EXCLUDE_FILE(*.twl*) .rodata.*)
*(.gnu.linkonce.r*) *(EXCLUDE_FILE(*.twl*) .gnu.linkonce.r*)
SORT(CONSTRUCTORS) SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff } >ewram :main = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram :main
__exidx_start = .; __exidx_start = .;
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram :main
__exidx_end = .; __exidx_end = .;
/* Ensure the __preinit_array_start label is properly aligned. We /* Ensure the __preinit_array_start label is properly aligned. We
@@ -71,21 +84,21 @@ SECTIONS
. = ALIGN(32 / 8); . = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .); PROVIDE (__preinit_array_start = .);
.preinit_array : { KEEP (*(.preinit_array)) } >ewram = 0xff .preinit_array : { KEEP (*(.preinit_array)) } >ewram :main = 0xff
PROVIDE (__preinit_array_end = .); PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .); PROVIDE (__init_array_start = .);
.init_array : .init_array :
{ {
KEEP (*(SORT(.init_array.*))) KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array)) KEEP (*(.init_array))
} >ewram = 0xff } >ewram :main = 0xff
PROVIDE (__init_array_end = .); PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .); PROVIDE (__fini_array_start = .);
.fini_array : .fini_array :
{ {
KEEP (*(.fini_array)) KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*))) KEEP (*(SORT(.fini_array.*)))
} >ewram = 0xff } >ewram :main = 0xff
PROVIDE (__fini_array_end = .); PROVIDE (__fini_array_end = .);
@@ -102,7 +115,7 @@ SECTIONS
KEEP (*(SORT(.ctors.*))) KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors)) KEEP (*(.ctors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff } >ewram :main = 0xff
.dtors : .dtors :
{ {
@@ -111,21 +124,21 @@ SECTIONS
KEEP (*(SORT(.dtors.*))) KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors)) KEEP (*(.dtors))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff } >ewram :main = 0xff
.eh_frame : .eh_frame :
{ {
KEEP (*(.eh_frame)) KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff } >ewram :main = 0xff
.gcc_except_table : .gcc_except_table :
{ {
*(.gcc_except_table) *(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff } >ewram :main = 0xff
.jcr : { KEEP (*(.jcr)) } >ewram = 0 .jcr : { KEEP (*(.jcr)) } >ewram :main = 0
.got : { *(.got.plt) *(.got) *(.rel.got) } >ewram = 0 .got : { *(.got.plt) *(.got) *(.rel.got) } >ewram :main = 0
.ewram ALIGN(4) : .ewram ALIGN(4) :
{ {
@@ -133,52 +146,51 @@ SECTIONS
*(.ewram) *(.ewram)
*ewram.*(.text) *ewram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram = 0xff } >ewram :main = 0xff
.data ALIGN(4) : .data ALIGN(4) :
{ {
__data_start = ABSOLUTE(.); __data_start = ABSOLUTE(.);
*(.data) *(EXCLUDE_FILE(*.twl*) .data)
*(.data.*) *(EXCLUDE_FILE(*.twl*) .data.*)
*(.gnu.linkonce.d*) *(EXCLUDE_FILE(*.twl*) .gnu.linkonce.d*)
CONSTRUCTORS CONSTRUCTORS
. = ALIGN(4); . = ALIGN(4);
__data_end = ABSOLUTE(.) ; __data_end = ABSOLUTE(.) ;
} >ewram = 0xff } >ewram :main = 0xff
__dtcm_lma = . ;
__bss_vma = . ; __bss_vma = . ;
.dtcm __dtcm_start : AT (__dtcm_lma) .dtcm :
{ {
__dtcm_lma = LOADADDR(.dtcm);
__dtcm_start = ABSOLUTE(.);
*(.dtcm) *(.dtcm)
*(.dtcm.*) *(.dtcm.*)
. = ALIGN(4); . = ALIGN(4);
__dtcm_end = ABSOLUTE(.); __dtcm_end = ABSOLUTE(.);
} >dtcm = 0xff } >dtcm AT>ewram :dtcm = 0xff
.itcm :
__itcm_lma = __dtcm_lma + SIZEOF(.dtcm);
.itcm __itcm_start : AT (__itcm_lma)
{ {
__itcm_lma = LOADADDR(.itcm);
__itcm_start = ABSOLUTE(.);
*(.itcm) *(.itcm)
*itcm.*(.text) *.itcm*(.text .stub .text.*)
. = ALIGN(4); . = ALIGN(4);
__itcm_end = ABSOLUTE(.); __itcm_end = ABSOLUTE(.);
} >itcm = 0xff } >itcm AT>ewram :itcm = 0xff
__vectors_lma = __itcm_lma + SIZEOF(.itcm); .vectors :
.vectors __vectors_start : AT (__vectors_lma)
{ {
__vectors_lma = LOADADDR(.vectors);
__vectors_start = ABSOLUTE(.);
*(.vectors) *(.vectors)
*vectors.*(.text) *.vectors*(.text .stub .text.*)
. = ALIGN(4); . = ALIGN(4);
__vectors_end = ABSOLUTE(.); __vectors_end = ABSOLUTE(.);
} >vectors = 0xff } >vectors AT>ewram :vectors = 0xff
.sbss __dtcm_end (NOLOAD): .sbss __dtcm_end (NOLOAD):
{ {
@@ -187,22 +199,48 @@ SECTIONS
*(.sbss) *(.sbss)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__sbss_end = ABSOLUTE(.); __sbss_end = ABSOLUTE(.);
} >dtcm } >dtcm :NONE
.bss __bss_vma (NOLOAD): .bss __bss_vma (NOLOAD):
{ {
__bss_start = ABSOLUTE(.); __bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.); __bss_start__ = ABSOLUTE(.);
*(.dynbss) *(EXCLUDE_FILE(*.twl*) .dynbss)
*(.gnu.linkonce.b*) *(EXCLUDE_FILE(*.twl*) .gnu.linkonce.b*)
*(.bss*) *(EXCLUDE_FILE(*.twl*) .bss*)
*(COMMON) *(EXCLUDE_FILE(*.twl*) COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.) ; __bss_end__ = ABSOLUTE(.) ;
__end__ = ABSOLUTE(.) ; __end__ = ABSOLUTE(.) ;
} AT>ewram } >ewram :NONE
.twl __end__ : AT(MAX(0x2400000,MAX(__end__,LOADADDR(.vectors)+SIZEOF(.vectors))))
{
__arm9i_lma__ = LOADADDR(.twl);
__arm9i_start__ = ABSOLUTE(.);
*(.twl)
*.twl*(.text .stub .text.* .gnu.linkonce.t.*)
*.twl*(.rodata)
*.twl*(.roda)
*.twl*(.rodata.*)
*.twl*(.data)
*.twl*(.data.*)
*.twl*(.gnu.linkonce.d*)
__arm9i_end__ = ABSOLUTE(.);
} :twl
.twl_bss __arm9i_end__ (NOLOAD):
{
__twl_bss_start__ = ABSOLUTE(.);
*(.twl_bss)
*.twl*(.dynbss)
*.twl*(.gnu.linkonce.b*)
*.twl*(.bss*)
*.twl*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__twl_bss_end__ = ABSOLUTE(.);
__twl_end__ = ABSOLUTE(.);
} :NONE
/* Stabs debugging sections. */ /* Stabs debugging sections. */
.stab 0 : { *(.stab) } .stab 0 : { *(.stab) }

View File

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

View File

@@ -8,7 +8,7 @@
.equ _libnds_argv,0x02FFFE70 .equ _libnds_argv,0x02FFFE70
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.section ".init" .section ".crt0","ax"
.global _start .global _start
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.align 4 .align 4
@@ -46,6 +46,28 @@ _start:
msr cpsr, r0 msr cpsr, r0
ldr sp, =__sp_usr @ Set user stack ldr sp, =__sp_usr @ Set user stack
mov r12, #0x4000000 @ Read system ROM status (NTR/TWL)
ldrb r11, [r12,r12,lsr #12]
and r11, r11, #0x3
mov r9, #(0x0<<8) @ Synchronize with ARM7
str r9, [r12, #0x180]
mov r9, #0x9
bl IPCSync
mov r9, #(0xA<<8)
str r9, [r12, #0x180]
mov r9, #0xB
bl IPCSync
mov r9, #(0xC<<8)
str r9, [r12, #0x180]
mov r9, #0xD
bl IPCSync
mov r9, r11, lsl #8
str r9, [r12, #0x180]
mov r9, #0
bl IPCSync
str r9, [r12, #0x180]
ldr r1, =__itcm_lma @ Copy instruction tightly coupled memory (itcm section) from LMA to VMA ldr r1, =__itcm_lma @ Copy instruction tightly coupled memory (itcm section) from LMA to VMA
ldr r2, =__itcm_start ldr r2, =__itcm_start
ldr r4, =__itcm_end ldr r4, =__itcm_end
@@ -61,6 +83,9 @@ _start:
ldr r4, =__dtcm_end ldr r4, =__dtcm_end
bl CopyMemCheck bl CopyMemCheck
cmp r11, #1
ldrne r10, =__end__ @ (DS mode) heap start
ldreq r10, =__twl_end__ @ (DSi mode) heap start
bl checkARGV @ check and process argv trickery bl checkARGV @ check and process argv trickery
ldr r0, =__bss_start__ @ Clear BSS section ldr r0, =__bss_start__ @ Clear BSS section
@@ -73,12 +98,33 @@ _start:
sub r1, r1, r0 sub r1, r1, r0
bl ClearMem bl ClearMem
cmp r11, #1
bne NotTWL
ldr r9, =__dsimode @ set DSi mode flag
strb r11, [r9]
@ Copy TWL area (arm9i section) from LMA to VMA
ldr r1, =0x02ffe1c8 @ Get ARM9i LMA from header
ldr r1, [r1]
ldr r2, =__arm9i_start__
cmp r1, r2 @ skip copy if LMA=VMA
ldrne r4, =__arm9i_end__
blne CopyMemCheck
ldr r0, =__twl_bss_start__ @ Clear TWL BSS section
ldr r1, =__twl_bss_end__
sub r1, r1, r0
bl ClearMem
NotTWL:
ldr r0, =_libnds_argv ldr r0, =_libnds_argv
@ reset heap base @ reset heap base
ldr r2, [r0,#20] @ newheap base ldr r2, [r0,#20] @ newheap base
ldr r1,=fake_heap_start cmp r2, #0
moveq r2, r10
ldr r1, =fake_heap_start @ set heap start
str r2, [r1] str r2, [r1]
ldr r1, =fake_heap_end @ set heap end ldr r1, =fake_heap_end @ set heap end
@@ -86,6 +132,7 @@ _start:
str r8, [r1] str r8, [r1]
push {r0} push {r0}
ldr r0, =__secure_area__
ldr r3, =initSystem ldr r3, =initSystem
blx r3 @ system initialisation blx r3 @ system initialisation
@@ -121,7 +168,7 @@ checkARGV:
ldr r2, [r0, #8] @ length of command line ldr r2, [r0, #8] @ length of command line
@ copy to heap @ copy to heap
ldr r3, =__end__ @ initial heap base mov r3, r10 @ initial heap base
str r3, [r0, #4] @ set command line address str r3, [r0, #4] @ set command line address
cmp r2, #0 cmp r2, #0
@@ -201,6 +248,17 @@ CIDLoop:
bx lr bx lr
@---------------------------------------------------------------------------------
@ Synchronize with ARM7
@---------------------------------------------------------------------------------
IPCSync:
@---------------------------------------------------------------------------------
ldr r10, [r12, #0x180]
and r10, r10, #0xF
cmp r10, r9
bne IPCSync
bx lr
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.align .align
.pool .pool

View File

@@ -22,14 +22,25 @@ __irq_vector = __iwram_top - 4;
SECTIONS SECTIONS
{ {
.init : .crt0 :
{ {
__text_start = . ; __text_start = . ;
KEEP (*(.init)) KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff } >rom = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >rom = 0xff
.plt : { *(.plt) } >rom = 0xff .plt : { *(.plt) } >rom = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >ewram
.text : /* ALIGN (4): */ .text : /* ALIGN (4): */
{ {
*(EXCLUDE_FILE (*.iwram*) .text) *(EXCLUDE_FILE (*.iwram*) .text)

View File

@@ -1,5 +1,5 @@
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.section ".init" .section ".crt0","ax"
.global _start .global _start
.arm .arm
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------

View File

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

View File

@@ -4,7 +4,7 @@
@ author : tim schuerewegen @ author : tim schuerewegen
@ version : 1.0 @ version : 1.0
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
.section ".init" .section ".crt0","ax"
.global _start .global _start
.align .align
.arm .arm

View File

@@ -67,12 +67,18 @@ __irq_flags = 0x03007ff8;
SECTIONS SECTIONS
{ {
. = __text_start; . = __text_start;
.init : .crt0 :
{ {
KEEP (*(.init)) KEEP (*(.crt0))
. = ALIGN(4); . = ALIGN(4);
} >rom =0xff } >rom =0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >rom
.plt : .plt :
{ {
*(.plt) *(.plt)

View File

@@ -1,7 +1,10 @@
.section ".init" .section ".crt0","ax"
.global _start .global _start
.align .align
.arm .arm
.cpu arm7tdmi
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------
_start: _start:
@--------------------------------------------------------------------------------- @---------------------------------------------------------------------------------

View File

@@ -13,9 +13,9 @@ SECTIONS
{ {
. = 0x02000000; . = 0x02000000;
.init : .crt0 :
{ {
*(.init) *(.crt0)
. = ALIGN(4); . = ALIGN(4);
} = 0xff } = 0xff

View File

@@ -61,18 +61,25 @@ __irq_flags = 0x03007ff8;
SECTIONS SECTIONS
{ {
. = __text_start; . = __text_start;
.init : . = __text_start;
.crt0 :
{ {
KEEP (*(.init)) KEEP (*(.crt0))
. = ALIGN(4); . = ALIGN(4);
} >ewram =0xff } >ewram =0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >ewram
.plt : .plt :
{ {
*(.plt) *(.plt)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram } >ewram
.text ALIGN (4): .text ALIGN (4):
{ {
*(EXCLUDE_FILE (*.iwram*) .text) *(EXCLUDE_FILE (*.iwram*) .text)

View File

@@ -9,12 +9,18 @@ MEMORY
SECTIONS SECTIONS
{ {
.init : .crt0 :
{ {
__text_start = . ; __text_start = . ;
KEEP (*(.init)) KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */ . = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0xff } >ram = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >ram
.plt : { *(.plt) } >ram = 0xff .plt : { *(.plt) } >ram = 0xff

View File

@@ -1,4 +1,4 @@
.section ".init" .section ".crt0","ax"
.code 32 .code 32
.align .align
.global _start .global _start

View File

@@ -1,13 +0,0 @@
diff -Nbaur binutils-2.24/include/opcode/arm.h binutils-2.24-arm/include/opcode/arm.h
--- binutils-2.24/include/opcode/arm.h 2013-11-26 11:37:33.000000000 +0000
+++ binutils-2.24-arm/include/opcode/arm.h 2014-02-16 19:32:33.000000000 +0000
@@ -114,7 +114,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_V7VE (ARM_AEXT_V7A | ARM_EXT_DIV | ARM_EXT_ADIV \
| ARM_EXT_VIRT | ARM_EXT_SEC | ARM_EXT_MP)

View File

@@ -1,18 +1,18 @@
diff -Nbaur gcc-5.2.0/gcc/config/arm/t-arm-elf gcc-5.2.0-arm/gcc/config/arm/t-arm-elf diff -NBaur gcc-7.1.0/gcc/config/arm/t-arm-elf gcc-7.1.0-arm/gcc/config/arm/t-arm-elf
--- gcc-5.2.0/gcc/config/arm/t-arm-elf 2015-01-05 12:33:28.000000000 +0000 --- gcc-7.1.0/gcc/config/arm/t-arm-elf 2017-01-01 12:07:43.000000000 +0000
+++ gcc-5.2.0-arm/gcc/config/arm/t-arm-elf 2015-11-23 20:16:26.736000000 +0000 +++ gcc-7.1.0-arm/gcc/config/arm/t-arm-elf 2017-05-03 12:58:45.387209969 +0100
@@ -16,11 +16,19 @@ @@ -16,11 +16,19 @@
# along with GCC; see the file COPYING3. If not see # along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
-MULTILIB_OPTIONS = marm/mthumb -MULTILIB_OPTIONS = marm/mthumb
-MULTILIB_DIRNAMES = arm thumb -MULTILIB_DIRNAMES = arm thumb
+MULTILIB_OPTIONS = mthumb march=armv6k mfloat-abi=hard +MULTILIB_OPTIONS = mthumb mbig-endian march=armv6k mfloat-abi=hard
+MULTILIB_DIRNAMES = thumb armv6k fpu +MULTILIB_DIRNAMES = thumb be armv6k fpu
MULTILIB_EXCEPTIONS = MULTILIB_EXCEPTIONS =
MULTILIB_MATCHES = MULTILIB_MATCHES =
+MULTILIB_REQUIRED = mthumb march=armv6k/mfloat-abi=hard +MULTILIB_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard
+ +
+ +
+MULTILIB_MATCHES += march?armv6k=mtune?mpcore +MULTILIB_MATCHES += march?armv6k=mtune?mpcore
@@ -36,9 +36,9 @@ diff -Nbaur gcc-5.2.0/gcc/config/arm/t-arm-elf gcc-5.2.0-arm/gcc/config/arm/t-ar
#MULTILIB_EXCEPTIONS += *mcpu=fa526/*mfloat-abi=hard* #MULTILIB_EXCEPTIONS += *mcpu=fa526/*mfloat-abi=hard*
#MULTILIB_EXCEPTIONS += *mcpu=fa626/*mfloat-abi=hard* #MULTILIB_EXCEPTIONS += *mcpu=fa626/*mfloat-abi=hard*
diff -Nbaur gcc-5.2.0/gcc/config/arm/unknown-elf.h gcc-5.2.0-arm/gcc/config/arm/unknown-elf.h diff -NBaur gcc-7.1.0/gcc/config/arm/unknown-elf.h gcc-7.1.0-arm/gcc/config/arm/unknown-elf.h
--- gcc-5.2.0/gcc/config/arm/unknown-elf.h 2015-11-28 18:13:20.576000000 +0000 --- gcc-7.1.0/gcc/config/arm/unknown-elf.h 2017-01-01 12:07:43.000000000 +0000
+++ gcc-5.2.0-arm/gcc/config/arm/unknown-elf.h 2015-11-28 18:14:06.328000000 +0000 +++ gcc-7.1.0-arm/gcc/config/arm/unknown-elf.h 2017-06-08 12:22:17.868509897 +0100
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
#endif #endif
@@ -47,17 +47,22 @@ diff -Nbaur gcc-5.2.0/gcc/config/arm/unknown-elf.h gcc-5.2.0-arm/gcc/config/arm/
+#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s" +#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s"
#undef STARTFILE_SPEC #undef STARTFILE_SPEC
#define STARTFILE_SPEC UNKNOWN_ELF_STARTFILE_SPEC #define STARTFILE_SPEC \
@@ -93,4 +93,4 @@ @@ -93,4 +93,9 @@
udivmoddi4, which will depend on the exception unwind routines, udivmoddi4, which will depend on the exception unwind routines,
which will depend on abort, which is defined in libc. */ which will depend on abort, which is defined in libc. */
#undef LINK_GCC_C_SEQUENCE_SPEC #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 --end-group"
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group" +#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
diff -Nbaur gcc-5.2.0/gcc/gcc.c gcc-5.2.0-arm/gcc/gcc.c +
--- gcc-5.2.0/gcc/gcc.c 2015-03-10 09:37:41.000000000 +0000 +/* The system headers under devkitARM are C++-aware. */
+++ gcc-5.2.0-arm/gcc/gcc.c 2015-11-23 20:16:26.740000000 +0000 +#undef NO_IMPLICIT_EXTERN_C
@@ -647,6 +647,11 @@ +#define NO_IMPLICIT_EXTERN_C
+
diff -NBaur gcc-7.1.0/gcc/gcc.c gcc-7.1.0-arm/gcc/gcc.c
--- gcc-7.1.0/gcc/gcc.c 2017-01-17 09:38:48.000000000 +0000
+++ gcc-7.1.0-arm/gcc/gcc.c 2017-05-03 12:58:45.395210596 +0100
@@ -779,6 +779,11 @@
#endif #endif
#endif #endif
@@ -69,7 +74,7 @@ diff -Nbaur gcc-5.2.0/gcc/gcc.c gcc-5.2.0-arm/gcc/gcc.c
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */ /* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC #ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \ #define STARTFILE_SPEC \
@@ -879,6 +884,7 @@ @@ -1074,6 +1079,7 @@
static const char *lib_spec = LIB_SPEC; static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = ""; static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC; static const char *libgcc_spec = LIBGCC_SPEC;
@@ -77,7 +82,7 @@ diff -Nbaur gcc-5.2.0/gcc/gcc.c gcc-5.2.0-arm/gcc/gcc.c
static const char *endfile_spec = ENDFILE_SPEC; static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC; static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME; static const char *linker_name_spec = LINKER_NAME;
@@ -1374,6 +1380,7 @@ @@ -1579,6 +1585,7 @@
INIT_STATIC_SPEC ("lib", &lib_spec), INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec), INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec), INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
@@ -85,45 +90,18 @@ diff -Nbaur gcc-5.2.0/gcc/gcc.c gcc-5.2.0-arm/gcc/gcc.c
INIT_STATIC_SPEC ("startfile", &startfile_spec), INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile), INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version), INIT_STATIC_SPEC ("version", &compiler_version),
diff -Nbaur gcc-5.2.0/gcc/Makefile.in gcc-5.2.0-arm/gcc/Makefile.in diff -NBaur gcc-7.1.0/libgcc/config/arm/t-bpabi gcc-7.1.0-arm/libgcc/config/arm/t-bpabi
--- gcc-5.2.0/gcc/Makefile.in 2015-05-04 11:46:32.000000000 +0100 --- gcc-7.1.0/libgcc/config/arm/t-bpabi 2012-08-17 16:06:06.000000000 +0100
+++ gcc-5.2.0-arm/gcc/Makefile.in 2015-11-23 20:16:26.744000000 +0000 +++ gcc-7.1.0-arm/libgcc/config/arm/t-bpabi 2017-05-03 12:58:45.395210596 +0100
@@ -1053,8 +1053,8 @@
# things like the go/%.o rule work properly; but we use $(*F) for the
# file part, as we just want the file part of the stem, not the entire
# file name.
-COMPILE = $(COMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
-POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
+COMPILE = $(COMPILE.base)
+POSTCOMPILE =
else
COMPILE = source='$<' object='$@' libtool=no \
DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) $(COMPILE.base)
diff -Nbaur gcc-5.2.0/libcpp/Makefile.in gcc-5.2.0-arm/libcpp/Makefile.in
--- gcc-5.2.0/libcpp/Makefile.in 2015-07-16 10:16:25.000000000 +0100
+++ gcc-5.2.0-arm/libcpp/Makefile.in 2015-11-23 20:16:26.744000000 +0000
@@ -208,8 +208,7 @@
# Note that we put the dependencies into a .Tpo file, then move them
# into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file.
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+COMPILE = $(COMPILE.base) -o $@
else
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
$(depcomp) $(COMPILE.base)
diff -Nbaur gcc-5.2.0/libgcc/config/arm/t-bpabi gcc-5.2.0-arm/libgcc/config/arm/t-bpabi
--- gcc-5.2.0/libgcc/config/arm/t-bpabi 2012-08-17 16:06:06.000000000 +0100
+++ gcc-5.2.0-arm/libgcc/config/arm/t-bpabi 2015-11-23 20:16:26.744000000 +0000
@@ -17,4 +17,4 @@ @@ -17,4 +17,4 @@
# On ARM, specifying -fnon-call-exceptions will needlessly pull in # On ARM, specifying -fnon-call-exceptions will needlessly pull in
# the unwinder in simple programs which use 64-bit division. Omitting # the unwinder in simple programs which use 64-bit division. Omitting
# the option is safe. # the option is safe.
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions -LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions +LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
diff -Nbaur gcc-5.2.0/libgcc/crtstuff.c gcc-5.2.0-arm/libgcc/crtstuff.c diff -NBaur gcc-7.1.0/libgcc/crtstuff.c gcc-7.1.0-arm/libgcc/crtstuff.c
--- gcc-5.2.0/libgcc/crtstuff.c 2015-01-05 12:33:28.000000000 +0000 --- gcc-7.1.0/libgcc/crtstuff.c 2017-01-01 12:07:43.000000000 +0000
+++ gcc-5.2.0-arm/libgcc/crtstuff.c 2015-11-23 20:16:26.744000000 +0000 +++ gcc-7.1.0-arm/libgcc/crtstuff.c 2017-05-03 12:58:45.395210596 +0100
@@ -47,7 +47,7 @@ @@ -47,7 +47,7 @@
/* Target machine header files require this define. */ /* Target machine header files require this define. */
@@ -133,10 +111,10 @@ diff -Nbaur gcc-5.2.0/libgcc/crtstuff.c gcc-5.2.0-arm/libgcc/crtstuff.c
/* FIXME: Including auto-host is incorrect, but until we have /* FIXME: Including auto-host is incorrect, but until we have
identified the set of defines that need to go into auto-target.h, identified the set of defines that need to go into auto-target.h,
this will have to do. */ this will have to do. */
diff -Nbaur gcc-5.2.0/libgcc/Makefile.in gcc-5.2.0-arm/libgcc/Makefile.in diff -NBaur gcc-7.1.0/libgcc/Makefile.in gcc-7.1.0-arm/libgcc/Makefile.in
--- gcc-5.2.0/libgcc/Makefile.in 2015-01-29 08:03:56.000000000 +0000 --- gcc-7.1.0/libgcc/Makefile.in 2017-04-19 09:08:44.000000000 +0100
+++ gcc-5.2.0-arm/libgcc/Makefile.in 2015-11-23 20:16:26.744000000 +0000 +++ gcc-7.1.0-arm/libgcc/Makefile.in 2017-05-03 12:58:45.399210922 +0100
@@ -819,7 +819,7 @@ @@ -844,7 +844,7 @@
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and # libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
# LIB2ADDEHSHARED matter. (Usually all three are identical.) # LIB2ADDEHSHARED matter. (Usually all three are identical.)

View File

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

View File

@@ -0,0 +1,441 @@
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 1d2dbaf3f7..2d24f09c1b 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -779,6 +779,7 @@ ALL_64_TARGET_OBS = \
ALL_TARGET_OBS = \
arc-tdep.o \
arm.o \
+ arm-3ds-tdep.o \
arm-bsd-tdep.o \
arm-get-next-pcs.o \
arm-linux.o \
@@ -2487,6 +2488,7 @@ ALLDEPFILES = \
amd64-tdep.c \
arc-tdep.c \
arm.c \
+ arm-3ds-tdep.c \
arm-bsd-tdep.c \
arm-get-next-pcs.c \
arm-linux.c \
diff --git a/gdb/arm-3ds-tdep.c b/gdb/arm-3ds-tdep.c
new file mode 100644
index 0000000000..ad014e28db
--- /dev/null
+++ b/gdb/arm-3ds-tdep.c
@@ -0,0 +1,197 @@
+/* Target-dependent code for 3DS. */
+
+/* This uses code from GDB, which license is: */
+
+/*
+ Copyright (C) 2002-2017 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "defs.h"
+#include "gdbcore.h"
+#include "target.h"
+#include "osabi.h"
+#include "xml-syscall.h"
+
+#include "arch/arm.h"
+#include "arch/arm-get-next-pcs.h"
+#include "arm-tdep.h"
+
+static const gdb_byte arm_3ds_arm_le_breakpoint[] = {0xff, 0x00, 0x00, 0xef};
+static const gdb_byte arm_3ds_thumb_le_breakpoint[] = {0xff, 0xdf};
+
+static CORE_ADDR
+ arm_3ds_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
+
+/* Operation function pointers for get_next_pcs. */
+static struct arm_get_next_pcs_ops arm_3ds_get_next_pcs_ops = {
+ arm_get_next_pcs_read_memory_unsigned_integer,
+ arm_3ds_get_next_pcs_syscall_next_pc,
+ arm_get_next_pcs_addr_bits_remove,
+ arm_get_next_pcs_is_thumb,
+ NULL,
+};
+
+static CORE_ADDR
+arm_3ds_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
+{
+ CORE_ADDR next_pc = 0;
+ CORE_ADDR pc = regcache_read_pc (self->regcache);
+ int is_thumb = arm_is_thumb (self->regcache);
+ ULONGEST svc_number = 0;
+
+ if (is_thumb)
+ {
+ next_pc = pc + 2;
+ }
+ else
+ {
+ next_pc = pc + 4;
+ }
+
+ /* Addresses for calling Thumb functions have the bit 0 set. */
+ if (is_thumb)
+ next_pc = MAKE_THUMB_ADDR (next_pc);
+
+ return next_pc;
+}
+
+static VEC (CORE_ADDR) *
+arm_3ds_software_single_step (struct regcache *regcache)
+{
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ struct arm_get_next_pcs next_pcs_ctx;
+ CORE_ADDR pc;
+ int i;
+ VEC (CORE_ADDR) *next_pcs = NULL;
+ struct cleanup *old_chain;
+
+ /* If the target does have hardware single step, GDB doesn't have
+ to bother software single step. */
+ if (target_can_do_single_step () == 1)
+ return NULL;
+
+ old_chain = make_cleanup (VEC_cleanup (CORE_ADDR), &next_pcs);
+
+ arm_get_next_pcs_ctor (&next_pcs_ctx,
+ &arm_3ds_get_next_pcs_ops,
+ gdbarch_byte_order (gdbarch),
+ gdbarch_byte_order_for_code (gdbarch),
+ 1,
+ regcache);
+
+ next_pcs = arm_get_next_pcs (&next_pcs_ctx);
+
+ for (i = 0; VEC_iterate (CORE_ADDR, next_pcs, i, pc); i++)
+ {
+ pc = gdbarch_addr_bits_remove (gdbarch, pc);
+ VEC_replace (CORE_ADDR, next_pcs, i, pc);
+ }
+
+ discard_cleanups (old_chain);
+
+ return next_pcs;
+}
+
+static LONGEST
+arm_3ds_get_syscall_number (struct gdbarch *gdbarch,
+ ptid_t ptid)
+{
+ struct regcache *regs = get_thread_regcache (ptid);
+
+ ULONGEST pc;
+ ULONGEST cpsr;
+ ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
+ int is_thumb;
+ ULONGEST svc_number = -1;
+
+ regcache_cooked_read_unsigned (regs, ARM_PC_REGNUM, &pc);
+ regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &cpsr);
+ is_thumb = (cpsr & t_bit) != 0;
+
+ if (is_thumb)
+ {
+ enum bfd_endian byte_order_for_code =
+ gdbarch_byte_order_for_code (gdbarch);
+
+ /* PC gets incremented before the syscall-stop, so read the
+ previous instruction. */
+ unsigned long this_instr =
+ read_memory_unsigned_integer (pc - 2, 2, byte_order_for_code);
+
+ unsigned long svc_operand = (0x00ff & this_instr);
+ svc_number = svc_operand;
+ }
+ else
+ {
+ enum bfd_endian byte_order_for_code =
+ gdbarch_byte_order_for_code (gdbarch);
+
+ /* PC gets incremented before the syscall-stop, so read the
+ previous instruction. */
+ unsigned long this_instr =
+ read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
+
+ unsigned long svc_operand = (0x000000ff & this_instr);
+ svc_number = svc_operand;
+ }
+
+ if (svc_number == 0xfe)
+ {
+ regcache_cooked_read_unsigned (regs, 12, &svc_number);
+ }
+
+ return svc_number;
+}
+
+static void
+arm_3ds_init_abi (struct gdbarch_info info,
+ struct gdbarch *gdbarch)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+ switch (info.byte_order)
+ {
+ case BFD_ENDIAN_LITTLE:
+ tdep->arm_breakpoint = arm_3ds_arm_le_breakpoint;
+ tdep->thumb_breakpoint = arm_3ds_thumb_le_breakpoint;
+ tdep->arm_breakpoint_size = sizeof (arm_3ds_arm_le_breakpoint);
+ tdep->thumb_breakpoint_size = sizeof (arm_3ds_thumb_le_breakpoint);
+ break;
+
+ default:
+ internal_error (__FILE__, __LINE__,
+ _("arm_gdbarch_init: bad byte order"));
+ }
+ tdep->fp_model = ARM_FLOAT_VFP;
+
+ /* Single stepping. */
+ set_gdbarch_software_single_step (gdbarch, arm_3ds_software_single_step);
+
+ /* `catch syscall' */
+ set_xml_syscall_file_name (gdbarch, "syscalls/arm-3ds.xml");
+ set_gdbarch_get_syscall_number (gdbarch, arm_3ds_get_syscall_number);
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_arm_3ds_tdep;
+
+void
+_initialize_arm_3ds_tdep (void)
+{
+ gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_3DS,
+ arm_3ds_init_abi);
+}
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index fdcb7b1d69..d8fd1622b8 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -119,8 +119,8 @@ arm*-*-symbianelf*)
gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o arm-symbian-tdep.o"
;;
arm*-*-*)
- # Target: ARM embedded system
- gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o"
+ # Target: ARM embedded system (+ 3DS)
+ gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o arm-3ds-tdep.o"
gdb_sim=../sim/arm/libsim.a
;;
diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
index 304d4b05c0..2cf8986d3a 100644
--- a/gdb/data-directory/Makefile.in
+++ b/gdb/data-directory/Makefile.in
@@ -63,7 +63,7 @@ GEN_SYSCALLS_FILES = \
sparc-linux.xml \
sparc64-linux.xml
-SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml $(GEN_SYSCALLS_FILES)
+SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml arm-3ds.xml $(GEN_SYSCALLS_FILES)
PYTHON_DIR = python
PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR)
diff --git a/gdb/defs.h b/gdb/defs.h
index a0b586f401..a1508fd5b3 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -604,6 +604,7 @@ enum gdb_osabi
GDB_OSABI_LYNXOS178,
GDB_OSABI_NEWLIB,
GDB_OSABI_SDE,
+ GDB_OSABI_3DS,
GDB_OSABI_INVALID /* keep this last */
};
diff --git a/gdb/osabi.c b/gdb/osabi.c
index 84fa9c0273..c1c4bb1672 100644
--- a/gdb/osabi.c
+++ b/gdb/osabi.c
@@ -79,6 +79,7 @@ static const struct osabi_names gdb_osabi_names[] =
{ "LynxOS178", NULL },
{ "Newlib", NULL },
{ "SDE", NULL },
+ { "3DS", NULL },
{ "<invalid>", NULL }
};
diff --git a/gdb/syscalls/arm-3ds.xml b/gdb/syscalls/arm-3ds.xml
new file mode 100644
index 0000000000..48780b7bd5
--- /dev/null
+++ b/gdb/syscalls/arm-3ds.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- This file is located inside GDB and is based on files which license are: -->
+<!-- Copyright (C) 2009-2017 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. This file is offered as-is,
+ without any warranty. -->
+<syscalls_info>
+ <syscall name="ControlMemory" number="1" groups="memory"/>
+ <syscall name="QueryMemory" number="2" groups="memory"/>
+
+ <syscall name="ExitProcess" number="3" groups="process"/>
+ <syscall name="GetProcessAffinityMask" number="4" groups="process"/>
+ <syscall name="SetProcessAffinityMask" number="5" groups="process"/>
+ <syscall name="GetProcessIdealProcessor" number="6" groups="process"/>
+ <syscall name="SetProcessIdealProcessor" number="7" groups="process"/>
+
+ <syscall name="CreateThread" number="8" groups="thread"/>
+ <syscall name="ExitThread" number="9" groups="thread"/>
+ <syscall name="SleepThread" number="10" groups="thread"/>
+ <syscall name="GetThreadPriority" number="11" groups="thread"/>
+ <syscall name="SetThreadPriority" number="12" groups="thread"/>
+ <syscall name="GetThreadAffinityMask" number="13" groups="thread"/>
+ <syscall name="SetThreadAffinityMask" number="14" groups="thread"/> <!-- removed -->
+ <syscall name="GetThreadIdealProcessor" number="15" groups="thread"/>
+ <syscall name="SetThreadIdealProcessor" number="16" groups="thread"/> <!-- removed -->
+ <syscall name="GetCurrentProcessorNumber" number="17" groups="thread"/>
+ <syscall name="Run" number="18" groups="thread"/>
+
+ <syscall name="CreateMutex" number="19" groups="synchronization"/>
+ <syscall name="ReleaseMutex" number="20" groups="synchronization"/>
+ <syscall name="CreateSemaphore" number="21" groups="synchronization"/>
+ <syscall name="ReleaseSemaphore" number="22" groups="synchronization"/>
+ <syscall name="CreateEvent" number="23" groups="synchronization"/>
+ <syscall name="SignalEvent" number="24" groups="synchronization"/>
+ <syscall name="ClearEvent" number="25" groups="synchronization"/>
+ <syscall name="CreateTimer" number="26" groups="synchronization"/>
+ <syscall name="SetTimer" number="27" groups="synchronization"/>
+ <syscall name="CancelTimer" number="28" groups="synchronization"/>
+ <syscall name="ClearTimer" number="29" groups="synchronization"/>
+
+ <syscall name="CreateMemoryBlock" number="30" groups="memory,ipc"/>
+ <syscall name="MapMemoryBlock" number="31" groups="memory,ipc"/>
+ <syscall name="UnmapMemoryBlock" number="32" groups="memory,ipc"/>
+
+ <syscall name="CreateAddressArbiter" number="33" groups="memory,synchronization"/>
+ <syscall name="ArbitrateAddress" number="34" groups="memory,synchronization"/>
+
+ <syscall name="CloseHandle" number="35" groups="synchronization,ipc,memory,thread,process,debug"/>
+ <syscall name="WaitSynchronization" number="36" groups="synchronization,ipc,thread,process,debug"/>
+ <syscall name="WaitSynchronizationN" number="37" groups="synchronization,ipc,thread,process,debug"/>
+ <syscall name="SignalAndWait" number="38" groups="synchronization"/> <!-- removed -->
+ <syscall name="DuplicateHandle" number="39" groups="synchronization,ipc,memory,thread,process,debug"/>
+
+ <syscall name="GetSystemTick" number="40" groups="information"/>
+ <syscall name="GetHandleInfo" number="41" groups="information,synchronization,ipc,memory,thread,process,debug"/>
+ <syscall name="GetSystemInfo" number="42" groups="information"/>
+ <syscall name="GetProcessInfo" number="43" groups="information,process"/>
+ <syscall name="GetThreadInfo" number="44" groups="information,thread"/>
+
+ <syscall name="ConnectToPort" number="45" groups="ipc"/>
+ <syscall name="GetCFWInfo" number="46" groups="custom,information"/> <!-- deprecated -->
+ <syscall name="SendSyncRequest2" number="47" groups="ipc"/> <!-- removed -->
+ <syscall name="SendSyncRequest3" number="48" groups="ipc"/> <!-- removed -->
+ <syscall name="SendSyncRequest4" number="49" groups="ipc"/> <!-- removed -->
+ <syscall name="SendSyncRequest" number="50" groups="ipc"/> <!-- removed -->
+
+ <syscall name="OpenProcess" number="51" groups="process"/>
+ <syscall name="OpenThread" number="52" groups="thread"/>
+
+ <syscall name="GetProcessId" number="53" groups="process"/>
+ <syscall name="GetProcessIdOfThread" number="54" groups="process,thread"/>
+ <syscall name="GetThreadId" number="55" groups="thread"/>
+
+ <syscall name="GetResourceLimit" number="56" groups="process"/>
+ <syscall name="GetResourceLimitLimitValues" number="57" groups="process"/>
+ <syscall name="GetResourceLimitCurrentValues" number="58" groups="process"/>
+
+ <syscall name="GetThreadContext" number="59" groups="debug,thread"/> <!-- removed -->
+ <syscall name="Break" number="60" groups="debug"/>
+ <syscall name="OutputDebugString" number="61" groups="debug"/>
+ <syscall name="ControlPerformanceCounter" number="62" groups="debug"/>
+
+ <syscall name="CreatePort" number="71" groups="ipc"/>
+ <syscall name="CreateSessionToPort" number="72" groups="ipc"/>
+ <syscall name="CreateSession" number="73" groups="ipc"/>
+ <syscall name="AcceptSession" number="74" groups="ipc"/>
+ <syscall name="ReplyAndReceive1" number="75" groups="ipc"/>
+ <syscall name="ReplyAndReceive2" number="76" groups="ipc"/>
+ <syscall name="ReplyAndReceive3" number="77" groups="ipc"/>
+ <syscall name="ReplyAndReceive4" number="78" groups="ipc"/>
+ <syscall name="ReplyAndReceive" number="79" groups="ipc"/>
+
+ <syscall name="BindInterrupt" number="80" groups="io,synchronization"/>
+ <syscall name="UnbindInterrupt" number="81" groups="io,synchronization"/>
+ <syscall name="InvalidateProcessDataCache" number="82" groups="io,memory,process"/>
+ <syscall name="StoreProcessDataCache" number="83" groups="io,memory,process"/>
+ <syscall name="FlushProcessDataCache" number="84" groups="io,memory,process"/>
+
+ <syscall name="StartInterprocessDma" number="85" groups="io,memory,ipc"/>
+ <syscall name="StopDma" number="86" groups="io,memory,ipc"/>
+ <syscall name="GetDmaState" number="87" groups="io,memory,ipc"/>
+ <syscall name="RestartDma" number="88" groups="io,memory,ipc"/>
+
+ <syscall name="SetGpuProt" number="89" groups="io"/>
+ <syscall name="SetWifiEnabled" number="90" groups="io"/>
+
+ <syscall name="DebugActiveProcess" number="96" groups="debug,process"/>
+ <syscall name="BreakDebugProcess" number="97" groups="debug,process"/>
+ <syscall name="TerminateDebugProcess" number="98" groups="debug,process"/>
+ <syscall name="GetProcessDebugEvent" number="99" groups="debug"/>
+ <syscall name="ContinueDebugEvent" number="100" groups="debug"/>
+ <syscall name="GetProcessList" number="101" groups="information,debug,process"/>
+ <syscall name="GetThreadList" number="102" groups="information,debug,thread"/>
+ <syscall name="GetDebugThreadContext" number="103" groups="debug,thread"/>
+ <syscall name="SetDebugThreadContext" number="104" groups="debug,thread"/>
+ <syscall name="QueryDebugProcessMemory" number="105" groups="debug,process,memory"/>
+ <syscall name="ReadProcessMemory" number="106" groups="debug,process,memory"/>
+ <syscall name="WriteProcessMemory" number="107" groups="debug,process,memory"/>
+ <syscall name="SetHardwareBreakPoint" number="108" group="debug"/>
+ <syscall name="GetDebugThreadParam" number="109" group="debug,thread"/>
+
+ <syscall name="ControlProcessMemory" number="112" group="process,memory"/>
+ <syscall name="MapProcessMemory" number="113" group="process,memory"/>
+ <syscall name="UnmapProcessMemory" number="114" group="process,memory"/>
+
+ <syscall name="CreateCodeSet" number="115" group="process,memory"/>
+ <syscall name="RandomStub" number="116" group="process,memory"/> <!-- removed -->
+ <syscall name="CreateProcess" number="117" group="process"/>
+ <syscall name="TerminateProcess" number="118" group="process"/>
+ <syscall name="SetProcessResourceLimits" number="119" group="process"/>
+ <syscall name="CreateResourceLimit" number="120" group="process"/>
+ <syscall name="SetResourceLimitValues" number="121" group="process"/>
+ <syscall name="AddCodeSegment" number="122" group="process"/> <!-- removed -->
+
+ <syscall name="Backdoor" number="123" group="kernel"/>
+ <syscall name="KernelSetState" number="124" group="kernel"/>
+
+ <syscall name="QueryProcessMemory" number="125" group="process,memory"/>
+
+ <syscall name="CustomBackdoor" number="128" group="custom,kernel"/>
+
+ <syscall name="ConvertVAToPA" number="144" group="custom,io,memory"/>
+ <syscall name="FlushDataCacheRange" number="145" group="custom,io,memory"/>
+ <syscall name="FlushEntireDataCache" number="146" group="custom,io,memory"/>
+ <syscall name="InvalidateInstructionCacheRange" number="147" group="custom,io,memory"/>
+ <syscall name="InvalidateEntireInstructionCache" number="148" group="custom,io,memory"/>
+
+ <syscall name="MapProcessMemoryEx" number="160" group="custom,process,memory"/>
+ <syscall name="UnmapProcessMemoryEx" number="161" group="custom,process,memory"/>
+ <syscall name="ControlMemoryEx" number="162" group="custom,memory"/>
+
+ <syscall name="ControlService" number="176" group="custom,ipc"/>
+ <syscall name="CopyHandle" number="177" groups="custom,synchronization,ipc,thread,process,debug"/>
+ <syscall name="TranslateHandle" number="178" groups="custom,synchronization,ipc,thread,process,debug"/>
+
+</syscalls_info>

View File

@@ -21,7 +21,8 @@ $MAKE CRT=gp32_gpsdk
$MAKE CRT=ds_arm7 $MAKE CRT=ds_arm7
$MAKE CRT=ds_arm9 $MAKE CRT=ds_arm9
$MAKE CRT=ds_cart $MAKE CRT=ds_cart
$target-gcc -march=armv6k -mfloat-abi=hard -c 3dsx_crt0.s -o armv6k/fpu/3dsx_crt0.o $MAKE ds_arm7_vram_crt0
$MAKE 3dsx_crt0
cd $BUILDDIR/libgba-$LIBGBA_VER cd $BUILDDIR/libgba-$LIBGBA_VER
$MAKE || { echo "error building libgba"; exit 1; } $MAKE || { echo "error building libgba"; exit 1; }
@@ -47,9 +48,9 @@ cd $BUILDDIR/libfat-$LIBFAT_VER
$MAKE nds-install || { echo "error building nds libfat"; exit 1; } $MAKE nds-install || { echo "error building nds libfat"; exit 1; }
$MAKE gba-install || { echo "error installing gba libfat"; exit 1; } $MAKE gba-install || { echo "error installing gba libfat"; exit 1; }
cd $BUILDDIR/libmirko-$LIBMIRKO_VER #cd $BUILDDIR/libmirko-$LIBMIRKO_VER
$MAKE || { echo "error building libmirko"; exit 1; } #$MAKE || { echo "error building libmirko"; exit 1; }
$MAKE install || { echo "error installing libmirko"; exit 1; } #$MAKE install || { echo "error installing libmirko"; exit 1; }
cd $BUILDDIR/libfilesystem-$FILESYSTEM_VER cd $BUILDDIR/libfilesystem-$FILESYSTEM_VER
$MAKE || { echo "error building libfilesystem"; exit 1; } $MAKE || { echo "error building libfilesystem"; exit 1; }
@@ -59,3 +60,7 @@ cd $BUILDDIR/libctru-$LIBCTRU_VER
$MAKE || { echo "error building libctru"; exit 1; } $MAKE || { echo "error building libctru"; exit 1; }
$MAKE install || { echo "error installing libctru"; exit 1; } $MAKE install || { echo "error installing libctru"; exit 1; }
cd $BUILDDIR/citro3d-$CITRO3D_VER
$MAKE || { echo "error building libctru"; exit 1; }
$MAKE install || { echo "error installing libctru"; exit 1; }

View File

@@ -11,7 +11,7 @@ cd $target/binutils
if [ ! -f configured-binutils ] if [ ! -f configured-binutils ]
then then
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \ CFLAGS=$cflags 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; }
@@ -39,15 +39,20 @@ cd $target/gcc
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS="$cflags" CXXFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" CXXFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \ CFLAGS="$cflags" \
--enable-languages=c,c++,objc,obj-c++ \ 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++ \
--with-gnu-as --with-gnu-ld --with-gcc \ --with-gnu-as --with-gnu-ld --with-gcc \
--with-march=armv4t\ --with-march=armv4t\
--enable-cxx-flags='-ffunction-sections' \ --enable-cxx-flags='-ffunction-sections' \
--disable-libstdcxx-verbose \ --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\ --enable-threads --disable-win32-registry --disable-nls --disable-debug\
--disable-libmudflap --disable-libssp --disable-libgomp \ --disable-libmudflap --disable-libssp --disable-libgomp \
--disable-libstdcxx-pch \ --disable-libstdcxx-pch \
@@ -56,7 +61,8 @@ then
--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 $plugin_ld\
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 45" \ --with-system-zlib \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 47" \
$CROSS_PARAMS \ $CROSS_PARAMS \
|| { echo "Error configuring gcc"; exit 1; } || { echo "Error configuring gcc"; exit 1; }
touch configured-gcc touch configured-gcc
@@ -86,9 +92,11 @@ cd $target/newlib
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 \
--disable-newlib-supplied-syscalls \ --disable-newlib-supplied-syscalls \
--enable-newlib-mb \ --enable-newlib-mb \
--disable-newlib-wide-orient \
--target=$target \ --target=$target \
--prefix=$prefix \ --prefix=$prefix \
|| { echo "Error configuring newlib"; exit 1; } || { echo "Error configuring newlib"; exit 1; }
@@ -104,7 +112,7 @@ 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
@@ -142,9 +150,11 @@ PLATFORM=`uname -s`
if [ ! -f configured-gdb ] if [ ! -f configured-gdb ]
then then
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \ CFLAGS="$cflags" \
CXXFLAGS="$cflags" \
LDFLAGS="$ldflags" \
../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror \ --disable-nls --prefix=$prefix --target=$target --disable-werror \
--disable-dependency-tracking \
$CROSS_PARAMS \ $CROSS_PARAMS \
|| { echo "Error configuring gdb"; exit 1; } || { echo "Error configuring gdb"; exit 1; }
touch configured-gdb touch configured-gdb

257
dkppc/crtls/wup.ld Normal file
View File

@@ -0,0 +1,257 @@
/*
* Linkscript for Wii U
*/
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc");
OUTPUT_ARCH(powerpc:common);
EXTERN(_start);
ENTRY(_start);
PHDRS
{
stub PT_LOAD FLAGS(5);
text PT_LOAD FLAGS(5);
data PT_LOAD FLAGS(6);
bss1 PT_LOAD;
bss2 PT_LOAD;
}
SECTIONS
{
/* default base address */
/* use -Wl,--section-start,.init=0xADDRESS to change */
. = 0x00802000;
/* Program */
.init :
{
KEEP (*crt0.o(*.init))
KEEP (*(.init))
} :text = 0
.plt : { *(.plt) }
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
.rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rela.got1 : { *(.rela.got1) }
.rela.got2 : { *(.rela.got2) }
.rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) }
.rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) }
.rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) }
.rela.sbss : { *(.rela.sbss .rela.sbss.* .rel.gnu.linkonce.sb.*) }
.rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) }
.rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) }
.rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) }
.rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) }
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
.text :
{
*(.text)
*(.text.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t.*)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
} = 0
.fini :
{
KEEP (*(.fini))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
} = 0
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data
.rodata1 : { *(.rodata1) }
.sdata2 : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) }
.sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
/* 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 : { *(.preinit_array) }
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { *(.init_array) }
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { *(.fini_array) }
PROVIDE (__fini_array_end = .);
.data :
{
*(.data)
*(.data.*)
*(.gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.data1 : { *(.data1) }
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
.fixup : { *(.fixup) }
.got1 : { *(.got1) }
.got2 : { *(.got2) }
.dynamic : { *(.dynamic) }
.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))
/* We don't want to include the .ctor section from
from the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.jcr : { KEEP (*(.jcr)) }
.got : { *(.got.plt) *(.got) }
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata :
{
*(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
_edata = .;
PROVIDE (edata = .);
.sbss :
{
__sbss_start = .;
PROVIDE (__sbss_start = .);
PROVIDE (___sbss_start = .);
*(.dynsbss)
*(.sbss)
*(.sbss.*)
*(.gnu.linkonce.sb.*)
*(.scommon)
PROVIDE (__sbss_end = .);
PROVIDE (___sbss_end = .);
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
__sbss_end = .;
} :bss1
.bss :
{
__bss_start = .;
PROVIDE (__bss_start = .);
*(.dynbss)
*(.bss)
*(.bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections. */
. = ALIGN(32);
PROVIDE (__bss_end = .);
__bss_end = .;
} :bss2
_end = .;
PROVIDE(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) }
/* These must appear regardless of . */
}

View File

@@ -1,12 +0,0 @@
diff -Nbaur binutils-2.24/opcodes/ppc-opc.c binutils-2.24-ppc/opcodes/ppc-opc.c
--- binutils-2.24/opcodes/ppc-opc.c 2013-11-04 15:33:40.000000000 +0000
+++ binutils-2.24-ppc/opcodes/ppc-opc.c 2014-04-01 14:22:06.000000000 +0100
@@ -2735,7 +2735,7 @@
#define MFDEC1 PPC_OPCODE_POWER
#define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE | PPC_OPCODE_TITAN
#define BOOKE PPC_OPCODE_BOOKE
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS | PPC_OPCODE_VLE
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS | PPC_OPCODE_VLE
#define PPCE300 PPC_OPCODE_E300
#define PPCSPE PPC_OPCODE_SPE | PPC_OPCODE_VLE
#define PPCISEL PPC_OPCODE_ISEL | PPC_OPCODE_VLE

View File

@@ -0,0 +1,12 @@
diff -Nbaur binutils-2.27/opcodes/ppc-opc.c binutils-2.27-ppc/opcodes/ppc-opc.c
--- binutils-2.27/opcodes/ppc-opc.c 2016-08-03 08:36:54.000000000 +0100
+++ binutils-2.27-ppc/opcodes/ppc-opc.c 2016-11-08 21:37:45.360000000 +0000
@@ -3037,7 +3037,7 @@
#define MFDEC1 PPC_OPCODE_POWER
#define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE | PPC_OPCODE_TITAN
#define BOOKE PPC_OPCODE_BOOKE
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
#define PPCE300 PPC_OPCODE_E300
#define PPCSPE PPC_OPCODE_SPE
#define PPCISEL PPC_OPCODE_ISEL

View File

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

View File

@@ -1,7 +1,7 @@
diff -Nbaur gcc-4.8.2/gcc/config/rs6000/rs6000.h gcc-4.8.2-ppc/gcc/config/rs6000/rs6000.h diff -NBaur gcc-6.3.0/gcc/config/rs6000/rs6000.h gcc-6.3.0-ppc/gcc/config/rs6000/rs6000.h
--- gcc-4.8.2/gcc/config/rs6000/rs6000.h 2013-06-19 02:18:38.000000000 +0100 --- gcc-6.3.0/gcc/config/rs6000/rs6000.h 2016-07-07 20:42:07.000000000 +0100
+++ gcc-4.8.2-ppc/gcc/config/rs6000/rs6000.h 2014-04-01 14:13:11.000000000 +0100 +++ gcc-6.3.0-ppc/gcc/config/rs6000/rs6000.h 2017-01-05 02:42:41.980000000 +0000
@@ -195,6 +195,7 @@ @@ -205,6 +205,7 @@
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \ { "asm_cpu_476", ASM_CPU_476_SPEC }, \
SUBTARGET_EXTRA_SPECS SUBTARGET_EXTRA_SPECS
@@ -9,7 +9,7 @@ diff -Nbaur gcc-4.8.2/gcc/config/rs6000/rs6000.h gcc-4.8.2-ppc/gcc/config/rs6000
/* -mcpu=native handling only makes sense with compiler running on /* -mcpu=native handling only makes sense with compiler running on
an PowerPC chip. If changing this condition, also change an PowerPC chip. If changing this condition, also change
the condition in driver-rs6000.c. */ the condition in driver-rs6000.c. */
@@ -209,6 +210,8 @@ @@ -219,6 +220,8 @@
#else #else
#define ASM_CPU_NATIVE_SPEC "%(asm_default)" #define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#endif #endif
@@ -18,10 +18,10 @@ diff -Nbaur gcc-4.8.2/gcc/config/rs6000/rs6000.h gcc-4.8.2-ppc/gcc/config/rs6000
#ifndef CC1_CPU_SPEC #ifndef CC1_CPU_SPEC
#ifdef HAVE_LOCAL_CPU_DETECT #ifdef HAVE_LOCAL_CPU_DETECT
diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.h gcc-4.8.2-ppc/gcc/config/rs6000/sysv4.h diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.h gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.h
--- gcc-4.8.2/gcc/config/rs6000/sysv4.h 2013-06-19 02:18:38.000000000 +0100 --- gcc-6.3.0/gcc/config/rs6000/sysv4.h 2016-05-16 14:47:47.000000000 +0100
+++ gcc-4.8.2-ppc/gcc/config/rs6000/sysv4.h 2014-04-01 14:13:11.000000000 +0100 +++ gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.h 2017-01-05 02:46:27.020000000 +0000
@@ -570,7 +570,11 @@ @@ -559,7 +559,12 @@
/* Default starting address if specified. */ /* Default starting address if specified. */
#define LINK_START_SPEC "\ #define LINK_START_SPEC "\
@@ -30,21 +30,23 @@ diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.h gcc-4.8.2-ppc/gcc/config/rs6000/
+ mvgc : %(link_start_vgc) ; \ + mvgc : %(link_start_vgc) ; \
+ mgcbios : %(link_start_gcb) ; \ + mgcbios : %(link_start_gcb) ; \
+ mrvl : %(link_start_rvl) ; \ + mrvl : %(link_start_rvl) ; \
+ mwup : %(link_start_wup) ; \
+ mads : %(link_start_ads) ; \ + mads : %(link_start_ads) ; \
myellowknife : %(link_start_yellowknife) ; \ myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \ mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \ msim : %(link_start_sim) ; \
@@ -604,7 +608,8 @@ @@ -590,7 +595,9 @@
/* Any specific OS flags. */ /* Any specific OS flags. */
#define LINK_OS_SPEC "\ #define LINK_OS_SPEC "\
-%{mads : %(link_os_ads) ; \ -%{mads : %(link_os_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \ +%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
+ mwup : %(link_os_wup) ; \
+ mads : %(link_os_ads) ; \ + mads : %(link_os_ads) ; \
myellowknife : %(link_os_yellowknife) ; \ myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \ mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \ msim : %(link_os_sim) ; \
@@ -622,7 +627,10 @@ @@ -608,7 +615,11 @@
/* Override rs6000.h definition. */ /* Override rs6000.h definition. */
#undef CPP_SPEC #undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \ #define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
@@ -52,11 +54,12 @@ diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.h gcc-4.8.2-ppc/gcc/config/rs6000/
+%{mgcn : %(cpp_os_gcn) ; \ +%{mgcn : %(cpp_os_gcn) ; \
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \ + mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
+ mrvl : %(cpp_os_rvl) ; \ + mrvl : %(cpp_os_rvl) ; \
+ mwup : %(cpp_os_wup) ; \
+ mads : %(cpp_os_ads) ; \ + mads : %(cpp_os_ads) ; \
myellowknife : %(cpp_os_yellowknife) ; \ myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \ mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \ msim : %(cpp_os_sim) ; \
@@ -636,7 +644,10 @@ @@ -622,7 +633,11 @@
#undef STARTFILE_SPEC #undef STARTFILE_SPEC
#define STARTFILE_SPEC "\ #define STARTFILE_SPEC "\
@@ -64,26 +67,23 @@ diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.h gcc-4.8.2-ppc/gcc/config/rs6000/
+%{mgcn : %(startfile_gcn) ; \ +%{mgcn : %(startfile_gcn) ; \
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \ + mogc|mvgc|mgcbios : %(startfile_ogc) ; \
+ mrvl : %(startfile_ogc) ; \ + mrvl : %(startfile_ogc) ; \
+ mwup : %(startfile_wup) ; \
+ mads : %(startfile_ads) ; \ + mads : %(startfile_ads) ; \
myellowknife : %(startfile_yellowknife) ; \ myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \ mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \ msim : %(startfile_sim) ; \
@@ -646,11 +657,12 @@ @@ -636,7 +651,9 @@
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 #undef LIB_SPEC
#define LIB_SPEC "\ #define LIB_SPEC "\
-%{mads : %(lib_ads) ; \ -%{mads : %(lib_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \ +%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
+ mwup : %(lib_wup) ; \
+ mads : %(lib_ads) ; \ + mads : %(lib_ads) ; \
myellowknife : %(lib_yellowknife) ; \ myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \ mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \ msim : %(lib_sim) ; \
@@ -660,11 +672,12 @@ @@ -646,11 +663,13 @@
mcall-openbsd: %(lib_openbsd) ; \ mcall-openbsd: %(lib_openbsd) ; \
: %(lib_default) }" : %(lib_default) }"
@@ -94,98 +94,111 @@ diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.h gcc-4.8.2-ppc/gcc/config/rs6000/
#define ENDFILE_SPEC "\ #define ENDFILE_SPEC "\
-%{mads : %(endfile_ads) ; \ -%{mads : %(endfile_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \ +%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
+ mwup : %(endfile_wup) ; \
+ mads : %(endfile_ads) ; \ + mads : %(endfile_ads) ; \
myellowknife : %(endfile_yellowknife) ; \ myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \ mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \ msim : %(endfile_sim) ; \
@@ -680,16 +693,27 @@ @@ -666,16 +685,33 @@
/* Motorola ADS support. */ /* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group" #define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
+#define LIB_OGC_SPEC "--start-group -lsysbase -lc --end-group" +#define LIB_OGC_SPEC "--start-group -lsysbase -lc --end-group"
+#define LIB_WUP_SPEC "--start-group -lsysbase -lc --end-group"
#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s" #define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s"
+#define STARTFILE_OGC_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s" +#define STARTFILE_OGC_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
+#define STARTFILE_WUP_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s" #define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_OGC_SPEC "crtend.o%s ecrtn.o%s" +#define ENDFILE_OGC_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_WUP_SPEC "crtend.o%s ecrtn.o%s"
#define LINK_START_ADS_SPEC "-T ads.ld%s" #define LINK_START_ADS_SPEC "-T ads.ld%s"
+#define LINK_START_OGC_SPEC "-T ogc.ld%s" +#define LINK_START_OGC_SPEC "-T ogc.ld%s"
+#define LINK_START_RVL_SPEC "-T rvl.ld%s" +#define LINK_START_RVL_SPEC "-T rvl.ld%s"
+#define LINK_START_WUP_SPEC "-T wup.ld%s"
+#define LINK_START_VGC_SPEC "-T vgcogc.ld%s" +#define LINK_START_VGC_SPEC "-T vgcogc.ld%s"
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s" +#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
#define LINK_OS_ADS_SPEC "" #define LINK_OS_ADS_SPEC ""
+#define LINK_OS_OGC_SPEC "--gc-sections" +#define LINK_OS_OGC_SPEC "--gc-sections"
+#define LINK_OS_WUP_SPEC "--gc-sections"
#define CPP_OS_ADS_SPEC "" #define CPP_OS_ADS_SPEC ""
+#define CPP_OS_GCN_SPEC "-D__gamecube__ -ffunction-sections -fdata-sections" +#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_OGC_SPEC "-D__gamecube__ -DHW_DOL -ffunction-sections -fdata-sections"
+#define CPP_OS_RVL_SPEC "-D__wii__ -DHW_RVL -ffunction-sections -fdata-sections" +#define CPP_OS_RVL_SPEC "-D__wii__ -DHW_RVL -ffunction-sections -fdata-sections"
+#define CPP_OS_WUP_SPEC "-D__wiiu__ -DHW_WUP -ffunction-sections -fdata-sections"
/* Motorola Yellowknife support. */ /* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group" #define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -859,6 +883,7 @@ @@ -866,6 +902,8 @@
#undef SUBTARGET_EXTRA_SPECS #undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \ #define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \ { "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
+ { "lib_ogc", LIB_OGC_SPEC }, \ + { "lib_ogc", LIB_OGC_SPEC }, \
+ { "lib_wup", LIB_WUP_SPEC }, \
{ "lib_ads", LIB_ADS_SPEC }, \ { "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \ { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \ { "lib_mvme", LIB_MVME_SPEC }, \
@@ -868,6 +893,7 @@ @@ -875,6 +913,8 @@
{ "lib_netbsd", LIB_NETBSD_SPEC }, \ { "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \ { "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \ { "lib_default", LIB_DEFAULT_SPEC }, \
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \ + { "startfile_ogc", STARTFILE_OGC_SPEC }, \
+ { "startfile_wup", STARTFILE_WUP_SPEC }, \
{ "startfile_ads", STARTFILE_ADS_SPEC }, \ { "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \ { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \ { "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -877,6 +903,7 @@ @@ -884,6 +924,8 @@
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \ { "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \ { "startfile_default", STARTFILE_DEFAULT_SPEC }, \
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \ + { "endfile_ogc", ENDFILE_OGC_SPEC }, \
+ { "endfile_wup", ENDFILE_WUP_SPEC }, \
{ "endfile_ads", ENDFILE_ADS_SPEC }, \ { "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \ { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \ { "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -889,7 +916,11 @@ @@ -895,7 +937,12 @@
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \ { "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_target", LINK_TARGET_SPEC }, \
{ "link_start", LINK_START_SPEC }, \ { "link_start", LINK_START_SPEC }, \
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \ + { "link_start_vgc", LINK_START_VGC_SPEC }, \
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \ + { "link_start_gcb", LINK_START_GCB_SPEC }, \
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \ + { "link_start_rvl", LINK_START_RVL_SPEC }, \
+ { "link_start_wup", LINK_START_WUP_SPEC }, \
{ "link_start_ads", LINK_START_ADS_SPEC }, \ { "link_start_ads", LINK_START_ADS_SPEC }, \
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \ + { "link_start_ogc", LINK_START_OGC_SPEC }, \
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \ { "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \ { "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \ { "link_start_sim", LINK_START_SIM_SPEC }, \
@@ -899,6 +930,7 @@ @@ -905,6 +952,8 @@
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \ { "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \ { "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \ { "link_os", LINK_OS_SPEC }, \
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \ + { "link_os_ogc", LINK_OS_OGC_SPEC }, \
+ { "link_os_wup", LINK_OS_WUP_SPEC }, \
{ "link_os_ads", LINK_OS_ADS_SPEC }, \ { "link_os_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \ { "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \ { "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -912,6 +944,9 @@ @@ -916,6 +965,10 @@
{ "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \ { "link_os_default", LINK_OS_DEFAULT_SPEC }, \
{ "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \ { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
{ "link_secure_plt", LINK_SECURE_PLT_SPEC }, \
+ { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \ + { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \ + { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \ + { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
+ { "cpp_os_wup", CPP_OS_WUP_SPEC }, \
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \ { "cpp_os_ads", CPP_OS_ADS_SPEC }, \
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.opt gcc-4.8.2-ppc/gcc/config/rs6000/sysv4.opt diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.opt gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.opt
--- gcc-4.8.2/gcc/config/rs6000/sysv4.opt 2013-01-10 20:38:27.000000000 +0000 --- gcc-6.3.0/gcc/config/rs6000/sysv4.opt 2016-01-04 14:30:50.000000000 +0000
+++ gcc-4.8.2-ppc/gcc/config/rs6000/sysv4.opt 2014-04-01 14:13:11.000000000 +0100 +++ gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.opt 2017-01-05 02:42:41.984000000 +0000
@@ -120,6 +120,26 @@ @@ -120,6 +120,30 @@
Target RejectNegative Target RejectNegative
Link with libads.a, libc.a and crt0.o Link with libads.a, libc.a and crt0.o.
+mgcn +mgcn
+Target RejectNegative +Target RejectNegative
@@ -206,14 +219,18 @@ diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.opt gcc-4.8.2-ppc/gcc/config/rs600
+mrvl +mrvl
+Target RejectNegative +Target RejectNegative
+Link with libsysbase.a and libc.a, use rvl linker script +Link with libsysbase.a and libc.a, use rvl linker script
+
+mwup
+Target RejectNegative
+Link with libsysbase.a and libc.a, use wup linker script
+ +
myellowknife myellowknife
Target RejectNegative Target RejectNegative
Link with libyk.a, libc.a and crt0.o Link with libyk.a, libc.a and crt0.o.
diff -Nbaur gcc-4.8.2/gcc/config.gcc gcc-4.8.2-ppc/gcc/config.gcc diff -NBaur gcc-6.3.0/gcc/config.gcc gcc-6.3.0-ppc/gcc/config.gcc
--- gcc-4.8.2/gcc/config.gcc 2013-10-03 01:47:24.000000000 +0100 --- gcc-6.3.0/gcc/config.gcc 2016-11-07 21:38:43.000000000 +0000
+++ gcc-4.8.2-ppc/gcc/config.gcc 2014-04-01 14:13:11.000000000 +0100 +++ gcc-6.3.0-ppc/gcc/config.gcc 2017-01-05 02:42:41.984000000 +0000
@@ -2057,7 +2057,7 @@ @@ -2390,7 +2390,7 @@
use_gcc_stdint=wrap use_gcc_stdint=wrap
;; ;;
powerpc-*-eabi*) powerpc-*-eabi*)
@@ -222,10 +239,24 @@ diff -Nbaur gcc-4.8.2/gcc/config.gcc gcc-4.8.2-ppc/gcc/config.gcc
extra_options="${extra_options} rs6000/sysv4.opt" extra_options="${extra_options} rs6000/sysv4.opt"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm" tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
use_gcc_stdint=wrap use_gcc_stdint=wrap
diff -Nbaur gcc-4.8.2/libcpp/Makefile.in gcc-4.8.2-ppc/libcpp/Makefile.in diff -NBaur gcc-6.3.0/gcc/Makefile.in gcc-6.3.0-ppc/gcc/Makefile.in
--- gcc-4.8.2/libcpp/Makefile.in 2013-10-16 08:27:58.000000000 +0100 --- gcc-6.3.0/gcc/Makefile.in 2016-11-22 17:33:07.000000000 +0000
+++ gcc-4.8.2-ppc/libcpp/Makefile.in 2014-04-01 14:13:11.000000000 +0100 +++ gcc-6.3.0-ppc/gcc/Makefile.in 2017-01-05 02:42:41.988000000 +0000
@@ -207,8 +207,7 @@ @@ -1073,8 +1073,8 @@
# things like the go/%.o rule work properly; but we use $(*F) for the
# file part, as we just want the file part of the stem, not the entire
# file name.
-COMPILE = $(COMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
-POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
+COMPILE = $(COMPILE.base)
+POSTCOMPILE =
else
COMPILE = source='$<' object='$@' libtool=no \
DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) $(COMPILE.base)
diff -NBaur gcc-6.3.0/libcpp/Makefile.in gcc-6.3.0-ppc/libcpp/Makefile.in
--- gcc-6.3.0/libcpp/Makefile.in 2016-12-21 07:53:39.000000000 +0000
+++ gcc-6.3.0-ppc/libcpp/Makefile.in 2017-01-05 02:42:41.988000000 +0000
@@ -208,8 +208,7 @@
# Note that we put the dependencies into a .Tpo file, then move them # 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 # into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file. # not atomically write the dependency output file.
@@ -235,9 +266,9 @@ diff -Nbaur gcc-4.8.2/libcpp/Makefile.in gcc-4.8.2-ppc/libcpp/Makefile.in
else else
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \ COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
$(depcomp) $(COMPILE.base) $(depcomp) $(COMPILE.base)
diff -Nbaur gcc-4.8.2/libgcc/config/rs6000/crtrestvr.S gcc-4.8.2-ppc/libgcc/config/rs6000/crtrestvr.S diff -NBaur gcc-6.3.0/libgcc/config/rs6000/crtrestvr.S gcc-6.3.0-ppc/libgcc/config/rs6000/crtrestvr.S
--- gcc-4.8.2/libgcc/config/rs6000/crtrestvr.S 2013-02-04 19:06:20.000000000 +0000 --- gcc-6.3.0/libgcc/config/rs6000/crtrestvr.S 2016-01-04 14:30:50.000000000 +0000
+++ gcc-4.8.2-ppc/libgcc/config/rs6000/crtrestvr.S 2014-04-01 14:13:11.000000000 +0100 +++ gcc-6.3.0-ppc/libgcc/config/rs6000/crtrestvr.S 2017-01-05 02:42:41.988000000 +0000
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */ /* On PowerPC64 Linux, these functions are provided by the linker. */
@@ -252,31 +283,31 @@ diff -Nbaur gcc-4.8.2/libgcc/config/rs6000/crtrestvr.S gcc-4.8.2-ppc/libgcc/conf
#endif #endif
+#endif +#endif
diff -Nbaur gcc-4.8.2/libgcc/config/rs6000/crtsavevr.S gcc-4.8.2-ppc/libgcc/config/rs6000/crtsavevr.S diff -NBaur gcc-6.3.0/libgcc/config/rs6000/crtsavevr.S gcc-6.3.0-ppc/libgcc/config/rs6000/crtsavevr.S
--- gcc-4.8.2/libgcc/config/rs6000/crtsavevr.S 2013-02-04 19:06:20.000000000 +0000 --- gcc-6.3.0/libgcc/config/rs6000/crtsavevr.S 2016-01-04 14:30:50.000000000 +0000
+++ gcc-4.8.2-ppc/libgcc/config/rs6000/crtsavevr.S 2014-04-01 14:13:11.000000000 +0100 +++ gcc-6.3.0-ppc/libgcc/config/rs6000/crtsavevr.S 2017-01-05 02:42:41.988000000 +0000
@@ -24,6 +24,7 @@ @@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */ /* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__ #ifndef __powerpc64__
-
+#if 0 +#if 0
#undef __ALTIVEC__ #undef __ALTIVEC__
#define __ALTIVEC__ 1 #define __ALTIVEC__ 1
@@ -85,3 +86,4 @@ #include "ppc-asm.h"
@@ -85,3 +85,4 @@
CFI_ENDPROC CFI_ENDPROC
#endif #endif
+#endif +#endif
diff -Nbaur gcc-4.8.2/libgcc/crtstuff.c gcc-4.8.2-ppc/libgcc/crtstuff.c diff -NBaur gcc-6.3.0/libgcc/crtstuff.c gcc-6.3.0-ppc/libgcc/crtstuff.c
--- gcc-4.8.2/libgcc/crtstuff.c 2013-02-04 19:06:20.000000000 +0000 --- gcc-6.3.0/libgcc/crtstuff.c 2016-01-04 14:30:50.000000000 +0000
+++ gcc-4.8.2-ppc/libgcc/crtstuff.c 2014-04-01 14:13:11.000000000 +0100 +++ gcc-6.3.0-ppc/libgcc/crtstuff.c 2017-01-05 02:42:41.988000000 +0000
@@ -47,7 +47,7 @@ @@ -47,6 +47,7 @@
/* Target machine header files require this define. */ /* Target machine header files require this define. */
#define IN_LIBGCC2 #define IN_LIBGCC2
-
+#define USED_FOR_TARGET +#define USED_FOR_TARGET
/* FIXME: Including auto-host is incorrect, but until we have /* FIXME: Including auto-host is incorrect, but until we have
identified the set of defines that need to go into auto-target.h, identified the set of defines that need to go into auto-target.h,
this will have to do. */

View File

@@ -1,7 +1,7 @@
diff -Nbaur gdb-7.7/gdb/Makefile.in gdb-7.7-ppc/gdb/Makefile.in diff -NBaur gdb-7.10/gdb/Makefile.in gdb-7.10-ppc/gdb/Makefile.in
--- gdb-7.7/gdb/Makefile.in 2014-02-06 02:21:29.000000000 +0000 --- gdb-7.10/gdb/Makefile.in 2015-08-28 22:22:07.000000000 +0100
+++ gdb-7.7-ppc/gdb/Makefile.in 2014-04-01 14:01:24.000000000 +0100 +++ gdb-7.10-ppc/gdb/Makefile.in 2015-11-09 09:21:13.228003995 +0000
@@ -2307,10 +2307,10 @@ @@ -2676,10 +2676,10 @@
# Note that we put the dependencies into a .Tpo file, then move them # 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 # into place if the compile succeeds. We need this because gcc does
# not atomically write the dependency output file. # not atomically write the dependency output file.
@@ -16,15 +16,3 @@ diff -Nbaur gdb-7.7/gdb/Makefile.in gdb-7.7-ppc/gdb/Makefile.in
@GMAKE_TRUE@else @GMAKE_TRUE@else
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \ @GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC) @GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
diff -Nbaur gdb-7.7/sim/ppc/Makefile.in gdb-7.7-ppc/sim/ppc/Makefile.in
--- gdb-7.7/sim/ppc/Makefile.in 2013-12-08 04:55:48.000000000 +0000
+++ gdb-7.7-ppc/sim/ppc/Makefile.in 2014-04-01 14:01:24.000000000 +0100
@@ -552,7 +552,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

12
dkppc/rules/wiiu_rules Normal file
View File

@@ -0,0 +1,12 @@
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPro/devkitPPC)
endif
MACHDEP = -DESPRESSO -mwup -mcpu=750 -meabi -mhard-float
include $(DEVKITPPC)/base_rules
#---------------------------------------------------------------------------------
%.elf:
@echo linking ... $(notdir $@)
@$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@

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
@@ -45,9 +45,9 @@ 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,19 +75,27 @@ cd $target/gcc
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS="$cflags" CXXFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" CXXFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \ CFLAGS="$cflags" \
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 \ --enable-languages=c,c++,objc \
--enable-lto $plugin_ld \ --enable-lto $plugin_ld \
--with-cpu=750 \ --with-cpu=750 \
--disable-nls --disable-shared --enable-threads --disable-multilib \ --disable-nls --disable-shared --enable-threads --disable-multilib \
--disable-win32-registry \ --disable-win32-registry \
--disable-libstdcxx-pch \ --disable-libstdcxx-pch \
--disable-libstdcxx-verbose \
--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 27" \ --with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPPC release 29-1" \
$CROSS_PARAMS \ $CROSS_PARAMS \
|| { echo "Error configuring gcc stage 1"; exit 1; } || { echo "Error configuring gcc stage 1"; exit 1; }
touch configured-gcc touch configured-gcc
@@ -117,6 +125,7 @@ unset LDFLAGS
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 \
@@ -133,7 +142,7 @@ 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
@@ -170,7 +179,7 @@ cd $target/gdb
if [ ! -f configured-gdb ] if [ ! -f configured-gdb ]
then then
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \ CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
--disable-nls --prefix=$prefix --target=$target --disable-werror --disable-dependency-tracking\ --disable-nls --prefix=$prefix --target=$target --disable-werror \
$CROSS_PARAMS || { echo "Error configuring gdb"; exit 1; } $CROSS_PARAMS || { echo "Error configuring gdb"; exit 1; }
touch configured-gdb touch configured-gdb
fi fi

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

View File

@@ -19,7 +19,7 @@ do
echo echo
echo "1: devkitARM (gba gp32 ds)" echo "1: devkitARM (gba gp32 ds)"
echo "2: devkitPPC (gamecube wii)" echo "2: devkitPPC (gamecube wii)"
echo "3: 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 ]
@@ -30,33 +30,34 @@ done
case "$VERSION" in case "$VERSION" in
"1" ) "1" )
GCC_VER=5.3.0 GCC_VER=7.1.0
BINUTILS_VER=2.25.1 BINUTILS_VER=2.28
NEWLIB_VER=2.2.0 NEWLIB_VER=2.5.0
GDB_VER=7.10 GDB_VER=8.0
basedir='dkarm-eabi' basedir='dkarm-eabi'
package=devkitARM package=devkitARM
target=arm-none-eabi target=arm-none-eabi
toolchain=DEVKITARM toolchain=DEVKITARM
;; ;;
"2" ) "2" )
GCC_VER=4.8.2 GCC_VER=6.3.0
BINUTILS_VER=2.24 BINUTILS_VER=2.27
NEWLIB_VER=2.0.0 MN_BINUTILS_VER=2.17
GDB_VER=7.7 NEWLIB_VER=2.5.0
GDB_VER=7.11
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=7.3.0
BINUTILS_VER=2.22 BINUTILS_VER=2.30
NEWLIB_VER=1.20.0 NEWLIB_VER=3.0.0
GDB_VER=7.4 GDB_VER=8.0
basedir='dkpsp' basedir='dka64'
package=devkitPSP package=devkitA64
target=psp target=aarch64-none-elf
toolchain=DEVKITPSP toolchain=DEVKITA64
;; ;;
esac esac