mirror of
https://github.com/devkitPro/buildscripts.git
synced 2026-08-21 09:54:03 -05:00
Compare commits
662 Commits
v20141121
...
devkitARM_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d87636f62 | ||
|
|
b8319d6d2a | ||
|
|
74e2c3ebc4 | ||
|
|
1118d68a97 | ||
|
|
5c0124ec01 | ||
|
|
329ce986eb | ||
|
|
73d0dafa21 | ||
|
|
5fb027fd3b | ||
|
|
b5cdec82b7 | ||
|
|
2d21601d71 | ||
|
|
c879ba7e62 | ||
|
|
b6613d5f5f | ||
|
|
b970a10d09 | ||
|
|
dbcb7aa399 | ||
|
|
67b34f5df3 | ||
|
|
141c30be36 | ||
|
|
1e91020d5c | ||
|
|
24164cca86 | ||
|
|
d6434abd04 | ||
|
|
55eb881d09 | ||
|
|
3a70b58ce2 | ||
|
|
3fedda9d74 | ||
|
|
7e4aed9985 | ||
|
|
1b09b3a824 | ||
|
|
a133b4d622 | ||
|
|
f1428f47e8 | ||
|
|
1a3f555292 | ||
|
|
6ea8070246 | ||
|
|
57928f194f | ||
|
|
6628e681e2 | ||
|
|
72ca8f813f | ||
|
|
ce700b701d | ||
|
|
8b3fb07490 | ||
|
|
5599e42c8c | ||
|
|
57b7f68921 | ||
|
|
88bd526925 | ||
|
|
d3d636cb54 | ||
|
|
78eb432d11 | ||
|
|
aa76a0ea46 | ||
|
|
2429e9ee7d | ||
|
|
f0b081246c | ||
|
|
a280f18794 | ||
|
|
c012acf8d8 | ||
|
|
19217fdc51 | ||
|
|
aad3392808 | ||
|
|
7b0a333842 | ||
|
|
41922724cb | ||
|
|
2422223439 | ||
|
|
23afd9959c | ||
|
|
03bc549c5c | ||
|
|
5ae950ae8b | ||
|
|
c62e968c1e | ||
|
|
ee693ddac0 | ||
|
|
ff5a6b07d3 | ||
|
|
80f5db66de | ||
|
|
4ef6c0321a | ||
|
|
b4e8b963f3 | ||
|
|
dbd33d2312 | ||
|
|
3f5312c34a | ||
|
|
1ac48f5437 | ||
|
|
9d8f579c1c | ||
|
|
de681b1691 | ||
|
|
dfb3d82a96 | ||
|
|
7318227e11 | ||
|
|
c04144a5cf | ||
|
|
c5f34ab49b | ||
|
|
eb428eb450 | ||
|
|
032100b82e | ||
|
|
d051cd518b | ||
|
|
5daf9f7bd1 | ||
|
|
f06196c43c | ||
|
|
5926a76d64 | ||
|
|
12a06c469f | ||
|
|
67729ec64c | ||
|
|
d0a05636ab | ||
|
|
7d1a2ac929 | ||
|
|
9332465b06 | ||
|
|
3b8a45ed5b | ||
|
|
cc0e589e56 | ||
|
|
06e7ade19c | ||
|
|
dec683a0ed | ||
|
|
4319248cf8 | ||
|
|
80a329157a | ||
|
|
c8273a1082 | ||
|
|
4defc0f22b | ||
|
|
d158002ce3 | ||
|
|
62b6ba1484 | ||
|
|
e3dca6f33f | ||
|
|
db4e394ab8 | ||
|
|
8f6a2cf470 | ||
|
|
3429d8162f | ||
|
|
a048d2e89c | ||
|
|
94cabdf12a | ||
|
|
6a2cfec336 | ||
|
|
7b03d726b6 | ||
|
|
9df0987259 | ||
|
|
923724a397 | ||
|
|
cd5e224d6a | ||
|
|
b280c0af31 | ||
|
|
776be5894d | ||
|
|
87f8584b86 | ||
|
|
84ca4f5c18 | ||
|
|
a07a271bdb | ||
|
|
026a498a51 | ||
|
|
b5de354a1e | ||
|
|
ca6cded363 | ||
|
|
149a2358b8 | ||
|
|
426c8d0e62 | ||
|
|
a33bf405d2 | ||
|
|
eac2e40528 | ||
|
|
e377ef05f6 | ||
|
|
67b8703a8c | ||
|
|
df8b66a808 | ||
|
|
219b5dcebd | ||
|
|
a370be5c4a | ||
|
|
a84866105a | ||
|
|
c0146427e1 | ||
|
|
a0ee149c40 | ||
|
|
da06cfb478 | ||
|
|
b700c35789 | ||
|
|
73b1cb9d7a | ||
|
|
3ca5189cdd | ||
|
|
4dc7a3333c | ||
|
|
98aac78959 | ||
|
|
092f657e81 | ||
|
|
7d3bbea16e | ||
|
|
066afb3cca | ||
|
|
dd13eb9497 | ||
|
|
af726256f1 | ||
|
|
5e87380f11 | ||
|
|
cd9e7f1fee | ||
|
|
f1bf935706 | ||
|
|
9ae621ad62 | ||
|
|
251c7cbbf1 | ||
|
|
2b7e5215fc | ||
|
|
540dbb84c6 | ||
|
|
90fb45065c | ||
|
|
771225f45a | ||
|
|
fdb7c8a6d2 | ||
|
|
5649ec2a1f | ||
|
|
6e92980fd1 | ||
|
|
3673dced6d | ||
|
|
6999db3f10 | ||
|
|
ae793d657a | ||
|
|
c375da789d | ||
|
|
b8c7c915bc | ||
|
|
c108162819 | ||
|
|
e952463476 | ||
|
|
1444dc91df | ||
|
|
4219405837 | ||
|
|
aacd4f8bf6 | ||
|
|
e4cb9e3b2f | ||
|
|
85ec801a13 | ||
|
|
0eb81ba063 | ||
|
|
5740d1d57d | ||
|
|
d2c48d04c2 | ||
|
|
289d6a6aa0 | ||
|
|
c33f389df1 | ||
|
|
2938af4ed5 | ||
|
|
0f4422c92c | ||
|
|
dc5b7bb5a6 | ||
|
|
a87f68d4dd | ||
|
|
a9b611e134 | ||
|
|
6015da5cab | ||
|
|
6a74f83616 | ||
|
|
953cf2a761 | ||
|
|
60efdbd109 | ||
|
|
ef789eddb7 | ||
|
|
502f832a5b | ||
|
|
848924d332 | ||
|
|
1f5f5eedf5 | ||
|
|
5664d84c44 | ||
|
|
6e8de1b1d2 | ||
|
|
b16276e9da | ||
|
|
7f142c7583 | ||
|
|
1a1b35aa3b | ||
|
|
70c8df8709 | ||
|
|
bc52f6ac2b | ||
|
|
81719c49e3 | ||
|
|
d4a84c9884 | ||
|
|
25f22b6c93 | ||
|
|
a0fe0c5297 | ||
|
|
77ad8b785c | ||
|
|
e4b1370595 | ||
|
|
dcfd0e271e | ||
|
|
9bf0973c2a | ||
|
|
0b31c7ab1c | ||
|
|
90e2936222 | ||
|
|
556a2a2e02 | ||
|
|
6da9ea33f7 | ||
|
|
433a4bdd80 | ||
|
|
20bf4948a1 | ||
|
|
5e720e01c1 | ||
|
|
183ab79cfc | ||
|
|
ad4246dfc4 | ||
|
|
9165c280f3 | ||
|
|
116613adc8 | ||
|
|
fbc790a8dd | ||
|
|
91789e0ca8 | ||
|
|
fddf563787 | ||
|
|
45bf89586f | ||
|
|
ddaf472951 | ||
|
|
0adc00806f | ||
|
|
fa1972f5e9 | ||
|
|
2a306b5e49 | ||
|
|
1857d52ede | ||
|
|
57ec7b67ac | ||
|
|
d9392f8f56 | ||
|
|
e0c908dfc2 | ||
|
|
2ddef0ade4 | ||
|
|
e68aaf8cdd | ||
|
|
0add4d1b5c | ||
|
|
736db33e06 | ||
|
|
96f7acc919 | ||
|
|
c2aae79d59 | ||
|
|
fe202a6f50 | ||
|
|
aeb6482da9 | ||
|
|
b1d5f5c7a6 | ||
|
|
1974c8ae38 | ||
|
|
65c1a1256a | ||
|
|
ade65bab03 | ||
|
|
bcb3bff114 | ||
|
|
a48e515bd6 | ||
|
|
fec37937b7 | ||
|
|
2c8ae62e8e | ||
|
|
383ebe76c8 | ||
|
|
d604cafce3 | ||
|
|
d0d158bd80 | ||
|
|
fe39e87d88 | ||
|
|
5ddee95920 | ||
|
|
58b9db7650 | ||
|
|
43415d430a | ||
|
|
223bc0823d | ||
|
|
c6675ab007 | ||
|
|
af02813a13 | ||
|
|
21d8bd0e46 | ||
|
|
b10d1e133f | ||
|
|
c38b9e9425 | ||
|
|
d643106bf8 | ||
|
|
dd40237a2a | ||
|
|
6530f0a3c3 | ||
|
|
0bd88d5ac8 | ||
|
|
ec6543e3c0 | ||
|
|
11d640cd77 | ||
|
|
d2614153c5 | ||
|
|
37b381ea1f | ||
|
|
a6c67408af | ||
|
|
bd5c0ba3ec | ||
|
|
41b418fd8c | ||
|
|
8421d92bcb | ||
|
|
20dc1324d4 | ||
|
|
118896fb1a | ||
|
|
ab95988007 | ||
|
|
596d710c3b | ||
|
|
f0463ecba1 | ||
|
|
0bbc2be394 | ||
|
|
61dec9401a | ||
|
|
a9712ae81e | ||
|
|
83f1b5cf02 | ||
|
|
0c9af4df25 | ||
|
|
4191cbef14 | ||
|
|
b0d0a3b3a3 | ||
|
|
da8d9c793b | ||
|
|
e477403617 | ||
|
|
c84da440c4 | ||
|
|
e0aebb7afb | ||
|
|
eed906eda5 | ||
|
|
893eeef9c5 | ||
|
|
9f518e2f8d | ||
|
|
df5a8f947a | ||
|
|
0778d4209c | ||
|
|
bd9c326d2f | ||
|
|
b6ac481ccb | ||
|
|
e427f0dfaa | ||
|
|
27b541afae | ||
|
|
c7de577a0c | ||
|
|
2a0d211c07 | ||
|
|
8c1775ec31 | ||
|
|
04e02ff214 | ||
|
|
ff680b5b27 | ||
|
|
741bc22322 | ||
|
|
3fde421759 | ||
|
|
afe1a727bc | ||
|
|
0c2e648a04 | ||
|
|
f0c6240d85 | ||
|
|
b40a9147a5 | ||
|
|
5fcb44fb8f | ||
|
|
e95e74c5bb | ||
|
|
789ec8cf00 | ||
|
|
ae6c2c125a | ||
|
|
6cd9b70762 | ||
|
|
caad8fafae | ||
|
|
49d8b5dc46 | ||
|
|
c021bf4c57 | ||
|
|
ae79a8de3a | ||
|
|
3a3efdafd4 | ||
|
|
ab8de4361a | ||
|
|
26cc59f4f6 | ||
|
|
b8b26124cb | ||
|
|
108127de46 | ||
|
|
a3ae2e737d | ||
|
|
09627572b9 | ||
|
|
5bb8680c27 | ||
|
|
2e9c460a7b | ||
|
|
8092439fb4 | ||
|
|
f14cd29e65 | ||
|
|
582cbfccf0 | ||
|
|
2c5d7c7aa6 | ||
|
|
e5d204e8d7 | ||
|
|
ef4026d7f5 | ||
|
|
3208e8a40f | ||
|
|
2a5ab41670 | ||
|
|
e5bf7206ee | ||
|
|
af5014409c | ||
|
|
0f779b9c71 | ||
|
|
ae4678d8f2 | ||
|
|
082b2bcd23 | ||
|
|
32faa8f8b0 | ||
|
|
342e3027f0 | ||
|
|
9e2e3d8c83 | ||
|
|
5559ee7f10 | ||
|
|
b56e3bcd13 | ||
|
|
3f96ad9f15 | ||
|
|
0ae581030f | ||
|
|
13e6fe4f73 | ||
|
|
7aaf53694a | ||
|
|
c8d25bb1eb | ||
|
|
e50653eda0 | ||
|
|
d69416d0d0 | ||
|
|
f9d48b38cd | ||
|
|
732a0a147c | ||
|
|
ee0c0b0e25 | ||
|
|
ac90deb1b6 | ||
|
|
65c611892d | ||
|
|
53f6f731ba | ||
|
|
fec333d757 | ||
|
|
ecf9b7ff35 | ||
|
|
2a5bce18e5 | ||
|
|
237116fd60 | ||
|
|
9157139c4b | ||
|
|
f5db4fcdab | ||
|
|
d403a37ba3 | ||
|
|
c2bddeeaba | ||
|
|
8d172cbc54 | ||
|
|
4b9b525ece | ||
|
|
6b96e9cd37 | ||
|
|
c8a4625d58 | ||
|
|
79c613e107 | ||
|
|
ec7878a7f4 | ||
|
|
9703aa466d | ||
|
|
a63085cbab | ||
|
|
0e5742cffc | ||
|
|
cacdb68a25 | ||
|
|
c0ad7d6b39 | ||
|
|
c3be8de5fd | ||
|
|
0f5d3ff642 | ||
|
|
34cbee2b35 | ||
|
|
44e7b8a0d0 | ||
|
|
440d1749e4 | ||
|
|
a295eb3768 | ||
|
|
2479a04370 | ||
|
|
bfe7e72e9c | ||
|
|
dd38d1be69 | ||
|
|
dec468b641 | ||
|
|
511c3a1b95 | ||
|
|
caa95f2456 | ||
|
|
e92a6bc61f | ||
|
|
1a07597d9c | ||
|
|
c3c0953fbd | ||
|
|
552eb4380c | ||
|
|
ca17b44dc0 | ||
|
|
7109bbbc81 | ||
|
|
d94a7ead0b | ||
|
|
46d25cdbb9 | ||
|
|
ce64db576f | ||
|
|
573afd62d1 | ||
|
|
6ae9523383 | ||
|
|
c7876a99f7 | ||
|
|
afcea227f7 | ||
|
|
0c9c332716 | ||
|
|
c81687461c | ||
|
|
ee36d8e96c | ||
|
|
1342f07504 | ||
|
|
4b90e50fef | ||
|
|
c3109cce09 | ||
|
|
3c06e8d9dd | ||
|
|
38be3b48ba | ||
|
|
96af86ec08 | ||
|
|
bcf9ffbea0 | ||
|
|
df4d5d3faa | ||
|
|
6fe79e337e | ||
|
|
971fed0fec | ||
|
|
a26aa62b17 | ||
|
|
b4c89fa4b3 | ||
|
|
5a25d72841 | ||
|
|
4148ab6c73 | ||
|
|
c11289c218 | ||
|
|
de76c68af9 | ||
|
|
5e5c9fea87 | ||
|
|
23404816cd | ||
|
|
2502104350 | ||
|
|
609cfef3f5 | ||
|
|
95e681ef9b | ||
|
|
4811245c09 | ||
|
|
d140c0833e | ||
|
|
11ae52d861 | ||
|
|
447c310f7c | ||
|
|
1c69d9b824 | ||
|
|
0613159be4 | ||
|
|
018f1fb028 | ||
|
|
55e002c9dc | ||
|
|
d30d2fa318 | ||
|
|
03b624ffbb | ||
|
|
a60b475388 | ||
|
|
9f8c88ff88 | ||
|
|
993c6681cb | ||
|
|
abacc13bf7 | ||
|
|
b509e0fbd4 | ||
|
|
dca15fb6d7 | ||
|
|
7489d47923 | ||
|
|
bb3dda93dc | ||
|
|
759b6bb8a1 | ||
|
|
771c404dbc | ||
|
|
e972030770 | ||
|
|
5047819058 | ||
|
|
bd1c16fe50 | ||
|
|
16de2cb293 | ||
|
|
c7e940005d | ||
|
|
e1fc813b17 | ||
|
|
b7699f8545 | ||
|
|
8f77bb6da9 | ||
|
|
5c23673540 | ||
|
|
3970b7c5ad | ||
|
|
bd5a36b0ff | ||
|
|
2c8fdb4f85 | ||
|
|
5d81b788b1 | ||
|
|
636e4ab786 | ||
|
|
9c64ef65eb | ||
|
|
4733579ef0 | ||
|
|
f803bbc861 | ||
|
|
6fa30085c6 | ||
|
|
0cc4623212 | ||
|
|
1b0715ef2f | ||
|
|
13239c3800 | ||
|
|
6c36362230 | ||
|
|
b0f2701d30 | ||
|
|
8731b42b20 | ||
|
|
f49dee7361 | ||
|
|
d16584234d | ||
|
|
34eca34dcf | ||
|
|
c42584594b | ||
|
|
9ea6924b39 | ||
|
|
3af916aa90 | ||
|
|
5148cb347c | ||
|
|
9e8a149558 | ||
|
|
c9109d8681 | ||
|
|
45b120b6e3 | ||
|
|
ce5d8243d4 | ||
|
|
590464b4e5 | ||
|
|
c852d90043 | ||
|
|
be5546a122 | ||
|
|
0ccd646fec | ||
|
|
d1891441af | ||
|
|
a53e338a21 | ||
|
|
973ae4bdb7 | ||
|
|
bf6f1d0454 | ||
|
|
c34990450a | ||
|
|
0bf1f46cc7 | ||
|
|
30cd94818b | ||
|
|
945640b296 | ||
|
|
53375e9a69 | ||
|
|
833b03483f | ||
|
|
5138849459 | ||
|
|
4a1190df4a | ||
|
|
029f3b8d51 | ||
|
|
888cbdfd02 | ||
|
|
467a1a00f9 | ||
|
|
114896f06f | ||
|
|
6832220265 | ||
|
|
b0cce58512 | ||
|
|
f897e4be15 | ||
|
|
0467bcd3d6 | ||
|
|
ff9de37d63 | ||
|
|
32224d9c6d | ||
|
|
49165d1d26 | ||
|
|
e2600d9ac1 | ||
|
|
0e0f7eff77 | ||
|
|
23fe354d16 | ||
|
|
bf52a02c77 | ||
|
|
788935c0ce | ||
|
|
b27ebb170b | ||
|
|
360ad438b8 | ||
|
|
4e38d36c72 | ||
|
|
b4cc3ab98f | ||
|
|
206e3b8469 | ||
|
|
0c55dc8db9 | ||
|
|
ccc156d51d | ||
|
|
902fd855ae | ||
|
|
028795f23f | ||
|
|
019e34dc06 | ||
|
|
11a4af700a | ||
|
|
8f796e749e | ||
|
|
57c4253ed5 | ||
|
|
169dd7d013 | ||
|
|
79d292090a | ||
|
|
3512ecc00e | ||
|
|
c4ed9722f2 | ||
|
|
0e07b7eb5b | ||
|
|
b34e58ca08 | ||
|
|
4b7796c2d5 | ||
|
|
a0f7e4e2da | ||
|
|
7b9a6387f4 | ||
|
|
c34ecdd92f | ||
|
|
3cc3d56b05 | ||
|
|
1fe74a378b | ||
|
|
676638c26a | ||
|
|
ec195d5a7e | ||
|
|
17308cb52e | ||
|
|
75c9d393bf | ||
|
|
a827bc2dfa | ||
|
|
2aa4c64cb6 | ||
|
|
85cec53554 | ||
|
|
26852f8830 | ||
|
|
80c6a22d4a | ||
|
|
6c05ff5a85 | ||
|
|
66d4bfd627 | ||
|
|
e075a370c4 | ||
|
|
2a7de310e1 | ||
|
|
c4f89e210b | ||
|
|
a0c0c6ae7b | ||
|
|
0f6e0d6db9 | ||
|
|
8a98027fe0 | ||
|
|
d38202370e | ||
|
|
88e9abb8a0 | ||
|
|
46d03677c6 | ||
|
|
2af70e5e76 | ||
|
|
138aa4cb17 | ||
|
|
1f3b6c97aa | ||
|
|
05f343d12b | ||
|
|
bc708a543c | ||
|
|
9e5843b414 | ||
|
|
811c6a45b4 | ||
|
|
b1e0b0abd8 | ||
|
|
be6c50e32e | ||
|
|
3ef75548cf | ||
|
|
cb663299d1 | ||
|
|
3ba03b29f2 | ||
|
|
64492fe29c | ||
|
|
0026b3450c | ||
|
|
7f9fa7a161 | ||
|
|
cd8a1b3c85 | ||
|
|
ca40deb9ee | ||
|
|
3a2688063a | ||
|
|
4c47502632 | ||
|
|
eb23f198ad | ||
|
|
a1221bad50 | ||
|
|
1b65df77a3 | ||
|
|
e48ba38ce5 | ||
|
|
1d6cd5b344 | ||
|
|
e2d1ec8882 | ||
|
|
25e4deb095 | ||
|
|
ff9b2dd329 | ||
|
|
b6511b156c | ||
|
|
ca6443a27c | ||
|
|
5b1d0458dc | ||
|
|
116ad3bfc4 | ||
|
|
d8e737b988 | ||
|
|
b033aa91b2 | ||
|
|
3f149af10d | ||
|
|
dc93157478 | ||
|
|
a62a3f6379 | ||
|
|
6698343534 | ||
|
|
c8d5125ac3 | ||
|
|
e257f22430 | ||
|
|
3b8d9c702d | ||
|
|
f9dd6655ec | ||
|
|
3fcebd74b2 | ||
|
|
ac39e253ff | ||
|
|
ca6674a81d | ||
|
|
cf2e5124ce | ||
|
|
c4a55871e4 | ||
|
|
67f27e6455 | ||
|
|
ff6e2b58c6 | ||
|
|
50514b3c7f | ||
|
|
5e86d85526 | ||
|
|
f8998e03ce | ||
|
|
af4c3ff66a | ||
|
|
0ca5bf65c0 | ||
|
|
564fa0e0af | ||
|
|
47ddd93e55 | ||
|
|
fea87e834c | ||
|
|
bb1c5bba94 | ||
|
|
0e404ac683 | ||
|
|
dd0500e539 | ||
|
|
46989bb607 | ||
|
|
827f20a398 | ||
|
|
e4270dc3d2 | ||
|
|
ac72c96c00 | ||
|
|
83fb7448d8 | ||
|
|
6e94598966 | ||
|
|
14359b772f | ||
|
|
1f4243ead0 | ||
|
|
207d78ae00 | ||
|
|
9362ca7bac | ||
|
|
f6d47b4005 | ||
|
|
c384a5097c | ||
|
|
074ceec36c | ||
|
|
e0c31cded7 | ||
|
|
fdc132d773 | ||
|
|
cb1caec39b | ||
|
|
35fe7968da | ||
|
|
c1cca846a3 | ||
|
|
5b64b79621 | ||
|
|
598983a38a | ||
|
|
e88c516694 | ||
|
|
d3505fdf69 | ||
|
|
62b2adce92 | ||
|
|
4fbb8b8b54 | ||
|
|
9fb5310f7d | ||
|
|
2a8f1980d8 | ||
|
|
0b9a5d7f76 | ||
|
|
bfdab38a67 | ||
|
|
802007e17f | ||
|
|
7f5147f4ec | ||
|
|
2e2905ee72 | ||
|
|
08f90d3343 | ||
|
|
59cbc65a94 | ||
|
|
3d49b7287a | ||
|
|
5305d2e77e | ||
|
|
742742f275 | ||
|
|
c3248e2ed5 | ||
|
|
9a1e7dfb06 | ||
|
|
bb4be681cb | ||
|
|
c6f7acb7eb | ||
|
|
939f373da5 | ||
|
|
84d9590a9c | ||
|
|
b28d86537e | ||
|
|
dab44c9fe2 | ||
|
|
94f707c93e | ||
|
|
5522eb47bc | ||
|
|
ad68b25d09 | ||
|
|
ff7a467958 | ||
|
|
a31587e78a | ||
|
|
f846fe610b | ||
|
|
47e4fcbee5 | ||
|
|
7a6994a1c7 | ||
|
|
fdd2a20b33 | ||
|
|
7546e1e65a | ||
|
|
c2be5b3865 | ||
|
|
18b81c32e8 | ||
|
|
9c53de7304 | ||
|
|
be191f464a | ||
|
|
466748e63c | ||
|
|
213b8b293d | ||
|
|
63fc9bb5e5 | ||
|
|
fe1d504432 | ||
|
|
970e965ba5 | ||
|
|
192c28db55 | ||
|
|
c4ab14acb2 | ||
|
|
334b3ab083 | ||
|
|
958eb2bae6 | ||
|
|
30c83ed3d0 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,7 +1,8 @@
|
|||||||
config.sh
|
config.sh
|
||||||
.devkitARM*
|
.devkitARM*
|
||||||
.devkitPPC*
|
.devkitPPC*
|
||||||
.devkitPSP*
|
.devkitA64*
|
||||||
|
*.xz
|
||||||
*.gz
|
*.gz
|
||||||
*.bz2
|
*.bz2
|
||||||
*~
|
*~
|
||||||
|
|||||||
104
README.TXT
104
README.TXT
@@ -1,52 +1,91 @@
|
|||||||
devkitPro build scripts
|
devkitPro build scripts
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
This readme will guide you through building devkitARM, devkitPPC or devkitPSP from source using a set of scripts.
|
This readme will guide you through building devkitARM, devkitPPC or devkitA64
|
||||||
|
from source using a set of scripts.
|
||||||
|
|
||||||
|
Please note that we can't guarantee that what you build with these scripts
|
||||||
|
will function in the same way as the binaries we distribute. Where possible
|
||||||
|
you should use the binary distributions. We also offer no support for any
|
||||||
|
problems you may encounter with these scripts.
|
||||||
|
|
||||||
|
The windows versions of the toolchains are now cross compiled on linux using
|
||||||
|
mingw-w64
|
||||||
|
|
||||||
|
Preparing to build
|
||||||
|
--------------------------
|
||||||
|
|
||||||
The windows versions of the toolchains are now cross compiled on linux using mingw-w64
|
|
||||||
required packages for building on debian/*buntu
|
required packages for building on debian/*buntu
|
||||||
|
|
||||||
sudo apt-get install build-essential autoconf automake bison flex libncurses5-dev libreadline-dev texinfo pkg-config
|
sudo apt-get install build-essential autoconf automake bison flex libncurses5-dev
|
||||||
|
libreadline-dev texinfo pkg-config
|
||||||
|
|
||||||
For building gcc libgmp, libmpfr and libmpc are required - these are built as static libraries to make packaging simpler.
|
For building gcc libgmp, libmpfr and libmpc are required - these are built as
|
||||||
If you're building the tools for personal use then the versions packaged by your chosen distro should suffice.
|
static libraries to make packaging simpler. If you're building the tools for
|
||||||
|
personal use then the versions packaged by your chosen distro should suffice.
|
||||||
|
|
||||||
http://gmplib.org/
|
https://gmplib.org/
|
||||||
http://www.mpfr.org/
|
https://www.mpfr.org/
|
||||||
http://www.multiprecision.org/
|
https://www.multiprecision.org/
|
||||||
|
|
||||||
Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib, and libusb. Again these are built as static
|
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
|
||||||
libraries for ease of packaging but you can probably use the versions supplied by your distro.
|
|
||||||
|
|
||||||
http://freeimage.sourceforge.net/
|
Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib,
|
||||||
http://www.zlib.net
|
expat, and libusb. Again these are built as static libraries for ease of
|
||||||
http://www.libusb.org
|
packaging but you can probably use the versions supplied by your distro.
|
||||||
|
|
||||||
|
https://freeimage.sourceforge.net/
|
||||||
|
https://www.zlib.net
|
||||||
|
https://www.libusb.org
|
||||||
|
https://expat.sourceforge.net/
|
||||||
|
|
||||||
|
sudo apt-get install libfreeimage-dev zlib1g-dev libusb-dev libudev-dev libexpat1-dev
|
||||||
|
|
||||||
|
|
||||||
Downloading the source packages
|
Building gxtexconv for cube/wii needs GL/gl.h which can be obtained with
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
When you run the build script it will ask you to choose from one of two options, one for if you have already downloaded the source packages and another for if you want it to download them for you (using wget or curl).
|
sudo apt-get install mesa-common-dev
|
||||||
|
|
||||||
|
Tools for devkitA64 require liblz4.
|
||||||
|
|
||||||
|
http://lz4.github.io/lz4/
|
||||||
|
|
||||||
|
sudo apt-get install liblz4-dev
|
||||||
|
|
||||||
|
The liblz4 with Ubuntu 14.04 isn't new enough. Either upgrade to at least 16.04 or
|
||||||
|
build this from source.
|
||||||
|
|
||||||
|
For building the OSX versions we install the Xcode commandline tools and build
|
||||||
|
pkg-config from source as well as static versions of the libraries listed above.
|
||||||
|
This helps keep the dependencies to a minimum so end users can use the tools
|
||||||
|
with only Xcode command line tools to obtain make.
|
||||||
|
|
||||||
|
To avoid having to manually answer prompts during the build the script will
|
||||||
|
read variables from config.sh if it exists. Copy config.sh.sample to config.sh
|
||||||
|
and set the variables as appropriate for your build.
|
||||||
|
|
||||||
|
The script will download the source packages it needs. These will be downloaded
|
||||||
|
to the script directory by default but you can set BUILD_DKPRO_SRCDIR if you want
|
||||||
|
to put them somewhere else. When its finished you have the option to delete
|
||||||
|
all temporary files, sources and their source packages.
|
||||||
|
|
||||||
The top level shell script has now been unified and offers the option of devkitARM, devkitPPC or devkitPSP.
|
|
||||||
|
|
||||||
Building the devkits
|
Building the devkits
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Simply run the "build-devkit.sh" script in the same directory as this text file as shown below, then follow the prompts;
|
Simply run the "build-devkit.sh" script in the same directory as this text file
|
||||||
|
as shown below, then follow the prompts;
|
||||||
|
|
||||||
./build-devkit.sh
|
./build-devkit.sh
|
||||||
|
|
||||||
Once the script finds the source packages they will be decompressed and the build process will begin. When its finished you have the option to delete all temporary files, sources and their source packages.
|
Several examples tarballs are provided for the platforms supported by devkitARM &
|
||||||
|
devkitPPC, these include basic templates for starting your own projects.
|
||||||
To avoid having to manually answer prompts during the build the script will read variables from config.sh if it exists. Copy config.sh.sample to config.sh and set the variables as appropriate for your build.
|
See http://wiki.devkitpro.org/index.php/Getting_Started for links.
|
||||||
|
|
||||||
Several examples tarballs are provided for the platforms supported by devkitARM & devkitPPC, these include basic templates for starting your own projects. See http://wiki.devkitpro.org/index.php/Getting_Started for links.
|
|
||||||
|
|
||||||
Using devkitARM
|
Using devkitARM
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
to use the built in crt0 and linkscript use arm-eabi-gcc to link your project
|
to use the built in crt0 and linkscript use arm-none-eabi-gcc to link your project
|
||||||
|
|
||||||
Several specs files are built in for the various platforms
|
Several specs files are built in for the various platforms
|
||||||
|
|
||||||
@@ -58,25 +97,21 @@ Several specs files are built in for the various platforms
|
|||||||
-specs=ds_cart for a DS arm7 binary which runs from GBA cart.
|
-specs=ds_cart for a DS arm7 binary which runs from GBA cart.
|
||||||
-specs=gp32.specs for standard GP32 app.
|
-specs=gp32.specs for standard GP32 app.
|
||||||
-specs=gp32_gpsdk.specs for official gamepark SDK GP32 app.
|
-specs=gp32_gpsdk.specs for official gamepark SDK GP32 app.
|
||||||
|
-specs=3dsx.specs for a 3DS homebrew binary.
|
||||||
|
|
||||||
Using devkitPPC
|
Using devkitPPC
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
to use the built in crt0 and linkscript use powerpc-gekko-gcc to link your project, using the command line switch -mgcn for a bare bones system, -mogc to use libogc and the multi-threaded microkernel for gamecube, -mrvl for wii.
|
to use the built in crt0 and linkscript use powerpc-eabi-gcc to link your project,
|
||||||
|
using the command line switch -mgcn for a bare bones system, -mogc to use libogc and
|
||||||
|
the multi-threaded microkernel for gamecube, -mrvl for wii, -mwup for wii u.
|
||||||
|
|
||||||
Using devkitPSP
|
|
||||||
---------------
|
|
||||||
|
|
||||||
All you need to do now to use devkitPSP is make sure that your freshly built tools are in your PATH, something like this;
|
|
||||||
|
|
||||||
export PATH=$PATH:<path to devkitPSP>/bin
|
|
||||||
|
|
||||||
(Obviously replace <path to devkitPSP> with the full path to the devkitPSP installation directory)
|
|
||||||
|
|
||||||
Getting started
|
Getting started
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
The best thing to do next is test the compiler, so grab an examples tarball from sourceforge & run make in the top level.
|
The best thing to do next is test the compiler, so grab an examples tarball
|
||||||
|
from sourceforge & run make in the top level.
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
-------
|
-------
|
||||||
@@ -84,6 +119,7 @@ Credits
|
|||||||
* Thanks to WinterMute for bringing us devkitPro, the website is http://www.devkitpro.org
|
* Thanks to WinterMute for bringing us devkitPro, the website is http://www.devkitpro.org
|
||||||
* Build scripts written by WinterMute and tied together by GreenGianT
|
* Build scripts written by WinterMute and tied together by GreenGianT
|
||||||
* Thanks to Mr Spiv, Honkey Kong, Raleigh and JoostP for OS X testing
|
* Thanks to Mr Spiv, Honkey Kong, Raleigh and JoostP for OS X testing
|
||||||
|
* libctru by Smealum, YellowS8, fincs, mtheall & WinterMute with contributions from many others.
|
||||||
* libogc written and supplied by Shagkur. Additional code by WinterMute, Bushing, Marcan & Tybor
|
* libogc written and supplied by Shagkur. Additional code by WinterMute, Bushing, Marcan & Tybor
|
||||||
* libgba by WinterMute
|
* libgba by WinterMute
|
||||||
* libnds by Joat, Dovoto and WinterMute with contributions from many others.
|
* libnds by Joat, Dovoto and WinterMute with contributions from many others.
|
||||||
|
|||||||
249
build-devkit.sh
249
build-devkit.sh
@@ -1,17 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Build scripts for
|
# devkitARM release 67
|
||||||
# devkitARM release 43
|
# devkitPPC release 48
|
||||||
# devkitPPC release 27
|
# devkitA64 release 29
|
||||||
# devkitPSP release 17
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
if [ 1 -eq 1 ] ; then
|
if [ 0 -eq 1 ] ; then
|
||||||
echo "Currently in release cycle, proceed with caution, do not report problems, do not ask for support."
|
|
||||||
echo "Please use the latest release buildscripts unless advised otherwise by devkitPro staff."
|
echo "Please use the latest release buildscripts unless advised otherwise by devkitPro staff."
|
||||||
echo "http://sourceforge.net/projects/devkitpro/files/buildscripts/"
|
echo "https://github.com/devkitPro/buildscripts/releases/latest"
|
||||||
echo
|
echo
|
||||||
echo "The scripts in the git repository are quite often dependent on things which currently only exist"
|
echo "The scripts in the git repository may be dependent on things which currently only exist"
|
||||||
echo "on developer machines. This is not a bug, use stable releases."
|
echo "on developer machines. This is not a bug, use stable releases."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -20,58 +18,49 @@ echo "Please note, these scripts are provided as a courtesy, toolchains built wi
|
|||||||
echo "are for personal use only and may not be distributed by entities other than devkitPro."
|
echo "are for personal use only and may not be distributed by entities other than devkitPro."
|
||||||
echo "See http://devkitpro.org/wiki/Trademarks"
|
echo "See http://devkitpro.org/wiki/Trademarks"
|
||||||
echo
|
echo
|
||||||
echo "Patches and improvements are of course welcome, please send these to the patch tracker"
|
echo "Users should use devkitPro pacman to maintain toolchain installations where possible"
|
||||||
echo "https://sourceforge.net/tracker/?group_id=114505&atid=668553"
|
echo "See https://devkitpro.org/wiki/devkitPro_pacman"
|
||||||
|
echo
|
||||||
|
echo "Patches and improvements are of course welcome, please submit a PR"
|
||||||
|
echo "https://github.com/devkitPro/buildscripts/pulls"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
LIBOGC_VER=1.8.12
|
|
||||||
LIBGBA_VER=20090222
|
|
||||||
LIBNDS_VER=1.5.8
|
DKARM_RULES_VER=1.6.1
|
||||||
LIBCTRU_VER=0.1.0
|
DKARM_CRTLS_VER=1.2.7
|
||||||
DEFAULT_ARM7_VER=0.5.24
|
|
||||||
DSWIFI_VER=0.3.16
|
DKPPC_RULES_VER=1.2.1
|
||||||
LIBMIRKO_VER=0.9.7
|
DKPPC_CRTLS_VER=1.0.0
|
||||||
MAXMOD_VER=1.0.9
|
|
||||||
FILESYSTEM_VER=0.9.11
|
DKA64_RULES_VER=1.1.1
|
||||||
LIBFAT_VER=1.0.12
|
|
||||||
PSPSDK_VER=20120404
|
OSXMIN=${OSXMIN:-10.9}
|
||||||
GBATOOLS_VER=1.0.0
|
|
||||||
DSTOOLS_VER=1.0.0
|
#---------------------------------------------------------------------------------
|
||||||
GRIT_VER=0.8.12
|
# find proper patch
|
||||||
NDSTOOL_VER=1.50.1
|
#---------------------------------------------------------------------------------
|
||||||
GENERAL_TOOLS_VER=1.0.0
|
if [ -z "$PATCH" -a -x "$(which gpatch)" ]; then PATCH=$(which gpatch); fi
|
||||||
DLDITOOL_VER=1.24.0
|
if [ -z "$PATCH" -a -x "$(which patch)" ]; then PATCH=$(which patch); fi
|
||||||
GXTEXCONV_VER=0.1.9
|
if [ -z "$PATCH" ]; then
|
||||||
GCDSPSUITE_VER=1.4.0
|
echo no patch found
|
||||||
ELF2DOL_VER=1.0.0
|
exit 1
|
||||||
WIILOAD_VER=0.5.1
|
fi
|
||||||
MMUTIL_VER=1.8.6
|
echo use $PATCH as patch
|
||||||
DFU_UTIL_VER=0.7.1
|
export PATCH
|
||||||
STLINK_VER=0.5.8
|
|
||||||
TOOLS3DS_VER=1.0.0
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
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
|
$PATCH -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; }
|
||||||
if [[ ! -f patched-$1 && -f $patchdir/$1-$2.patch ]]; then
|
touch patched-$1-$2
|
||||||
echo "patching $1"
|
|
||||||
patch -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; }
|
|
||||||
touch patched-$1
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,13 +71,6 @@ if [ ! -z "$CROSSBUILD" ] ; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# Sane defaults for building toolchain
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
export CFLAGS="-O2 -pipe"
|
|
||||||
export CXXFLAGS="$CFLAGS"
|
|
||||||
unset LDFLAGS
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Look for automated configuration file to bypass prompts
|
# Look for automated configuration file to bypass prompts
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@@ -103,20 +85,18 @@ fi
|
|||||||
. ./select_toolchain.sh
|
. ./select_toolchain.sh
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Get preferred installation directory and set paths to the sources
|
# Legacy versions of these scripts allowed the selection of a prefix which is
|
||||||
|
# no longer supported. Since adopting pacman and providing precompiled binaries
|
||||||
|
# of "portlibs" everything we distribute is intended to work within opt/devkitpro
|
||||||
|
#
|
||||||
|
# Rather than attempting to repackage our work for exotic linux distributions it
|
||||||
|
# would be much better for everyone concerned if efforts were made to provide
|
||||||
|
# pacman and whatever support is necessary to allow the binaries we distribute to
|
||||||
|
# work as expected.
|
||||||
|
#
|
||||||
|
# See https://github.com/devkitPro/pacman and https://devkitpro.org/wiki/devkitPro_pacman
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
INSTALLDIR=/opt/devkitpro
|
||||||
if [ ! -z "$BUILD_DKPRO_INSTALLDIR" ] ; then
|
|
||||||
INSTALLDIR="$BUILD_DKPRO_INSTALLDIR"
|
|
||||||
else
|
|
||||||
echo
|
|
||||||
echo "Please enter the directory where you would like '$package' to be installed:"
|
|
||||||
echo "for mingw/msys you must use <drive>:/<install path> or you will have include path problems"
|
|
||||||
echo "this is the top level directory for devkitpro, i.e. e:/devkitPro"
|
|
||||||
|
|
||||||
read -e INSTALLDIR
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ ! -z "$INSTALLDIR" ] && mkdir -p $INSTALLDIR && touch $INSTALLDIR/nonexistantfile && rm $INSTALLDIR/nonexistantfile || exit 1;
|
[ ! -z "$INSTALLDIR" ] && mkdir -p $INSTALLDIR && touch $INSTALLDIR/nonexistantfile && rm $INSTALLDIR/nonexistantfile || exit 1;
|
||||||
|
|
||||||
@@ -143,18 +123,22 @@ fi
|
|||||||
echo use $MAKE as make
|
echo use $MAKE as make
|
||||||
export MAKE
|
export MAKE
|
||||||
|
|
||||||
|
CROSS_PARAMS="--build=`./config.guess`"
|
||||||
|
|
||||||
|
if [ ! -z $CROSSBUILD ]; then
|
||||||
|
export PATH=/opt/devkitpro/$package/bin:$PATH
|
||||||
|
prefix=$INSTALLDIR/$CROSSBUILD/$package
|
||||||
|
CROSS_PARAMS="$CROSS_PARAMS --host=$CROSSBUILD"
|
||||||
|
CROSS_GCC_PARAMS="--with-gmp=$CROSSPATH --with-mpfr=$CROSSPATH --with-mpc=$CROSSPATH --with-isl=$CROSSPATH --with-zstd=$CROSSPATH"
|
||||||
|
else
|
||||||
|
prefix=$INSTALLDIR/$package
|
||||||
|
fi
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Add installed devkit to the path, adjusting path on minsys
|
# Add installed devkit to the path, adjusting path on minsys
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
|
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
|
||||||
export PATH=$PATH:$TOOLPATH/$package/bin
|
export PATH=$TOOLPATH/$package/bin:$PATH
|
||||||
|
|
||||||
if [ ! -z $CROSSBUILD ]; then
|
|
||||||
prefix=$INSTALLDIR/$CROSSBUILD/$package
|
|
||||||
CROSS_PARAMS="--build=`./config.guess` --host=$CROSSBUILD"
|
|
||||||
else
|
|
||||||
prefix=$INSTALLDIR/$package
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$BUILD_DKPRO_AUTOMATED" != "1" ] ; then
|
if [ "$BUILD_DKPRO_AUTOMATED" != "1" ] ; then
|
||||||
|
|
||||||
@@ -169,48 +153,55 @@ PLATFORM=`uname -s`
|
|||||||
|
|
||||||
case $PLATFORM in
|
case $PLATFORM in
|
||||||
Darwin )
|
Darwin )
|
||||||
cflags="-mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
|
cppflags="-mmacosx-version-min=${OSXMIN} -I/usr/local/include"
|
||||||
ldflags="-mmacosx-version-min=10.4 -arch i386 -arch ppc -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk"
|
ldflags="-mmacosx-version-min=${OSXMIN} -L/usr/local/lib"
|
||||||
export CC=gcc-4.0
|
if [ "x${OSXSDKPATH}x" != "xx" ]; then
|
||||||
export CXX=g++-4.0
|
cppflags="$cppflags -isysroot ${OSXSDKPATH}"
|
||||||
|
ldflags="$ldflags -Wl,-syslibroot,${OSXSDKPATH}"
|
||||||
|
fi
|
||||||
|
TESTCC=`cc -v 2>&1 | grep clang`
|
||||||
|
if [ "x${TESTCC}x" != "xx" ]; then
|
||||||
|
cppflags="$cppflags -fbracket-depth=512"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
MINGW32* )
|
MINGW32* )
|
||||||
cflags="-D__USE_MINGW_ACCESS"
|
cppflags="-D__USE_MINGW_ACCESS -D__USE_MINGW_ANSI_STDIO=1"
|
||||||
# horrid hack to get -flto to work on windows
|
|
||||||
plugin_ld="--with-plugin-ld=ld"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if [ ! -z $CROSSBUILD ] && grep -q "mingw" <<<"$CROSSBUILD" ; then
|
||||||
|
cppflags="-D__USE_MINGW_ACCESS -D__USE_MINGW_ANSI_STDIO=1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
BUILDSCRIPTDIR=$(pwd)
|
BUILDSCRIPTDIR=$(pwd)
|
||||||
BUILDDIR=$(pwd)/.$package
|
BUILDDIR=$(pwd)/.$package
|
||||||
|
|
||||||
if [ ! -z $CROSSBUILD ]; then
|
if [ ! -z $CROSSBUILD ]; then
|
||||||
BUILDDIR=$BUILDDIR-$CROSSBUILD
|
BUILDDIR=$BUILDDIR-$CROSSBUILD
|
||||||
fi
|
fi
|
||||||
DEVKITPRO_URL="http://downloads.sourceforge.net/devkitpro"
|
|
||||||
|
|
||||||
patchdir=$(pwd)/$basedir/patches
|
patchdir=$(pwd)/$basedir/patches
|
||||||
scriptdir=$(pwd)/$basedir/scripts
|
scriptdir=$(pwd)/$basedir/scripts
|
||||||
|
|
||||||
archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.bz2 newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.bz2"
|
archives="binutils-${BINUTILS_VER}.tar.xz gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz"
|
||||||
|
|
||||||
|
if [ $VERSION -eq 2 ]; then
|
||||||
|
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ]; then
|
||||||
if [ $VERSION -eq 1 ]; then
|
if [ $VERSION -eq 1 ]; then
|
||||||
targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2
|
archives="devkitarm-rules-$DKARM_RULES_VER.tar.gz devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz $archives"
|
||||||
libmirko-src-${LIBMIRKO_VER}.tar.bz2 dswifi-src-${DSWIFI_VER}.tar.bz2 maxmod-src-${MAXMOD_VER}.tar.bz2
|
|
||||||
default_arm7-src-${DEFAULT_ARM7_VER}.tar.bz2 libfilesystem-src-${FILESYSTEM_VER}.tar.bz2
|
|
||||||
libfat-src-${LIBFAT_VER}.tar.bz2 libctru-src-${LIBCTRU_VER}.tar.bz2"
|
|
||||||
hostarchives="gbatools-$GBATOOLS_VER.tar.bz2 dstools-$DSTOOLS_VER.tar.bz2 grit-$GRIT_VER.tar.bz2 ndstool-$NDSTOOL_VER.tar.bz2
|
|
||||||
general-tools-$GENERAL_TOOLS_VER.tar.bz2 dlditool-$DLDITOOL_VER.tar.bz2 mmutil-$MMUTIL_VER.tar.bz2
|
|
||||||
dfu-util-$DFU_UTIL_VER.tar.bz2 stlink-$STLINK_VER.tar.bz2 3dstools-$TOOLS3DS_VER.tar.bz2"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $VERSION -eq 2 ]; then
|
if [ $VERSION -eq 2 ]; then
|
||||||
targetarchives="libogc-src-${LIBOGC_VER}.tar.bz2 libfat-src-${LIBFAT_VER}.tar.bz2"
|
archives="devkitppc-crtls-$DKPPC_CRTLS_VER.tar.gz devkitppc-rules-$DKPPC_RULES_VER.tar.gz $archives"
|
||||||
hostarchives="gxtexconv-$GXTEXCONV_VER.tar.bz2 gcdspsuite-$GCDSPSUITE_VER.tar.bz2
|
|
||||||
wiiload-$WIILOAD_VER.tar.bz2 elf2dol-$ELF2DOL_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $VERSION -eq 3 ]; then
|
if [ $VERSION -eq 3 ]; then
|
||||||
targetarchives="pspsdk-src-${PSPSDK_VER}.tar.bz2"
|
archives="devkita64-rules-$DKA64_RULES_VER.tar.gz $archives"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
|
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
|
||||||
@@ -220,11 +211,11 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$SRCDIR"
|
cd "$SRCDIR"
|
||||||
for archive in $archives $targetarchives $hostarchives
|
for archive in $archives
|
||||||
do
|
do
|
||||||
echo $archive
|
echo $archive
|
||||||
if [ ! -f $archive ]; then
|
if [ ! -f $archive ]; then
|
||||||
$FETCH http://downloads.sf.net/devkitpro/$archive || { echo "Error: Failed to download $archive"; exit 1; }
|
$FETCH https://downloads.devkitpro.org/$archive || { echo "Error: Failed to download $archive"; exit 1; }
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -232,48 +223,28 @@ cd $BUILDSCRIPTDIR
|
|||||||
mkdir -p $BUILDDIR
|
mkdir -p $BUILDDIR
|
||||||
cd $BUILDDIR
|
cd $BUILDDIR
|
||||||
|
|
||||||
extract_and_patch binutils $BINUTILS_VER bz2
|
extract_and_patch binutils $BINUTILS_VER xz
|
||||||
extract_and_patch gcc $GCC_VER bz2
|
extract_and_patch gcc $GCC_VER xz
|
||||||
rm -fr gcc-$GCC_VER/zlib
|
|
||||||
extract_and_patch newlib $NEWLIB_VER gz
|
extract_and_patch newlib $NEWLIB_VER gz
|
||||||
extract_and_patch gdb $GDB_VER bz2
|
|
||||||
|
|
||||||
for archive in $targetarchives
|
if [ $VERSION -eq 2 ]; then extract_and_patch binutils $MN_BINUTILS_VER bz2; fi
|
||||||
do
|
|
||||||
destdir=$(echo $archive | sed -e 's/\(.*\)-src-\(.*\)\.tar\.bz2/\1-\2/' )
|
|
||||||
echo $destdir
|
|
||||||
if [ ! -d $destdir ]; then
|
|
||||||
mkdir -p $destdir
|
|
||||||
bzip2 -cd "$SRCDIR/$archive" | tar -xf - -C $destdir || { echo "Error extracting "$archive; exit 1; }
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for archive in $hostarchives
|
|
||||||
do
|
|
||||||
tar -xjf "$SRCDIR/$archive"
|
|
||||||
done
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Build and install devkit components
|
# Build and install devkit components
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
if [ -f $scriptdir/build-gcc.sh ]; then . $scriptdir/build-gcc.sh || { echo "Error building toolchain"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
if [ -f $scriptdir/build-gcc.sh ]; then . $scriptdir/build-gcc.sh || { echo "Error building toolchain"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
||||||
if [ -f $scriptdir/build-tools.sh ]; then . $scriptdir/build-tools.sh || { echo "Error building tools"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
|
||||||
if [ -f $scriptdir/build-crtls.sh ]; then . $scriptdir/build-crtls.sh || { echo "Error building crtls"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
|
||||||
|
|
||||||
if [ ! -z $CROSSBUILD ]; then
|
|
||||||
if [ $VERSION -ne 3 ]; then
|
if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ] && [ -f $scriptdir/build-crtls.sh ]; then
|
||||||
cp -v $CROSSLIBPATH/FreeImage.dll $prefix/bin
|
. $scriptdir/build-crtls.sh || { echo "Error building crtls & rules"; exit 1; }; cd $BUILDSCRIPTDIR;
|
||||||
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
|
||||||
|
|
||||||
|
cd $BUILDSCRIPTDIR
|
||||||
|
|
||||||
|
if [ "$BUILD_DKPRO_NO_STRIP_BINARIES" != "1" ]; then
|
||||||
echo "stripping installed binaries"
|
echo "stripping installed binaries"
|
||||||
. ./strip_bins.sh
|
. ./strip_bins.sh
|
||||||
|
fi
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Clean up temporary files and source directories
|
# Clean up temporary files and source directories
|
||||||
@@ -297,5 +268,13 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "note: Add the following to your environment; DEVKITPRO=$TOOLPATH $toolchain=$TOOLPATH/$package"
|
echo "note: Add the following to your environment;"
|
||||||
|
echo
|
||||||
|
echo " DEVKITPRO=$TOOLPATH"
|
||||||
|
if [ "$toolchain" != "DEVKITA64" ]; then
|
||||||
|
echo " $toolchain=$TOOLPATH/$package"
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
echo "add $TOOLPATH/tools/bin to your PATH"
|
||||||
|
echo
|
||||||
echo
|
echo
|
||||||
|
|||||||
35
config.sh.sample
Normal file → Executable file
35
config.sh.sample
Normal file → Executable file
@@ -9,34 +9,35 @@
|
|||||||
# 0: User selects manually
|
# 0: User selects manually
|
||||||
# 1: devkitARM
|
# 1: devkitARM
|
||||||
# 2: devkitPPC
|
# 2: devkitPPC
|
||||||
# 3: devkitPSP
|
# 3: devkitA64
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
BUILD_DKPRO_PACKAGE=0
|
BUILD_DKPRO_PACKAGE=0
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# Download source packages
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# 0: User selects manually
|
|
||||||
# 1: already downloaded
|
|
||||||
# 2: download packages
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
BUILD_DKPRO_DOWNLOAD=0
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# Toolchain installation directory, comment if not specified
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
#BUILD_DKPRO_INSTALLDIR=/opt/devkitpro
|
|
||||||
#BUILD_DKPRO_INSTALLDIR=c:/devkitPro
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Path to previously downloaded source packages, comment if not specified
|
# Path to previously downloaded source packages, comment if not specified
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
#BUILD_DKPRO_SRCDIR=/d/projects/archives
|
#BUILD_DKPRO_SRCDIR=~/projects/archives
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
# MAKEFLAGS for building - use number of processors for jobs
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
#numcores=`getconf _NPROCESSORS_ONLN`
|
||||||
|
#export MAKEFLAGS="$MAKEFLAGS -j${numcores}"
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Uncomment to skip building of crtls and rules files
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
#BUILD_DKPRO_SKIP_CRTLS=1
|
||||||
|
|
||||||
# Automated script execution
|
# Automated script execution
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# 0: Ask to delete build folders & patched sources
|
# 0: Ask to delete build folders & patched sources
|
||||||
# 1: Use defaults, don't pause for answers
|
# 1: Use defaults, don't pause for answers
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
BUILD_DKPRO_AUTOMATED=0
|
BUILD_DKPRO_AUTOMATED=0
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# set OSX SDK path if needed
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
#export OSXSDKPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX10.12.sdk
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
export CROSSBUILD=i686-w64-mingw32
|
|
||||||
export CROSSLIBPATH=/opt/i686-w64-mingw32/mingw/lib
|
|
||||||
export CROSSBINPATH=/opt/i686-w64-mingw32/mingw/bin
|
|
||||||
export PATH=/opt/i686-w64-mingw32/bin:$PATH
|
|
||||||
export PKG_CONFIG_PATH=$CROSSLIBPATH/pkgconfig
|
|
||||||
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
export CROSSBUILD=x86_64-w64-mingw32
|
|
||||||
export CROSSLIBPATH=/opt/x86_64-mingw-w64/mingw/lib
|
|
||||||
export CROSSBINPATH=/opt/x86_64-mingw-w64/mingw/bin
|
|
||||||
export PATH=/opt/x86_64-mingw-w64/bin:$PATH
|
|
||||||
export PKG_CONFIG_PATH=$CROSSLIBPATH/pkgconfig
|
|
||||||
|
|
||||||
513
dka64/patches/binutils-2.45.1.patch
Normal file
513
dka64/patches/binutils-2.45.1.patch
Normal file
@@ -0,0 +1,513 @@
|
|||||||
|
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
|
||||||
|
index 68190dbaa27..3413eaca5b3 100644
|
||||||
|
--- a/bfd/elf-bfd.h
|
||||||
|
+++ b/bfd/elf-bfd.h
|
||||||
|
@@ -2020,6 +2020,14 @@ struct output_elf_obj_tdata
|
||||||
|
asection *sec;
|
||||||
|
} package_metadata;
|
||||||
|
|
||||||
|
+ /* Data for .nx-module-name. */
|
||||||
|
+ struct
|
||||||
|
+ {
|
||||||
|
+ bool (*after_write_object_contents) (bfd *);
|
||||||
|
+ const char *name;
|
||||||
|
+ asection *sec;
|
||||||
|
+ } nx_module_name;
|
||||||
|
+
|
||||||
|
/* Records the result of `get_program_header_size'. */
|
||||||
|
bfd_size_type program_header_size;
|
||||||
|
|
||||||
|
diff --git a/bfd/elf.c b/bfd/elf.c
|
||||||
|
index dfa04c9268d..12b76d3ffb8 100644
|
||||||
|
--- a/bfd/elf.c
|
||||||
|
+++ b/bfd/elf.c
|
||||||
|
@@ -7223,6 +7223,14 @@ _bfd_elf_write_object_contents (bfd *abfd)
|
||||||
|
if (!bed->s->write_shdrs_and_ehdr (abfd))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
+ /* Write out the NX module name. */
|
||||||
|
+ if (t->o->nx_module_name.after_write_object_contents != NULL)
|
||||||
|
+ {
|
||||||
|
+ failed = !(*t->o->nx_module_name.after_write_object_contents) (abfd);
|
||||||
|
+ if (failed)
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
|
||||||
|
if (t->o->build_id.after_write_object_contents != NULL
|
||||||
|
&& !(*t->o->build_id.after_write_object_contents) (abfd))
|
||||||
|
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
|
||||||
|
index e86f0280c2a..debb627a00f 100644
|
||||||
|
--- a/bfd/elfnn-aarch64.c
|
||||||
|
+++ b/bfd/elfnn-aarch64.c
|
||||||
|
@@ -2444,6 +2444,12 @@ enum elf_aarch64_stub_type
|
||||||
|
aarch64_stub_erratum_843419_veneer,
|
||||||
|
};
|
||||||
|
|
||||||
|
+/* Is an undefined weak symbol resolved to 0 ? */
|
||||||
|
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
|
||||||
|
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
|
||||||
|
+ && bfd_link_executable (INFO) \
|
||||||
|
+ && !(INFO)->dynamic_undefined_weak)
|
||||||
|
+
|
||||||
|
struct elf_aarch64_stub_hash_entry
|
||||||
|
{
|
||||||
|
/* Base hash table entry structure. */
|
||||||
|
@@ -6986,11 +6992,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
|
||||||
|
Elf_Internal_Sym *sym;
|
||||||
|
asection *sec;
|
||||||
|
struct elf_link_hash_entry *h;
|
||||||
|
+ struct elf_aarch64_link_hash_entry *eh;
|
||||||
|
bfd_vma relocation;
|
||||||
|
bfd_reloc_status_type r;
|
||||||
|
arelent bfd_reloc;
|
||||||
|
char sym_type;
|
||||||
|
bool unresolved_reloc = false;
|
||||||
|
+ bool resolved_to_zero = false;
|
||||||
|
char *error_message = NULL;
|
||||||
|
|
||||||
|
r_symndx = ELFNN_R_SYM (rel->r_info);
|
||||||
|
@@ -7130,6 +7138,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
|
||||||
|
h, &unresolved_reloc,
|
||||||
|
save_addend, &addend, sym);
|
||||||
|
|
||||||
|
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
||||||
|
+ resolved_to_zero = (eh != NULL
|
||||||
|
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
|
||||||
|
+
|
||||||
|
switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type))
|
||||||
|
{
|
||||||
|
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
|
||||||
|
@@ -7153,7 +7165,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
|
||||||
|
need_relocs =
|
||||||
|
(!bfd_link_executable (info) || indx != 0) &&
|
||||||
|
(h == NULL
|
||||||
|
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak);
|
||||||
|
|
||||||
|
BFD_ASSERT (globals->root.srelgot != NULL);
|
||||||
|
@@ -7248,7 +7260,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
|
||||||
|
need_relocs =
|
||||||
|
(!bfd_link_executable (info) || indx != 0) &&
|
||||||
|
(h == NULL
|
||||||
|
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak);
|
||||||
|
|
||||||
|
BFD_ASSERT (globals->root.srelgot != NULL);
|
||||||
|
@@ -7297,7 +7309,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
|
||||||
|
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
|
||||||
|
|
||||||
|
need_relocs = (h == NULL
|
||||||
|
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak);
|
||||||
|
|
||||||
|
BFD_ASSERT (globals->root.srelgot != NULL);
|
||||||
|
@@ -7623,6 +7635,23 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Remove undefined weak symbol from the dynamic symbol table if it
|
||||||
|
+ is resolved to 0. */
|
||||||
|
+
|
||||||
|
+static bool
|
||||||
|
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
|
||||||
|
+ struct elf_link_hash_entry *h)
|
||||||
|
+{
|
||||||
|
+ if (h->dynindx != -1
|
||||||
|
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_aarch64_hash_entry (h)))
|
||||||
|
+ {
|
||||||
|
+ h->dynindx = -1;
|
||||||
|
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
|
||||||
|
+ h->dynstr_index);
|
||||||
|
+ }
|
||||||
|
+ return true;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Adjust a symbol defined by a dynamic object and referenced by a
|
||||||
|
regular object. The current definition is in some section of the
|
||||||
|
dynamic object, but we're not including those sections. We have to
|
||||||
|
@@ -8728,6 +8757,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
struct elf_aarch64_link_hash_table *htab;
|
||||||
|
struct elf_aarch64_link_hash_entry *eh;
|
||||||
|
struct elf_dyn_relocs *p;
|
||||||
|
+ bool resolved_to_zero;
|
||||||
|
|
||||||
|
/* An example of a bfd_link_hash_indirect symbol is versioned
|
||||||
|
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
|
||||||
|
@@ -8747,6 +8777,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
info = (struct bfd_link_info *) inf;
|
||||||
|
htab = elf_aarch64_hash_table (info);
|
||||||
|
|
||||||
|
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
||||||
|
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
|
||||||
|
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
|
||||||
|
+
|
||||||
|
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
|
||||||
|
here if it is defined and referenced in a non-shared object. */
|
||||||
|
if (h->type == STT_GNU_IFUNC
|
||||||
|
@@ -8756,7 +8790,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
{
|
||||||
|
/* Make sure this symbol is output as a dynamic symbol.
|
||||||
|
Undefined weak syms won't yet be marked as dynamic. */
|
||||||
|
- if (h->dynindx == -1 && !h->forced_local
|
||||||
|
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
|
||||||
|
&& h->root.type == bfd_link_hash_undefweak)
|
||||||
|
{
|
||||||
|
if (!bfd_elf_link_record_dynamic_symbol (info, h))
|
||||||
|
@@ -8790,6 +8824,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
of relaxing into these from the large model PLT entries. */
|
||||||
|
s->size += htab->plt_entry_size;
|
||||||
|
|
||||||
|
+ /* There should be no PLT relocations against resolved undefined
|
||||||
|
+ weak symbols in the executable. */
|
||||||
|
+ if (!resolved_to_zero)
|
||||||
|
+ {
|
||||||
|
+
|
||||||
|
/* We also need to make an entry in the .got.plt section, which
|
||||||
|
will be placed in the .got section by the linker script. */
|
||||||
|
htab->root.sgotplt->size += GOT_ENTRY_SIZE;
|
||||||
|
@@ -8818,6 +8857,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
htab->variant_pcs = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
h->plt.offset = (bfd_vma) - 1;
|
||||||
|
@@ -8830,9 +8870,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
h->needs_plt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- eh = (struct elf_aarch64_link_hash_entry *) h;
|
||||||
|
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
|
||||||
|
-
|
||||||
|
if (h->got.refcount > 0)
|
||||||
|
{
|
||||||
|
bool dyn;
|
||||||
|
@@ -8844,7 +8881,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
|
||||||
|
/* Make sure this symbol is output as a dynamic symbol.
|
||||||
|
Undefined weak syms won't yet be marked as dynamic. */
|
||||||
|
- if (dyn && h->dynindx == -1 && !h->forced_local
|
||||||
|
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
|
||||||
|
&& h->root.type == bfd_link_hash_undefweak)
|
||||||
|
{
|
||||||
|
if (!bfd_elf_link_record_dynamic_symbol (info, h))
|
||||||
|
@@ -8858,7 +8895,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
{
|
||||||
|
h->got.offset = htab->root.sgot->size;
|
||||||
|
htab->root.sgot->size += GOT_ENTRY_SIZE;
|
||||||
|
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak)
|
||||||
|
&& (bfd_link_pic (info)
|
||||||
|
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
|
||||||
|
@@ -8894,7 +8931,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
}
|
||||||
|
|
||||||
|
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
||||||
|
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak)
|
||||||
|
&& (!bfd_link_executable (info)
|
||||||
|
|| indx != 0
|
||||||
|
@@ -8976,7 +9013,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
visibility. */
|
||||||
|
if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
|
||||||
|
{
|
||||||
|
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
|
||||||
|
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero
|
||||||
|
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
||||||
|
h->dyn_relocs = NULL;
|
||||||
|
|
||||||
|
@@ -8996,7 +9033,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
symbols which turn out to need copy relocs or are not
|
||||||
|
dynamic. */
|
||||||
|
|
||||||
|
- if (!h->non_got_ref
|
||||||
|
+ if (!(h->non_got_ref
|
||||||
|
+ || (h->root.type == bfd_link_hash_undefweak
|
||||||
|
+ && !resolved_to_zero))
|
||||||
|
&& ((h->def_dynamic
|
||||||
|
&& !h->def_regular)
|
||||||
|
|| (htab->root.dynamic_sections_created
|
||||||
|
@@ -9007,6 +9046,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
Undefined weak syms won't yet be marked as dynamic. */
|
||||||
|
if (h->dynindx == -1
|
||||||
|
&& !h->forced_local
|
||||||
|
+ && !resolved_to_zero
|
||||||
|
&& h->root.type == bfd_link_hash_undefweak
|
||||||
|
&& !bfd_elf_link_record_dynamic_symbol (info, h))
|
||||||
|
return false;
|
||||||
|
@@ -9978,8 +10018,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
|
||||||
|
Elf_Internal_Sym *sym)
|
||||||
|
{
|
||||||
|
struct elf_aarch64_link_hash_table *htab;
|
||||||
|
+ struct elf_aarch64_link_hash_entry *eh;
|
||||||
|
+ bool local_undefweak;
|
||||||
|
htab = elf_aarch64_hash_table (info);
|
||||||
|
|
||||||
|
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
||||||
|
+
|
||||||
|
+ /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
|
||||||
|
+ resolved undefined weak symbols in executable so that their
|
||||||
|
+ references have value 0 at run-time. */
|
||||||
|
+ local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
|
||||||
|
+
|
||||||
|
if (h->plt.offset != (bfd_vma) - 1)
|
||||||
|
{
|
||||||
|
asection *plt, *gotplt, *relplt;
|
||||||
|
@@ -10014,7 +10063,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
|
||||||
|
abort ();
|
||||||
|
|
||||||
|
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. */
|
||||||
|
@@ -10036,7 +10085,8 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
|
||||||
|
&& elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
|
||||||
|
/* Undefined weak symbol in static PIE resolves to 0 without
|
||||||
|
any dynamic relocations. */
|
||||||
|
- && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
||||||
|
+ && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)
|
||||||
|
+ && !local_undefweak)
|
||||||
|
{
|
||||||
|
Elf_Internal_Rela rela;
|
||||||
|
bfd_byte *loc;
|
||||||
|
@@ -10704,6 +10754,9 @@ const struct elf_size_info elfNN_aarch64_size_info =
|
||||||
|
#define elf_backend_init_index_section \
|
||||||
|
_bfd_elf_init_2_index_sections
|
||||||
|
|
||||||
|
+#define elf_backend_fixup_symbol \
|
||||||
|
+ elfNN_aarch64_elf_fixup_symbol
|
||||||
|
+
|
||||||
|
#define elf_backend_finish_dynamic_sections \
|
||||||
|
elfNN_aarch64_finish_dynamic_sections
|
||||||
|
|
||||||
|
diff --git a/ld/emulparams/aarch64elf.sh b/ld/emulparams/aarch64elf.sh
|
||||||
|
index aa051c76a7a..073d3a47b65 100644
|
||||||
|
--- a/ld/emulparams/aarch64elf.sh
|
||||||
|
+++ b/ld/emulparams/aarch64elf.sh
|
||||||
|
@@ -1,4 +1,5 @@
|
||||||
|
source_sh ${srcdir}/emulparams/dt-relr.sh
|
||||||
|
+source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
|
||||||
|
|
||||||
|
ARCH=aarch64
|
||||||
|
MACHINE=
|
||||||
|
diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh
|
||||||
|
index 0565b7a066c..64821b1fc31 100644
|
||||||
|
--- a/ld/emulparams/aarch64elf32.sh
|
||||||
|
+++ b/ld/emulparams/aarch64elf32.sh
|
||||||
|
@@ -1,4 +1,5 @@
|
||||||
|
source_sh ${srcdir}/emulparams/dt-relr.sh
|
||||||
|
+source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
|
||||||
|
|
||||||
|
ARCH="aarch64:ilp32"
|
||||||
|
MACHINE=
|
||||||
|
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
|
||||||
|
index 91d58d8fe5a..e1ac4a6b139 100644
|
||||||
|
--- a/ld/emultempl/aarch64elf.em
|
||||||
|
+++ b/ld/emultempl/aarch64elf.em
|
||||||
|
@@ -489,7 +489,7 @@ PARSE_AND_LIST_LONGOPTS='
|
||||||
|
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
|
||||||
|
'
|
||||||
|
|
||||||
|
-PARSE_AND_LIST_OPTIONS='
|
||||||
|
+PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}'
|
||||||
|
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
|
||||||
|
" enum sizes\n"));
|
||||||
|
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n"
|
||||||
|
diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em
|
||||||
|
index 431205fe644..ce288649513 100644
|
||||||
|
--- a/ld/emultempl/elf.em
|
||||||
|
+++ b/ld/emultempl/elf.em
|
||||||
|
@@ -814,6 +814,7 @@ EOF
|
||||||
|
fi
|
||||||
|
fragment <<EOF
|
||||||
|
{"build-id", optional_argument, NULL, OPTION_BUILD_ID},
|
||||||
|
+ {"nx-module-name", optional_argument, NULL, OPTION_NX_MODULE_NAME},
|
||||||
|
{"package-metadata", optional_argument, NULL, OPTION_PACKAGE_METADATA},
|
||||||
|
{"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
|
||||||
|
{"rosegment", no_argument, NULL, OPTION_ROSEGMENT},
|
||||||
|
@@ -901,6 +902,18 @@ gld${EMULATION_NAME}_handle_option (int optc)
|
||||||
|
case OPTION_NO_ROSEGMENT:
|
||||||
|
link_info.one_rosegment = false;
|
||||||
|
break;
|
||||||
|
+
|
||||||
|
+ case OPTION_NX_MODULE_NAME:
|
||||||
|
+ if (ldelf_emit_nx_module_name != NULL)
|
||||||
|
+ {
|
||||||
|
+ free ((char *) ldelf_emit_nx_module_name);
|
||||||
|
+ ldelf_emit_nx_module_name = NULL;
|
||||||
|
+ }
|
||||||
|
+ if (optarg == NULL)
|
||||||
|
+ optarg = "";
|
||||||
|
+ ldelf_emit_nx_module_name = xstrdup (optarg);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
|
||||||
|
diff --git a/ld/ldelf.c b/ld/ldelf.c
|
||||||
|
index f4f27fc3873..4028cbabdc7 100644
|
||||||
|
--- a/ld/ldelf.c
|
||||||
|
+++ b/ld/ldelf.c
|
||||||
|
@@ -55,6 +55,9 @@ const char *ldelf_emit_note_gnu_build_id;
|
||||||
|
/* Content of .note.package section. */
|
||||||
|
const char *ldelf_emit_note_fdo_package_metadata;
|
||||||
|
|
||||||
|
+/* NX module name. */
|
||||||
|
+const char *ldelf_emit_nx_module_name;
|
||||||
|
+
|
||||||
|
/* These variables are required to pass information back and forth
|
||||||
|
between after_open and check_needed and stat_needed and vercheck. */
|
||||||
|
|
||||||
|
@@ -1213,8 +1216,93 @@ ldelf_handle_dt_needed (struct elf_link_hash_table *htab,
|
||||||
|
*save_input_bfd_tail = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* This is called before calling plugin 'all symbols read' hook. */
|
||||||
|
+static bool
|
||||||
|
+write_nx_module_name (bfd *abfd)
|
||||||
|
+{
|
||||||
|
+ struct elf_obj_tdata *t = elf_tdata (abfd);
|
||||||
|
+ const char *name;
|
||||||
|
+ asection *asec;
|
||||||
|
+ Elf_Internal_Shdr *i_shdr;
|
||||||
|
+ unsigned char *contents;
|
||||||
|
+ bfd_size_type size;
|
||||||
|
+ file_ptr position;
|
||||||
|
+
|
||||||
|
+ name = t->o->nx_module_name.name;
|
||||||
|
+ asec = t->o->nx_module_name.sec;
|
||||||
|
+ if (bfd_is_abs_section (asec->output_section))
|
||||||
|
+ {
|
||||||
|
+ einfo (_("%P: warning: .nx-module-name section discarded,"
|
||||||
|
+ " --build-id ignored\n"));
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+ i_shdr = &elf_section_data (asec->output_section)->this_hdr;
|
||||||
|
+
|
||||||
|
+ if (i_shdr->contents == NULL)
|
||||||
|
+ {
|
||||||
|
+ if (asec->contents == NULL)
|
||||||
|
+ asec->contents = (unsigned char *) xmalloc (asec->size);
|
||||||
|
+ contents = asec->contents;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ contents = i_shdr->contents + asec->output_offset;
|
||||||
|
+
|
||||||
|
+ size = asec->size;
|
||||||
|
+ bfd_h_put_32 (abfd, 0, &contents[0]);
|
||||||
|
+ bfd_h_put_32 (abfd, size - 9, &contents[4]);
|
||||||
|
+ memcpy (&contents[8], name, size - 9);
|
||||||
|
+ contents[size - 1] = 0; /* ensure null termination for AMS */
|
||||||
|
+
|
||||||
|
+ position = i_shdr->sh_offset + asec->output_offset;
|
||||||
|
+
|
||||||
|
+ return (bfd_seek (abfd, position, SEEK_SET) == 0
|
||||||
|
+ && bfd_write (contents, size, abfd) == size);
|
||||||
|
+}
|
||||||
|
|
||||||
|
+/* Make .nx-module-name section, and set up elf_tdata->nx_module_name. */
|
||||||
|
+
|
||||||
|
+static bool
|
||||||
|
+setup_nx_module_name (bfd *ibfd, bfd *obfd)
|
||||||
|
+{
|
||||||
|
+ asection *s;
|
||||||
|
+ bfd_size_type size;
|
||||||
|
+ flagword flags;
|
||||||
|
+
|
||||||
|
+ if (ldelf_emit_nx_module_name[0] == '\0')
|
||||||
|
+ {
|
||||||
|
+ /* Extract the basename of the output bfd and use it as the module name. */
|
||||||
|
+ char *dot_pos;
|
||||||
|
+ free ((char *) ldelf_emit_nx_module_name);
|
||||||
|
+ ldelf_emit_nx_module_name = (char *) lbasename (bfd_get_filename (obfd));
|
||||||
|
+ ldelf_emit_nx_module_name = xstrdup (ldelf_emit_nx_module_name);
|
||||||
|
+ dot_pos = strrchr (ldelf_emit_nx_module_name, '.');
|
||||||
|
+ if (dot_pos != NULL)
|
||||||
|
+ {
|
||||||
|
+ /* Remove extension. */
|
||||||
|
+ *dot_pos = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ size = 8 + strlen(ldelf_emit_nx_module_name) + 1; /* extra null terminator for AMS */
|
||||||
|
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY
|
||||||
|
+ | SEC_LINKER_CREATED | SEC_READONLY | SEC_DATA);
|
||||||
|
+ s = bfd_make_section_with_flags (ibfd, ".nx-module-name", flags);
|
||||||
|
+ if (s != NULL && bfd_set_section_alignment (s, 4))
|
||||||
|
+ {
|
||||||
|
+ struct elf_obj_tdata *t = elf_tdata (link_info.output_bfd);
|
||||||
|
+ t->o->nx_module_name.after_write_object_contents = &write_nx_module_name;
|
||||||
|
+ t->o->nx_module_name.name = ldelf_emit_nx_module_name;
|
||||||
|
+ t->o->nx_module_name.sec = s;
|
||||||
|
+ elf_section_type (s) = SHT_PROGBITS;
|
||||||
|
+ s->size = size;
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ einfo (_("%P: warning: cannot create .nx-module-name section,"
|
||||||
|
+ " --nx-module-name ignored\n"));
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* This is called before calling plugin 'all symbols read' hook. */
|
||||||
|
void
|
||||||
|
ldelf_before_plugin_all_symbols_read (int use_libpath, int native,
|
||||||
|
int is_linux, int is_freebsd,
|
||||||
|
@@ -1291,6 +1379,24 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (ldelf_emit_nx_module_name != NULL)
|
||||||
|
+ {
|
||||||
|
+ /* Find an ELF input. */
|
||||||
|
+ for (abfd = link_info.input_bfds;
|
||||||
|
+ abfd != (bfd *) NULL; abfd = abfd->link.next)
|
||||||
|
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
|
||||||
|
+ && bfd_count_sections (abfd) != 0
|
||||||
|
+ && !((lang_input_statement_type *) abfd->usrdata)->flags.just_syms)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ /* If there are no ELF input files do not try to create a .nx-module-name section. */
|
||||||
|
+ if (abfd == NULL || !setup_nx_module_name (abfd, link_info.output_bfd))
|
||||||
|
+ {
|
||||||
|
+ free ((char *) ldelf_emit_nx_module_name);
|
||||||
|
+ ldelf_emit_nx_module_name = NULL;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
|
||||||
|
|
||||||
|
/* Do not allow executable files to be used as inputs to the link. */
|
||||||
|
diff --git a/ld/ldelf.h b/ld/ldelf.h
|
||||||
|
index e8b7c8c7eb8..0b76923d834 100644
|
||||||
|
--- a/ld/ldelf.h
|
||||||
|
+++ b/ld/ldelf.h
|
||||||
|
@@ -20,6 +20,7 @@
|
||||||
|
|
||||||
|
extern const char *ldelf_emit_note_gnu_build_id;
|
||||||
|
extern const char *ldelf_emit_note_fdo_package_metadata;
|
||||||
|
+extern const char *ldelf_emit_nx_module_name;
|
||||||
|
|
||||||
|
extern void ldelf_finish (void);
|
||||||
|
extern void ldelf_after_parse (void);
|
||||||
|
diff --git a/ld/ldlex.h b/ld/ldlex.h
|
||||||
|
index c8d61478c60..a5bb71b1dc5 100644
|
||||||
|
--- a/ld/ldlex.h
|
||||||
|
+++ b/ld/ldlex.h
|
||||||
|
@@ -188,6 +188,7 @@ enum option_values
|
||||||
|
/* Used by emultempl/elf.em, emultempl/pe.em and emultempl/pep.em. */
|
||||||
|
OPTION_BUILD_ID,
|
||||||
|
OPTION_EXCLUDE_LIBS,
|
||||||
|
+ OPTION_NX_MODULE_NAME,
|
||||||
|
/* Used by emulparams/elf32mcore.sh, emultempl/beos.em, emultempl/pe.em
|
||||||
|
and emultempl/pep.em. */
|
||||||
|
OPTION_BASE_FILE,
|
||||||
362
dka64/patches/gcc-15.2.0.patch
Normal file
362
dka64/patches/gcc-15.2.0.patch
Normal file
@@ -0,0 +1,362 @@
|
|||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
index 40b50dc969e..debd0f3d3b2 100644
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -1192,7 +1192,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
|
||||||
|
tmake_file="${tmake_file} aarch64/t-aarch64"
|
||||||
|
case $target in
|
||||||
|
aarch64-*-elf*)
|
||||||
|
+ default_use_cxa_atexit=yes
|
||||||
|
use_gcc_stdint=wrap
|
||||||
|
+ tm_file="${tm_file} devkitpro.h"
|
||||||
|
+ tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
|
||||||
|
+ extra_options="${extra_options} devkitpro.opt"
|
||||||
|
+ case ${enable_threads} in
|
||||||
|
+ "" | yes | posix) thread_file='posix' ;;
|
||||||
|
+ esac
|
||||||
|
;;
|
||||||
|
aarch64-*-fuchsia*)
|
||||||
|
tm_file="${tm_file} fuchsia.h"
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
|
||||||
|
index 15cf1eb0389..aba0e9bbff9 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64-elf-raw.h
|
||||||
|
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
|
||||||
|
@@ -22,6 +22,7 @@
|
||||||
|
#ifndef GCC_AARCH64_ELF_RAW_H
|
||||||
|
#define GCC_AARCH64_ELF_RAW_H
|
||||||
|
|
||||||
|
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
|
||||||
|
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
|
||||||
|
#define ENDFILE_SPEC \
|
||||||
|
" crtend%O%s crtn%O%s " \
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h
|
||||||
|
index a6ca5cf016b..90470fd6c44 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64-opts.h
|
||||||
|
+++ b/gcc/config/aarch64/aarch64-opts.h
|
||||||
|
@@ -91,7 +91,8 @@ enum aarch64_tp_reg {
|
||||||
|
AARCH64_TPIDR_EL1 = 1,
|
||||||
|
AARCH64_TPIDR_EL2 = 2,
|
||||||
|
AARCH64_TPIDR_EL3 = 3,
|
||||||
|
- AARCH64_TPIDRRO_EL0 = 4
|
||||||
|
+ AARCH64_TPIDRRO_EL0 = 4,
|
||||||
|
+ AARCH64_TP_SOFT = 5
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SVE vector register sizes. */
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
|
||||||
|
index 433ec975d7e..d4c3835a15a 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64.cc
|
||||||
|
+++ b/gcc/config/aarch64/aarch64.cc
|
||||||
|
@@ -21378,8 +21378,24 @@ aarch64_load_tp (rtx target)
|
||||||
|
|| !register_operand (target, Pmode))
|
||||||
|
target = gen_reg_rtx (Pmode);
|
||||||
|
|
||||||
|
- /* Can return in any reg. */
|
||||||
|
- emit_insn (gen_aarch64_load_tp_hard (target));
|
||||||
|
+ if (TARGET_HARD_TP)
|
||||||
|
+ {
|
||||||
|
+ /* Can return in any reg. */
|
||||||
|
+ emit_insn (gen_aarch64_load_tp_hard (target));
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ /* Always returned in r0. Immediately copy the result into a pseudo,
|
||||||
|
+ otherwise other uses of r0 (e.g. setting up function arguments) may
|
||||||
|
+ clobber the value. */
|
||||||
|
+
|
||||||
|
+ rtx tmp;
|
||||||
|
+
|
||||||
|
+ emit_insn (gen_aarch64_load_tp_soft ());
|
||||||
|
+
|
||||||
|
+ tmp = gen_rtx_REG (DImode, R0_REGNUM);
|
||||||
|
+ emit_move_insn (target, tmp);
|
||||||
|
+ }
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
|
||||||
|
index e8bd8c73c12..4fc0d8f4ded 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64.h
|
||||||
|
+++ b/gcc/config/aarch64/aarch64.h
|
||||||
|
@@ -1436,6 +1436,10 @@ typedef struct
|
||||||
|
/* Check TLS Descriptors mechanism is selected. */
|
||||||
|
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
|
||||||
|
|
||||||
|
+/* Check selected thread pointer access sequence to use. */
|
||||||
|
+#define TARGET_HARD_TP (aarch64_tpidr_reg != AARCH64_TP_SOFT)
|
||||||
|
+#define TARGET_SOFT_TP (aarch64_tpidr_reg == AARCH64_TP_SOFT)
|
||||||
|
+
|
||||||
|
extern enum aarch64_code_model aarch64_cmodel;
|
||||||
|
|
||||||
|
/* When using the tiny addressing model conditional and unconditional branches
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
|
||||||
|
index 031e621c98a..0fcf0aa703f 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64.md
|
||||||
|
+++ b/gcc/config/aarch64/aarch64.md
|
||||||
|
@@ -7702,11 +7702,22 @@
|
||||||
|
(define_insn "aarch64_load_tp_hard"
|
||||||
|
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||||
|
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
|
||||||
|
- ""
|
||||||
|
+ "TARGET_HARD_TP"
|
||||||
|
"* return aarch64_output_load_tp (operands[0]);"
|
||||||
|
[(set_attr "type" "mrs")]
|
||||||
|
)
|
||||||
|
|
||||||
|
+(define_insn "aarch64_load_tp_soft"
|
||||||
|
+ [(set (reg:DI 0) (unspec:DI [(const_int 0)] UNSPEC_TLS))
|
||||||
|
+ (clobber (reg:DI IP0_REGNUM))
|
||||||
|
+ (clobber (reg:DI IP1_REGNUM))
|
||||||
|
+ (clobber (reg:DI LR_REGNUM))
|
||||||
|
+ (clobber (reg:CC CC_REGNUM))]
|
||||||
|
+ "TARGET_SOFT_TP"
|
||||||
|
+ "bl\\t__aarch64_read_tp\\t// aarch64_load_tp_soft"
|
||||||
|
+ [(set_attr "type" "branch")]
|
||||||
|
+)
|
||||||
|
+
|
||||||
|
;; The TLS ABI specifically requires that the compiler does not schedule
|
||||||
|
;; instructions in the TLS stubs, in order to enable linker relaxation.
|
||||||
|
;; Therefore we treat the stubs as an atomic sequence.
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
|
||||||
|
index f32d56d4ffa..7cf8d3ba3d4 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64.opt
|
||||||
|
+++ b/gcc/config/aarch64/aarch64.opt
|
||||||
|
@@ -137,6 +137,9 @@ Enum(tp_reg) String(tpidr_el3) Value(AARCH64_TPIDR_EL3)
|
||||||
|
EnumValue
|
||||||
|
Enum(tp_reg) String(tpidrro_el0) Value(AARCH64_TPIDRRO_EL0)
|
||||||
|
|
||||||
|
+EnumValue
|
||||||
|
+Enum(tp_reg) String(soft) Value(AARCH64_TP_SOFT)
|
||||||
|
+
|
||||||
|
mtp=
|
||||||
|
Target RejectNegative Joined Enum(tp_reg) Var(aarch64_tpidr_reg) Init(AARCH64_TPIDR_EL0) Save
|
||||||
|
Specify the thread pointer register.
|
||||||
|
@@ -338,7 +341,7 @@ TargetVariable
|
||||||
|
long aarch64_stack_protector_guard_offset = 0
|
||||||
|
|
||||||
|
moutline-atomics
|
||||||
|
-Target Var(aarch64_flag_outline_atomics) Init(2) Save
|
||||||
|
+Target Var(aarch64_flag_outline_atomics) Save
|
||||||
|
Generate local calls to out-of-line atomic operations.
|
||||||
|
|
||||||
|
-param=aarch64-vect-compare-costs=
|
||||||
|
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
|
||||||
|
index 59571948479..f50c37d8b3c 100644
|
||||||
|
--- a/gcc/config/aarch64/t-aarch64
|
||||||
|
+++ b/gcc/config/aarch64/t-aarch64
|
||||||
|
@@ -198,8 +198,10 @@ aarch64-ldp-fusion.o: $(srcdir)/config/aarch64/aarch64-ldp-fusion.cc \
|
||||||
|
$(srcdir)/config/aarch64/aarch64-ldp-fusion.cc
|
||||||
|
|
||||||
|
comma=,
|
||||||
|
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
|
||||||
|
-MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG))
|
||||||
|
+MULTILIB_OPTIONS = mcmodel=large fPIC
|
||||||
|
+MULTILIB_DIRNAMES = large pic
|
||||||
|
+MULTILIB_REQUIRED = mcmodel=large fPIC
|
||||||
|
+MULTILIB_MATCHES = fPIC=fpic fPIC=fpie fPIC=fPIE
|
||||||
|
|
||||||
|
insn-conditions.md: s-check-sve-md
|
||||||
|
s-check-sve-md: $(srcdir)/config/aarch64/check-sve-md.awk \
|
||||||
|
diff --git a/gcc/config/devkitpro.h b/gcc/config/devkitpro.h
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..a25459e4352
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.h
|
||||||
|
@@ -0,0 +1,32 @@
|
||||||
|
+/* Definitions for devkitPro toolchains.
|
||||||
|
+ Copyright (C) 2016-2018 Free Software Foundation, Inc.
|
||||||
|
+
|
||||||
|
+ This file is part of GCC.
|
||||||
|
+
|
||||||
|
+ GCC is free software; you can redistribute it and/or modify it
|
||||||
|
+ under the terms of the GNU General Public License as published
|
||||||
|
+ by the Free Software Foundation; either version 3, or (at your
|
||||||
|
+ option) any later version.
|
||||||
|
+
|
||||||
|
+ GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
+ License for more details.
|
||||||
|
+
|
||||||
|
+ Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
+ permissions described in the GCC Runtime Library Exception, version
|
||||||
|
+ 3.1, as published by the Free Software Foundation.
|
||||||
|
+
|
||||||
|
+ You should have received a copy of the GNU General Public License and
|
||||||
|
+ a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
+ <http://www.gnu.org/licenses/>. */
|
||||||
|
+
|
||||||
|
+#undef TARGET_OS_CPP_BUILTINS
|
||||||
|
+#define TARGET_OS_CPP_BUILTINS() \
|
||||||
|
+ do { \
|
||||||
|
+ builtin_define ("__DEVKITA64__"); \
|
||||||
|
+ builtin_define ("__DEVKITPRO__"); \
|
||||||
|
+ } while (0)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
diff --git a/gcc/config/devkitpro.opt b/gcc/config/devkitpro.opt
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..9acbbf9d27c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.opt
|
||||||
|
@@ -0,0 +1,29 @@
|
||||||
|
+; Options for devkitPro toolchains.
|
||||||
|
+
|
||||||
|
+; Copyright (C) 2011-2018 Free Software Foundation, Inc.
|
||||||
|
+;
|
||||||
|
+; This file is part of GCC.
|
||||||
|
+;
|
||||||
|
+; GCC is free software; you can redistribute it and/or modify it under
|
||||||
|
+; the terms of the GNU General Public License as published by the Free
|
||||||
|
+; Software Foundation; either version 3, or (at your option) any later
|
||||||
|
+; version.
|
||||||
|
+;
|
||||||
|
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
+; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
+; for more details.
|
||||||
|
+;
|
||||||
|
+; You should have received a copy of the GNU General Public License
|
||||||
|
+; along with GCC; see the file COPYING3. If not see
|
||||||
|
+; <http://www.gnu.org/licenses/>.
|
||||||
|
+
|
||||||
|
+; See the GCC internals manual (options.texi) for a description of
|
||||||
|
+; this file's format.
|
||||||
|
+
|
||||||
|
+; Please try to keep this file in ASCII collating order.
|
||||||
|
+
|
||||||
|
+pthread
|
||||||
|
+Driver
|
||||||
|
+
|
||||||
|
+; This comment is to ensure we retain the blank line above.
|
||||||
|
diff --git a/gcc/config/devkitpro.opt.urls b/gcc/config/devkitpro.opt.urls
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..ab7b466aa71
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.opt.urls
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+; Autogenerated by regenerate-opt-urls.py from gcc/config/devkitpro.opt and generated HTML
|
||||||
|
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
|
||||||
|
index e083f49f3da..1b81e7e88ce 100644
|
||||||
|
--- a/gcc/config/i386/host-mingw32.cc
|
||||||
|
+++ b/gcc/config/i386/host-mingw32.cc
|
||||||
|
@@ -94,6 +94,10 @@ mingw32_gt_pch_get_address (size_t size, int)
|
||||||
|
If we allocate at bottom we need to reserve the address as early
|
||||||
|
as possible and at the same point in each invocation. */
|
||||||
|
|
||||||
|
+#if __MINGW64__
|
||||||
|
+ size = UINT64_C(64 * 1024 * 1024 * 1024);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
res = VirtualAlloc (NULL, size,
|
||||||
|
MEM_RESERVE | MEM_TOP_DOWN,
|
||||||
|
PAGE_NOACCESS);
|
||||||
|
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
|
||||||
|
index 4fd87f2c4a1..6af06f7b032 100644
|
||||||
|
--- a/gcc/gcc.cc
|
||||||
|
+++ b/gcc/gcc.cc
|
||||||
|
@@ -888,6 +888,11 @@ proper position among the other output files. */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifndef LIBGLOSS_SPEC
|
||||||
|
+# define LIBGLOSS_SPEC "-lsysbase"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
|
||||||
|
#ifndef STARTFILE_SPEC
|
||||||
|
#define STARTFILE_SPEC \
|
||||||
|
@@ -1215,6 +1220,7 @@ static const char *link_spec = LINK_SPEC;
|
||||||
|
static const char *lib_spec = LIB_SPEC;
|
||||||
|
static const char *link_gomp_spec = "";
|
||||||
|
static const char *libgcc_spec = LIBGCC_SPEC;
|
||||||
|
+static const char *libgloss_spec = LIBGLOSS_SPEC;
|
||||||
|
static const char *endfile_spec = ENDFILE_SPEC;
|
||||||
|
static const char *startfile_spec = STARTFILE_SPEC;
|
||||||
|
static const char *linker_name_spec = LINKER_NAME;
|
||||||
|
@@ -1727,6 +1733,7 @@ static struct spec_list static_specs[] =
|
||||||
|
INIT_STATIC_SPEC ("lib", &lib_spec),
|
||||||
|
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
|
||||||
|
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
|
||||||
|
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
|
||||||
|
INIT_STATIC_SPEC ("startfile", &startfile_spec),
|
||||||
|
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
|
||||||
|
INIT_STATIC_SPEC ("version", &compiler_version),
|
||||||
|
diff --git a/libcc1/configure b/libcc1/configure
|
||||||
|
index ea689a353c8..98f9d9b21b7 100755
|
||||||
|
--- a/libcc1/configure
|
||||||
|
+++ b/libcc1/configure
|
||||||
|
@@ -5119,7 +5119,7 @@ else
|
||||||
|
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||||
|
# nm: unknown option "B" ignored
|
||||||
|
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
|
||||||
|
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
|
||||||
|
index b9767cd1eee..362689c9f0b 100644
|
||||||
|
--- a/libgcc/crtstuff.c
|
||||||
|
+++ b/libgcc/crtstuff.c
|
||||||
|
@@ -326,7 +326,7 @@ register_tm_clones (void)
|
||||||
|
|
||||||
|
#ifdef OBJECT_FORMAT_ELF
|
||||||
|
|
||||||
|
-#if DEFAULT_USE_CXA_ATEXIT
|
||||||
|
+#if 1 /* DEFAULT_USE_CXA_ATEXIT */
|
||||||
|
/* Declare the __dso_handle variable. It should have a unique value
|
||||||
|
in every shared-object; in a main program its value is zero. The
|
||||||
|
object should in any case be protected. This means the instance
|
||||||
|
diff --git a/libgcc/gthr.h b/libgcc/gthr.h
|
||||||
|
index 557417997f4..1269ece007f 100644
|
||||||
|
--- a/libgcc/gthr.h
|
||||||
|
+++ b/libgcc/gthr.h
|
||||||
|
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
/* The pe-coff weak support isn't fully compatible to ELF's weak.
|
||||||
|
For static libraries it might would work, but as we need to deal
|
||||||
|
with shared versions too, we disable it for mingw-targets. */
|
||||||
|
-#ifdef __MINGW32__
|
||||||
|
+#if defined(__MINGW32__) || defined(__DEVKITA64__)
|
||||||
|
#undef GTHREAD_USE_WEAK
|
||||||
|
#define GTHREAD_USE_WEAK 0
|
||||||
|
#endif
|
||||||
|
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
|
||||||
|
index 537774c2668..76da4f35b96 100644
|
||||||
|
--- a/libstdc++-v3/include/Makefile.am
|
||||||
|
+++ b/libstdc++-v3/include/Makefile.am
|
||||||
|
@@ -1436,6 +1436,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
|
||||||
|
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
|
||||||
|
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
|
||||||
|
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
|
||||||
|
+ -e 's/_GLIBCXX___DEVKITA64_GLIBCXX___/__DEVKITA64__/g' \
|
||||||
|
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
|
||||||
|
< $< > $@
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
|
||||||
|
index 7b96b2207f8..817de242772 100644
|
||||||
|
--- a/libstdc++-v3/include/Makefile.in
|
||||||
|
+++ b/libstdc++-v3/include/Makefile.in
|
||||||
|
@@ -1910,6 +1910,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
|
||||||
|
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
|
||||||
|
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
|
||||||
|
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
|
||||||
|
+ -e 's/_GLIBCXX___DEVKITA64_GLIBCXX___/__DEVKITA64__/g' \
|
||||||
|
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
|
||||||
|
< $< > $@
|
||||||
|
|
||||||
|
diff --git a/lto-plugin/configure b/lto-plugin/configure
|
||||||
|
index 28f5dd79cd7..a79f318a4d6 100755
|
||||||
|
--- a/lto-plugin/configure
|
||||||
|
+++ b/lto-plugin/configure
|
||||||
|
@@ -6469,7 +6469,7 @@ else
|
||||||
|
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||||
|
# nm: unknown option "B" ignored
|
||||||
|
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
|
||||||
|
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
14520
dka64/patches/newlib-4.5.0.20241231.patch
Normal file
14520
dka64/patches/newlib-4.5.0.20241231.patch
Normal file
File diff suppressed because one or more lines are too long
40
dka64/rules/base_rules
Normal file
40
dka64/rules/base_rules
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
include $(DEVKITPRO)/devkitA64/base_tools
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.a:
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
@echo $(notdir $@)
|
||||||
|
@rm -f $@
|
||||||
|
$(AR) -rc $@ $^
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.o: %.cpp
|
||||||
|
@echo $(notdir $<)
|
||||||
|
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.o: %.c
|
||||||
|
@echo $(notdir $<)
|
||||||
|
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.o: %.s
|
||||||
|
@echo $(notdir $<)
|
||||||
|
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.o: %.S
|
||||||
|
@echo $(notdir $<)
|
||||||
|
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# canned command sequence for binary data
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
define bin2o
|
||||||
|
bin2s $< | $(AS) -o $(@)
|
||||||
|
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' -e 's/[^A-Za-z0-9_]/_/g')`"_end[];" > `(echo $(<F) | tr . _)`.h
|
||||||
|
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' -e 's/[^A-Za-z0-9_]/_/g')`"[];" >> `(echo $(<F) | tr . _)`.h
|
||||||
|
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' -e 's/[^A-Za-z0-9_]/_/g')`_size";" >> `(echo $(<F) | tr . _)`.h
|
||||||
|
endef
|
||||||
|
|
||||||
@@ -1,31 +1,38 @@
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# change shell on Snow Leopard
|
# make sure we have bash on OSX
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
UNAME_S := $(shell uname -s)
|
UNAME_S := $(shell uname -s)
|
||||||
UNAME_R := $(shell uname -r)
|
UNAME_R := $(shell uname -r)
|
||||||
|
|
||||||
ifneq (,$(findstring Darwin,$(UNAME_S)))
|
ifneq (,$(findstring Darwin,$(UNAME_S)))
|
||||||
ifneq (,$(findstring 10.8.0,$(UNAME_R)))
|
|
||||||
export SHELL=/bin/bash
|
export SHELL=/bin/bash
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# path to tools
|
# path to tools
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export PATH := $(DEVKITARM)/bin:$(PATH)
|
DEVKITPATH=$(shell echo "$(DEVKITPRO)" | sed -e 's/^\([a-zA-Z]\):/\/\1/')
|
||||||
|
export PATH := $(DEVKITPATH)/tools/bin:$(DEVKITPATH)/devkitA64/bin:$(PATH)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# add portlibs path
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export PORTLIBS_PATH := $(DEVKITPATH)/portlibs
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# the prefix on the compiler executables
|
# the prefix on the compiler executables
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
PREFIX := arm-none-eabi-
|
PREFIX := aarch64-none-elf-
|
||||||
|
|
||||||
export CC := $(PREFIX)gcc
|
export CC := $(PREFIX)gcc
|
||||||
export CXX := $(PREFIX)g++
|
export CXX := $(PREFIX)g++
|
||||||
export AS := $(PREFIX)as
|
export AS := $(PREFIX)as
|
||||||
export AR := $(PREFIX)ar
|
export AR := $(PREFIX)gcc-ar
|
||||||
export OBJCOPY := $(PREFIX)objcopy
|
export OBJCOPY := $(PREFIX)objcopy
|
||||||
export STRIP := $(PREFIX)strip
|
export STRIP := $(PREFIX)strip
|
||||||
export NM := $(PREFIX)nm
|
export NM := $(PREFIX)gcc-nm
|
||||||
|
export RANLIB := $(PREFIX)gcc-ranlib
|
||||||
|
|
||||||
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
|
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
|
||||||
|
|
||||||
15
dka64/scripts/build-crtls.sh
Normal file
15
dka64/scripts/build-crtls.sh
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# set env variables
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export DEVKITPRO=$TOOLPATH
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Install the rules files
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
tar -xvf $SRCDIR/devkita64-rules-$DKA64_RULES_VER.tar.gz
|
||||||
|
cd devkita64-rules-$DKA64_RULES_VER
|
||||||
|
$MAKE install
|
||||||
147
dka64/scripts/build-gcc.sh
Executable file
147
dka64/scripts/build-gcc.sh
Executable file
@@ -0,0 +1,147 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install binutils
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
mkdir -p $target/binutils
|
||||||
|
cd $target/binutils
|
||||||
|
|
||||||
|
if [ ! -f configured-binutils ]
|
||||||
|
then
|
||||||
|
../../binutils-$BINUTILS_VER/configure \
|
||||||
|
--prefix=$prefix --target=$target --disable-nls --disable-werror \
|
||||||
|
--enable-lto --enable-plugins --enable-poison-system-directories \
|
||||||
|
$CROSS_PARAMS \
|
||||||
|
|| { echo "Error configuring binutils"; exit 1; }
|
||||||
|
touch configured-binutils
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f built-binutils ]
|
||||||
|
then
|
||||||
|
$MAKE || { echo "Error building binutils"; exit 1; }
|
||||||
|
touch built-binutils
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f installed-binutils ]
|
||||||
|
then
|
||||||
|
$MAKE install || { echo "Error installing binutils"; exit 1; }
|
||||||
|
touch installed-binutils
|
||||||
|
fi
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install just the c compiler
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
mkdir -p $target/gcc
|
||||||
|
cd $target/gcc
|
||||||
|
|
||||||
|
if [ ! -f configured-gcc ]
|
||||||
|
then
|
||||||
|
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
|
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
|
LDFLAGS_FOR_TARGET="" \
|
||||||
|
../../gcc-$GCC_VER/configure \
|
||||||
|
--enable-languages=c,c++,objc,lto \
|
||||||
|
--with-gnu-as --with-gnu-ld --with-gcc \
|
||||||
|
--with-march=armv8\
|
||||||
|
--enable-cxx-flags='-ffunction-sections' \
|
||||||
|
--disable-libstdcxx-verbose \
|
||||||
|
--enable-poison-system-directories \
|
||||||
|
--enable-multilib \
|
||||||
|
--enable-threads --disable-win32-registry --disable-nls --disable-debug\
|
||||||
|
--disable-libmudflap --disable-libssp --disable-libgomp \
|
||||||
|
--disable-libstdcxx-pch \
|
||||||
|
--enable-libstdcxx-time \
|
||||||
|
--enable-libstdcxx-filesystem-ts \
|
||||||
|
--target=$target \
|
||||||
|
--with-newlib=yes \
|
||||||
|
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
||||||
|
--prefix=$prefix \
|
||||||
|
--enable-lto \
|
||||||
|
--disable-tm-clone-registry \
|
||||||
|
--disable-__cxa_atexit \
|
||||||
|
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 29" \
|
||||||
|
$CROSS_PARAMS \
|
||||||
|
$CROSS_GCC_PARAMS \
|
||||||
|
$EXTRA_GCC_PARAMS \
|
||||||
|
|| { echo "Error configuring gcc"; exit 1; }
|
||||||
|
touch configured-gcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f built-gcc ]
|
||||||
|
then
|
||||||
|
$MAKE all-gcc || { echo "Error building gcc stage1"; exit 1; }
|
||||||
|
touch built-gcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f installed-gcc ]
|
||||||
|
then
|
||||||
|
$MAKE install-gcc || { echo "Error installing gcc"; exit 1; }
|
||||||
|
touch installed-gcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
unset CFLAGS
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
OLD_CC=$CC
|
||||||
|
OLDCXX=$CXX
|
||||||
|
unset CC
|
||||||
|
unset CXX
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install newlib
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
mkdir -p $target/newlib
|
||||||
|
cd $target/newlib
|
||||||
|
|
||||||
|
if [ ! -f configured-newlib ]
|
||||||
|
then
|
||||||
|
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
|
../../newlib-$NEWLIB_VER/configure \
|
||||||
|
--disable-newlib-supplied-syscalls \
|
||||||
|
--enable-newlib-mb \
|
||||||
|
--disable-newlib-wide-orient \
|
||||||
|
--target=$target \
|
||||||
|
--prefix=$prefix \
|
||||||
|
|| { echo "Error configuring newlib"; exit 1; }
|
||||||
|
touch configured-newlib
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f built-newlib ]
|
||||||
|
then
|
||||||
|
$MAKE || { echo "Error building newlib"; exit 1; }
|
||||||
|
touch built-newlib
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -f installed-newlib ]
|
||||||
|
then
|
||||||
|
$MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
|
||||||
|
touch installed-newlib
|
||||||
|
fi
|
||||||
|
|
||||||
|
export CC=$OLD_CC
|
||||||
|
export CXX=$OLD_CXX
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install the final compiler
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
cd $target/gcc
|
||||||
|
|
||||||
|
if [ ! -f built-stage2 ]
|
||||||
|
then
|
||||||
|
$MAKE all || { echo "Error building gcc stage2"; exit 1; }
|
||||||
|
touch built-stage2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f installed-stage2 ]
|
||||||
|
then
|
||||||
|
$MAKE install || { echo "Error installing gcc stage2"; exit 1; }
|
||||||
|
touch installed-stage2
|
||||||
|
fi
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
PHDRS
|
|
||||||
{
|
|
||||||
code PT_LOAD FLAGS(5) /* Read | Execute */;
|
|
||||||
rodata PT_LOAD FLAGS(4) /* Read */;
|
|
||||||
data PT_LOAD FLAGS(6) /* Read | Write */;
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* =========== CODE section =========== */
|
|
||||||
|
|
||||||
. = 0x100000;
|
|
||||||
__start__ = . ;
|
|
||||||
|
|
||||||
.text ALIGN(0x1000) :
|
|
||||||
{
|
|
||||||
/* .init */
|
|
||||||
KEEP( *(.crt0) )
|
|
||||||
KEEP( *(.init) )
|
|
||||||
. = ALIGN(4);
|
|
||||||
|
|
||||||
/* .text */
|
|
||||||
*(.text)
|
|
||||||
*(.text.*)
|
|
||||||
*(.glue_7)
|
|
||||||
*(.glue_7t)
|
|
||||||
*(.stub)
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.gnu.linkonce.t*)
|
|
||||||
. = ALIGN(4);
|
|
||||||
|
|
||||||
/* .fini */
|
|
||||||
KEEP( *(.fini) )
|
|
||||||
. = ALIGN(4);
|
|
||||||
} : code
|
|
||||||
|
|
||||||
/* =========== RODATA section =========== */
|
|
||||||
|
|
||||||
.rodata ALIGN(0x1000) :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4);
|
|
||||||
} : rodata
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } : rodata
|
|
||||||
__exidx_start = .;
|
|
||||||
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } : rodata
|
|
||||||
__exidx_end = .;
|
|
||||||
|
|
||||||
/* =========== DATA section =========== */
|
|
||||||
|
|
||||||
.data ALIGN(0x1000) :
|
|
||||||
{
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4);
|
|
||||||
} : data
|
|
||||||
|
|
||||||
.preinit_array ALIGN(4) :
|
|
||||||
{
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array))
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
} : data
|
|
||||||
|
|
||||||
.init_array ALIGN(4) :
|
|
||||||
{
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array))
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
} : data
|
|
||||||
|
|
||||||
.fini_array ALIGN(4) :
|
|
||||||
{
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
KEEP (*(.fini_array))
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
} : data
|
|
||||||
|
|
||||||
.ctors ALIGN(4) :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.ctors)) /* MUST be first -- GCC requires it */
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
} : data
|
|
||||||
|
|
||||||
.dtors ALIGN(4) :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
} : data
|
|
||||||
|
|
||||||
__bss_start__ = .;
|
|
||||||
.bss ALIGN(4) :
|
|
||||||
{
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4);
|
|
||||||
} : data
|
|
||||||
__bss_end__ = .;
|
|
||||||
|
|
||||||
__end__ = ABSOLUTE(.) ;
|
|
||||||
|
|
||||||
/* ==================
|
|
||||||
==== Metadata ====
|
|
||||||
================== */
|
|
||||||
|
|
||||||
/* Discard sections that difficult post-processing */
|
|
||||||
/DISCARD/ : { *(.group .comment .note) }
|
|
||||||
|
|
||||||
/* 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) }
|
|
||||||
|
|
||||||
/* 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) }
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T 3dsx.ld%s -d --emit-relocs --use-blx
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
3dsx_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ 3DS processor selection
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.cpu mpcore
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.section ".crt0"
|
|
||||||
.global _start, __service_ptr, __apt_appid, __heap_size, __linear_heap_size, __system_arglist, __system_runflags
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.align 2
|
|
||||||
.arm
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_start:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
b startup
|
|
||||||
.ascii "_prm"
|
|
||||||
__service_ptr:
|
|
||||||
.word 0 @ Pointer to service handle override list -- if non-NULL it is assumed that we have been launched from a homebrew launcher
|
|
||||||
__apt_appid:
|
|
||||||
.word 0x300 @ Program APPID
|
|
||||||
__heap_size:
|
|
||||||
.word 24*1024*1024 @ Default heap size (24 MiB)
|
|
||||||
__linear_heap_size:
|
|
||||||
.word 32*1024*1024 @ Default linear heap size (32 MiB)
|
|
||||||
__system_arglist:
|
|
||||||
.word 0 @ Pointer to argument list (argc (u32) followed by that many NULL terminated strings)
|
|
||||||
__system_runflags:
|
|
||||||
.word 0 @ Flags to signal runtime restrictions to ctrulib
|
|
||||||
startup:
|
|
||||||
@ Save return address
|
|
||||||
mov r4, lr
|
|
||||||
|
|
||||||
@ Clear the BSS section
|
|
||||||
ldr r0, =__bss_start__
|
|
||||||
ldr r1, =__bss_end__
|
|
||||||
sub r1, r1, r0
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
@ System initialization
|
|
||||||
mov r0, r4
|
|
||||||
bl initSystem
|
|
||||||
|
|
||||||
@ Set up argc/argv arguments for main()
|
|
||||||
ldr r0, =__system_argc
|
|
||||||
ldr r1, =__system_argv
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldr r1, [r1]
|
|
||||||
|
|
||||||
@ Jump to user code
|
|
||||||
ldr r3, =main
|
|
||||||
ldr lr, =__ctru_exit
|
|
||||||
bx r3
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Clear memory to 0x00 if length != 0
|
|
||||||
@ r0 = Start Address
|
|
||||||
@ r1 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ClearMem:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r2, #3 @ Round down to nearest word boundary
|
|
||||||
add r1, r1, r2 @ Shouldn't be needed
|
|
||||||
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
|
|
||||||
bxeq lr @ Quit if copy size is 0
|
|
||||||
|
|
||||||
mov r2, #0
|
|
||||||
ClrLoop:
|
|
||||||
stmia r0!, {r2}
|
|
||||||
subs r1, r1, #4
|
|
||||||
bne ClrLoop
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
include $(DEVKITARM)/base_rules
|
|
||||||
|
|
||||||
all:
|
|
||||||
$(CC) -x assembler-with-cpp -marm -c $(CRT)_crt0.s -o$(CRT)_crt0.o
|
|
||||||
$(CC) -x assembler-with-cpp -mthumb -c $(CRT)_crt0.s -o thumb/$(CRT)_crt0.o
|
|
||||||
@@ -1,190 +0,0 @@
|
|||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
MEMORY {
|
|
||||||
/* This base address is chosen to be a reserved instruction in THUMB mode,
|
|
||||||
and SWILT in ARM mode, with an impossible SWI value. This should allow
|
|
||||||
the patcher / linker to find all shifted addresses within each section.
|
|
||||||
Changed sections are: glue_7, got
|
|
||||||
*/
|
|
||||||
ddmem : ORIGIN = 0xBF800000, LENGTH = 32K
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
__text_start = . ;
|
|
||||||
KEEP (*(.init))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem = 0xff
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
|
||||||
{
|
|
||||||
*(.text.*)
|
|
||||||
*(.stub)
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.gnu.linkonce.t*)
|
|
||||||
__glue_start = ABSOLUTE(.);
|
|
||||||
*(.glue_7)
|
|
||||||
*(.glue_7t)
|
|
||||||
__glue_end = ABSOLUTE(.);
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem = 0xff
|
|
||||||
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem =0xff
|
|
||||||
|
|
||||||
__text_end = . ;
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem = 0xff
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ddmem
|
|
||||||
__exidx_start = .;
|
|
||||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ddmem
|
|
||||||
__exidx_end = .;
|
|
||||||
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
|
||||||
could instead move the label definition inside the section, but
|
|
||||||
the linker would then create the section even if it turns out to
|
|
||||||
be empty, which isn't pretty. */
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >ddmem = 0xff
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
.init_array : { KEEP (*(.init_array)) } >ddmem = 0xff
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
.fini_array : { KEEP (*(.fini_array)) } >ddmem = 0xff
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem = 0xff
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem = 0xff
|
|
||||||
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem = 0xff
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem = 0xff
|
|
||||||
.jcr : { KEEP (*(.jcr)) } >ddmem = 0
|
|
||||||
|
|
||||||
|
|
||||||
__got_start = . ;
|
|
||||||
.got :
|
|
||||||
{
|
|
||||||
*(.got.plt)
|
|
||||||
*(.got)
|
|
||||||
*(.rel.got)
|
|
||||||
} >ddmem = 0
|
|
||||||
__got_end = . ;
|
|
||||||
|
|
||||||
|
|
||||||
.data ALIGN(4) : {
|
|
||||||
__data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4);
|
|
||||||
__data_end = ABSOLUTE(.) ;
|
|
||||||
} >ddmem = 0xff
|
|
||||||
|
|
||||||
__data_end = . ;
|
|
||||||
|
|
||||||
.bss ALIGN(4) :
|
|
||||||
{
|
|
||||||
__bss_start = ABSOLUTE(.);
|
|
||||||
__bss_start__ = ABSOLUTE(.);
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ddmem
|
|
||||||
|
|
||||||
__bss_end = . ;
|
|
||||||
__bss_end__ = . ;
|
|
||||||
|
|
||||||
_end = . ;
|
|
||||||
__end__ = . ;
|
|
||||||
PROVIDE (end = _end);
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
}
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
MEMORY {
|
|
||||||
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
|
||||||
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
|
|
||||||
}
|
|
||||||
|
|
||||||
__iwram_start = ORIGIN(iwram);
|
|
||||||
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
|
|
||||||
|
|
||||||
__sp_irq = __iwram_top - 0x100;
|
|
||||||
__sp_svc = __sp_irq - 0x100;
|
|
||||||
__sp_usr = __sp_svc - 0x100;
|
|
||||||
|
|
||||||
__irq_flags = 0x04000000 - 8;
|
|
||||||
__irq_flagsaux = 0x04000000 - 0x40;
|
|
||||||
__irq_vector = 0x04000000 - 4;
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
__text_start = . ;
|
|
||||||
KEEP (*(.init))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >iwram = 0xff
|
|
||||||
.plt : { *(.plt) } >iwram = 0xff
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
|
||||||
{
|
|
||||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
KEEP (*(.text.*personality*))
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
} >iwram =0xff
|
|
||||||
|
|
||||||
__text_end = . ;
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram
|
|
||||||
__exidx_start = .;
|
|
||||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >iwram
|
|
||||||
__exidx_end = .;
|
|
||||||
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
|
||||||
could instead move the label definition inside the section, but
|
|
||||||
the linker would then create the section even if it turns out to
|
|
||||||
be empty, which isn't pretty. */
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >iwram = 0xff
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
.init_array : { KEEP (*(.init_array)) } >iwram = 0xff
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
.fini_array : { KEEP (*(.fini_array)) } >iwram = 0xff
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >iwram = 0xff
|
|
||||||
.jcr : { KEEP (*(.jcr)) } >iwram = 0
|
|
||||||
.got : { *(.got.plt) *(.got) } >iwram = 0
|
|
||||||
|
|
||||||
.data ALIGN(4) : {
|
|
||||||
__data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4);
|
|
||||||
__data_end = ABSOLUTE(.) ;
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
.bss ALIGN(4) :
|
|
||||||
{
|
|
||||||
__bss_start = ABSOLUTE(.);
|
|
||||||
__bss_start__ = ABSOLUTE(.);
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__bss_end__ = ABSOLUTE(.);
|
|
||||||
__end__ = ABSOLUTE(.);
|
|
||||||
} >iwram
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T ds_arm7.ld%s
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
@---------------------------------------------------------------------------------
|
|
||||||
.section ".init"
|
|
||||||
.global _start
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.align 4
|
|
||||||
.arm
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_start:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #0x04000000 @ IME = 0;
|
|
||||||
mov r1, #0
|
|
||||||
str r1, [r0, #0x208]
|
|
||||||
|
|
||||||
mov r0, #0x12 @ Switch to IRQ Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_irq @ Set IRQ stack
|
|
||||||
|
|
||||||
mov r0, #0x13 @ Switch to SVC Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_svc @ Set SVC stack
|
|
||||||
|
|
||||||
mov r0, #0x1F @ Switch to System Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_usr @ Set user stack
|
|
||||||
|
|
||||||
ldr r0, =__bss_start__ @ Clear BSS section to 0x00
|
|
||||||
ldr r1, =__bss_end__
|
|
||||||
sub r1, r1, r0
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
ldr r3, =__libc_init_array @ global constructors
|
|
||||||
bl _blx_r3_stub
|
|
||||||
|
|
||||||
mov r0, #0 @ int argc
|
|
||||||
mov r1, #0 @ char *argv[]
|
|
||||||
ldr r3, =main
|
|
||||||
ldr lr,=__libnds_exit
|
|
||||||
bx r3
|
|
||||||
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_blx_r3_stub:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
bx r3
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Clear memory to 0x00 if length != 0
|
|
||||||
@ r0 = Start Address
|
|
||||||
@ r1 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ClearMem:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r2, #3 @ Round down to nearest word boundary
|
|
||||||
add r1, r1, r2 @ Shouldn't be needed
|
|
||||||
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
|
|
||||||
bxeq lr @ Quit if copy size is 0
|
|
||||||
|
|
||||||
mov r2, #0
|
|
||||||
ClrLoop:
|
|
||||||
stmia r0!, {r2}
|
|
||||||
subs r1, r1, #4
|
|
||||||
bne ClrLoop
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy memory if length != 0
|
|
||||||
@ r1 = Source Address
|
|
||||||
@ r2 = Dest Address
|
|
||||||
@ r4 = Dest Address + Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CopyMemCheck:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
sub r3, r4, r2 @ Is there any data to copy?
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy memory
|
|
||||||
@ r1 = Source Address
|
|
||||||
@ r2 = Dest Address
|
|
||||||
@ r3 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CopyMem:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #3 @ These commands are used in cases where
|
|
||||||
add r3, r3, r0 @ the length is not a multiple of 4,
|
|
||||||
bics r3, r3, r0 @ even though it should be.
|
|
||||||
bxeq lr @ Length is zero, so exit
|
|
||||||
CIDLoop:
|
|
||||||
ldmia r1!, {r0}
|
|
||||||
stmia r2!, {r0}
|
|
||||||
subs r3, r3, #4
|
|
||||||
bne CIDLoop
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.align
|
|
||||||
.pool
|
|
||||||
.end
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@@ -1,180 +0,0 @@
|
|||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
MEMORY {
|
|
||||||
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
|
||||||
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
|
|
||||||
vram : ORIGIN = 0x06000000, LENGTH = 128K
|
|
||||||
}
|
|
||||||
|
|
||||||
__iwram_start = ORIGIN(iwram);
|
|
||||||
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
|
|
||||||
|
|
||||||
__sp_irq = __iwram_top - 0x100;
|
|
||||||
__sp_svc = __sp_irq - 0x100;
|
|
||||||
__sp_usr = __sp_svc - 0x100;
|
|
||||||
|
|
||||||
__irq_flags = 0x04000000 - 8;
|
|
||||||
__irq_flagsaux = 0x04000000 - 0x40;
|
|
||||||
__irq_vector = 0x04000000 - 4;
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
__text_start = . ;
|
|
||||||
KEEP (*(.init))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >vram = 0xff
|
|
||||||
.plt : { *(.plt) } >vram = 0xff
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
|
||||||
{
|
|
||||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
KEEP (*(.text.*personality*))
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >vram = 0xff
|
|
||||||
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
} >vram =0xff
|
|
||||||
|
|
||||||
__text_end = . ;
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >vram = 0xff
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >vram
|
|
||||||
__exidx_start = .;
|
|
||||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >vram
|
|
||||||
__exidx_end = .;
|
|
||||||
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
|
||||||
could instead move the label definition inside the section, but
|
|
||||||
the linker would then create the section even if it turns out to
|
|
||||||
be empty, which isn't pretty. */
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >vram = 0xff
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
.init_array : { KEEP (*(.init_array)) } >vram = 0xff
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
.fini_array : { KEEP (*(.fini_array)) } >vram = 0xff
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >vram = 0xff
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >vram = 0xff
|
|
||||||
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >vram = 0xff
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >vram = 0xff
|
|
||||||
.jcr : { KEEP (*(.jcr)) } >vram = 0
|
|
||||||
.got : { *(.got.plt) *(.got) } >vram = 0
|
|
||||||
|
|
||||||
|
|
||||||
.data ALIGN(4) : {
|
|
||||||
__data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4);
|
|
||||||
__data_end = ABSOLUTE(.) ;
|
|
||||||
} >vram = 0xff
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.bss ALIGN(4) :
|
|
||||||
{
|
|
||||||
__bss_start = ABSOLUTE(.);
|
|
||||||
__bss_start__ = ABSOLUTE(.);
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__bss_end__ = ABSOLUTE(.);
|
|
||||||
__end__ = ABSOLUTE(.);
|
|
||||||
} >vram
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T ds_arm7_vram.ld%s
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,242 +0,0 @@
|
|||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
__vectors_start = ORIGIN(vectors);
|
|
||||||
__itcm_start = ORIGIN(itcm);
|
|
||||||
__ewram_end = ORIGIN(ewram) + LENGTH(ewram);
|
|
||||||
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
|
|
||||||
__dtcm_start = ORIGIN(dtcm);
|
|
||||||
__dtcm_top = ORIGIN(dtcm) + LENGTH(dtcm);
|
|
||||||
__irq_flags = __dtcm_top - 0x08;
|
|
||||||
__irq_vector = __dtcm_top - 0x04;
|
|
||||||
|
|
||||||
__sp_svc = __dtcm_top - 0x100;
|
|
||||||
__sp_irq = __sp_svc - 0x100;
|
|
||||||
__sp_usr = __sp_irq - 0x100;
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
__text_start = . ;
|
|
||||||
KEEP (*(.init))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
.plt : { *(.plt) } >ewram = 0xff
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
|
||||||
{
|
|
||||||
*(EXCLUDE_FILE (*.itcm*) .text)
|
|
||||||
|
|
||||||
*(.text.*)
|
|
||||||
*(.stub)
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.gnu.linkonce.t*)
|
|
||||||
*(.glue_7)
|
|
||||||
*(.glue_7t)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
} >ewram =0xff
|
|
||||||
|
|
||||||
__text_end = . ;
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram
|
|
||||||
__exidx_start = .;
|
|
||||||
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram
|
|
||||||
__exidx_end = .;
|
|
||||||
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
|
||||||
could instead move the label definition inside the section, but
|
|
||||||
the linker would then create the section even if it turns out to
|
|
||||||
be empty, which isn't pretty. */
|
|
||||||
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >ewram = 0xff
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
.init_array :
|
|
||||||
{
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array))
|
|
||||||
} >ewram = 0xff
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
.fini_array :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini_array))
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
.jcr : { KEEP (*(.jcr)) } >ewram = 0
|
|
||||||
.got : { *(.got.plt) *(.got) *(.rel.got) } >ewram = 0
|
|
||||||
|
|
||||||
.ewram ALIGN(4) :
|
|
||||||
{
|
|
||||||
__ewram_start = ABSOLUTE(.) ;
|
|
||||||
*(.ewram)
|
|
||||||
*ewram.*(.text)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
|
|
||||||
.data ALIGN(4) :
|
|
||||||
{
|
|
||||||
__data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4);
|
|
||||||
__data_end = ABSOLUTE(.) ;
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
|
|
||||||
__dtcm_lma = . ;
|
|
||||||
__bss_vma = . ;
|
|
||||||
|
|
||||||
.dtcm __dtcm_start : AT (__dtcm_lma)
|
|
||||||
{
|
|
||||||
*(.dtcm)
|
|
||||||
*(.dtcm.*)
|
|
||||||
. = ALIGN(4);
|
|
||||||
__dtcm_end = ABSOLUTE(.);
|
|
||||||
} >dtcm = 0xff
|
|
||||||
|
|
||||||
|
|
||||||
__itcm_lma = __dtcm_lma + SIZEOF(.dtcm);
|
|
||||||
|
|
||||||
.itcm __itcm_start : AT (__itcm_lma)
|
|
||||||
{
|
|
||||||
*(.itcm)
|
|
||||||
*itcm.*(.text)
|
|
||||||
. = ALIGN(4);
|
|
||||||
__itcm_end = ABSOLUTE(.);
|
|
||||||
} >itcm = 0xff
|
|
||||||
|
|
||||||
__vectors_lma = __itcm_lma + SIZEOF(.itcm);
|
|
||||||
|
|
||||||
.vectors __vectors_start : AT (__vectors_lma)
|
|
||||||
{
|
|
||||||
*(.vectors)
|
|
||||||
*vectors.*(.text)
|
|
||||||
. = ALIGN(4);
|
|
||||||
__vectors_end = ABSOLUTE(.);
|
|
||||||
} >vectors = 0xff
|
|
||||||
|
|
||||||
.sbss __dtcm_end (NOLOAD):
|
|
||||||
{
|
|
||||||
__sbss_start = ABSOLUTE(.);
|
|
||||||
__sbss_start__ = ABSOLUTE(.);
|
|
||||||
*(.sbss)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__sbss_end = ABSOLUTE(.);
|
|
||||||
} >dtcm
|
|
||||||
|
|
||||||
.bss __bss_vma (NOLOAD):
|
|
||||||
{
|
|
||||||
__bss_start = ABSOLUTE(.);
|
|
||||||
__bss_start__ = ABSOLUTE(.);
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__bss_end__ = ABSOLUTE(.) ;
|
|
||||||
__end__ = ABSOLUTE(.) ;
|
|
||||||
} AT>ewram
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
MEMORY {
|
|
||||||
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
|
||||||
ewram : ORIGIN = 0x02000000, LENGTH = 4M - 4k
|
|
||||||
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
|
|
||||||
vectors : ORIGIN = 0x01000000, LENGTH = 256
|
|
||||||
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T ds_arm9.mem%s -T ds_arm9.ld%s
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,208 +0,0 @@
|
|||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ DS processor selection
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.arch armv5te
|
|
||||||
.cpu arm946e-s
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
.equ _libnds_argv,0x02FFFE70
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.section ".init"
|
|
||||||
.global _start
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.align 4
|
|
||||||
.arm
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_start:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #0x04000000 @ IME = 0;
|
|
||||||
str r0, [r0, #0x208]
|
|
||||||
|
|
||||||
@ set sensible stacks to allow bios call
|
|
||||||
|
|
||||||
mov r0, #0x13 @ Switch to SVC Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
mov r1,#0x03000000
|
|
||||||
sub r1,r1,#0x1000
|
|
||||||
mov sp,r1
|
|
||||||
mov r0, #0x1F @ Switch to System Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
sub r1,r1,#0x100
|
|
||||||
mov sp,r1
|
|
||||||
|
|
||||||
ldr r3, =__libnds_mpu_setup
|
|
||||||
blx r3
|
|
||||||
|
|
||||||
mov r0, #0x12 @ Switch to IRQ Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_irq @ Set IRQ stack
|
|
||||||
|
|
||||||
mov r0, #0x13 @ Switch to SVC Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_svc @ Set SVC stack
|
|
||||||
|
|
||||||
mov r0, #0x1F @ Switch to System Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_usr @ Set user stack
|
|
||||||
|
|
||||||
ldr r1, =__itcm_lma @ Copy instruction tightly coupled memory (itcm section) from LMA to VMA
|
|
||||||
ldr r2, =__itcm_start
|
|
||||||
ldr r4, =__itcm_end
|
|
||||||
bl CopyMemCheck
|
|
||||||
|
|
||||||
ldr r1, =__vectors_lma @ Copy reserved vectors area (itcm section) from LMA to VMA
|
|
||||||
ldr r2, =__vectors_start
|
|
||||||
ldr r4, =__vectors_end
|
|
||||||
bl CopyMemCheck
|
|
||||||
|
|
||||||
ldr r1, =__dtcm_lma @ Copy data tightly coupled memory (dtcm section) from LMA to VMA
|
|
||||||
ldr r2, =__dtcm_start
|
|
||||||
ldr r4, =__dtcm_end
|
|
||||||
bl CopyMemCheck
|
|
||||||
|
|
||||||
bl checkARGV @ check and process argv trickery
|
|
||||||
|
|
||||||
ldr r0, =__bss_start__ @ Clear BSS section
|
|
||||||
ldr r1, =__bss_end__
|
|
||||||
sub r1, r1, r0
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
ldr r0, =__sbss_start @ Clear SBSS section
|
|
||||||
ldr r1, =__sbss_end
|
|
||||||
sub r1, r1, r0
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
|
|
||||||
ldr r0, =_libnds_argv
|
|
||||||
|
|
||||||
@ reset heap base
|
|
||||||
ldr r2, [r0,#20] @ newheap base
|
|
||||||
ldr r1,=fake_heap_start
|
|
||||||
str r2,[r1]
|
|
||||||
|
|
||||||
ldr r1, =fake_heap_end @ set heap end
|
|
||||||
sub r8, r8,#0xc000
|
|
||||||
str r8, [r1]
|
|
||||||
|
|
||||||
push {r0}
|
|
||||||
ldr r3, =initSystem
|
|
||||||
blx r3 @ system initialisation
|
|
||||||
|
|
||||||
ldr r3, =__libc_init_array @ global constructors
|
|
||||||
blx r3
|
|
||||||
|
|
||||||
pop {r0}
|
|
||||||
|
|
||||||
ldr r1, [r0,#16] @ argv
|
|
||||||
ldr r0, [r0,#12] @ argc
|
|
||||||
|
|
||||||
ldr r3, =main
|
|
||||||
ldr lr, =__libnds_exit
|
|
||||||
bx r3 @ jump to user code
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ check for a commandline
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
checkARGV:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r0, =_libnds_argv @ argv structure
|
|
||||||
mov r1, #0
|
|
||||||
str r1, [r0,#12] @ clear argc
|
|
||||||
str r1, [r0,#16] @ clear argv
|
|
||||||
|
|
||||||
ldr r3, [r0] @ argv magic number
|
|
||||||
ldr r2, =0x5f617267 @ '_arg'
|
|
||||||
cmp r3, r2
|
|
||||||
strne r1, [r0,#20]
|
|
||||||
bxne lr @ bail out if no magic
|
|
||||||
|
|
||||||
ldr r1, [r0, #4] @ command line address
|
|
||||||
ldr r2, [r0, #8] @ length of command line
|
|
||||||
|
|
||||||
@ copy to heap
|
|
||||||
ldr r3, =__end__ @ initial heap base
|
|
||||||
str r3, [r0, #4] @ set command line address
|
|
||||||
|
|
||||||
cmp r2, #0
|
|
||||||
subnes r4, r3, r1 @ dst-src
|
|
||||||
bxeq lr @ dst == src || len==0 : nothing to do.
|
|
||||||
|
|
||||||
cmphi r2, r4 @ len > (dst-src)
|
|
||||||
bhi .copybackward
|
|
||||||
|
|
||||||
.copyforward:
|
|
||||||
ldrb r4, [r1], #1
|
|
||||||
strb r4, [r3], #1
|
|
||||||
subs r2, r2, #1
|
|
||||||
bne .copyforward
|
|
||||||
b .copydone
|
|
||||||
|
|
||||||
.copybackward:
|
|
||||||
subs r2, r2, #1
|
|
||||||
ldrb r4, [r1, r2]
|
|
||||||
strb r4, [r3, r2]
|
|
||||||
bne .copybackward
|
|
||||||
|
|
||||||
.copydone:
|
|
||||||
push {lr}
|
|
||||||
ldr r3, =build_argv
|
|
||||||
blx r3
|
|
||||||
pop {lr}
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Clear memory to 0x00 if length != 0
|
|
||||||
@ r0 = Start Address
|
|
||||||
@ r1 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ClearMem:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r2, #3 @ Round down to nearest word boundary
|
|
||||||
add r1, r1, r2 @ Shouldn't be needed
|
|
||||||
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
|
|
||||||
bxeq lr @ Quit if copy size is 0
|
|
||||||
|
|
||||||
mov r2, #0
|
|
||||||
ClrLoop:
|
|
||||||
stmia r0!, {r2}
|
|
||||||
subs r1, r1, #4
|
|
||||||
bne ClrLoop
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy memory if length != 0
|
|
||||||
@ r1 = Source Address
|
|
||||||
@ r2 = Dest Address
|
|
||||||
@ r4 = Dest Address + Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CopyMemCheck:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
sub r3, r4, r2 @ Is there any data to copy?
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy memory
|
|
||||||
@ r1 = Source Address
|
|
||||||
@ r2 = Dest Address
|
|
||||||
@ r3 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CopyMem:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #3 @ These commands are used in cases where
|
|
||||||
add r3, r3, r0 @ the length is not a multiple of 4,
|
|
||||||
bics r3, r3, r0 @ even though it should be.
|
|
||||||
bxeq lr @ Length is zero, so exit
|
|
||||||
CIDLoop:
|
|
||||||
ldmia r1!, {r0}
|
|
||||||
stmia r2!, {r0}
|
|
||||||
subs r3, r3, #4
|
|
||||||
bne CIDLoop
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.align
|
|
||||||
.pool
|
|
||||||
.end
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@@ -1,213 +0,0 @@
|
|||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
MEMORY {
|
|
||||||
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
|
||||||
iwram : ORIGIN = 0x03800000, LENGTH = 64K
|
|
||||||
ewram : ORIGIN = 0x02000000, LENGTH = 4M
|
|
||||||
}
|
|
||||||
|
|
||||||
__ewram_start = ORIGIN(ewram);
|
|
||||||
__eheap_end = ORIGIN(ewram)+ LENGTH(ewram);
|
|
||||||
__iwram_start = ORIGIN(iwram);
|
|
||||||
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
|
|
||||||
__sp_irq = __iwram_top - 0x60;
|
|
||||||
__sp_svc = __sp_irq - 0x100;
|
|
||||||
__sp_usr = __sp_svc - 0x100;
|
|
||||||
|
|
||||||
__irq_flags = __iwram_top - 8;
|
|
||||||
__irq_vector = __iwram_top - 4;
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
__text_start = . ;
|
|
||||||
KEEP (*(.init))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
.plt : { *(.plt) } >rom = 0xff
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
|
||||||
{
|
|
||||||
*(EXCLUDE_FILE (*.iwram*) .text)
|
|
||||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
KEEP (*(.text.*personality*))
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
} >rom =0xff
|
|
||||||
|
|
||||||
__text_end = . ;
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
|
||||||
could instead move the label definition inside the section, but
|
|
||||||
the linker would then create the section even if it turns out to
|
|
||||||
be empty, which isn't pretty. */
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >rom = 0xff
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
.init_array : { KEEP (*(.init_array)) } >rom = 0xff
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
.fini_array : { KEEP (*(.fini_array)) } >rom = 0xff
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
.jcr : { KEEP (*(.jcr)) } >rom = 0
|
|
||||||
.got : { *(.got.plt) *(.got) } >rom = 0
|
|
||||||
|
|
||||||
__ewram_lma = . ;
|
|
||||||
|
|
||||||
.ewram __ewram_start : AT (__ewram_lma)
|
|
||||||
{
|
|
||||||
__ewram_start = ABSOLUTE(.) ;
|
|
||||||
*(.ewram)
|
|
||||||
*ewram.*(.text)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
.sbss ALIGN(4):
|
|
||||||
{
|
|
||||||
__sbss_start = ABSOLUTE(.);
|
|
||||||
*(.sbss)
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >ewram
|
|
||||||
__sbss_end = . ;
|
|
||||||
|
|
||||||
_end = . ;
|
|
||||||
__end__ = . ;
|
|
||||||
PROVIDE (end = _end);
|
|
||||||
|
|
||||||
__iwram_lma = __ewram_lma + SIZEOF(.ewram) + SIZEOF(.sbss);
|
|
||||||
|
|
||||||
.iwram __iwram_start : AT (__iwram_lma)
|
|
||||||
{
|
|
||||||
__iwram_start = ABSOLUTE(.) ;
|
|
||||||
*(.iwram)
|
|
||||||
*iwram.*(.text)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
__iwram_end = . ;
|
|
||||||
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
|
|
||||||
|
|
||||||
|
|
||||||
.data ALIGN(4) : AT (__data_lma)
|
|
||||||
{
|
|
||||||
__data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
__data_end = . ;
|
|
||||||
__appended_data = __data_lma + SIZEOF(.data) ;
|
|
||||||
|
|
||||||
|
|
||||||
.bss ALIGN(4) :
|
|
||||||
{
|
|
||||||
__bss_start = ABSOLUTE(.);
|
|
||||||
__bss_start__ = ABSOLUTE(.);
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__bss_end__ = ABSOLUTE(.);
|
|
||||||
__end__ = ABSOLUTE(.);
|
|
||||||
} >iwram
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T ds_cart.ld%s
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
ds_cart_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,160 +0,0 @@
|
|||||||
@---------------------------------------------------------------------------------
|
|
||||||
.section ".init"
|
|
||||||
.global _start
|
|
||||||
.arm
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_start:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
b rom_header_end
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.fill 156,1,0 @ Nintendo Logo Character Data (8000004h)
|
|
||||||
.fill 16,1,0 @ Game Title
|
|
||||||
.byte 0x30,0x31 @ Maker Code (80000B0h)
|
|
||||||
.byte 0x96 @ Fixed Value (80000B2h)
|
|
||||||
.byte 0x00 @ Main Unit Code (80000B3h)
|
|
||||||
.byte 0x00 @ Device Type (80000B4h)
|
|
||||||
.fill 7,1,0 @ unused
|
|
||||||
.byte 0x00 @ Software Version No (80000BCh)
|
|
||||||
.byte 0xf0 @ Complement Check (80000BDh)
|
|
||||||
.byte 0x00,0x00 @ Checksum (80000BEh)
|
|
||||||
|
|
||||||
rom_header_end:
|
|
||||||
b start_vector @ This branch must be here for proper
|
|
||||||
@ positioning of the following header.
|
|
||||||
|
|
||||||
.GLOBAL __boot_method, __slave_number
|
|
||||||
__boot_method:
|
|
||||||
.byte 0 @ boot method (0=ROM boot, 3=Multiplay boot)
|
|
||||||
__slave_number:
|
|
||||||
.byte 0 @ slave # (1=slave#1, 2=slave#2, 3=slave#3)
|
|
||||||
|
|
||||||
.byte 0 @ reserved
|
|
||||||
.byte 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.align 4
|
|
||||||
.arm
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
start_vector:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #0x04000000 @ IME = 0;
|
|
||||||
str r0, [r0, #0x208]
|
|
||||||
|
|
||||||
mov r0, #0x12 @ Switch to IRQ Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_irq @ Set IRQ stack
|
|
||||||
|
|
||||||
mov r0, #0x13 @ Switch to SVC Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_svc @ Set SVC stack
|
|
||||||
|
|
||||||
|
|
||||||
mov r0, #0x1F @ Switch to System Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_usr @ Set user stack
|
|
||||||
|
|
||||||
mov r1, #0x42
|
|
||||||
strb r1, [r7], #1
|
|
||||||
mov r1, #0x35
|
|
||||||
strb r1, [r7], #1
|
|
||||||
mov r1, #0x2B
|
|
||||||
strb r1, [r7], #1
|
|
||||||
mov r1, #0x2B
|
|
||||||
strb r1, [r7], #1
|
|
||||||
|
|
||||||
ldr r1, =__data_lma @ Copy initialized data (data section) from LMA to VMA (ROM to RAM)
|
|
||||||
ldr r2, =__data_start
|
|
||||||
ldr r4, =__data_end
|
|
||||||
bl CopyMemChk
|
|
||||||
|
|
||||||
ldr r1, =__iwram_lma @ Copy internal work ram (iwram section) from LMA to VMA (ROM to RAM)
|
|
||||||
ldr r2, =__iwram_start
|
|
||||||
ldr r4, =__iwram_end
|
|
||||||
bl CopyMemChk
|
|
||||||
|
|
||||||
ldr r0, =__bss_start @ Clear BSS section to 0x00
|
|
||||||
ldr r1, =__bss_end
|
|
||||||
sub r1, r1, r0
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
ldr r0, =__sbss_start @ Clear SBSS section to 0x00
|
|
||||||
ldr r1, =__sbss_end
|
|
||||||
sub r1, r1, r0
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
ldr r1, =fake_heap_end @ set heap end
|
|
||||||
ldr r0, =__eheap_end
|
|
||||||
str r0, [r1]
|
|
||||||
|
|
||||||
ldr r3, =__libc_init_array @ global constructors
|
|
||||||
bl _call_via_r3
|
|
||||||
|
|
||||||
mov r0, #0 @ int argc
|
|
||||||
mov r1, #0 @ char *argv[]
|
|
||||||
ldr r3, =main
|
|
||||||
bl _call_via_r3 @ jump to user code
|
|
||||||
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Clear memory to 0x00 if length != 0
|
|
||||||
@ r0 = Start Address
|
|
||||||
@ r1 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ClearMem:
|
|
||||||
mov r2, #3 @ Round down to nearest word boundary
|
|
||||||
add r1, r1, r2 @ Shouldn't be needed
|
|
||||||
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
|
|
||||||
bxeq lr @ Quit if copy size is 0
|
|
||||||
|
|
||||||
mov r2, #0
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ClrLoop:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
stmia r0!, {r2}
|
|
||||||
subs r1, r1, #4
|
|
||||||
bne ClrLoop
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy memory if length != 0
|
|
||||||
@ r1 = Source Address
|
|
||||||
@ r2 = Dest Address
|
|
||||||
@ r4 = Dest Address + Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CopyMemChk:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
sub r3, r4, r2 @ Is there any data to copy?
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy memory
|
|
||||||
@ r1 = Source Address
|
|
||||||
@ r2 = Dest Address
|
|
||||||
@ r3 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CopyMem:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #3 @ These commands are used in cases where
|
|
||||||
add r3, r3, r0 @ the length is not a multiple of 4,
|
|
||||||
bics r3, r3, r0 @ even though it should be.
|
|
||||||
bxeq lr @ Length is zero so exit
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CIDLoop:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldmia r1!, {r0}
|
|
||||||
stmia r2!, {r0}
|
|
||||||
subs r3, r3, #4
|
|
||||||
bne CIDLoop
|
|
||||||
bx lr
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.align
|
|
||||||
.pool
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.end
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
MEMORY {
|
|
||||||
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
|
||||||
ewram : ORIGIN = 0x02000000, LENGTH = 16M - 4k
|
|
||||||
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
|
|
||||||
vectors : ORIGIN = 0x01000000, LENGTH = 256
|
|
||||||
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T dsi_arm9.mem%s -T ds_arm9.ld%s
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ nintendo e-reader startup code
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ author : tim schuerewegen
|
|
||||||
@ version : 1.0
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.section ".init"
|
|
||||||
.global _start
|
|
||||||
.align
|
|
||||||
.arm
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_start:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
b start_vector
|
|
||||||
.long 0
|
|
||||||
.long 0x02000000
|
|
||||||
|
|
||||||
start_vector:
|
|
||||||
@ enter thumb mode
|
|
||||||
adr r0, _start_thumb + 1
|
|
||||||
bx r0
|
|
||||||
|
|
||||||
.thumb
|
|
||||||
|
|
||||||
_start_thumb:
|
|
||||||
|
|
||||||
@ save return address (rom)
|
|
||||||
mov r3, lr
|
|
||||||
|
|
||||||
@ clear bss section
|
|
||||||
ldr r0, =__bss_start
|
|
||||||
ldr r1, =__bss_end
|
|
||||||
mov r2, #0
|
|
||||||
_loop_bss_clear:
|
|
||||||
strb r2, [r0]
|
|
||||||
add r0, #1
|
|
||||||
cmp r0, r1
|
|
||||||
blt _loop_bss_clear
|
|
||||||
|
|
||||||
@ set return address (rom)
|
|
||||||
mov lr, r3
|
|
||||||
|
|
||||||
@ jump to main
|
|
||||||
ldr r3, =main
|
|
||||||
bx r3
|
|
||||||
|
|
||||||
.align
|
|
||||||
|
|
||||||
.pool
|
|
||||||
|
|
||||||
.end
|
|
||||||
|
|
||||||
.align
|
|
||||||
.pool
|
|
||||||
.end
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T gba_cart.ld%s
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
gba_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,312 +0,0 @@
|
|||||||
/* Linker Script Original v1.3 by Jeff Frohwein */
|
|
||||||
/* v1.0 - Original release */
|
|
||||||
/* v1.1 - Added proper .data section support */
|
|
||||||
/* v1.2 - Added support for c++ & iwram overlays */
|
|
||||||
/* - Major contributions by Jason Wilkins. */
|
|
||||||
/* v1.3 - .ewram section now can be used when */
|
|
||||||
/* compiling for MULTIBOOT mode. This fixes */
|
|
||||||
/* malloc() in DevKitAdvance which depends */
|
|
||||||
/* on __eheap_start instead of end to define*/
|
|
||||||
/* the starting location of heap space. */
|
|
||||||
/* External global variable __gba_iwram_heap*/
|
|
||||||
/* support added to allow labels end, _end, */
|
|
||||||
/* & __end__ to point to end of iwram or */
|
|
||||||
/* the end of ewram. */
|
|
||||||
/* Additions by WinterMute */
|
|
||||||
/* v1.4 - .sbss section added for unitialised */
|
|
||||||
/* data in ewram */
|
|
||||||
/* v1.5 - padding section added to stop EZF */
|
|
||||||
/* stripping important data */
|
|
||||||
|
|
||||||
/* This file is released into the public domain */
|
|
||||||
/* for commercial or non-commercial use with no */
|
|
||||||
/* restrictions placed upon it. */
|
|
||||||
|
|
||||||
/* NOTE!!!: This linker script defines the RAM & */
|
|
||||||
/* ROM start addresses. In order for it to work */
|
|
||||||
/* properly, remove -Ttext and -Tbss linker */
|
|
||||||
/* options from your makefile if they are */
|
|
||||||
/* present. */
|
|
||||||
|
|
||||||
/* You can use the following to view section */
|
|
||||||
/* addresses in your .elf file: */
|
|
||||||
/* objdump -h file.elf */
|
|
||||||
/* Please note that empty sections may incorrectly*/
|
|
||||||
/* list the lma address as the vma address for */
|
|
||||||
/* some versions of objdump. */
|
|
||||||
|
|
||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
/* SEARCH_DIR(/bin/arm); */
|
|
||||||
|
|
||||||
/* The linker script function "var1 += var2;" sometimes */
|
|
||||||
/* reports incorrect values in the *.map file but the */
|
|
||||||
/* actual value it calculates is usually, if not always, */
|
|
||||||
/* correct. If you leave out the ". = ALIGN(4);" at the */
|
|
||||||
/* end of each section then the return value of SIZEOF() */
|
|
||||||
/* is sometimes incorrect and "var1 += var2;" appears to */
|
|
||||||
/* not work as well. "var1 += var2" style functions are */
|
|
||||||
/* avoided below as a result. */
|
|
||||||
|
|
||||||
MEMORY {
|
|
||||||
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
|
||||||
iwram : ORIGIN = 0x03000000, LENGTH = 32K
|
|
||||||
ewram : ORIGIN = 0x02000000, LENGTH = 256K
|
|
||||||
}
|
|
||||||
|
|
||||||
__text_start = ORIGIN(rom);
|
|
||||||
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
|
|
||||||
__iwram_start = ORIGIN(iwram);
|
|
||||||
__iwram_top = ORIGIN(iwram) + LENGTH(iwram);;
|
|
||||||
__sp_irq = __iwram_top - 0x060;
|
|
||||||
__sp_usr = __sp_irq - 0x0a0;
|
|
||||||
__irq_flags = 0x03007ff8;
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
. = __text_start;
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(.init))
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >rom =0xff
|
|
||||||
|
|
||||||
.plt :
|
|
||||||
{
|
|
||||||
*(.plt)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
|
||||||
{
|
|
||||||
*(EXCLUDE_FILE (*.iwram*) .text)
|
|
||||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
KEEP (*(.text.*personality*))
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
|
|
||||||
__text_end = .;
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom =0
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0xff
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >rom
|
|
||||||
__exidx_start = .;
|
|
||||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >rom
|
|
||||||
__exidx_end = .;
|
|
||||||
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0
|
|
||||||
|
|
||||||
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >rom = 0
|
|
||||||
|
|
||||||
__iwram_lma = .;
|
|
||||||
|
|
||||||
.iwram __iwram_start : AT (__iwram_lma)
|
|
||||||
{
|
|
||||||
__iwram_start__ = ABSOLUTE(.) ;
|
|
||||||
*(.iwram)
|
|
||||||
*iwram.*(.text)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__iwram_end__ = ABSOLUTE(.) ;
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
|
|
||||||
|
|
||||||
.bss ALIGN(4) (NOLOAD) :
|
|
||||||
{
|
|
||||||
__bss_start = ABSOLUTE(.);
|
|
||||||
__bss_start__ = ABSOLUTE(.);
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__bss_end__ = ABSOLUTE(.);
|
|
||||||
|
|
||||||
} AT>iwram
|
|
||||||
|
|
||||||
.data ALIGN(4) : AT (__data_lma)
|
|
||||||
{
|
|
||||||
__data_start__ = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
__preinit_lma = __data_lma + SIZEOF(.data);
|
|
||||||
|
|
||||||
.preinit_array ALIGN(4) : AT (__preinit_lma)
|
|
||||||
{
|
|
||||||
__preinit_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*(.preinit_array))
|
|
||||||
__preinit_array_end = ABSOLUTE(.);
|
|
||||||
} >iwram
|
|
||||||
|
|
||||||
__init_lma = __preinit_lma + SIZEOF(.preinit_array);
|
|
||||||
|
|
||||||
.init_array ALIGN(4) : AT (__init_lma)
|
|
||||||
{
|
|
||||||
__init_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array))
|
|
||||||
__init_array_end = ABSOLUTE(.);
|
|
||||||
} >iwram
|
|
||||||
|
|
||||||
__fini_lma = __init_lma + SIZEOF(.init_array);
|
|
||||||
|
|
||||||
.fini_array ALIGN(4) : AT (__fini_lma)
|
|
||||||
{
|
|
||||||
__fini_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
KEEP (*(.fini_array))
|
|
||||||
__fini_array_end = ABSOLUTE(.);
|
|
||||||
} >iwram
|
|
||||||
|
|
||||||
__jcr_lma = __fini_lma + SIZEOF(.fini_array);
|
|
||||||
.jcr ALIGN(4) : AT (__jcr_lma) { KEEP (*(.jcr)) } >iwram
|
|
||||||
|
|
||||||
__data_end__ = ABSOLUTE(.);
|
|
||||||
__iwram_overlay_lma = __jcr_lma + SIZEOF(.jcr);
|
|
||||||
|
|
||||||
__iwram_overlay_start = . ;
|
|
||||||
|
|
||||||
OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
|
|
||||||
{
|
|
||||||
.iwram0 { *(.iwram0) . = ALIGN(4);}
|
|
||||||
.iwram1 { *(.iwram1) . = ALIGN(4);}
|
|
||||||
.iwram2 { *(.iwram2) . = ALIGN(4);}
|
|
||||||
.iwram3 { *(.iwram3) . = ALIGN(4);}
|
|
||||||
.iwram4 { *(.iwram4) . = ALIGN(4);}
|
|
||||||
.iwram5 { *(.iwram5) . = ALIGN(4);}
|
|
||||||
.iwram6 { *(.iwram6) . = ALIGN(4);}
|
|
||||||
.iwram7 { *(.iwram7) . = ALIGN(4);}
|
|
||||||
.iwram8 { *(.iwram8) . = ALIGN(4);}
|
|
||||||
.iwram9 { *(.iwram9) . = ALIGN(4);}
|
|
||||||
}>iwram = 0xff
|
|
||||||
|
|
||||||
__iwram_overlay_end = . ;
|
|
||||||
__ewram_lma = __iwram_overlay_lma + (__iwram_overlay_end - __iwram_overlay_start) ;
|
|
||||||
|
|
||||||
__iheap_start = . ;
|
|
||||||
|
|
||||||
__ewram_start = ORIGIN(ewram);
|
|
||||||
.ewram __ewram_start : AT (__ewram_lma)
|
|
||||||
{
|
|
||||||
*(.ewram)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__ewram_end = ABSOLUTE(.);
|
|
||||||
}>ewram = 0xff
|
|
||||||
|
|
||||||
__pad_lma = __ewram_lma + SIZEOF(.ewram);
|
|
||||||
|
|
||||||
.sbss ALIGN(4)(NOLOAD):
|
|
||||||
{
|
|
||||||
__sbss_start__ = ABSOLUTE(.);
|
|
||||||
*(.sbss)
|
|
||||||
. = ALIGN(4);
|
|
||||||
__sbss_end__ = ABSOLUTE(.);
|
|
||||||
__end__ = ABSOLUTE(.);
|
|
||||||
__eheap_start = ABSOLUTE(.);
|
|
||||||
} AT>ewram
|
|
||||||
|
|
||||||
/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */
|
|
||||||
.pad ALIGN(4) : AT (__pad_lma)
|
|
||||||
{
|
|
||||||
LONG(0x52416b64)
|
|
||||||
LONG(0x4d)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} = 0xff
|
|
||||||
__rom_end__ = __pad_lma + SIZEOF(.pad);
|
|
||||||
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
|
|
||||||
.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }
|
|
||||||
/DISCARD/ : { *(.note.GNU-stack) }
|
|
||||||
}
|
|
||||||
@@ -1,246 +0,0 @@
|
|||||||
.section ".init"
|
|
||||||
.global _start
|
|
||||||
.align
|
|
||||||
.arm
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_start:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
b rom_header_end
|
|
||||||
|
|
||||||
.fill 156,1,0 @ Nintendo Logo Character Data (8000004h)
|
|
||||||
.fill 16,1,0 @ Game Title
|
|
||||||
.byte 0x30,0x31 @ Maker Code (80000B0h)
|
|
||||||
.byte 0x96 @ Fixed Value (80000B2h)
|
|
||||||
.byte 0x00 @ Main Unit Code (80000B3h)
|
|
||||||
.byte 0x00 @ Device Type (80000B4h)
|
|
||||||
.fill 7,1,0 @ unused
|
|
||||||
.byte 0x00 @ Software Version No (80000BCh)
|
|
||||||
.byte 0xf0 @ Complement Check (80000BDh)
|
|
||||||
.byte 0x00,0x00 @ Checksum (80000BEh)
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
rom_header_end:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
b start_vector @ This branch must be here for proper
|
|
||||||
@ positioning of the following header.
|
|
||||||
|
|
||||||
.GLOBAL __boot_method, __slave_number
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
__boot_method:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.byte 0 @ boot method (0=ROM boot, 3=Multiplay boot)
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
__slave_number:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.byte 0 @ slave # (1=slave#1, 2=slave#2, 3=slave#3)
|
|
||||||
|
|
||||||
.byte 0 @ reserved
|
|
||||||
.byte 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
.word 0 @ reserved
|
|
||||||
|
|
||||||
.global start_vector
|
|
||||||
.align
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
start_vector:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #0x4000000 @ REG_BASE
|
|
||||||
str r0, [r0, #0x208]
|
|
||||||
|
|
||||||
mov r0, #0x12 @ Switch to IRQ Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_irq @ Set IRQ stack
|
|
||||||
mov r0, #0x1f @ Switch to System Mode
|
|
||||||
msr cpsr, r0
|
|
||||||
ldr sp, =__sp_usr @ Set user stack
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Enter Thumb mode
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
add r0, pc, #1
|
|
||||||
bx r0
|
|
||||||
|
|
||||||
.thumb
|
|
||||||
|
|
||||||
ldr r0, =__text_start
|
|
||||||
lsl r0, #5 @ Was code compiled at 0x08000000 or higher?
|
|
||||||
bcs DoEWRAMClear @ yes, you can not run it in external WRAM
|
|
||||||
|
|
||||||
mov r0, pc
|
|
||||||
lsl r0, #5 @ Are we running from ROM (0x8000000 or higher) ?
|
|
||||||
bcc SkipEWRAMClear @ No, so no need to do a copy.
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ We were started in ROM, silly emulators. :P
|
|
||||||
@ So we need to copy to ExWRAM.
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r2, #2
|
|
||||||
lsl r2, r2, #24 @ r2= 0x02000000
|
|
||||||
ldr r3, =__end__ @ last ewram address
|
|
||||||
sub r3, r2 @ r3= actual binary size
|
|
||||||
mov r6, r2 @ r6= 0x02000000
|
|
||||||
lsl r1, r2, #2 @ r1= 0x08000000
|
|
||||||
|
|
||||||
bl CopyMem
|
|
||||||
|
|
||||||
bx r6 @ Jump to the code to execute
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
DoEWRAMClear: @ Clear External WRAM to 0x00
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r1, #0x40
|
|
||||||
lsl r1, #12 @ r1 = 0x40000
|
|
||||||
lsl r0, r1, #7 @ r0 = 0x2000000
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
SkipEWRAMClear: @ Clear Internal WRAM to 0x00
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Clear BSS section to 0x00
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r0, =__bss_start__
|
|
||||||
ldr r1, =__bss_end__
|
|
||||||
sub r1, r0
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Clear SBSS section to 0x00
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r0, =__sbss_start__
|
|
||||||
ldr r1, =__sbss_end__
|
|
||||||
sub r1, r0
|
|
||||||
bl ClearMem
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy initialized data (data section) from LMA to VMA (ROM to RAM)
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r1, =__data_lma
|
|
||||||
ldr r2, =__data_start__
|
|
||||||
ldr r4, =__data_end__
|
|
||||||
bl CopyMemChk
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy internal work ram (iwram section) from LMA to VMA (ROM to RAM)
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r1,= __iwram_lma
|
|
||||||
ldr r2,= __iwram_start__
|
|
||||||
ldr r4,= __iwram_end__
|
|
||||||
bl CopyMemChk
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy internal work ram overlay 0 (iwram0 section) from LMA to VMA (ROM to RAM)
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r2,= __load_stop_iwram0
|
|
||||||
ldr r1,= __load_start_iwram0
|
|
||||||
sub r3, r2, r1 @ Is there any data to copy?
|
|
||||||
beq CIW0Skip @ no
|
|
||||||
|
|
||||||
ldr r2,= __iwram_overlay_start
|
|
||||||
bl CopyMem
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CIW0Skip:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy external work ram (ewram section) from LMA to VMA (ROM to RAM)
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r1, =__ewram_lma
|
|
||||||
ldr r2, =__ewram_start
|
|
||||||
ldr r4, =__ewram_end
|
|
||||||
bl CopyMemChk
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CEW0Skip:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ set heap end
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r1, =fake_heap_end
|
|
||||||
ldr r0, =__eheap_end
|
|
||||||
str r0, [r1]
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ global constructors
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r3, =__libc_init_array
|
|
||||||
bl _blx_r3_stub
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Jump to user code
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #0 @ int argc
|
|
||||||
mov r1, #0 @ char *argv[]
|
|
||||||
ldr r3, =main
|
|
||||||
bl _blx_r3_stub
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Clear memory to 0x00 if length != 0
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ r0 = Start Address
|
|
||||||
@ r1 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ClearMem:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r2,#3 @ These commands are used in cases where
|
|
||||||
add r1,r2 @ the length is not a multiple of 4,
|
|
||||||
bic r1,r2 @ even though it should be.
|
|
||||||
|
|
||||||
beq ClearMX @ Length is zero so exit
|
|
||||||
|
|
||||||
mov r2,#0
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ClrLoop:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
stmia r0!, {r2}
|
|
||||||
sub r1,#4
|
|
||||||
bne ClrLoop
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ClearMX:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_blx_r3_stub:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
bx r3
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy memory if length != 0
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ r1 = Source Address
|
|
||||||
@ r2 = Dest Address
|
|
||||||
@ r4 = Dest Address + Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CopyMemChk:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
sub r3, r4, r2 @ Is there any data to copy?
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Copy memory
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ r1 = Source Address
|
|
||||||
@ r2 = Dest Address
|
|
||||||
@ r3 = Length
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CopyMem:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov r0, #3 @ These commands are used in cases where
|
|
||||||
add r3, r0 @ the length is not a multiple of 4,
|
|
||||||
bic r3, r0 @ even though it should be.
|
|
||||||
beq CIDExit @ Length is zero so exit
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CIDLoop:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldmia r1!, {r0}
|
|
||||||
stmia r2!, {r0}
|
|
||||||
sub r3, #4
|
|
||||||
bne CIDLoop
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
CIDExit:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
.align
|
|
||||||
.pool
|
|
||||||
.end
|
|
||||||
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
/***********************************/
|
|
||||||
/* NINTENDO E-READER LINKER SCRIPT */
|
|
||||||
/***********************************/
|
|
||||||
/* Author : Tim Schuerewegen */
|
|
||||||
/* Version : 1.0 */
|
|
||||||
/***********************************/
|
|
||||||
|
|
||||||
OUTPUT_FORMAT( "elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH( arm)
|
|
||||||
ENTRY( _start)
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
. = 0x02000000;
|
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
*(.init)
|
|
||||||
. = ALIGN(4);
|
|
||||||
} = 0xff
|
|
||||||
|
|
||||||
.text :
|
|
||||||
{
|
|
||||||
*(.text)
|
|
||||||
. = ALIGN(4);
|
|
||||||
} = 0xff
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
. = ALIGN(4);
|
|
||||||
} = 0xff
|
|
||||||
|
|
||||||
.data :
|
|
||||||
{
|
|
||||||
*(.data)
|
|
||||||
. = ALIGN(4);
|
|
||||||
} = 0xff
|
|
||||||
|
|
||||||
.bss :
|
|
||||||
{
|
|
||||||
__bss_start = .;
|
|
||||||
*(.bss)
|
|
||||||
. = ALIGN(4);
|
|
||||||
__bss_end__ = ABSOLUTE(.);
|
|
||||||
__end__ = ABSOLUTE(.);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
%rename endfile old_endfile
|
|
||||||
|
|
||||||
*link:
|
|
||||||
-T gba_er.ld%s %(old_link)
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
er_crt0%O%s
|
|
||||||
@@ -1,296 +0,0 @@
|
|||||||
/* Linker Script Original v1.3 by Jeff Frohwein */
|
|
||||||
/* v1.0 - Original release */
|
|
||||||
/* v1.1 - Added proper .data section support */
|
|
||||||
/* v1.2 - Added support for c++ & iwram overlays */
|
|
||||||
/* - Major contributions by Jason Wilkins. */
|
|
||||||
/* v1.3 - .ewram section now can be used when */
|
|
||||||
/* compiling for MULTIBOOT mode. This fixes */
|
|
||||||
/* malloc() in DevKitAdvance which depends */
|
|
||||||
/* on __eheap_start instead of end to define*/
|
|
||||||
/* the starting location of heap space. */
|
|
||||||
/* External global variable __gba_iwram_heap*/
|
|
||||||
/* support added to allow labels end, _end, */
|
|
||||||
/* & __end__ to point to end of iwram or */
|
|
||||||
/* the end of ewram. */
|
|
||||||
/* Additions by WinterMute */
|
|
||||||
/* v1.4 - .sbss section added for unitialised */
|
|
||||||
/* data in ewram */
|
|
||||||
/* v1.5 - padding section added to stop EZF */
|
|
||||||
/* stripping important data */
|
|
||||||
/* v1.6 - added memory sections */
|
|
||||||
|
|
||||||
/* This file is released into the public domain */
|
|
||||||
/* for commercial or non-commercial use with no */
|
|
||||||
/* restrictions placed upon it. */
|
|
||||||
|
|
||||||
/* NOTE!!!: This linker script defines the RAM & */
|
|
||||||
/* ROM start addresses. In order for it to work */
|
|
||||||
/* properly, remove -Ttext and -Tbss linker */
|
|
||||||
/* options from your makefile if they are */
|
|
||||||
/* present. */
|
|
||||||
|
|
||||||
/* You can use the following to view section */
|
|
||||||
/* addresses in your .elf file: */
|
|
||||||
/* objdump -h file.elf */
|
|
||||||
/* Please note that empty sections may incorrectly*/
|
|
||||||
/* list the lma address as the vma address for */
|
|
||||||
/* some versions of objdump. */
|
|
||||||
|
|
||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
MEMORY {
|
|
||||||
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
|
||||||
iwram : ORIGIN = 0x03000000, LENGTH = 32K
|
|
||||||
ewram : ORIGIN = 0x02000000, LENGTH = 256K
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
__text_start = ORIGIN(ewram);
|
|
||||||
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
|
|
||||||
__iwram_start = ORIGIN(iwram);
|
|
||||||
__iwram_top = ORIGIN(iwram) + LENGTH(iwram);;
|
|
||||||
|
|
||||||
__sp_irq = __iwram_top - 0x060;
|
|
||||||
__sp_usr = __sp_irq - 0x0a0;
|
|
||||||
__irq_flags = 0x03007ff8;
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
. = __text_start;
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(.init))
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >ewram =0xff
|
|
||||||
|
|
||||||
.plt :
|
|
||||||
{
|
|
||||||
*(.plt)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram
|
|
||||||
|
|
||||||
.text ALIGN (4):
|
|
||||||
{
|
|
||||||
*(EXCLUDE_FILE (*.iwram*) .text)
|
|
||||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
KEEP (*(.text.*personality*))
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
__text_end = .;
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram =0
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram
|
|
||||||
__exidx_start = .;
|
|
||||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram
|
|
||||||
__exidx_end = .;
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
|
||||||
could instead move the label definition inside the section, but
|
|
||||||
the linker would then create the section even if it turns out to
|
|
||||||
be empty, which isn't pretty. */
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >ewram = 0xff
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
.init_array : { KEEP (*(.init_array)) } >ewram = 0xff
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
.fini_array : { KEEP (*(.fini_array)) } >ewram = 0xff
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0
|
|
||||||
|
|
||||||
.jcr : { KEEP (*(.jcr)) } >ewram
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ewram = 0
|
|
||||||
|
|
||||||
__iwram_lma = .;
|
|
||||||
|
|
||||||
.iwram __iwram_start : AT (__iwram_lma)
|
|
||||||
{
|
|
||||||
__iwram_start__ = ABSOLUTE(.) ;
|
|
||||||
*(.iwram)
|
|
||||||
*iwram.*(.text)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__iwram_end__ = ABSOLUTE(.) ;
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
|
|
||||||
|
|
||||||
.bss ALIGN(4) (NOLOAD):
|
|
||||||
{
|
|
||||||
__bss_start__ = ABSOLUTE(.);
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__bss_end__ = ABSOLUTE(.) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
.data ALIGN(4) : AT (__data_lma)
|
|
||||||
{
|
|
||||||
__data_start__ = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__data_end__ = ABSOLUTE(.);
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
__iwram_overlay_lma = __data_lma + SIZEOF(.data);
|
|
||||||
|
|
||||||
PROVIDE (edata = .);
|
|
||||||
__iwram_overlay_start = . ;
|
|
||||||
|
|
||||||
OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
|
|
||||||
{
|
|
||||||
.iwram0 { *(.iwram0) . = ALIGN(4);}
|
|
||||||
.iwram1 { *(.iwram1) . = ALIGN(4);}
|
|
||||||
.iwram2 { *(.iwram2) . = ALIGN(4);}
|
|
||||||
.iwram3 { *(.iwram3) . = ALIGN(4);}
|
|
||||||
.iwram4 { *(.iwram4) . = ALIGN(4);}
|
|
||||||
.iwram5 { *(.iwram5) . = ALIGN(4);}
|
|
||||||
.iwram6 { *(.iwram6) . = ALIGN(4);}
|
|
||||||
.iwram7 { *(.iwram7) . = ALIGN(4);}
|
|
||||||
.iwram8 { *(.iwram8) . = ALIGN(4);}
|
|
||||||
.iwram9 { *(.iwram9) . = ALIGN(4);}
|
|
||||||
} >iwram = 0xff
|
|
||||||
|
|
||||||
__ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9);
|
|
||||||
|
|
||||||
__iwram_overlay_end = __ewram_lma ;
|
|
||||||
|
|
||||||
/* v1.3 */
|
|
||||||
__ewram_start = __ewram_lma ;
|
|
||||||
|
|
||||||
.ewram __ewram_start : AT (__ewram_lma)
|
|
||||||
{
|
|
||||||
*(.ewram)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__ewram_end = ABSOLUTE(.);
|
|
||||||
} >ewram = 0xff
|
|
||||||
|
|
||||||
__ewram_overlay_lma = __ewram_lma + SIZEOF(.ewram);
|
|
||||||
|
|
||||||
.sbss ALIGN(4)(NOLOAD):
|
|
||||||
{
|
|
||||||
__sbss_start__ = ABSOLUTE(.);
|
|
||||||
*(.sbss)
|
|
||||||
. = ALIGN(4);
|
|
||||||
__sbss_end__ = ABSOLUTE(.);
|
|
||||||
__end__ = ABSOLUTE(.);
|
|
||||||
__eheap_start = ABSOLUTE(.);
|
|
||||||
}
|
|
||||||
|
|
||||||
OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma)
|
|
||||||
{
|
|
||||||
.ewram0 { *(.ewram0) . = ALIGN(4);}
|
|
||||||
.ewram1 { *(.ewram1) . = ALIGN(4);}
|
|
||||||
.ewram2 { *(.ewram2) . = ALIGN(4);}
|
|
||||||
.ewram3 { *(.ewram3) . = ALIGN(4);}
|
|
||||||
.ewram4 { *(.ewram4) . = ALIGN(4);}
|
|
||||||
.ewram5 { *(.ewram5) . = ALIGN(4);}
|
|
||||||
.ewram6 { *(.ewram6) . = ALIGN(4);}
|
|
||||||
.ewram7 { *(.ewram7) . = ALIGN(4);}
|
|
||||||
.ewram8 { *(.ewram8) . = ALIGN(4);}
|
|
||||||
.ewram9 { *(.ewram9) . = ALIGN(4);}
|
|
||||||
} >ewram = 0xff
|
|
||||||
__ewram_overlay_end = ABSOLUTE(.);
|
|
||||||
|
|
||||||
__eheap_start = __ewram_overlay_end ;
|
|
||||||
|
|
||||||
_end = __ewram_overlay_end;
|
|
||||||
__end__ = __ewram_overlay_end;
|
|
||||||
__rom_end__ = __ewram_overlay_end;
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
-T gba_mb.ld%s %(old_link)
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
gba_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,165 +0,0 @@
|
|||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
ram : ORIGIN = 0xc000000, LENGTH = 8M
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
__text_start = . ;
|
|
||||||
KEEP (*(.init))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0xff
|
|
||||||
.plt : { *(.plt) } >ram = 0xff
|
|
||||||
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
|
||||||
{
|
|
||||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
KEEP (*(.text.*personality*))
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0xff
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
} >ram =0xff
|
|
||||||
|
|
||||||
__text_end = . ;
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0xff
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ram
|
|
||||||
__exidx_start = .;
|
|
||||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ram
|
|
||||||
__exidx_end = .;
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
|
||||||
could instead move the label definition inside the section, but
|
|
||||||
the linker would then create the section even if it turns out to
|
|
||||||
be empty, which isn't pretty. */
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >ram = 0xff
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
.init_array : { KEEP (*(.init_array)) } >ram = 0xff
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
.fini_array : { KEEP (*(.fini_array)) } >ram = 0xff
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0
|
|
||||||
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0
|
|
||||||
.jcr : { KEEP (*(.jcr)) } >ram = 0
|
|
||||||
.got : { *(.got.plt) *(.got) } >ram = 0
|
|
||||||
__ro_end = . ;
|
|
||||||
|
|
||||||
.data ALIGN(4) :
|
|
||||||
{
|
|
||||||
__data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__data_end = ABSOLUTE(.);
|
|
||||||
} >ram = 0xff
|
|
||||||
|
|
||||||
|
|
||||||
.bss ALIGN(4) :
|
|
||||||
{
|
|
||||||
__bss_start = ABSOLUTE(.);
|
|
||||||
/* __bss_start__ = ABSOLUTE(.); */
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__bss_end = ABSOLUTE(.) ;
|
|
||||||
__end__ = ABSOLUTE(.) ;
|
|
||||||
} > ram
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T gp32.ld%s
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
gp32_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
.section ".init"
|
|
||||||
.code 32
|
|
||||||
.align
|
|
||||||
.global _start
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_start:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
b _start2
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ AXF addresses
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_text_start:
|
|
||||||
.word __text_start
|
|
||||||
_ro_end:
|
|
||||||
.word __ro_end
|
|
||||||
_data_start:
|
|
||||||
.word __data_start
|
|
||||||
.word __bss_end
|
|
||||||
_bss_start:
|
|
||||||
.word __bss_start
|
|
||||||
_bss_end:
|
|
||||||
.word __bss_end
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ GamePark magic sequence
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
.word 0x44450011
|
|
||||||
.word 0x44450011
|
|
||||||
.word 0x01234567
|
|
||||||
.word 0x12345678
|
|
||||||
.word 0x23456789
|
|
||||||
.word 0x34567890
|
|
||||||
.word 0x45678901
|
|
||||||
.word 0x56789012
|
|
||||||
.word 0x23456789
|
|
||||||
.word 0x34567890
|
|
||||||
.word 0x45678901
|
|
||||||
.word 0x56789012
|
|
||||||
.word 0x23456789
|
|
||||||
.word 0x34567890
|
|
||||||
.word 0x45678901
|
|
||||||
.word 0x56789012
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_start2:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mrs r0, CPSR
|
|
||||||
orr r0, r0, #0xC0
|
|
||||||
msr CPSR_ctl, r0
|
|
||||||
|
|
||||||
mrs r0, CPSR
|
|
||||||
bic r0, r0, #0xC0
|
|
||||||
orr r0, r0, #0x40
|
|
||||||
msr CPSR_ctl,r0
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ global constructors
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r3,=_call_main
|
|
||||||
mov lr,r3
|
|
||||||
ldr r3,=__libc_init_array
|
|
||||||
bx r3
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Jump to user code
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
_call_main:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
mov lr, #0
|
|
||||||
ldr r3, =main
|
|
||||||
bx r3
|
|
||||||
|
|
||||||
.pool
|
|
||||||
.end
|
|
||||||
@@ -1,213 +0,0 @@
|
|||||||
/* GP32 Linker Script v1.2 by Jeff F */
|
|
||||||
/* v1.0 - Original release */
|
|
||||||
/* v1.1 - Cleaned up and added MEMORY command */
|
|
||||||
/* v1.2 - DJWillis - Added propper .init and */
|
|
||||||
/* .fini for GCC 3.3.2 and above */
|
|
||||||
/* */
|
|
||||||
/* This file is released into the public domain */
|
|
||||||
/* for commercial or non-commercial use with no */
|
|
||||||
/* restrictions placed upon it. */
|
|
||||||
/* */
|
|
||||||
/* NOTE!!!: This linker script defines the RAM */
|
|
||||||
/* start addresses. In order for it to work */
|
|
||||||
/* properly, remove -Ttext and -Tbss linker */
|
|
||||||
/* options from your makefile if they are */
|
|
||||||
/* present. */
|
|
||||||
/* */
|
|
||||||
/* You can use the following to view section */
|
|
||||||
/* addresses in your .elf file: */
|
|
||||||
/* objdump -h file.elf */
|
|
||||||
/* */
|
|
||||||
/* Please note that empty sections may incorrectly*/
|
|
||||||
/* list the lma address as the vma address for */
|
|
||||||
/* some versions of objdump. */
|
|
||||||
|
|
||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
/* SEARCH_DIR(/bin/arm); */
|
|
||||||
|
|
||||||
/* Then use it like this: IWRAMHEAP */
|
|
||||||
/* The linker script function "var1 += var2;" sometimes */
|
|
||||||
/* reports incorrect values in the *.map file but the */
|
|
||||||
/* actual value it calculates is usually, if not always, */
|
|
||||||
/* correct. If you leave out the ". = ALIGN(4);" at the */
|
|
||||||
/* end of each section then the return value of SIZEOF() */
|
|
||||||
/* is sometimes incorrect and "var1 += var2;" appears to */
|
|
||||||
/* not work as well. "var1 += var2" style functions are */
|
|
||||||
/* avoided below as a result. */
|
|
||||||
|
|
||||||
/* The linker script MEMORY directive is not used here due */
|
|
||||||
/* to the fact that __text_start is not always a fixed value. */
|
|
||||||
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
ram : ORIGIN = 0xc000000, LENGTH = 8M
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.text : /* ALIGN (4): */
|
|
||||||
{
|
|
||||||
__text_start = . ;
|
|
||||||
|
|
||||||
*(EXCLUDE_FILE (*text.iwram*) .text)
|
|
||||||
*(.text.*)
|
|
||||||
*(.stub)
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
*(.gnu.linkonce.t*)
|
|
||||||
*(.glue_7)
|
|
||||||
*(.glue_7t)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0xff
|
|
||||||
|
|
||||||
__text_end = . ;
|
|
||||||
|
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
*(.init)
|
|
||||||
} > ram = 0xff
|
|
||||||
|
|
||||||
.jcr :
|
|
||||||
{
|
|
||||||
*(.jcr)
|
|
||||||
} > ram = 0xff
|
|
||||||
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
*(.fini)
|
|
||||||
} > ram = 0xff
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata)
|
|
||||||
*all.rodata*(*)
|
|
||||||
*(.roda)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.gnu.linkonce.r*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0xff
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ram
|
|
||||||
__exidx_start = .;
|
|
||||||
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ram
|
|
||||||
__exidx_end = .;
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
|
||||||
could instead move the label definition inside the section, but
|
|
||||||
the linker would then create the section even if it turns out to
|
|
||||||
be empty, which isn't pretty. */
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >ram = 0xff
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
.init_array : { KEEP (*(.init_array)) } >ram = 0xff
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
.fini_array : { KEEP (*(.fini_array)) } >ram = 0xff
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
|
|
||||||
.ctors :
|
|
||||||
{
|
|
||||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
|
||||||
we make sure it is first. Because this is a wildcard, it
|
|
||||||
doesn't matter if the user does not actually link against
|
|
||||||
crtbegin.o; the linker won't look for a file to match a
|
|
||||||
wildcard. The wildcard also means that it doesn't matter which
|
|
||||||
directory crtbegin.o is in. */
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0
|
|
||||||
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0
|
|
||||||
|
|
||||||
.eh_frame :
|
|
||||||
{
|
|
||||||
KEEP (*(.eh_frame))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0
|
|
||||||
|
|
||||||
.gcc_except_table :
|
|
||||||
{
|
|
||||||
*(.gcc_except_table)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0
|
|
||||||
__ro_end = . ;
|
|
||||||
|
|
||||||
.data ALIGN(4) :
|
|
||||||
{
|
|
||||||
__data_start = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d*)
|
|
||||||
CONSTRUCTORS
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
} >ram = 0xff
|
|
||||||
|
|
||||||
__data_end = . ;
|
|
||||||
|
|
||||||
.bss ALIGN(4) :
|
|
||||||
{
|
|
||||||
__bss_start = ABSOLUTE(.);
|
|
||||||
/* __bss_start__ = ABSOLUTE(.); */
|
|
||||||
*(.dynbss)
|
|
||||||
*(.gnu.linkonce.b*)
|
|
||||||
*(COMMON)
|
|
||||||
*(.bss*)
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
|
||||||
__bss_end = ABSOLUTE(.);
|
|
||||||
__end__ = ABSOLUTE(.);
|
|
||||||
} > ram
|
|
||||||
|
|
||||||
|
|
||||||
__eheap_end = . ;
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
.comment 0 : { *(.comment) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
/* SGI/MIPS DWARF 2 extensions */
|
|
||||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
|
||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
|
||||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T gp32_gpsdk.ld%s
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
gp32_gpsdk_crt0%O%s crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -1,246 +0,0 @@
|
|||||||
@****************************************************
|
|
||||||
@* gp32 crt0.S v1.0 by Jeff F *
|
|
||||||
@****************************************************
|
|
||||||
|
|
||||||
@ v1.0 - Original release
|
|
||||||
@
|
|
||||||
@ This file is released into the public domain for commercial
|
|
||||||
@ or non-commercial usage with no restrictions placed upon it.
|
|
||||||
|
|
||||||
.TEXT
|
|
||||||
|
|
||||||
@ Note: Normally it is the job of crt0.S to clear the BSS
|
|
||||||
@ (Zero Initialized) section to 0x00, but in the case of
|
|
||||||
@ the gp32 we do not have to do this because it is done
|
|
||||||
@ by the gp32 bios after it loads the app.
|
|
||||||
|
|
||||||
@ The official sdt dev kit uses 'Main ()' as the entry
|
|
||||||
@ point. If you would rather use 'main ()' instead then
|
|
||||||
@ comment out the next line.
|
|
||||||
@
|
|
||||||
@ You have to use 'main ()' at some point in your program
|
|
||||||
@ if you want to do c++ code. GCC will do a call to constructor
|
|
||||||
@ setup before executing 'main ()'. Using 'main ()' also increases
|
|
||||||
@ your program size by ~5500 bytes.
|
|
||||||
|
|
||||||
@ .equ __OfficialEntry, 1
|
|
||||||
|
|
||||||
@ The official sdt dev kit initializes various things in init.o
|
|
||||||
@ Crt0.S performs similar tasks for compatibility. If you don't
|
|
||||||
@ wish to use the official libs, or those that are compatible,
|
|
||||||
@ then you need to comment out the next line to prevent link errors.
|
|
||||||
|
|
||||||
.equ __OfficialInits, 1
|
|
||||||
|
|
||||||
|
|
||||||
.GLOBAL _start
|
|
||||||
_start:
|
|
||||||
.ALIGN
|
|
||||||
.CODE 32
|
|
||||||
|
|
||||||
@ Start Vector
|
|
||||||
|
|
||||||
b _GpInit
|
|
||||||
|
|
||||||
.word __text_start @ Start of text (Read Only) section
|
|
||||||
_roe: .word __ro_end @ End "
|
|
||||||
_rws: .word __data_start @ Start of data (Read/Write) section
|
|
||||||
.word __bss_end @ End of bss (this is the way sdt does it for some reason)
|
|
||||||
_zis: .word __bss_start @ Start of bss (Zero Initialized) section
|
|
||||||
_zie: .word __bss_end @ End "
|
|
||||||
|
|
||||||
.word 0x44450011
|
|
||||||
.word 0x44450011
|
|
||||||
|
|
||||||
.word 0x01234567
|
|
||||||
.word 0x12345678
|
|
||||||
.word 0x23456789
|
|
||||||
.word 0x34567890
|
|
||||||
.word 0x45678901
|
|
||||||
.word 0x56789012
|
|
||||||
.word 0x23456789
|
|
||||||
.word 0x34567890
|
|
||||||
.word 0x45678901
|
|
||||||
.word 0x56789012
|
|
||||||
.word 0x23456789
|
|
||||||
.word 0x34567890
|
|
||||||
.word 0x45678901
|
|
||||||
.word 0x56789012
|
|
||||||
|
|
||||||
_GpInit:
|
|
||||||
mrs r0,CPSR
|
|
||||||
orr r0,r0,#0xc0
|
|
||||||
msr CPSR_fsxc,r0
|
|
||||||
|
|
||||||
.ifdef __OfficialInits
|
|
||||||
|
|
||||||
@ Call function in user_init.s
|
|
||||||
@ bl asm_user_entry
|
|
||||||
|
|
||||||
@ Get pointer to GpSurfaceSet routine
|
|
||||||
mov r0,#0
|
|
||||||
swi 0xb
|
|
||||||
ldr r1,=GpSurfaceSet
|
|
||||||
ldr r2,=GpSurfaceFlip
|
|
||||||
str r0,[r1]
|
|
||||||
str r0,[r2]
|
|
||||||
|
|
||||||
@ Get time passed
|
|
||||||
mov r0,#6
|
|
||||||
swi 0xb
|
|
||||||
ldr r1,=_timepassed
|
|
||||||
str r0,[r1]
|
|
||||||
|
|
||||||
@ Get button stuff
|
|
||||||
mov r0,#0
|
|
||||||
swi 0x10
|
|
||||||
ldr r2,=_reg_io_key_a
|
|
||||||
ldr r3,=_reg_io_key_b
|
|
||||||
str r0,[r2]
|
|
||||||
str r1,[r3]
|
|
||||||
|
|
||||||
@ Set heap start location
|
|
||||||
ldr r0,_zie
|
|
||||||
ldr r1,=HEAPSTART
|
|
||||||
str r0,[r1]
|
|
||||||
|
|
||||||
@ Set heap end location
|
|
||||||
mov r0,#5
|
|
||||||
swi 0xb
|
|
||||||
ldr r1,=HEAPEND
|
|
||||||
sub r0,r0,#255
|
|
||||||
bic r0,r0,#3
|
|
||||||
str r0,[r1]
|
|
||||||
|
|
||||||
@ Set App Argument
|
|
||||||
swi 0x15
|
|
||||||
|
|
||||||
mov r10,r0
|
|
||||||
mov r11,r1 @ possibly not needed but left in anyway
|
|
||||||
|
|
||||||
mrs r0,CPSR
|
|
||||||
bic r0,r0,#192
|
|
||||||
orr r0,r0,#64
|
|
||||||
msr CPSR_fsxc,r0
|
|
||||||
|
|
||||||
mov r0,r10
|
|
||||||
mov r1,r11 @ possibly not needed but left in anyway
|
|
||||||
.endif
|
|
||||||
|
|
||||||
@ Jump to Main ()
|
|
||||||
|
|
||||||
.ifdef __OfficialEntry
|
|
||||||
ldr r3,=Main
|
|
||||||
.else
|
|
||||||
ldr r3,=main
|
|
||||||
.endif
|
|
||||||
bx r3 @ Init.o uses 'mov pc,r3' but
|
|
||||||
@ 'bx r3' is used here instead. This way
|
|
||||||
@ the main function can be ARM or Thumb.
|
|
||||||
|
|
||||||
.ifdef __OfficialInits
|
|
||||||
|
|
||||||
swi 0x12
|
|
||||||
orr r1,r1,r2
|
|
||||||
and r1,r1,r3
|
|
||||||
eor r1,r1,r4
|
|
||||||
mov r5,r1,lsr #4
|
|
||||||
add r1,r1,r7
|
|
||||||
sub r7,r7,r1
|
|
||||||
mov r8,#0
|
|
||||||
mov pc,r8
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
b .
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
.GLOBAL _fw_init_for_dbg
|
|
||||||
_fw_init_for_dbg:
|
|
||||||
stmdb sp!,{r0-r12}
|
|
||||||
|
|
||||||
mov r10,lr
|
|
||||||
mov r11,sp
|
|
||||||
|
|
||||||
bic r0,r0,#31 @ 0x1f
|
|
||||||
orr r1,r0,#17 @ 0x11
|
|
||||||
orr r2,r0,#19 @ 0x13
|
|
||||||
msr cpsr_cxsf,r1
|
|
||||||
mov r12,#4
|
|
||||||
add r12,r12,pc
|
|
||||||
msr cpsr_cxsf,r2
|
|
||||||
swi 0x1ff
|
|
||||||
|
|
||||||
@ bl asm_user_entry_path
|
|
||||||
|
|
||||||
mov r0,r11
|
|
||||||
mov r1,r10
|
|
||||||
add r0,r0,#52
|
|
||||||
ldr r2,[r0]
|
|
||||||
mov lr,r1
|
|
||||||
stmdb sp!,{r2}
|
|
||||||
stmdb sp!,{r0-r12,lr}
|
|
||||||
|
|
||||||
@ Copy RW Base - ZI Base
|
|
||||||
ldr r0,=_roe @ |Image$$RO$$Limit|
|
|
||||||
ldr r3,=_zis @ |Image$$ZI$$Base|
|
|
||||||
ldr r2,=_rws @ |Image$$RW$$Base|
|
|
||||||
sub r3,r3,r2
|
|
||||||
CopyRWData:
|
|
||||||
cmp r3,#36
|
|
||||||
blt CopyRWData2
|
|
||||||
ldmia r0!,{r4-r12}
|
|
||||||
stmia r2!,{r4-r12}
|
|
||||||
sub r3,r3,#36
|
|
||||||
b CopyRWData
|
|
||||||
CopyRWData2:
|
|
||||||
cmp r3,#0
|
|
||||||
ble CopyRWData3
|
|
||||||
ldr r4,[r0],#4
|
|
||||||
str r4,[r2],#4
|
|
||||||
sub r3,r3,#4
|
|
||||||
b CopyRWData2
|
|
||||||
CopyRWData3:
|
|
||||||
|
|
||||||
@ Clear ZI section
|
|
||||||
ldr r1,=_zie @ |Image$$ZI$$Limit|
|
|
||||||
ldr r0,=_zis @ |Image$$ZI$$Base|
|
|
||||||
mov r2,#0
|
|
||||||
mov r3,r2
|
|
||||||
mov r4,r2
|
|
||||||
mov r5,r2
|
|
||||||
mov r6,r2
|
|
||||||
mov r7,r2
|
|
||||||
mov r8,r2
|
|
||||||
mov r9,r2
|
|
||||||
mov r10,r2
|
|
||||||
mov r11,r2
|
|
||||||
mov r12,r2
|
|
||||||
CopyZIData:
|
|
||||||
stmia r0!,{r2-r12}
|
|
||||||
cmp r0,r1
|
|
||||||
blt CopyZIData
|
|
||||||
|
|
||||||
ldmia sp!,{r0-r12,pc}
|
|
||||||
|
|
||||||
.endif
|
|
||||||
|
|
||||||
.ALIGN
|
|
||||||
.POOL
|
|
||||||
|
|
||||||
|
|
||||||
.END
|
|
||||||
|
|
||||||
@@ -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)
|
|
||||||
593
dkarm-eabi/patches/gcc-15.1.0.patch
Normal file
593
dkarm-eabi/patches/gcc-15.1.0.patch
Normal file
@@ -0,0 +1,593 @@
|
|||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
index 40b50dc969e..16b1224f3ec 100644
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -1508,6 +1508,11 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*)
|
||||||
|
tm_file="$tm_file newlib-stdint.h"
|
||||||
|
tmake_file="${tmake_file} arm/t-bpabi"
|
||||||
|
use_gcc_stdint=wrap
|
||||||
|
+ tm_file="${tm_file} devkitpro.h"
|
||||||
|
+ extra_options="${extra_options} devkitpro.opt"
|
||||||
|
+ case ${enable_threads} in
|
||||||
|
+ "" | yes | posix) thread_file='posix' ;;
|
||||||
|
+ esac
|
||||||
|
;;
|
||||||
|
arm*-*-fuchsia*)
|
||||||
|
tm_file="${tm_file} fuchsia.h arm/fuchsia-elf.h glibc-stdint.h"
|
||||||
|
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
|
||||||
|
index 1939d55b9fd..62d425cb596 100644
|
||||||
|
--- a/gcc/config/arm/arm-cpus.in
|
||||||
|
+++ b/gcc/config/arm/arm-cpus.in
|
||||||
|
@@ -416,7 +416,7 @@ begin arch armv6k
|
||||||
|
tune for mpcore
|
||||||
|
tune flags CO_PROC
|
||||||
|
base 6K
|
||||||
|
- isa ARMv6k
|
||||||
|
+ isa ARMv6k VFPv2 FP_DBL
|
||||||
|
option fp add VFPv2 FP_DBL
|
||||||
|
optalias vfpv2 fp
|
||||||
|
option nofp remove ALL_FP
|
||||||
|
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
|
||||||
|
index fdfdf9c580b..add129f0a62 100644
|
||||||
|
--- a/gcc/config/arm/t-arm-elf
|
||||||
|
+++ b/gcc/config/arm/t-arm-elf
|
||||||
|
@@ -16,120 +16,22 @@
|
||||||
|
# along with GCC; see the file COPYING3. If not see
|
||||||
|
# <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
-# Build a very basic set of libraries that should cater for most cases.
|
||||||
|
-
|
||||||
|
-# Single-precision floating-point is NOT supported; we don't build a
|
||||||
|
-# suitable library for that. Use the rm-profile config in that case.
|
||||||
|
-
|
||||||
|
-# PART 1 - Useful groups of options
|
||||||
|
-
|
||||||
|
-dp_fpus := vfp vfpv2 vfpv3 vfpv3-fp16 vfpv3-d16 vfpv3-d16-fp16 \
|
||||||
|
- neon neon-vfpv3 neon-fp16 vfpv4 neon-vfpv4 vfpv4-d16 \
|
||||||
|
- fpv5-d16 fp-armv8 neon-fp-armv8 crypto-neon-fp-armv8 \
|
||||||
|
- vfp3
|
||||||
|
-
|
||||||
|
-sp_fpus := vfpv3xd vfpv3xd-fp16 fpv4-sp-d16 fpv5-sp-d16
|
||||||
|
-
|
||||||
|
-v7a_fps := vfpv3 vfpv3-fp16 vfpv4 simd neon-fp16 neon-vfpv4
|
||||||
|
-v7ve_fps := vfpv3-d16 vfpv3 vfpv3-d16-fp16 vfpv3-fp16 vfpv4 neon \
|
||||||
|
- neon-fp16 simd
|
||||||
|
-
|
||||||
|
-# Not all these permutations exist for all architecture variants, but
|
||||||
|
-# it seems to work ok.
|
||||||
|
-v8_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
|
||||||
|
-
|
||||||
|
-v9_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
|
||||||
|
-
|
||||||
|
-# We don't do anything special with these. Pre-v4t probably doesn't work.
|
||||||
|
-all_early_nofp := armv4 armv4t armv5t
|
||||||
|
-
|
||||||
|
-all_early_arch := armv5tej armv6 armv6j armv6k armv6z armv6kz \
|
||||||
|
- armv6zk armv6t2 iwmmxt iwmmxt2
|
||||||
|
-
|
||||||
|
-all_v7_a_r := armv7-a armv7ve armv7-r
|
||||||
|
-
|
||||||
|
-all_v8_archs := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a armv8.4-a \
|
||||||
|
- armv8.5-a armv8.6-a
|
||||||
|
-
|
||||||
|
-all_v9_archs := armv9-a
|
||||||
|
-
|
||||||
|
-# No floating point variants, require thumb1 softfp
|
||||||
|
-all_nofp_t := armv6-m armv6s-m armv8-m.base
|
||||||
|
-
|
||||||
|
-all_nofp_t2 := armv7-m
|
||||||
|
-
|
||||||
|
-all_sp_only := armv7e-m armv8-m.main
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS =
|
||||||
|
-MULTILIB_DIRNAMES =
|
||||||
|
+MULTILIB_OPTIONS = mthumb mbig-endian march=armv6k march=armv6s-m mfloat-abi=hard mfloat-abi=soft
|
||||||
|
+MULTILIB_DIRNAMES = thumb be armv6k v6-m fpu nofp
|
||||||
|
MULTILIB_EXCEPTIONS =
|
||||||
|
MULTILIB_MATCHES =
|
||||||
|
-MULTILIB_REUSE =
|
||||||
|
-
|
||||||
|
-# PART 2 - multilib build rules
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS += marm/mthumb
|
||||||
|
-MULTILIB_DIRNAMES += arm thumb
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS += mfpu=auto
|
||||||
|
-MULTILIB_DIRNAMES += autofp
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS += march=armv5te+fp/march=armv7+fp
|
||||||
|
-MULTILIB_DIRNAMES += v5te v7
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS += mfloat-abi=hard
|
||||||
|
-MULTILIB_DIRNAMES += fpu
|
||||||
|
-
|
||||||
|
-# Build a total of 4 library variants (base options plus the following):
|
||||||
|
-MULTILIB_REQUIRED += mthumb
|
||||||
|
-MULTILIB_REQUIRED += marm/mfpu=auto/march=armv5te+fp/mfloat-abi=hard
|
||||||
|
-MULTILIB_REQUIRED += mthumb/mfpu=auto/march=armv7+fp/mfloat-abi=hard
|
||||||
|
-
|
||||||
|
-# PART 3 - Match rules
|
||||||
|
-
|
||||||
|
-# Map all supported FPUs onto mfpu=auto
|
||||||
|
-MULTILIB_MATCHES += $(foreach FPU, $(dp_fpus), \
|
||||||
|
- mfpu?auto=mfpu?$(FPU))
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += march?armv5te+fp=march?armv5te
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \
|
||||||
|
- march?armv5te+fp=march?$(ARCH) \
|
||||||
|
- march?armv5te+fp=march?$(ARCH)+fp)
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += march?armv7+fp=march?armv7
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7a_fps), \
|
||||||
|
- march?armv7+fp=march?armv7-a+$(FPARCH))
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7ve_fps), \
|
||||||
|
- march?armv7+fp=march?armv7ve+$(FPARCH))
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v7_a_r), \
|
||||||
|
- march?armv7+fp=march?$(ARCH) \
|
||||||
|
- march?armv7+fp=march?$(ARCH)+fp)
|
||||||
|
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v8_archs), \
|
||||||
|
- march?armv7+fp=march?$(ARCH) \
|
||||||
|
- $(foreach FPARCH, $(v8_fps), \
|
||||||
|
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
|
||||||
|
+MULTILIB_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard mthumb/march=armv6s-m/mfloat-abi=soft
|
||||||
|
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v9_archs), \
|
||||||
|
- march?armv7+fp=march?$(ARCH) \
|
||||||
|
- $(foreach FPARCH, $(v9_fps), \
|
||||||
|
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
|
||||||
|
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, armv7e-m armv8-m.mainline, \
|
||||||
|
- march?armv7+fp=march?$(ARCH)+fp.dp)
|
||||||
|
+MULTILIB_MATCHES += march?armv6k=mtune?mpcore
|
||||||
|
+MULTILIB_MATCHES += march?armv6k=mcpu?mpcore
|
||||||
|
|
||||||
|
-# PART 4 - Reuse rules
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m0
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0plus
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m0plus
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m1
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m1
|
||||||
|
|
||||||
|
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto
|
||||||
|
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto/march.armv5te+fp
|
||||||
|
-MULTILIB_REUSE += mthumb=mthumb/march.armv5te+fp
|
||||||
|
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=marm/march.armv5te+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=march.armv5te+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=mfpu.auto/march.armv5te+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mthumb/march.armv7+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mfpu.auto/march.armv7+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=march.armv7+fp/mfloat-abi.hard
|
||||||
|
+MULTILIB_REUSE = mthumb/march.armv6s-m/mfloat-abi.soft=mthumb/march.armv6s-m
|
||||||
|
diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
|
||||||
|
index ab3918283d8..c14a1955cad 100644
|
||||||
|
--- a/gcc/config/arm/unknown-elf.h
|
||||||
|
+++ b/gcc/config/arm/unknown-elf.h
|
||||||
|
@@ -29,7 +29,7 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Now we define the strings used to build the spec file. */
|
||||||
|
-#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
|
||||||
|
+#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s"
|
||||||
|
|
||||||
|
#undef STARTFILE_SPEC
|
||||||
|
#define STARTFILE_SPEC \
|
||||||
|
@@ -93,4 +93,5 @@
|
||||||
|
udivmoddi4, which will depend on the exception unwind routines,
|
||||||
|
which will depend on abort, which is defined in libc. */
|
||||||
|
#undef LINK_GCC_C_SEQUENCE_SPEC
|
||||||
|
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:%L} --end-group"
|
||||||
|
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
|
||||||
|
+
|
||||||
|
diff --git a/gcc/config/devkitpro.h b/gcc/config/devkitpro.h
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..180a9ea8553
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.h
|
||||||
|
@@ -0,0 +1,27 @@
|
||||||
|
+/* Definitions for devkitPro toolchains.
|
||||||
|
+ Copyright (C) 2016-2018 Free Software Foundation, Inc.
|
||||||
|
+ This file is part of GCC.
|
||||||
|
+ GCC is free software; you can redistribute it and/or modify it
|
||||||
|
+ under the terms of the GNU General Public License as published
|
||||||
|
+ by the Free Software Foundation; either version 3, or (at your
|
||||||
|
+ option) any later version.
|
||||||
|
+ GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
+ License for more details.
|
||||||
|
+ Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
+ permissions described in the GCC Runtime Library Exception, version
|
||||||
|
+ 3.1, as published by the Free Software Foundation.
|
||||||
|
+ You should have received a copy of the GNU General Public License and
|
||||||
|
+ a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
+ <http://www.gnu.org/licenses/>. */
|
||||||
|
+
|
||||||
|
+#undef TARGET_OS_CPP_BUILTINS
|
||||||
|
+#define TARGET_OS_CPP_BUILTINS() \
|
||||||
|
+ do { \
|
||||||
|
+ builtin_define ("__DEVKITPRO__"); \
|
||||||
|
+ builtin_define ("__DEVKITARM__"); \
|
||||||
|
+ } while (0)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
diff --git a/gcc/config/devkitpro.opt b/gcc/config/devkitpro.opt
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..9acbbf9d27c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.opt
|
||||||
|
@@ -0,0 +1,29 @@
|
||||||
|
+; Options for devkitPro toolchains.
|
||||||
|
+
|
||||||
|
+; Copyright (C) 2011-2018 Free Software Foundation, Inc.
|
||||||
|
+;
|
||||||
|
+; This file is part of GCC.
|
||||||
|
+;
|
||||||
|
+; GCC is free software; you can redistribute it and/or modify it under
|
||||||
|
+; the terms of the GNU General Public License as published by the Free
|
||||||
|
+; Software Foundation; either version 3, or (at your option) any later
|
||||||
|
+; version.
|
||||||
|
+;
|
||||||
|
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
+; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
+; for more details.
|
||||||
|
+;
|
||||||
|
+; You should have received a copy of the GNU General Public License
|
||||||
|
+; along with GCC; see the file COPYING3. If not see
|
||||||
|
+; <http://www.gnu.org/licenses/>.
|
||||||
|
+
|
||||||
|
+; See the GCC internals manual (options.texi) for a description of
|
||||||
|
+; this file's format.
|
||||||
|
+
|
||||||
|
+; Please try to keep this file in ASCII collating order.
|
||||||
|
+
|
||||||
|
+pthread
|
||||||
|
+Driver
|
||||||
|
+
|
||||||
|
+; This comment is to ensure we retain the blank line above.
|
||||||
|
diff --git a/gcc/config/devkitpro.opt.urls b/gcc/config/devkitpro.opt.urls
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..ab7b466aa71
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.opt.urls
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+; Autogenerated by regenerate-opt-urls.py from gcc/config/devkitpro.opt and generated HTML
|
||||||
|
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
|
||||||
|
index e083f49f3da..1b81e7e88ce 100644
|
||||||
|
--- a/gcc/config/i386/host-mingw32.cc
|
||||||
|
+++ b/gcc/config/i386/host-mingw32.cc
|
||||||
|
@@ -94,6 +94,10 @@ mingw32_gt_pch_get_address (size_t size, int)
|
||||||
|
If we allocate at bottom we need to reserve the address as early
|
||||||
|
as possible and at the same point in each invocation. */
|
||||||
|
|
||||||
|
+#if __MINGW64__
|
||||||
|
+ size = UINT64_C(64 * 1024 * 1024 * 1024);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
res = VirtualAlloc (NULL, size,
|
||||||
|
MEM_RESERVE | MEM_TOP_DOWN,
|
||||||
|
PAGE_NOACCESS);
|
||||||
|
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
|
||||||
|
index 4fd87f2c4a1..6af06f7b032 100644
|
||||||
|
--- a/gcc/gcc.cc
|
||||||
|
+++ b/gcc/gcc.cc
|
||||||
|
@@ -888,6 +888,11 @@ proper position among the other output files. */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifndef LIBGLOSS_SPEC
|
||||||
|
+# define LIBGLOSS_SPEC "-lsysbase"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
|
||||||
|
#ifndef STARTFILE_SPEC
|
||||||
|
#define STARTFILE_SPEC \
|
||||||
|
@@ -1215,6 +1220,7 @@ static const char *link_spec = LINK_SPEC;
|
||||||
|
static const char *lib_spec = LIB_SPEC;
|
||||||
|
static const char *link_gomp_spec = "";
|
||||||
|
static const char *libgcc_spec = LIBGCC_SPEC;
|
||||||
|
+static const char *libgloss_spec = LIBGLOSS_SPEC;
|
||||||
|
static const char *endfile_spec = ENDFILE_SPEC;
|
||||||
|
static const char *startfile_spec = STARTFILE_SPEC;
|
||||||
|
static const char *linker_name_spec = LINKER_NAME;
|
||||||
|
@@ -1727,6 +1733,7 @@ static struct spec_list static_specs[] =
|
||||||
|
INIT_STATIC_SPEC ("lib", &lib_spec),
|
||||||
|
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
|
||||||
|
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
|
||||||
|
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
|
||||||
|
INIT_STATIC_SPEC ("startfile", &startfile_spec),
|
||||||
|
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
|
||||||
|
INIT_STATIC_SPEC ("version", &compiler_version),
|
||||||
|
diff --git a/libcc1/configure b/libcc1/configure
|
||||||
|
index ea689a353c8..98f9d9b21b7 100755
|
||||||
|
--- a/libcc1/configure
|
||||||
|
+++ b/libcc1/configure
|
||||||
|
@@ -5119,7 +5119,7 @@ else
|
||||||
|
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||||
|
# nm: unknown option "B" ignored
|
||||||
|
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
|
||||||
|
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
|
||||||
|
index dddddc7c444..c2502597953 100644
|
||||||
|
--- a/libgcc/config/arm/t-bpabi
|
||||||
|
+++ b/libgcc/config/arm/t-bpabi
|
||||||
|
@@ -17,4 +17,4 @@ SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver
|
||||||
|
# On ARM, specifying -fnon-call-exceptions will needlessly pull in
|
||||||
|
# the unwinder in simple programs which use 64-bit division. Omitting
|
||||||
|
# the option is safe.
|
||||||
|
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
|
||||||
|
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
|
||||||
|
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
|
||||||
|
index b9767cd1eee..362689c9f0b 100644
|
||||||
|
--- a/libgcc/crtstuff.c
|
||||||
|
+++ b/libgcc/crtstuff.c
|
||||||
|
@@ -326,7 +326,7 @@ register_tm_clones (void)
|
||||||
|
|
||||||
|
#ifdef OBJECT_FORMAT_ELF
|
||||||
|
|
||||||
|
-#if DEFAULT_USE_CXA_ATEXIT
|
||||||
|
+#if 1 /* DEFAULT_USE_CXA_ATEXIT */
|
||||||
|
/* Declare the __dso_handle variable. It should have a unique value
|
||||||
|
in every shared-object; in a main program its value is zero. The
|
||||||
|
object should in any case be protected. This means the instance
|
||||||
|
diff --git a/libgcc/gthr.h b/libgcc/gthr.h
|
||||||
|
index 557417997f4..cb223aa43fc 100644
|
||||||
|
--- a/libgcc/gthr.h
|
||||||
|
+++ b/libgcc/gthr.h
|
||||||
|
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
/* The pe-coff weak support isn't fully compatible to ELF's weak.
|
||||||
|
For static libraries it might would work, but as we need to deal
|
||||||
|
with shared versions too, we disable it for mingw-targets. */
|
||||||
|
-#ifdef __MINGW32__
|
||||||
|
+#if defined( __MINGW32__) || defined(__DEVKITARM__)
|
||||||
|
#undef GTHREAD_USE_WEAK
|
||||||
|
#define GTHREAD_USE_WEAK 0
|
||||||
|
#endif
|
||||||
|
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
|
||||||
|
index 819a1d82876..d81e6057c5b 100755
|
||||||
|
--- a/libstdc++-v3/configure
|
||||||
|
+++ b/libstdc++-v3/configure
|
||||||
|
@@ -893,6 +893,7 @@ infodir
|
||||||
|
docdir
|
||||||
|
oldincludedir
|
||||||
|
includedir
|
||||||
|
+runstatedir
|
||||||
|
localstatedir
|
||||||
|
sharedstatedir
|
||||||
|
sysconfdir
|
||||||
|
@@ -1027,6 +1028,7 @@ datadir='${datarootdir}'
|
||||||
|
sysconfdir='${prefix}/etc'
|
||||||
|
sharedstatedir='${prefix}/com'
|
||||||
|
localstatedir='${prefix}/var'
|
||||||
|
+runstatedir='${localstatedir}/run'
|
||||||
|
includedir='${prefix}/include'
|
||||||
|
oldincludedir='/usr/include'
|
||||||
|
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
|
||||||
|
@@ -1279,6 +1281,15 @@ do
|
||||||
|
| -silent | --silent | --silen | --sile | --sil)
|
||||||
|
silent=yes ;;
|
||||||
|
|
||||||
|
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
|
||||||
|
+ | --runstate | --runstat | --runsta | --runst | --runs \
|
||||||
|
+ | --run | --ru | --r)
|
||||||
|
+ ac_prev=runstatedir ;;
|
||||||
|
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
|
||||||
|
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
|
||||||
|
+ | --run=* | --ru=* | --r=*)
|
||||||
|
+ runstatedir=$ac_optarg ;;
|
||||||
|
+
|
||||||
|
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
||||||
|
ac_prev=sbindir ;;
|
||||||
|
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
||||||
|
@@ -1416,7 +1427,7 @@ fi
|
||||||
|
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
||||||
|
datadir sysconfdir sharedstatedir localstatedir includedir \
|
||||||
|
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
||||||
|
- libdir localedir mandir
|
||||||
|
+ libdir localedir mandir runstatedir
|
||||||
|
do
|
||||||
|
eval ac_val=\$$ac_var
|
||||||
|
# Remove trailing slashes.
|
||||||
|
@@ -1569,6 +1580,7 @@ Fine tuning of the installation directories:
|
||||||
|
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
||||||
|
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
||||||
|
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
||||||
|
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
|
||||||
|
--libdir=DIR object code libraries [EPREFIX/lib]
|
||||||
|
--includedir=DIR C header files [PREFIX/include]
|
||||||
|
--oldincludedir=DIR C header files for non-gcc [/usr/include]
|
||||||
|
@@ -5080,7 +5092,7 @@ else
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -5126,7 +5138,7 @@ else
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -5150,7 +5162,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -5195,7 +5207,7 @@ else
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -5219,7 +5231,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -12280,7 +12292,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 12283 "configure"
|
||||||
|
+#line 12295 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -12386,7 +12398,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 12389 "configure"
|
||||||
|
+#line 12401 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -16182,7 +16194,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
|
||||||
|
# Fake what AC_TRY_COMPILE does.
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16185 "configure"
|
||||||
|
+#line 16197 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
typedef bool atomic_type;
|
||||||
|
@@ -16217,7 +16229,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
|
||||||
|
rm -f conftest*
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16220 "configure"
|
||||||
|
+#line 16232 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
typedef short atomic_type;
|
||||||
|
@@ -16252,7 +16264,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
|
||||||
|
rm -f conftest*
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16255 "configure"
|
||||||
|
+#line 16267 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// NB: _Atomic_word not necessarily int.
|
||||||
|
@@ -16288,7 +16300,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
|
||||||
|
rm -f conftest*
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16291 "configure"
|
||||||
|
+#line 16303 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
typedef long long atomic_type;
|
||||||
|
@@ -16445,7 +16457,7 @@ $as_echo "mutex" >&6; }
|
||||||
|
# unnecessary for this test.
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16448 "configure"
|
||||||
|
+#line 16460 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
_Decimal32 d1;
|
||||||
|
@@ -16487,7 +16499,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
||||||
|
# unnecessary for this test.
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16490 "configure"
|
||||||
|
+#line 16502 "configure"
|
||||||
|
template<typename T1, typename T2>
|
||||||
|
struct same
|
||||||
|
{ typedef T2 type; };
|
||||||
|
@@ -28602,6 +28614,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
|
||||||
|
$as_echo "#define HAVE_MEMALIGN 1" >>confdefs.h
|
||||||
|
|
||||||
|
+ $as_echo "#define HAVE_ALIGNED_ALLOC 1" >>confdefs.h
|
||||||
|
+
|
||||||
|
|
||||||
|
case "${target}" in
|
||||||
|
*-rtems*)
|
||||||
|
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
|
||||||
|
index a6c01b29e94..a8fb1200c8b 100644
|
||||||
|
--- a/libstdc++-v3/configure.ac
|
||||||
|
+++ b/libstdc++-v3/configure.ac
|
||||||
|
@@ -386,6 +386,7 @@ dnl # rather than hardcoding that information.
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_DEFINE(HAVE_MEMALIGN)
|
||||||
|
+ AC_DEFINE(HAVE_ALIGNED_ALLOC)
|
||||||
|
|
||||||
|
case "${target}" in
|
||||||
|
*-rtems*)
|
||||||
|
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
|
||||||
|
index 537774c2668..b15e28d2371 100644
|
||||||
|
--- a/libstdc++-v3/include/Makefile.am
|
||||||
|
+++ b/libstdc++-v3/include/Makefile.am
|
||||||
|
@@ -1436,6 +1436,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
|
||||||
|
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
|
||||||
|
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
|
||||||
|
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
|
||||||
|
+ -e 's/_GLIBCXX___DEVKITARM_GLIBCXX___/__DEVKITARM__/g' \
|
||||||
|
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
|
||||||
|
< $< > $@
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
|
||||||
|
index 7b96b2207f8..80f0effec92 100644
|
||||||
|
--- a/libstdc++-v3/include/Makefile.in
|
||||||
|
+++ b/libstdc++-v3/include/Makefile.in
|
||||||
|
@@ -336,6 +336,7 @@ prefix = @prefix@
|
||||||
|
program_transform_name = @program_transform_name@
|
||||||
|
psdir = @psdir@
|
||||||
|
python_mod_dir = @python_mod_dir@
|
||||||
|
+runstatedir = @runstatedir@
|
||||||
|
sbindir = @sbindir@
|
||||||
|
sharedstatedir = @sharedstatedir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
@@ -1910,6 +1911,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
|
||||||
|
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
|
||||||
|
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
|
||||||
|
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
|
||||||
|
+ -e 's/_GLIBCXX___DEVKITARM_GLIBCXX___/__DEVKITARM__/g' \
|
||||||
|
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
|
||||||
|
< $< > $@
|
||||||
|
|
||||||
|
diff --git a/lto-plugin/configure b/lto-plugin/configure
|
||||||
|
index 28f5dd79cd7..a79f318a4d6 100755
|
||||||
|
--- a/lto-plugin/configure
|
||||||
|
+++ b/lto-plugin/configure
|
||||||
|
@@ -6469,7 +6469,7 @@ else
|
||||||
|
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||||
|
# nm: unknown option "B" ignored
|
||||||
|
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
|
||||||
|
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
593
dkarm-eabi/patches/gcc-15.2.0.patch
Normal file
593
dkarm-eabi/patches/gcc-15.2.0.patch
Normal file
@@ -0,0 +1,593 @@
|
|||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
index 087aaa7be37..63b52b3571b 100644
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -1508,6 +1508,11 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*)
|
||||||
|
tm_file="$tm_file newlib-stdint.h"
|
||||||
|
tmake_file="${tmake_file} arm/t-bpabi"
|
||||||
|
use_gcc_stdint=wrap
|
||||||
|
+ tm_file="${tm_file} devkitpro.h"
|
||||||
|
+ extra_options="${extra_options} devkitpro.opt"
|
||||||
|
+ case ${enable_threads} in
|
||||||
|
+ "" | yes | posix) thread_file='posix' ;;
|
||||||
|
+ esac
|
||||||
|
;;
|
||||||
|
arm*-*-fuchsia*)
|
||||||
|
tm_file="${tm_file} fuchsia.h arm/fuchsia-elf.h glibc-stdint.h"
|
||||||
|
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
|
||||||
|
index 1939d55b9fd..62d425cb596 100644
|
||||||
|
--- a/gcc/config/arm/arm-cpus.in
|
||||||
|
+++ b/gcc/config/arm/arm-cpus.in
|
||||||
|
@@ -416,7 +416,7 @@ begin arch armv6k
|
||||||
|
tune for mpcore
|
||||||
|
tune flags CO_PROC
|
||||||
|
base 6K
|
||||||
|
- isa ARMv6k
|
||||||
|
+ isa ARMv6k VFPv2 FP_DBL
|
||||||
|
option fp add VFPv2 FP_DBL
|
||||||
|
optalias vfpv2 fp
|
||||||
|
option nofp remove ALL_FP
|
||||||
|
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
|
||||||
|
index fdfdf9c580b..add129f0a62 100644
|
||||||
|
--- a/gcc/config/arm/t-arm-elf
|
||||||
|
+++ b/gcc/config/arm/t-arm-elf
|
||||||
|
@@ -16,120 +16,22 @@
|
||||||
|
# along with GCC; see the file COPYING3. If not see
|
||||||
|
# <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
-# Build a very basic set of libraries that should cater for most cases.
|
||||||
|
-
|
||||||
|
-# Single-precision floating-point is NOT supported; we don't build a
|
||||||
|
-# suitable library for that. Use the rm-profile config in that case.
|
||||||
|
-
|
||||||
|
-# PART 1 - Useful groups of options
|
||||||
|
-
|
||||||
|
-dp_fpus := vfp vfpv2 vfpv3 vfpv3-fp16 vfpv3-d16 vfpv3-d16-fp16 \
|
||||||
|
- neon neon-vfpv3 neon-fp16 vfpv4 neon-vfpv4 vfpv4-d16 \
|
||||||
|
- fpv5-d16 fp-armv8 neon-fp-armv8 crypto-neon-fp-armv8 \
|
||||||
|
- vfp3
|
||||||
|
-
|
||||||
|
-sp_fpus := vfpv3xd vfpv3xd-fp16 fpv4-sp-d16 fpv5-sp-d16
|
||||||
|
-
|
||||||
|
-v7a_fps := vfpv3 vfpv3-fp16 vfpv4 simd neon-fp16 neon-vfpv4
|
||||||
|
-v7ve_fps := vfpv3-d16 vfpv3 vfpv3-d16-fp16 vfpv3-fp16 vfpv4 neon \
|
||||||
|
- neon-fp16 simd
|
||||||
|
-
|
||||||
|
-# Not all these permutations exist for all architecture variants, but
|
||||||
|
-# it seems to work ok.
|
||||||
|
-v8_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
|
||||||
|
-
|
||||||
|
-v9_fps := simd fp16 crypto fp16+crypto dotprod fp16fml
|
||||||
|
-
|
||||||
|
-# We don't do anything special with these. Pre-v4t probably doesn't work.
|
||||||
|
-all_early_nofp := armv4 armv4t armv5t
|
||||||
|
-
|
||||||
|
-all_early_arch := armv5tej armv6 armv6j armv6k armv6z armv6kz \
|
||||||
|
- armv6zk armv6t2 iwmmxt iwmmxt2
|
||||||
|
-
|
||||||
|
-all_v7_a_r := armv7-a armv7ve armv7-r
|
||||||
|
-
|
||||||
|
-all_v8_archs := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a armv8.4-a \
|
||||||
|
- armv8.5-a armv8.6-a
|
||||||
|
-
|
||||||
|
-all_v9_archs := armv9-a
|
||||||
|
-
|
||||||
|
-# No floating point variants, require thumb1 softfp
|
||||||
|
-all_nofp_t := armv6-m armv6s-m armv8-m.base
|
||||||
|
-
|
||||||
|
-all_nofp_t2 := armv7-m
|
||||||
|
-
|
||||||
|
-all_sp_only := armv7e-m armv8-m.main
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS =
|
||||||
|
-MULTILIB_DIRNAMES =
|
||||||
|
+MULTILIB_OPTIONS = mthumb mbig-endian march=armv6k march=armv6s-m mfloat-abi=hard mfloat-abi=soft
|
||||||
|
+MULTILIB_DIRNAMES = thumb be armv6k v6-m fpu nofp
|
||||||
|
MULTILIB_EXCEPTIONS =
|
||||||
|
MULTILIB_MATCHES =
|
||||||
|
-MULTILIB_REUSE =
|
||||||
|
-
|
||||||
|
-# PART 2 - multilib build rules
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS += marm/mthumb
|
||||||
|
-MULTILIB_DIRNAMES += arm thumb
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS += mfpu=auto
|
||||||
|
-MULTILIB_DIRNAMES += autofp
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS += march=armv5te+fp/march=armv7+fp
|
||||||
|
-MULTILIB_DIRNAMES += v5te v7
|
||||||
|
-
|
||||||
|
-MULTILIB_OPTIONS += mfloat-abi=hard
|
||||||
|
-MULTILIB_DIRNAMES += fpu
|
||||||
|
-
|
||||||
|
-# Build a total of 4 library variants (base options plus the following):
|
||||||
|
-MULTILIB_REQUIRED += mthumb
|
||||||
|
-MULTILIB_REQUIRED += marm/mfpu=auto/march=armv5te+fp/mfloat-abi=hard
|
||||||
|
-MULTILIB_REQUIRED += mthumb/mfpu=auto/march=armv7+fp/mfloat-abi=hard
|
||||||
|
-
|
||||||
|
-# PART 3 - Match rules
|
||||||
|
-
|
||||||
|
-# Map all supported FPUs onto mfpu=auto
|
||||||
|
-MULTILIB_MATCHES += $(foreach FPU, $(dp_fpus), \
|
||||||
|
- mfpu?auto=mfpu?$(FPU))
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += march?armv5te+fp=march?armv5te
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \
|
||||||
|
- march?armv5te+fp=march?$(ARCH) \
|
||||||
|
- march?armv5te+fp=march?$(ARCH)+fp)
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += march?armv7+fp=march?armv7
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7a_fps), \
|
||||||
|
- march?armv7+fp=march?armv7-a+$(FPARCH))
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7ve_fps), \
|
||||||
|
- march?armv7+fp=march?armv7ve+$(FPARCH))
|
||||||
|
-
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v7_a_r), \
|
||||||
|
- march?armv7+fp=march?$(ARCH) \
|
||||||
|
- march?armv7+fp=march?$(ARCH)+fp)
|
||||||
|
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v8_archs), \
|
||||||
|
- march?armv7+fp=march?$(ARCH) \
|
||||||
|
- $(foreach FPARCH, $(v8_fps), \
|
||||||
|
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
|
||||||
|
+MULTILIB_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard mthumb/march=armv6s-m/mfloat-abi=soft
|
||||||
|
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v9_archs), \
|
||||||
|
- march?armv7+fp=march?$(ARCH) \
|
||||||
|
- $(foreach FPARCH, $(v9_fps), \
|
||||||
|
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
|
||||||
|
|
||||||
|
-MULTILIB_MATCHES += $(foreach ARCH, armv7e-m armv8-m.mainline, \
|
||||||
|
- march?armv7+fp=march?$(ARCH)+fp.dp)
|
||||||
|
+MULTILIB_MATCHES += march?armv6k=mtune?mpcore
|
||||||
|
+MULTILIB_MATCHES += march?armv6k=mcpu?mpcore
|
||||||
|
|
||||||
|
-# PART 4 - Reuse rules
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m0
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m0plus
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m0plus
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mcpu?cortex-m1
|
||||||
|
+MULTILIB_MATCHES += march?armv6s-m=mtune?cortex-m1
|
||||||
|
|
||||||
|
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto
|
||||||
|
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto/march.armv5te+fp
|
||||||
|
-MULTILIB_REUSE += mthumb=mthumb/march.armv5te+fp
|
||||||
|
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=marm/march.armv5te+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=march.armv5te+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += marm/mfpu.auto/march.armv5te+fp/mfloat-abi.hard=mfpu.auto/march.armv5te+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mthumb/march.armv7+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mfpu.auto/march.armv7+fp/mfloat-abi.hard
|
||||||
|
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=march.armv7+fp/mfloat-abi.hard
|
||||||
|
+MULTILIB_REUSE = mthumb/march.armv6s-m/mfloat-abi.soft=mthumb/march.armv6s-m
|
||||||
|
diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
|
||||||
|
index ab3918283d8..c14a1955cad 100644
|
||||||
|
--- a/gcc/config/arm/unknown-elf.h
|
||||||
|
+++ b/gcc/config/arm/unknown-elf.h
|
||||||
|
@@ -29,7 +29,7 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Now we define the strings used to build the spec file. */
|
||||||
|
-#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
|
||||||
|
+#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s"
|
||||||
|
|
||||||
|
#undef STARTFILE_SPEC
|
||||||
|
#define STARTFILE_SPEC \
|
||||||
|
@@ -93,4 +93,5 @@
|
||||||
|
udivmoddi4, which will depend on the exception unwind routines,
|
||||||
|
which will depend on abort, which is defined in libc. */
|
||||||
|
#undef LINK_GCC_C_SEQUENCE_SPEC
|
||||||
|
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:%L} --end-group"
|
||||||
|
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
|
||||||
|
+
|
||||||
|
diff --git a/gcc/config/devkitpro.h b/gcc/config/devkitpro.h
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..180a9ea8553
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.h
|
||||||
|
@@ -0,0 +1,27 @@
|
||||||
|
+/* Definitions for devkitPro toolchains.
|
||||||
|
+ Copyright (C) 2016-2018 Free Software Foundation, Inc.
|
||||||
|
+ This file is part of GCC.
|
||||||
|
+ GCC is free software; you can redistribute it and/or modify it
|
||||||
|
+ under the terms of the GNU General Public License as published
|
||||||
|
+ by the Free Software Foundation; either version 3, or (at your
|
||||||
|
+ option) any later version.
|
||||||
|
+ GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
+ License for more details.
|
||||||
|
+ Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
+ permissions described in the GCC Runtime Library Exception, version
|
||||||
|
+ 3.1, as published by the Free Software Foundation.
|
||||||
|
+ You should have received a copy of the GNU General Public License and
|
||||||
|
+ a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
+ <http://www.gnu.org/licenses/>. */
|
||||||
|
+
|
||||||
|
+#undef TARGET_OS_CPP_BUILTINS
|
||||||
|
+#define TARGET_OS_CPP_BUILTINS() \
|
||||||
|
+ do { \
|
||||||
|
+ builtin_define ("__DEVKITPRO__"); \
|
||||||
|
+ builtin_define ("__DEVKITARM__"); \
|
||||||
|
+ } while (0)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
diff --git a/gcc/config/devkitpro.opt b/gcc/config/devkitpro.opt
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..9acbbf9d27c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.opt
|
||||||
|
@@ -0,0 +1,29 @@
|
||||||
|
+; Options for devkitPro toolchains.
|
||||||
|
+
|
||||||
|
+; Copyright (C) 2011-2018 Free Software Foundation, Inc.
|
||||||
|
+;
|
||||||
|
+; This file is part of GCC.
|
||||||
|
+;
|
||||||
|
+; GCC is free software; you can redistribute it and/or modify it under
|
||||||
|
+; the terms of the GNU General Public License as published by the Free
|
||||||
|
+; Software Foundation; either version 3, or (at your option) any later
|
||||||
|
+; version.
|
||||||
|
+;
|
||||||
|
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
+; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
+; for more details.
|
||||||
|
+;
|
||||||
|
+; You should have received a copy of the GNU General Public License
|
||||||
|
+; along with GCC; see the file COPYING3. If not see
|
||||||
|
+; <http://www.gnu.org/licenses/>.
|
||||||
|
+
|
||||||
|
+; See the GCC internals manual (options.texi) for a description of
|
||||||
|
+; this file's format.
|
||||||
|
+
|
||||||
|
+; Please try to keep this file in ASCII collating order.
|
||||||
|
+
|
||||||
|
+pthread
|
||||||
|
+Driver
|
||||||
|
+
|
||||||
|
+; This comment is to ensure we retain the blank line above.
|
||||||
|
diff --git a/gcc/config/devkitpro.opt.urls b/gcc/config/devkitpro.opt.urls
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..ab7b466aa71
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/config/devkitpro.opt.urls
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+; Autogenerated by regenerate-opt-urls.py from gcc/config/devkitpro.opt and generated HTML
|
||||||
|
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
|
||||||
|
index e083f49f3da..1b81e7e88ce 100644
|
||||||
|
--- a/gcc/config/i386/host-mingw32.cc
|
||||||
|
+++ b/gcc/config/i386/host-mingw32.cc
|
||||||
|
@@ -94,6 +94,10 @@ mingw32_gt_pch_get_address (size_t size, int)
|
||||||
|
If we allocate at bottom we need to reserve the address as early
|
||||||
|
as possible and at the same point in each invocation. */
|
||||||
|
|
||||||
|
+#if __MINGW64__
|
||||||
|
+ size = UINT64_C(64 * 1024 * 1024 * 1024);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
res = VirtualAlloc (NULL, size,
|
||||||
|
MEM_RESERVE | MEM_TOP_DOWN,
|
||||||
|
PAGE_NOACCESS);
|
||||||
|
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
|
||||||
|
index 4fd87f2c4a1..6af06f7b032 100644
|
||||||
|
--- a/gcc/gcc.cc
|
||||||
|
+++ b/gcc/gcc.cc
|
||||||
|
@@ -888,6 +888,11 @@ proper position among the other output files. */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifndef LIBGLOSS_SPEC
|
||||||
|
+# define LIBGLOSS_SPEC "-lsysbase"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
|
||||||
|
#ifndef STARTFILE_SPEC
|
||||||
|
#define STARTFILE_SPEC \
|
||||||
|
@@ -1215,6 +1220,7 @@ static const char *link_spec = LINK_SPEC;
|
||||||
|
static const char *lib_spec = LIB_SPEC;
|
||||||
|
static const char *link_gomp_spec = "";
|
||||||
|
static const char *libgcc_spec = LIBGCC_SPEC;
|
||||||
|
+static const char *libgloss_spec = LIBGLOSS_SPEC;
|
||||||
|
static const char *endfile_spec = ENDFILE_SPEC;
|
||||||
|
static const char *startfile_spec = STARTFILE_SPEC;
|
||||||
|
static const char *linker_name_spec = LINKER_NAME;
|
||||||
|
@@ -1727,6 +1733,7 @@ static struct spec_list static_specs[] =
|
||||||
|
INIT_STATIC_SPEC ("lib", &lib_spec),
|
||||||
|
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
|
||||||
|
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
|
||||||
|
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
|
||||||
|
INIT_STATIC_SPEC ("startfile", &startfile_spec),
|
||||||
|
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
|
||||||
|
INIT_STATIC_SPEC ("version", &compiler_version),
|
||||||
|
diff --git a/libcc1/configure b/libcc1/configure
|
||||||
|
index ea689a353c8..98f9d9b21b7 100755
|
||||||
|
--- a/libcc1/configure
|
||||||
|
+++ b/libcc1/configure
|
||||||
|
@@ -5119,7 +5119,7 @@ else
|
||||||
|
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||||
|
# nm: unknown option "B" ignored
|
||||||
|
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
|
||||||
|
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
|
||||||
|
index dddddc7c444..c2502597953 100644
|
||||||
|
--- a/libgcc/config/arm/t-bpabi
|
||||||
|
+++ b/libgcc/config/arm/t-bpabi
|
||||||
|
@@ -17,4 +17,4 @@ SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver
|
||||||
|
# On ARM, specifying -fnon-call-exceptions will needlessly pull in
|
||||||
|
# the unwinder in simple programs which use 64-bit division. Omitting
|
||||||
|
# the option is safe.
|
||||||
|
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
|
||||||
|
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
|
||||||
|
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
|
||||||
|
index b9767cd1eee..362689c9f0b 100644
|
||||||
|
--- a/libgcc/crtstuff.c
|
||||||
|
+++ b/libgcc/crtstuff.c
|
||||||
|
@@ -326,7 +326,7 @@ register_tm_clones (void)
|
||||||
|
|
||||||
|
#ifdef OBJECT_FORMAT_ELF
|
||||||
|
|
||||||
|
-#if DEFAULT_USE_CXA_ATEXIT
|
||||||
|
+#if 1 /* DEFAULT_USE_CXA_ATEXIT */
|
||||||
|
/* Declare the __dso_handle variable. It should have a unique value
|
||||||
|
in every shared-object; in a main program its value is zero. The
|
||||||
|
object should in any case be protected. This means the instance
|
||||||
|
diff --git a/libgcc/gthr.h b/libgcc/gthr.h
|
||||||
|
index 557417997f4..cb223aa43fc 100644
|
||||||
|
--- a/libgcc/gthr.h
|
||||||
|
+++ b/libgcc/gthr.h
|
||||||
|
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
/* The pe-coff weak support isn't fully compatible to ELF's weak.
|
||||||
|
For static libraries it might would work, but as we need to deal
|
||||||
|
with shared versions too, we disable it for mingw-targets. */
|
||||||
|
-#ifdef __MINGW32__
|
||||||
|
+#if defined( __MINGW32__) || defined(__DEVKITARM__)
|
||||||
|
#undef GTHREAD_USE_WEAK
|
||||||
|
#define GTHREAD_USE_WEAK 0
|
||||||
|
#endif
|
||||||
|
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
|
||||||
|
index 819a1d82876..d81e6057c5b 100755
|
||||||
|
--- a/libstdc++-v3/configure
|
||||||
|
+++ b/libstdc++-v3/configure
|
||||||
|
@@ -893,6 +893,7 @@ infodir
|
||||||
|
docdir
|
||||||
|
oldincludedir
|
||||||
|
includedir
|
||||||
|
+runstatedir
|
||||||
|
localstatedir
|
||||||
|
sharedstatedir
|
||||||
|
sysconfdir
|
||||||
|
@@ -1027,6 +1028,7 @@ datadir='${datarootdir}'
|
||||||
|
sysconfdir='${prefix}/etc'
|
||||||
|
sharedstatedir='${prefix}/com'
|
||||||
|
localstatedir='${prefix}/var'
|
||||||
|
+runstatedir='${localstatedir}/run'
|
||||||
|
includedir='${prefix}/include'
|
||||||
|
oldincludedir='/usr/include'
|
||||||
|
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
|
||||||
|
@@ -1279,6 +1281,15 @@ do
|
||||||
|
| -silent | --silent | --silen | --sile | --sil)
|
||||||
|
silent=yes ;;
|
||||||
|
|
||||||
|
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
|
||||||
|
+ | --runstate | --runstat | --runsta | --runst | --runs \
|
||||||
|
+ | --run | --ru | --r)
|
||||||
|
+ ac_prev=runstatedir ;;
|
||||||
|
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
|
||||||
|
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
|
||||||
|
+ | --run=* | --ru=* | --r=*)
|
||||||
|
+ runstatedir=$ac_optarg ;;
|
||||||
|
+
|
||||||
|
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
||||||
|
ac_prev=sbindir ;;
|
||||||
|
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
||||||
|
@@ -1416,7 +1427,7 @@ fi
|
||||||
|
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
||||||
|
datadir sysconfdir sharedstatedir localstatedir includedir \
|
||||||
|
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
||||||
|
- libdir localedir mandir
|
||||||
|
+ libdir localedir mandir runstatedir
|
||||||
|
do
|
||||||
|
eval ac_val=\$$ac_var
|
||||||
|
# Remove trailing slashes.
|
||||||
|
@@ -1569,6 +1580,7 @@ Fine tuning of the installation directories:
|
||||||
|
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
||||||
|
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
||||||
|
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
||||||
|
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
|
||||||
|
--libdir=DIR object code libraries [EPREFIX/lib]
|
||||||
|
--includedir=DIR C header files [PREFIX/include]
|
||||||
|
--oldincludedir=DIR C header files for non-gcc [/usr/include]
|
||||||
|
@@ -5080,7 +5092,7 @@ else
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -5126,7 +5138,7 @@ else
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -5150,7 +5162,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -5195,7 +5207,7 @@ else
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -5219,7 +5231,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||||
|
since some C++ compilers masquerading as C compilers
|
||||||
|
incorrectly reject 9223372036854775807. */
|
||||||
|
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||||
|
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
|
||||||
|
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||||
|
&& LARGE_OFF_T % 2147483647 == 1)
|
||||||
|
? 1 : -1];
|
||||||
|
@@ -12280,7 +12292,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 12283 "configure"
|
||||||
|
+#line 12295 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -12386,7 +12398,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 12389 "configure"
|
||||||
|
+#line 12401 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -16182,7 +16194,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
|
||||||
|
# Fake what AC_TRY_COMPILE does.
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16185 "configure"
|
||||||
|
+#line 16197 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
typedef bool atomic_type;
|
||||||
|
@@ -16217,7 +16229,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
|
||||||
|
rm -f conftest*
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16220 "configure"
|
||||||
|
+#line 16232 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
typedef short atomic_type;
|
||||||
|
@@ -16252,7 +16264,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
|
||||||
|
rm -f conftest*
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16255 "configure"
|
||||||
|
+#line 16267 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// NB: _Atomic_word not necessarily int.
|
||||||
|
@@ -16288,7 +16300,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
|
||||||
|
rm -f conftest*
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16291 "configure"
|
||||||
|
+#line 16303 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
typedef long long atomic_type;
|
||||||
|
@@ -16445,7 +16457,7 @@ $as_echo "mutex" >&6; }
|
||||||
|
# unnecessary for this test.
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16448 "configure"
|
||||||
|
+#line 16460 "configure"
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
_Decimal32 d1;
|
||||||
|
@@ -16487,7 +16499,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
||||||
|
# unnecessary for this test.
|
||||||
|
|
||||||
|
cat > conftest.$ac_ext << EOF
|
||||||
|
-#line 16490 "configure"
|
||||||
|
+#line 16502 "configure"
|
||||||
|
template<typename T1, typename T2>
|
||||||
|
struct same
|
||||||
|
{ typedef T2 type; };
|
||||||
|
@@ -28602,6 +28614,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
|
||||||
|
$as_echo "#define HAVE_MEMALIGN 1" >>confdefs.h
|
||||||
|
|
||||||
|
+ $as_echo "#define HAVE_ALIGNED_ALLOC 1" >>confdefs.h
|
||||||
|
+
|
||||||
|
|
||||||
|
case "${target}" in
|
||||||
|
*-rtems*)
|
||||||
|
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
|
||||||
|
index a6c01b29e94..a8fb1200c8b 100644
|
||||||
|
--- a/libstdc++-v3/configure.ac
|
||||||
|
+++ b/libstdc++-v3/configure.ac
|
||||||
|
@@ -386,6 +386,7 @@ dnl # rather than hardcoding that information.
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_DEFINE(HAVE_MEMALIGN)
|
||||||
|
+ AC_DEFINE(HAVE_ALIGNED_ALLOC)
|
||||||
|
|
||||||
|
case "${target}" in
|
||||||
|
*-rtems*)
|
||||||
|
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
|
||||||
|
index 537774c2668..b15e28d2371 100644
|
||||||
|
--- a/libstdc++-v3/include/Makefile.am
|
||||||
|
+++ b/libstdc++-v3/include/Makefile.am
|
||||||
|
@@ -1436,6 +1436,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
|
||||||
|
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
|
||||||
|
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
|
||||||
|
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
|
||||||
|
+ -e 's/_GLIBCXX___DEVKITARM_GLIBCXX___/__DEVKITARM__/g' \
|
||||||
|
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
|
||||||
|
< $< > $@
|
||||||
|
|
||||||
|
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
|
||||||
|
index 7b96b2207f8..80f0effec92 100644
|
||||||
|
--- a/libstdc++-v3/include/Makefile.in
|
||||||
|
+++ b/libstdc++-v3/include/Makefile.in
|
||||||
|
@@ -336,6 +336,7 @@ prefix = @prefix@
|
||||||
|
program_transform_name = @program_transform_name@
|
||||||
|
psdir = @psdir@
|
||||||
|
python_mod_dir = @python_mod_dir@
|
||||||
|
+runstatedir = @runstatedir@
|
||||||
|
sbindir = @sbindir@
|
||||||
|
sharedstatedir = @sharedstatedir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
@@ -1910,6 +1911,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
|
||||||
|
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
|
||||||
|
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
|
||||||
|
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
|
||||||
|
+ -e 's/_GLIBCXX___DEVKITARM_GLIBCXX___/__DEVKITARM__/g' \
|
||||||
|
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
|
||||||
|
< $< > $@
|
||||||
|
|
||||||
|
diff --git a/lto-plugin/configure b/lto-plugin/configure
|
||||||
|
index 28f5dd79cd7..a79f318a4d6 100755
|
||||||
|
--- a/lto-plugin/configure
|
||||||
|
+++ b/lto-plugin/configure
|
||||||
|
@@ -6469,7 +6469,7 @@ else
|
||||||
|
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||||
|
# nm: unknown option "B" ignored
|
||||||
|
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
|
||||||
|
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,32 +0,0 @@
|
|||||||
diff -Nbaur gdb-7.7.1/gdb/Makefile.in gdb-7.7.1-arm/gdb/Makefile.in
|
|
||||||
--- gdb-7.7.1/gdb/Makefile.in 2014-05-05 22:51:24.000000000 +0100
|
|
||||||
+++ gdb-7.7.1-arm/gdb/Makefile.in 2014-05-18 17:05:16.105567001 +0100
|
|
||||||
@@ -2307,10 +2307,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.7.1/sim/common/Make-common.in gdb-7.7.1-arm/sim/common/Make-common.in
|
|
||||||
--- gdb-7.7.1/sim/common/Make-common.in 2014-01-08 09:23:36.000000000 +0000
|
|
||||||
+++ gdb-7.7.1-arm/sim/common/Make-common.in 2014-05-18 17:05:16.105567001 +0100
|
|
||||||
@@ -415,10 +415,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)
|
|
||||||
File diff suppressed because it is too large
Load Diff
14520
dkarm-eabi/patches/newlib-4.5.0.20241231.patch
Normal file
14520
dkarm-eabi/patches/newlib-4.5.0.20241231.patch
Normal file
File diff suppressed because one or more lines are too long
@@ -1,39 +0,0 @@
|
|||||||
ifeq ($(strip $(DEVKITPRO)),)
|
|
||||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(DEVKITARM)/base_rules
|
|
||||||
|
|
||||||
CTRULIB := $(DEVKITPRO)/libctru
|
|
||||||
|
|
||||||
ifeq ($(strip $(APP_TITLE)),)
|
|
||||||
APP_TITLE := $(notdir $(OUTPUT))
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(APP_DESCRIPTION)),)
|
|
||||||
APP_DESCRIPTION := Built with devkitARM & ctrulib
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(APP_AUTHOR)),)
|
|
||||||
APP_AUTHOR := Unspecified Author
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(APP_ICON)),)
|
|
||||||
APP_ICON := $(CTRULIB)/default_icon.png
|
|
||||||
endif
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.smdh: $(APP_ICON) $(MAKEFILE_LIST)
|
|
||||||
@smdhtool --create "$(APP_TITLE)" "$(APP_DESCRIPTION)" "$(APP_AUTHOR)" $(APP_ICON) $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.3dsx: %.elf
|
|
||||||
@3dsxtool $< $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.elf:
|
|
||||||
@echo linking $(notdir $@)
|
|
||||||
@$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
|
|
||||||
@$(NM) -CSn $@ > $(notdir $*.lst)
|
|
||||||
@@ -1,112 +0,0 @@
|
|||||||
include $(DEVKITARM)/base_tools
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# add portlibs path
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
export PORTLIBS := $(DEVKITPRO)/portlibs/arm
|
|
||||||
export PATH := $(PORTLIBS)/bin:$(PATH)
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.a:
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
@echo $(notdir $@)
|
|
||||||
@rm -f $@
|
|
||||||
$(AR) -rc $@ $^
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm.o: %.arm.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CXXFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm.o: %.arm.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm.o: %.arm.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(OBJCFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.thumb.o: %.thumb.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CXXFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.thumb.o: %.thumb.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.thumb.o: %.thumb.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(OBJCFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.iwram.o: %.iwram.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.iwram.o: %.iwram.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.iwram.o: %.iwram.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(OBJCFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.itcm.o: %.itcm.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.itcm.o: %.itcm.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.itcm.o: %.itcm.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(OBJCFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(OBJCFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.s
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.S
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# canned command sequence for binary data
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
define bin2o
|
|
||||||
bin2s $< | $(AS) -o $(@)
|
|
||||||
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
|
|
||||||
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
|
|
||||||
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
|
|
||||||
endef
|
|
||||||
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
ifeq ($(strip $(DEVKITPRO)),)
|
|
||||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(DEVKITARM)/base_rules
|
|
||||||
|
|
||||||
LIBNDS := $(DEVKITPRO)/libnds
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_TITLE)),)
|
|
||||||
GAME_TITLE := $(notdir $(OUTPUT))
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_SUBTITLE1)),)
|
|
||||||
GAME_SUBTITLE1 := built with devkitARM
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_SUBTITLE2)),)
|
|
||||||
GAME_SUBTITLE2 := http://devkitpro.org
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_ICON)),)
|
|
||||||
GAME_ICON := $(DEVKITPRO)/libnds/icon.bmp
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(strip $(NITRO_FILES)),)
|
|
||||||
_ADDFILES := -d $(NITRO_FILES)
|
|
||||||
endif
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.nds: %.arm9
|
|
||||||
@ndstool -c $@ -9 $< -b $(GAME_ICON) "$(GAME_TITLE);$(GAME_SUBTITLE1);$(GAME_SUBTITLE2)" $(_ADDFILES)
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.nds: %.elf
|
|
||||||
@ndstool -c $@ -9 $< -b $(GAME_ICON) "$(GAME_TITLE);$(GAME_SUBTITLE1);$(GAME_SUBTITLE2)" $(_ADDFILES)
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm9: %.elf
|
|
||||||
@$(OBJCOPY) -O binary $< $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm7: %.elf
|
|
||||||
@$(OBJCOPY) -O binary $< $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.elf:
|
|
||||||
@echo linking $(notdir $@)
|
|
||||||
@$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
ifeq ($(strip $(DEVKITPRO)),)
|
|
||||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(DEVKITARM)/base_rules
|
|
||||||
|
|
||||||
LIBGBA := $(DEVKITPRO)/libgba
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.gba: %.elf
|
|
||||||
@$(OBJCOPY) -O binary $< $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
@gbafix $@
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%_mb.elf:
|
|
||||||
@echo linking multiboot
|
|
||||||
@$(LD) -specs=gba_mb.specs $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.elf:
|
|
||||||
@echo linking cartridge
|
|
||||||
@$(LD) $(LDFLAGS) -specs=gba.specs $(OFILES) $(LIBPATHS) $(LIBS) -o $@
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
-include $(DEVKITARM)/base_rules
|
|
||||||
|
|
||||||
LIBMIRKO := $(DEVKITPRO)/libmirko
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.fxe: %.bin
|
|
||||||
@b2fxec -a "$(AUTHOR)" -t "$(TITLE)" $< $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.bin: %.elf
|
|
||||||
@$(OBJCOPY) -O binary $< $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.elf:
|
|
||||||
@echo linking binary
|
|
||||||
@$(LD) $(LDFLAGS) -specs=gp32.specs $(OFILES) $(LIBPATHS) $(LIBS) -o $@
|
|
||||||
63
dkarm-eabi/scripts/build-crtls.sh
Normal file → Executable file
63
dkarm-eabi/scripts/build-crtls.sh
Normal file → Executable file
@@ -1,61 +1,26 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# set env variables
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
export DEVKITPRO=$TOOLPATH
|
export DEVKITPRO=$TOOLPATH
|
||||||
export DEVKITARM=$DEVKITPRO/devkitARM
|
export DEVKITARM=$DEVKITPRO/devkitARM
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# copy base rulesets
|
# Install the rules files
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
cp -v $BUILDSCRIPTDIR/dkarm-eabi/rules/* $prefix
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
tar -xvf $SRCDIR/devkitarm-rules-$DKARM_RULES_VER.tar.gz
|
||||||
|
cd devkitarm-rules-$DKARM_RULES_VER
|
||||||
|
$MAKE install
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Install and build the gba crt
|
# Install and build the crt0 files
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
cp -v $BUILDSCRIPTDIR/dkarm-eabi/crtls/* $prefix/$target/lib/
|
tar -xvf $SRCDIR/devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz
|
||||||
cd $prefix/$target/lib/
|
cd devkitarm-crtls-$DKARM_CRTLS_VER
|
||||||
$MAKE CRT=gba
|
$MAKE install
|
||||||
$MAKE CRT=gp32
|
|
||||||
$MAKE CRT=er
|
|
||||||
$MAKE CRT=gp32_gpsdk
|
|
||||||
$MAKE CRT=ds_arm7
|
|
||||||
$MAKE CRT=ds_arm9
|
|
||||||
$MAKE CRT=ds_cart
|
|
||||||
$MAKE CRT=3dsx
|
|
||||||
|
|
||||||
cd $BUILDDIR/libgba-$LIBGBA_VER
|
|
||||||
$MAKE || { echo "error building libgba"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libgba"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libnds-$LIBNDS_VER
|
|
||||||
$MAKE || { echo "error building libnds"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libnds"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/dswifi-$DSWIFI_VER
|
|
||||||
$MAKE || { echo "error building dswifi"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing dswifi"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/maxmod-$MAXMOD_VER
|
|
||||||
$MAKE || { echo "error building maxmod"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing maxmod"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/default_arm7-$DEFAULT_ARM7_VER
|
|
||||||
$MAKE || { echo "error building default arm7"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing default arm7"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libfat-$LIBFAT_VER
|
|
||||||
$MAKE nds-install || { echo "error building nds libfat"; exit 1; }
|
|
||||||
$MAKE gba-install || { echo "error installing gba libfat"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libmirko-$LIBMIRKO_VER
|
|
||||||
$MAKE || { echo "error building libmirko"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libmirko"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libfilesystem-$FILESYSTEM_VER
|
|
||||||
$MAKE || { echo "error building libfilesystem"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libfilesystem"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libctru-$LIBCTRU_VER
|
|
||||||
$MAKE || { echo "error building libctru"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libctru"; exit 1; }
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ cd $target/binutils
|
|||||||
|
|
||||||
if [ ! -f configured-binutils ]
|
if [ ! -f configured-binutils ]
|
||||||
then
|
then
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
CPPFLAGS="$cppflags $CPPFLAGS" LDFLAGS="$ldflags $LDFLAGS" ../../binutils-$BINUTILS_VER/configure \
|
||||||
--prefix=$prefix --target=$target --disable-nls --disable-dependency-tracking --disable-werror \
|
--prefix=$prefix --target=$target --disable-nls --disable-werror \
|
||||||
--enable-lto --enable-plugins --enable-poison-system-directories \
|
--enable-lto --enable-plugins \
|
||||||
|
--enable-poison-system-directories \
|
||||||
$CROSS_PARAMS \
|
$CROSS_PARAMS \
|
||||||
|| { echo "Error configuring binutils"; exit 1; }
|
|| { echo "Error configuring binutils"; exit 1; }
|
||||||
touch configured-binutils
|
touch configured-binutils
|
||||||
@@ -39,23 +40,36 @@ 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 \
|
CPPFLAGS="$cppflags $CPPFLAGS" \
|
||||||
--enable-languages=c,c++,objc,obj-c++ \
|
LDFLAGS="$ldflags $LDFLAGS" \
|
||||||
|
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
|
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
|
LDFLAGS_FOR_TARGET="" \
|
||||||
|
../../gcc-$GCC_VER/configure \
|
||||||
|
--enable-languages=c,c++,objc,lto \
|
||||||
--with-gnu-as --with-gnu-ld --with-gcc \
|
--with-gnu-as --with-gnu-ld --with-gcc \
|
||||||
--with-march=armv4t\
|
--with-march=armv4t\
|
||||||
|
--enable-cxx-flags='-ffunction-sections' \
|
||||||
|
--disable-libstdcxx-verbose \
|
||||||
--enable-poison-system-directories \
|
--enable-poison-system-directories \
|
||||||
--enable-interwork --enable-multilib \
|
--enable-interwork --enable-multilib \
|
||||||
--disable-dependency-tracking \
|
--enable-threads --disable-win32-registry --disable-nls --disable-debug\
|
||||||
--disable-threads --disable-win32-registry --disable-nls --disable-debug\
|
|
||||||
--disable-libmudflap --disable-libssp --disable-libgomp \
|
--disable-libmudflap --disable-libssp --disable-libgomp \
|
||||||
--disable-libstdcxx-pch \
|
--disable-libstdcxx-pch \
|
||||||
|
--enable-libstdcxx-time=yes \
|
||||||
|
--enable-libstdcxx-filesystem-ts \
|
||||||
--target=$target \
|
--target=$target \
|
||||||
--with-newlib \
|
--with-newlib \
|
||||||
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
||||||
--prefix=$prefix \
|
--prefix=$prefix \
|
||||||
--enable-lto $plugin_ld\
|
--enable-lto\
|
||||||
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 43" \
|
--with-system-zlib \
|
||||||
|
--disable-tm-clone-registry \
|
||||||
|
--disable-__cxa_atexit \
|
||||||
|
--with-bugurl="https://devkitpro.org" --with-pkgversion="devkitARM release 67" \
|
||||||
$CROSS_PARAMS \
|
$CROSS_PARAMS \
|
||||||
|
$CROSS_GCC_PARAMS \
|
||||||
|
$EXTRA_GCC_PARAMS \
|
||||||
|| { echo "Error configuring gcc"; exit 1; }
|
|| { echo "Error configuring gcc"; exit 1; }
|
||||||
touch configured-gcc
|
touch configured-gcc
|
||||||
fi
|
fi
|
||||||
@@ -76,6 +90,11 @@ fi
|
|||||||
unset CFLAGS
|
unset CFLAGS
|
||||||
cd $BUILDDIR
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
OLD_CC=$CC
|
||||||
|
OLDCXX=$CXX
|
||||||
|
unset CC
|
||||||
|
unset CXX
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# build and install newlib
|
# build and install newlib
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@@ -84,12 +103,11 @@ cd $target/newlib
|
|||||||
|
|
||||||
if [ ! -f configured-newlib ]
|
if [ ! -f configured-newlib ]
|
||||||
then
|
then
|
||||||
CFLAGS_FOR_TARGET="-DREENTRANT_SYSCALLS_PROVIDED -D__DEFAULT_UTF8__ -O2" ../../newlib-$NEWLIB_VER/configure \
|
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
|
../../newlib-$NEWLIB_VER/configure \
|
||||||
--disable-newlib-supplied-syscalls \
|
--disable-newlib-supplied-syscalls \
|
||||||
--enable-newlib-mb \
|
--enable-newlib-mb \
|
||||||
--enable-newlib-io-long-long \
|
--disable-newlib-wide-orient \
|
||||||
--enable-newlib-io-c99-formats \
|
|
||||||
--enable-newlib-io-pos-args \
|
|
||||||
--target=$target \
|
--target=$target \
|
||||||
--prefix=$prefix \
|
--prefix=$prefix \
|
||||||
|| { echo "Error configuring newlib"; exit 1; }
|
|| { echo "Error configuring newlib"; exit 1; }
|
||||||
@@ -105,10 +123,13 @@ fi
|
|||||||
|
|
||||||
if [ ! -f installed-newlib ]
|
if [ ! -f installed-newlib ]
|
||||||
then
|
then
|
||||||
$MAKE install || { echo "Error installing newlib"; exit 1; }
|
$MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
|
||||||
touch installed-newlib
|
touch installed-newlib
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CC=$OLD_CC
|
||||||
|
export CXX=$OLD_CXX
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# build and install the final compiler
|
# build and install the final compiler
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@@ -132,34 +153,3 @@ fi
|
|||||||
rm -fr $prefix/$target/sys-include
|
rm -fr $prefix/$target/sys-include
|
||||||
|
|
||||||
cd $BUILDDIR
|
cd $BUILDDIR
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install the debugger
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/gdb
|
|
||||||
cd $target/gdb
|
|
||||||
|
|
||||||
PLATFORM=`uname -s`
|
|
||||||
|
|
||||||
if [ ! -f configured-gdb ]
|
|
||||||
then
|
|
||||||
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
|
|
||||||
--disable-nls --prefix=$prefix --target=$target --disable-werror \
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
$CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuring gdb"; exit 1; }
|
|
||||||
touch configured-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-gdb ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building gdb"; exit 1; }
|
|
||||||
touch built-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-gdb ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing gdb"; exit 1; }
|
|
||||||
touch installed-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
for archive in $hostarchives
|
|
||||||
do
|
|
||||||
dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' )
|
|
||||||
cd $BUILDDIR/$dir
|
|
||||||
if [ ! -f configured ]; then
|
|
||||||
CXXFLAGS=$cflags CFLAGS=$cflags LDFLAGS=$ldflags ./configure --prefix=$prefix --disable-dependency-tracking $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; }
|
|
||||||
touch configured
|
|
||||||
fi
|
|
||||||
if [ ! -f built ]; then
|
|
||||||
$MAKE || { echo "error building $archive"; exit 1; }
|
|
||||||
touch built
|
|
||||||
fi
|
|
||||||
if [ ! -f installed ]; then
|
|
||||||
$MAKE install || { echo "error installing $archive"; exit 1; }
|
|
||||||
touch installed
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -1,303 +0,0 @@
|
|||||||
/* Default linker script, for normal executables */
|
|
||||||
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
|
|
||||||
"elf32-powerpc")
|
|
||||||
OUTPUT_ARCH(powerpc:common)
|
|
||||||
ENTRY(_start)
|
|
||||||
SEARCH_DIR("/powerpc/powerpc-eabi-elf/lib");
|
|
||||||
/* Do we need any of these for elf?
|
|
||||||
__DYNAMIC = 0; */
|
|
||||||
PROVIDE (__stack = 0x817F0000);
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
|
|
||||||
/* DOL header (from TITANIK's GC docs)
|
|
||||||
*/
|
|
||||||
. = 0x80003000;
|
|
||||||
|
|
||||||
.header :
|
|
||||||
{
|
|
||||||
file_start = .;
|
|
||||||
/* 0000-001B Text[0..6] sections File Positions */
|
|
||||||
LONG(text_file_start);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
|
|
||||||
/* 001C-0047 Data[0..10] sections File Positions */
|
|
||||||
LONG(data_file_start);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
|
|
||||||
/* 0048-0063 Text[0..6] sections Mem Address */
|
|
||||||
LONG(text_mem_start);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
|
|
||||||
/* 0064-008F Data[0..10] sections Mem Address */
|
|
||||||
LONG(data_mem_start);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
|
|
||||||
/* 0090-00AB Text[0..6] sections Sizes */
|
|
||||||
LONG(text_mem_size);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
|
|
||||||
/* 00AC-00D7 Data[0..10] sections Sizes */
|
|
||||||
LONG(data_mem_size);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
LONG(0);
|
|
||||||
|
|
||||||
/* 00D8 BSS Mem address
|
|
||||||
* 00DC BSS Size */
|
|
||||||
LONG(bss_mem_start);
|
|
||||||
LONG(bss_mem_size);
|
|
||||||
|
|
||||||
/* 00E0 Entry Point */
|
|
||||||
LONG(ABSOLUTE(_start));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
. = file_start + 0x100;
|
|
||||||
|
|
||||||
text_mem_start = .;
|
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(.init))
|
|
||||||
} =0
|
|
||||||
/* Read-only sections, merged into text segment: */
|
|
||||||
.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.* .rela.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 .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
|
||||||
*(.gnu.warning)
|
|
||||||
} =0
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP (*(.fini))
|
|
||||||
} =0
|
|
||||||
PROVIDE (__etext = .);
|
|
||||||
PROVIDE (_etext = .);
|
|
||||||
PROVIDE (etext = .);
|
|
||||||
. = ALIGN(32);
|
|
||||||
text_mem_size = . - text_mem_start;
|
|
||||||
data_mem_start = .;
|
|
||||||
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
|
|
||||||
.rodata1 : { *(.rodata1) }
|
|
||||||
.sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) }
|
|
||||||
.sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
|
|
||||||
.eh_frame_hdr : { *(.eh_frame_hdr) }
|
|
||||||
. = ALIGN(32);
|
|
||||||
/* 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)
|
|
||||||
}
|
|
||||||
.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))
|
|
||||||
}
|
|
||||||
.dtors :
|
|
||||||
{
|
|
||||||
KEEP (*crtbegin*.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
}
|
|
||||||
.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.*)
|
|
||||||
}
|
|
||||||
_edata = .;
|
|
||||||
PROVIDE (edata = .);
|
|
||||||
|
|
||||||
data_mem_size = . - data_mem_start;
|
|
||||||
bss_mem_start = .;
|
|
||||||
|
|
||||||
__bss_start = .;
|
|
||||||
.sbss :
|
|
||||||
{
|
|
||||||
PROVIDE (__sbss_start = .);
|
|
||||||
PROVIDE (___sbss_start = .);
|
|
||||||
*(.dynsbss)
|
|
||||||
*(.sbss .sbss.* .gnu.linkonce.sb.*)
|
|
||||||
*(.scommon)
|
|
||||||
PROVIDE (__sbss_end = .);
|
|
||||||
PROVIDE (___sbss_end = .);
|
|
||||||
}
|
|
||||||
.plt : { *(.plt) }
|
|
||||||
.bss :
|
|
||||||
{
|
|
||||||
*(.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 / 8);
|
|
||||||
}
|
|
||||||
. = ALIGN(32 / 8);
|
|
||||||
bss_mem_size = . - bss_mem_start;
|
|
||||||
text_file_start = text_mem_start - file_start;
|
|
||||||
data_file_start = data_mem_start - file_start;
|
|
||||||
|
|
||||||
|
|
||||||
_end = .;
|
|
||||||
__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 .gnu.linkonce.wi.*) }
|
|
||||||
.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) }
|
|
||||||
}
|
|
||||||
@@ -1,278 +0,0 @@
|
|||||||
/*
|
|
||||||
* Linkscript for GC
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
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);
|
|
||||||
bss PT_LOAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* default base address */
|
|
||||||
/* use -Wl,--section-start,.init=0xADDRESS to change */
|
|
||||||
. = 0x80003100;
|
|
||||||
|
|
||||||
/* 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 = .;
|
|
||||||
} :bss
|
|
||||||
|
|
||||||
.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 = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
_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 . */
|
|
||||||
}
|
|
||||||
|
|
||||||
__isIPL = 0;
|
|
||||||
__stack_addr = (__bss_start + SIZEOF(.bss) + 0x20000 + 7) & (-8);
|
|
||||||
__stack_end = (__bss_start + SIZEOF(.bss));
|
|
||||||
__intrstack_addr = (__stack_addr + 0x4000);
|
|
||||||
__intrstack_end = (__stack_addr);
|
|
||||||
__Arena1Lo = (__intrstack_addr + 31) & (-32);
|
|
||||||
__Arena1Hi = (0x817FEFF0);
|
|
||||||
|
|
||||||
__gxregs = (__Arena1Hi + 31) & (-32);
|
|
||||||
/* for backward compatibility with old crt0 */
|
|
||||||
PROVIDE (__stack = (0x817FEFF0));
|
|
||||||
|
|
||||||
PROVIDE(__isIPL = __isIPL);
|
|
||||||
PROVIDE(__stack_addr = __stack_addr);
|
|
||||||
PROVIDE(__stack_end = __stack_end);
|
|
||||||
PROVIDE(__intrstack_addr = __intrstack_addr);
|
|
||||||
PROVIDE(__intrstack_end = __intrstack_end);
|
|
||||||
PROVIDE(__Arena1Lo = __Arena1Lo);
|
|
||||||
PROVIDE(__Arena1Hi = __Arena1Hi);
|
|
||||||
PROVIDE(__gxregs = __gxregs);
|
|
||||||
@@ -1,298 +0,0 @@
|
|||||||
/*
|
|
||||||
* Linkscript for Wii
|
|
||||||
*/
|
|
||||||
|
|
||||||
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
|
|
||||||
{
|
|
||||||
/* stub is loaded at physical address 0x00003400 (though both 0x80003400 and 0x00003400 are equivalent for IOS) */
|
|
||||||
/* This can also be used to load an arbitrary standalone stub at an arbitrary address in memory, for any purpose */
|
|
||||||
/* Use -Wl,--section-start,.stub=0xADDRESS to change */
|
|
||||||
. = 0x00003400;
|
|
||||||
|
|
||||||
.stub :
|
|
||||||
{
|
|
||||||
KEEP(*(.stub))
|
|
||||||
} :stub = 0
|
|
||||||
|
|
||||||
/* default base address */
|
|
||||||
/* use -Wl,--section-start,.init=0xADDRESS to change */
|
|
||||||
. = 0x80004000;
|
|
||||||
|
|
||||||
/* 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 . */
|
|
||||||
}
|
|
||||||
|
|
||||||
__isIPL = 0;
|
|
||||||
__stack_addr = (__bss_start + SIZEOF(.bss) + 0x20000 + 7) & (-8);
|
|
||||||
__stack_end = (__bss_start + SIZEOF(.bss));
|
|
||||||
__intrstack_addr = (__stack_addr + 0x4000);
|
|
||||||
__intrstack_end = (__stack_addr);
|
|
||||||
__Arena1Lo = (__intrstack_addr + 31) & (-32);
|
|
||||||
__Arena1Hi = (0x817FEFF0);
|
|
||||||
__Arena2Lo = (0x90002000);
|
|
||||||
__Arena2Hi = (0x933E0000);
|
|
||||||
|
|
||||||
__gxregs = (__Arena1Hi + 31) & (-32);
|
|
||||||
__ipcbufferLo = (0x933e0000);
|
|
||||||
__ipcbufferHi = (0x93400000);
|
|
||||||
|
|
||||||
/* for backward compatibility with old crt0 */
|
|
||||||
PROVIDE (__stack = (0x817FEFF0));
|
|
||||||
|
|
||||||
PROVIDE(__isIPL = __isIPL);
|
|
||||||
PROVIDE(__stack_addr = __stack_addr);
|
|
||||||
PROVIDE(__stack_end = __stack_end);
|
|
||||||
PROVIDE(__intrstack_addr = __intrstack_addr);
|
|
||||||
PROVIDE(__intrstack_end = __intrstack_end);
|
|
||||||
PROVIDE(__Arena1Lo = __Arena1Lo);
|
|
||||||
PROVIDE(__Arena1Hi = __Arena1Hi);
|
|
||||||
PROVIDE(__Arena2Lo = __Arena2Lo);
|
|
||||||
PROVIDE(__Arena2Hi = __Arena2Hi);
|
|
||||||
PROVIDE(__ipcbufferLo = __ipcbufferLo);
|
|
||||||
PROVIDE(__ipcbufferHi = __ipcbufferHi);
|
|
||||||
PROVIDE(__gxregs = __gxregs);
|
|
||||||
@@ -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
|
|
||||||
26
dkppc/patches/binutils-2.45.1.patch
Normal file
26
dkppc/patches/binutils-2.45.1.patch
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
diff --git a/ld/emulparams/elf32ppccommon.sh b/ld/emulparams/elf32ppccommon.sh
|
||||||
|
index da892988f5d..6b8efb9bbdb 100644
|
||||||
|
--- a/ld/emulparams/elf32ppccommon.sh
|
||||||
|
+++ b/ld/emulparams/elf32ppccommon.sh
|
||||||
|
@@ -23,7 +23,7 @@ else
|
||||||
|
unset SBSS_START_SYMBOLS
|
||||||
|
unset SBSS_END_SYMBOLS
|
||||||
|
fi
|
||||||
|
-OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end = .${CREATE_SHLIB+)};"
|
||||||
|
+OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end = .${CREATE_SHLIB+)};${CREATE_SHLIB+PROVIDE (}__end__ = .${CREATE_SHLIB+)};"
|
||||||
|
OTHER_RELRO_SECTIONS="
|
||||||
|
.fixup ${RELOCATING-0} : { *(.fixup) }
|
||||||
|
.got1 ${RELOCATING-0} : { *(.got1) }
|
||||||
|
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
|
||||||
|
index e55bfe846cd..f160e290bce 100644
|
||||||
|
--- a/opcodes/ppc-opc.c
|
||||||
|
+++ b/opcodes/ppc-opc.c
|
||||||
|
@@ -4988,7 +4988,7 @@ const unsigned int num_powerpc_operands = ARRAY_SIZE (powerpc_operands);
|
||||||
|
#define MFDEC2 (PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE \
|
||||||
|
| PPC_OPCODE_TITAN)
|
||||||
|
#define BOOKE PPC_OPCODE_BOOKE
|
||||||
|
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS
|
||||||
|
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
|
||||||
|
#define PPCE300 PPC_OPCODE_E300
|
||||||
|
#define PPCSPE PPC_OPCODE_SPE
|
||||||
|
#define PPCSPE2 PPC_OPCODE_SPE2
|
||||||
1489
dkppc/patches/gcc-15.2.0.patch
Normal file
1489
dkppc/patches/gcc-15.2.0.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,282 +0,0 @@
|
|||||||
diff -Nbaur gcc-4.8.2/gcc/config/rs6000/rs6000.h gcc-4.8.2-ppc/gcc/config/rs6000/rs6000.h
|
|
||||||
--- gcc-4.8.2/gcc/config/rs6000/rs6000.h 2013-06-19 02:18:38.000000000 +0100
|
|
||||||
+++ gcc-4.8.2-ppc/gcc/config/rs6000/rs6000.h 2014-04-01 14:13:11.000000000 +0100
|
|
||||||
@@ -195,6 +195,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. */
|
|
||||||
@@ -209,6 +210,8 @@
|
|
||||||
#else
|
|
||||||
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
+#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
|
||||||
|
|
||||||
#ifndef CC1_CPU_SPEC
|
|
||||||
#ifdef HAVE_LOCAL_CPU_DETECT
|
|
||||||
diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.h gcc-4.8.2-ppc/gcc/config/rs6000/sysv4.h
|
|
||||||
--- gcc-4.8.2/gcc/config/rs6000/sysv4.h 2013-06-19 02:18:38.000000000 +0100
|
|
||||||
+++ gcc-4.8.2-ppc/gcc/config/rs6000/sysv4.h 2014-04-01 14:13:11.000000000 +0100
|
|
||||||
@@ -570,7 +570,11 @@
|
|
||||||
|
|
||||||
/* Default starting address if specified. */
|
|
||||||
#define LINK_START_SPEC "\
|
|
||||||
-%{mads : %(link_start_ads) ; \
|
|
||||||
+%{mgcn|mogc : %(link_start_ogc) ; \
|
|
||||||
+ mvgc : %(link_start_vgc) ; \
|
|
||||||
+ mgcbios : %(link_start_gcb) ; \
|
|
||||||
+ mrvl : %(link_start_rvl) ; \
|
|
||||||
+ mads : %(link_start_ads) ; \
|
|
||||||
myellowknife : %(link_start_yellowknife) ; \
|
|
||||||
mmvme : %(link_start_mvme) ; \
|
|
||||||
msim : %(link_start_sim) ; \
|
|
||||||
@@ -604,7 +608,8 @@
|
|
||||||
|
|
||||||
/* Any specific OS flags. */
|
|
||||||
#define LINK_OS_SPEC "\
|
|
||||||
-%{mads : %(link_os_ads) ; \
|
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
|
|
||||||
+ mads : %(link_os_ads) ; \
|
|
||||||
myellowknife : %(link_os_yellowknife) ; \
|
|
||||||
mmvme : %(link_os_mvme) ; \
|
|
||||||
msim : %(link_os_sim) ; \
|
|
||||||
@@ -622,7 +627,10 @@
|
|
||||||
/* Override rs6000.h definition. */
|
|
||||||
#undef CPP_SPEC
|
|
||||||
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
|
|
||||||
-%{mads : %(cpp_os_ads) ; \
|
|
||||||
+%{mgcn : %(cpp_os_gcn) ; \
|
|
||||||
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
|
|
||||||
+ mrvl : %(cpp_os_rvl) ; \
|
|
||||||
+ mads : %(cpp_os_ads) ; \
|
|
||||||
myellowknife : %(cpp_os_yellowknife) ; \
|
|
||||||
mmvme : %(cpp_os_mvme) ; \
|
|
||||||
msim : %(cpp_os_sim) ; \
|
|
||||||
@@ -636,7 +644,10 @@
|
|
||||||
|
|
||||||
#undef STARTFILE_SPEC
|
|
||||||
#define STARTFILE_SPEC "\
|
|
||||||
-%{mads : %(startfile_ads) ; \
|
|
||||||
+%{mgcn : %(startfile_gcn) ; \
|
|
||||||
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
|
|
||||||
+ mrvl : %(startfile_ogc) ; \
|
|
||||||
+ mads : %(startfile_ads) ; \
|
|
||||||
myellowknife : %(startfile_yellowknife) ; \
|
|
||||||
mmvme : %(startfile_mvme) ; \
|
|
||||||
msim : %(startfile_sim) ; \
|
|
||||||
@@ -646,11 +657,12 @@
|
|
||||||
mcall-openbsd: %(startfile_openbsd) ; \
|
|
||||||
: %(startfile_default) }"
|
|
||||||
|
|
||||||
-#define STARTFILE_DEFAULT_SPEC "ecrti.o%s crtbegin.o%s"
|
|
||||||
+#define STARTFILE_DEFAULT_SPEC "crt0.o%s ecrti.o%s crtbegin.o%s"
|
|
||||||
|
|
||||||
#undef LIB_SPEC
|
|
||||||
#define LIB_SPEC "\
|
|
||||||
-%{mads : %(lib_ads) ; \
|
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
|
|
||||||
+ mads : %(lib_ads) ; \
|
|
||||||
myellowknife : %(lib_yellowknife) ; \
|
|
||||||
mmvme : %(lib_mvme) ; \
|
|
||||||
msim : %(lib_sim) ; \
|
|
||||||
@@ -660,11 +672,12 @@
|
|
||||||
mcall-openbsd: %(lib_openbsd) ; \
|
|
||||||
: %(lib_default) }"
|
|
||||||
|
|
||||||
-#define LIB_DEFAULT_SPEC "-lc"
|
|
||||||
+#define LIB_DEFAULT_SPEC "--start-group -lsysbase -lc --end-group"
|
|
||||||
|
|
||||||
#undef ENDFILE_SPEC
|
|
||||||
#define ENDFILE_SPEC "\
|
|
||||||
-%{mads : %(endfile_ads) ; \
|
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
|
|
||||||
+ mads : %(endfile_ads) ; \
|
|
||||||
myellowknife : %(endfile_yellowknife) ; \
|
|
||||||
mmvme : %(endfile_mvme) ; \
|
|
||||||
msim : %(endfile_sim) ; \
|
|
||||||
@@ -680,16 +693,27 @@
|
|
||||||
|
|
||||||
/* Motorola ADS support. */
|
|
||||||
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
|
|
||||||
+#define LIB_OGC_SPEC "--start-group -lsysbase -lc --end-group"
|
|
||||||
|
|
||||||
#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s"
|
|
||||||
+#define STARTFILE_OGC_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
|
|
||||||
|
|
||||||
#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
|
|
||||||
+#define ENDFILE_OGC_SPEC "crtend.o%s ecrtn.o%s"
|
|
||||||
|
|
||||||
#define LINK_START_ADS_SPEC "-T ads.ld%s"
|
|
||||||
+#define LINK_START_OGC_SPEC "-T ogc.ld%s"
|
|
||||||
+#define LINK_START_RVL_SPEC "-T rvl.ld%s"
|
|
||||||
+#define LINK_START_VGC_SPEC "-T vgcogc.ld%s"
|
|
||||||
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
|
|
||||||
|
|
||||||
#define LINK_OS_ADS_SPEC ""
|
|
||||||
+#define LINK_OS_OGC_SPEC "--gc-sections"
|
|
||||||
|
|
||||||
#define CPP_OS_ADS_SPEC ""
|
|
||||||
+#define CPP_OS_GCN_SPEC "-D__gamecube__ -ffunction-sections -fdata-sections"
|
|
||||||
+#define CPP_OS_OGC_SPEC "-D__gamecube__ -DHW_DOL -ffunction-sections -fdata-sections"
|
|
||||||
+#define CPP_OS_RVL_SPEC "-D__wii__ -DHW_RVL -ffunction-sections -fdata-sections"
|
|
||||||
|
|
||||||
/* Motorola Yellowknife support. */
|
|
||||||
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
|
|
||||||
@@ -859,6 +883,7 @@
|
|
||||||
#undef SUBTARGET_EXTRA_SPECS
|
|
||||||
#define SUBTARGET_EXTRA_SPECS \
|
|
||||||
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
|
|
||||||
+ { "lib_ogc", LIB_OGC_SPEC }, \
|
|
||||||
{ "lib_ads", LIB_ADS_SPEC }, \
|
|
||||||
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "lib_mvme", LIB_MVME_SPEC }, \
|
|
||||||
@@ -868,6 +893,7 @@
|
|
||||||
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
|
|
||||||
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
|
|
||||||
{ "lib_default", LIB_DEFAULT_SPEC }, \
|
|
||||||
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
|
|
||||||
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
|
|
||||||
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
|
|
||||||
@@ -877,6 +903,7 @@
|
|
||||||
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
|
|
||||||
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
|
|
||||||
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
|
|
||||||
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
|
|
||||||
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
|
|
||||||
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
|
|
||||||
@@ -889,7 +916,11 @@
|
|
||||||
{ "link_shlib", LINK_SHLIB_SPEC }, \
|
|
||||||
{ "link_target", LINK_TARGET_SPEC }, \
|
|
||||||
{ "link_start", LINK_START_SPEC }, \
|
|
||||||
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \
|
|
||||||
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \
|
|
||||||
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \
|
|
||||||
{ "link_start_ads", LINK_START_ADS_SPEC }, \
|
|
||||||
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \
|
|
||||||
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
|
|
||||||
{ "link_start_sim", LINK_START_SIM_SPEC }, \
|
|
||||||
@@ -899,6 +930,7 @@
|
|
||||||
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
|
|
||||||
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
|
|
||||||
{ "link_os", LINK_OS_SPEC }, \
|
|
||||||
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \
|
|
||||||
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
|
|
||||||
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
|
|
||||||
@@ -912,6 +944,9 @@
|
|
||||||
{ "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \
|
|
||||||
{ "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \
|
|
||||||
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
|
|
||||||
+ { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \
|
|
||||||
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
|
|
||||||
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
|
|
||||||
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
|
|
||||||
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
|
|
||||||
diff -Nbaur gcc-4.8.2/gcc/config/rs6000/sysv4.opt gcc-4.8.2-ppc/gcc/config/rs6000/sysv4.opt
|
|
||||||
--- gcc-4.8.2/gcc/config/rs6000/sysv4.opt 2013-01-10 20:38:27.000000000 +0000
|
|
||||||
+++ gcc-4.8.2-ppc/gcc/config/rs6000/sysv4.opt 2014-04-01 14:13:11.000000000 +0100
|
|
||||||
@@ -120,6 +120,26 @@
|
|
||||||
Target RejectNegative
|
|
||||||
Link with libads.a, libc.a and crt0.o
|
|
||||||
|
|
||||||
+mgcn
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use ogc linker script
|
|
||||||
+
|
|
||||||
+mogc
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use ogc linker script
|
|
||||||
+
|
|
||||||
+mgcbios
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use gcbogc linker script
|
|
||||||
+
|
|
||||||
+mvgc
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use gcbogc linker script
|
|
||||||
+
|
|
||||||
+mrvl
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use rvl linker script
|
|
||||||
+
|
|
||||||
myellowknife
|
|
||||||
Target RejectNegative
|
|
||||||
Link with libyk.a, libc.a and crt0.o
|
|
||||||
diff -Nbaur gcc-4.8.2/gcc/config.gcc gcc-4.8.2-ppc/gcc/config.gcc
|
|
||||||
--- gcc-4.8.2/gcc/config.gcc 2013-10-03 01:47:24.000000000 +0100
|
|
||||||
+++ gcc-4.8.2-ppc/gcc/config.gcc 2014-04-01 14:13:11.000000000 +0100
|
|
||||||
@@ -2057,7 +2057,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-4.8.2/libcpp/Makefile.in gcc-4.8.2-ppc/libcpp/Makefile.in
|
|
||||||
--- gcc-4.8.2/libcpp/Makefile.in 2013-10-16 08:27:58.000000000 +0100
|
|
||||||
+++ gcc-4.8.2-ppc/libcpp/Makefile.in 2014-04-01 14:13:11.000000000 +0100
|
|
||||||
@@ -207,8 +207,7 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
|
||||||
# not atomically write the dependency output file.
|
|
||||||
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
|
|
||||||
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
|
||||||
+COMPILE = $(COMPILE.base) -o $@
|
|
||||||
else
|
|
||||||
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
|
||||||
$(depcomp) $(COMPILE.base)
|
|
||||||
diff -Nbaur gcc-4.8.2/libgcc/config/rs6000/crtrestvr.S gcc-4.8.2-ppc/libgcc/config/rs6000/crtrestvr.S
|
|
||||||
--- gcc-4.8.2/libgcc/config/rs6000/crtrestvr.S 2013-02-04 19:06:20.000000000 +0000
|
|
||||||
+++ gcc-4.8.2-ppc/libgcc/config/rs6000/crtrestvr.S 2014-04-01 14:13:11.000000000 +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-4.8.2/libgcc/config/rs6000/crtsavevr.S gcc-4.8.2-ppc/libgcc/config/rs6000/crtsavevr.S
|
|
||||||
--- gcc-4.8.2/libgcc/config/rs6000/crtsavevr.S 2013-02-04 19:06:20.000000000 +0000
|
|
||||||
+++ gcc-4.8.2-ppc/libgcc/config/rs6000/crtsavevr.S 2014-04-01 14:13:11.000000000 +0100
|
|
||||||
@@ -24,6 +24,7 @@
|
|
||||||
|
|
||||||
/* On PowerPC64 Linux, these functions are provided by the linker. */
|
|
||||||
#ifndef __powerpc64__
|
|
||||||
+#if 0
|
|
||||||
|
|
||||||
#undef __ALTIVEC__
|
|
||||||
#define __ALTIVEC__ 1
|
|
||||||
@@ -85,3 +86,4 @@
|
|
||||||
CFI_ENDPROC
|
|
||||||
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
diff -Nbaur gcc-4.8.2/libgcc/crtstuff.c gcc-4.8.2-ppc/libgcc/crtstuff.c
|
|
||||||
--- gcc-4.8.2/libgcc/crtstuff.c 2013-02-04 19:06:20.000000000 +0000
|
|
||||||
+++ gcc-4.8.2-ppc/libgcc/crtstuff.c 2014-04-01 14:13:11.000000000 +0100
|
|
||||||
@@ -47,7 +47,7 @@
|
|
||||||
|
|
||||||
/* Target machine header files require this define. */
|
|
||||||
#define IN_LIBGCC2
|
|
||||||
-
|
|
||||||
+#define USED_FOR_TARGET
|
|
||||||
/* FIXME: Including auto-host is incorrect, but until we have
|
|
||||||
identified the set of defines that need to go into auto-target.h,
|
|
||||||
this will have to do. */
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
diff -Nbaur gdb-7.7/gdb/Makefile.in gdb-7.7-ppc/gdb/Makefile.in
|
|
||||||
--- gdb-7.7/gdb/Makefile.in 2014-02-06 02:21:29.000000000 +0000
|
|
||||||
+++ gdb-7.7-ppc/gdb/Makefile.in 2014-04-01 14:01:24.000000000 +0100
|
|
||||||
@@ -2307,10 +2307,10 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
|
||||||
# not atomically write the dependency output file.
|
|
||||||
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
|
||||||
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
|
||||||
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
|
||||||
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
|
||||||
+#@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
|
||||||
+#@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
|
||||||
+#@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
|
||||||
+#@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
|
||||||
@GMAKE_TRUE@else
|
|
||||||
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
|
|
||||||
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
|
|
||||||
diff -Nbaur gdb-7.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
|
|
||||||
File diff suppressed because it is too large
Load Diff
12348
dkppc/patches/newlib-4.5.0.20241231.patch
Normal file
12348
dkppc/patches/newlib-4.5.0.20241231.patch
Normal file
File diff suppressed because one or more lines are too long
@@ -1,79 +0,0 @@
|
|||||||
#---------------------------------------------------------------------------------
|
|
||||||
# change shell on Snow Leopard
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
UNAME_S := $(shell uname -s)
|
|
||||||
UNAME_R := $(shell uname -r)
|
|
||||||
|
|
||||||
ifneq (,$(findstring Darwin,$(UNAME_S)))
|
|
||||||
ifneq (,$(findstring 10.8.0,$(UNAME_R)))
|
|
||||||
export SHELL=/bin/bash
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# path to tools
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
export PORTLIBS := $(DEVKITPRO)/portlibs/ppc
|
|
||||||
export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# the prefix on the compiler executables
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
PREFIX := powerpc-eabi-
|
|
||||||
|
|
||||||
export AS := $(PREFIX)as
|
|
||||||
export CC := $(PREFIX)gcc
|
|
||||||
export CXX := $(PREFIX)g++
|
|
||||||
export AR := $(PREFIX)ar
|
|
||||||
export OBJCOPY := $(PREFIX)objcopy
|
|
||||||
|
|
||||||
|
|
||||||
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
|
|
||||||
|
|
||||||
ifneq (,$(ISVC))
|
|
||||||
ERROR_FILTER := 2>&1 | sed -e 's/\(.[a-zA-Z]\+\):\([0-9]\+\):/\1(\2):/g'
|
|
||||||
endif
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.a:
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
@echo $(notdir $@)
|
|
||||||
@rm -f $@
|
|
||||||
@$(AR) -rc $@ $^
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(OBJCFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.s
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.S
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# canned command sequence for binary data
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
define bin2o
|
|
||||||
bin2s -a 32 $< | $(AS) -o $(@)
|
|
||||||
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
|
|
||||||
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
|
|
||||||
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
|
|
||||||
endef
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
ifeq ($(strip $(DEVKITPPC)),)
|
|
||||||
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPro/devkitPPC)
|
|
||||||
endif
|
|
||||||
|
|
||||||
export LIBOGC_INC := $(DEVKITPRO)/libogc/include
|
|
||||||
export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/cube
|
|
||||||
|
|
||||||
include $(DEVKITPPC)/base_rules
|
|
||||||
|
|
||||||
MACHDEP = -DGEKKO -mogc -mcpu=750 -meabi -mhard-float
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.dol: %.elf
|
|
||||||
@echo output ... $(notdir $@)
|
|
||||||
@elf2dol $< $@
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.tpl : %.scf
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@gxtexconv -s $< -d $(DEPSDIR)/$*.d -o $@
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.elf:
|
|
||||||
@echo linking ... $(notdir $@)
|
|
||||||
@$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
ifeq ($(strip $(DEVKITPPC)),)
|
|
||||||
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPro/devkitPPC)
|
|
||||||
endif
|
|
||||||
|
|
||||||
export LIBOGC_INC := $(DEVKITPRO)/libogc/include
|
|
||||||
export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/wii
|
|
||||||
|
|
||||||
MACHDEP = -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float
|
|
||||||
|
|
||||||
include $(DEVKITPPC)/base_rules
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.dol: %.elf
|
|
||||||
@echo output ... $(notdir $@)
|
|
||||||
@elf2dol $< $@
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.tpl : %.scf
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@gxtexconv -s $< -d $(DEPSDIR)/$*.d -o $@
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.elf:
|
|
||||||
@echo linking ... $(notdir $@)
|
|
||||||
@$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@
|
|
||||||
39
dkppc/scripts/build-crtls.sh
Normal file → Executable file
39
dkppc/scripts/build-crtls.sh
Normal file → Executable file
@@ -1,32 +1,25 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
|
|
||||||
export DEVKITPPC=$TOOLPATH/devkitPPC
|
#---------------------------------------------------------------------------------
|
||||||
|
# set env variables
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
export DEVKITPRO=$TOOLPATH
|
export DEVKITPRO=$TOOLPATH
|
||||||
|
export DEVKITPPC=$DEVKITPRO/devkitPPC
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Install and build the gamecube crt and libogc
|
# Install the rules files
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
tar -xvf $SRCDIR/devkitppc-rules-$DKPPC_RULES_VER.tar.gz
|
||||||
|
cd devkitppc-rules-$DKPPC_RULES_VER
|
||||||
|
$MAKE install
|
||||||
|
|
||||||
echo "installing linkscripts ..."
|
|
||||||
cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# copy base rulesets
|
# Install the linkscripts
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
cp $BUILDSCRIPTDIR/dkppc/rules/* $prefix
|
cd $BUILDDIR
|
||||||
|
|
||||||
cd $BUILDDIR/libogc-$LIBOGC_VER
|
|
||||||
|
|
||||||
if [ ! -f installed ]; then
|
|
||||||
echo "Building & installing libogc"
|
|
||||||
$MAKE install || { echo "libogc install failed"; exit 1; }
|
|
||||||
touch installed
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $BUILDDIR/libfat-$LIBFAT_VER
|
|
||||||
|
|
||||||
if [ ! -f installed ]; then
|
|
||||||
echo "Building & installing libfat"
|
|
||||||
$MAKE ogc-install || { echo "libfat install failed"; exit 1; }
|
|
||||||
touch installed
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
tar -xvf $SRCDIR/devkitppc-crtls-$DKPPC_CRTLS_VER.tar.gz
|
||||||
|
cd devkitppc-crtls-$DKPPC_CRTLS_VER
|
||||||
|
$MAKE install
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ cd $target/binutils
|
|||||||
|
|
||||||
if [ ! -f configured-binutils ]
|
if [ ! -f configured-binutils ]
|
||||||
then
|
then
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
../../binutils-$BINUTILS_VER/configure \
|
||||||
--prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \
|
--prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \
|
||||||
--disable-werror \
|
--disable-werror \
|
||||||
--enable-poison-system-directories \
|
--enable-poison-system-directories \
|
||||||
--enable-plugins --enable-lto --disable-dependency-tracking \
|
--enable-plugins --enable-lto \
|
||||||
--disable-werror $CROSS_PARAMS \
|
--disable-werror $CROSS_PARAMS \
|
||||||
|| { echo "Error configuing ppc binutils"; exit 1; }
|
|| { echo "Error configuing ppc binutils"; exit 1; }
|
||||||
touch configured-binutils
|
touch configured-binutils
|
||||||
@@ -40,14 +40,17 @@ cd $BUILDDIR
|
|||||||
# build and install mn10200 binutils
|
# build and install mn10200 binutils
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Use modern config.sub for aarch64 host
|
||||||
|
cp binutils-$BINUTILS_VER/config.sub binutils-$MN_BINUTILS_VER/config.sub
|
||||||
|
|
||||||
mkdir -p mn10200/binutils
|
mkdir -p mn10200/binutils
|
||||||
cd mn10200/binutils
|
cd mn10200/binutils
|
||||||
|
|
||||||
if [ ! -f configured-binutils ]
|
if [ ! -f configured-binutils ]
|
||||||
then
|
then
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
../../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
|
||||||
@@ -73,22 +76,36 @@ cd $BUILDDIR
|
|||||||
mkdir -p $target/gcc
|
mkdir -p $target/gcc
|
||||||
cd $target/gcc
|
cd $target/gcc
|
||||||
|
|
||||||
|
export gcc_cv_libc_provides_ssp=yes
|
||||||
|
|
||||||
if [ ! -f configured-gcc ]
|
if [ ! -f configured-gcc ]
|
||||||
then
|
then
|
||||||
CFLAGS="$cflags" CXXFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" CXXFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \
|
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
--enable-languages=c,c++,objc \
|
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
--enable-lto $plugin_ld \
|
LDFLAGS_FOR_TARGET="" \
|
||||||
|
../../gcc-$GCC_VER/configure \
|
||||||
|
--enable-languages=c,c++,objc,lto \
|
||||||
|
--enable-lto \
|
||||||
--with-cpu=750 \
|
--with-cpu=750 \
|
||||||
--disable-nls --disable-shared --enable-threads --disable-multilib \
|
--disable-nls --disable-shared --enable-threads=dkp --disable-multilib \
|
||||||
--disable-win32-registry \
|
--disable-win32-registry \
|
||||||
--disable-libstdcxx-pch \
|
--disable-libstdcxx-pch \
|
||||||
|
--disable-libstdcxx-verbose \
|
||||||
|
--enable-libstdcxx-time=yes \
|
||||||
|
--enable-libstdcxx-filesystem-ts \
|
||||||
|
--disable-tm-clone-registry \
|
||||||
|
--disable-__cxa_atexit \
|
||||||
|
--disable-libssp \
|
||||||
|
--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-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 48" \
|
||||||
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPPC release 27" \
|
|
||||||
$CROSS_PARAMS \
|
$CROSS_PARAMS \
|
||||||
|
$CROSS_GCC_PARAMS \
|
||||||
|
$EXTRA_GCC_PARAMS \
|
||||||
|
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
||||||
|| { echo "Error configuring gcc stage 1"; exit 1; }
|
|| { echo "Error configuring gcc stage 1"; exit 1; }
|
||||||
touch configured-gcc
|
touch configured-gcc
|
||||||
fi
|
fi
|
||||||
@@ -115,13 +132,19 @@ cd $target/newlib
|
|||||||
unset CFLAGS
|
unset CFLAGS
|
||||||
unset LDFLAGS
|
unset LDFLAGS
|
||||||
|
|
||||||
|
OLD_CC=$CC
|
||||||
|
OLD_CXX=$CXX
|
||||||
|
unset CC
|
||||||
|
unset CXX
|
||||||
|
|
||||||
if [ ! -f configured-newlib ]
|
if [ ! -f configured-newlib ]
|
||||||
then
|
then
|
||||||
|
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections -DCUSTOM_MALLOC_LOCK" \
|
||||||
../../newlib-$NEWLIB_VER/configure \
|
../../newlib-$NEWLIB_VER/configure \
|
||||||
--target=$target \
|
--target=$target \
|
||||||
--prefix=$prefix \
|
--prefix=$prefix \
|
||||||
--enable-newlib-mb \
|
--enable-newlib-mb \
|
||||||
--enable-newlib-hw-fp \
|
--enable-newlib-register-fini \
|
||||||
|| { echo "Error configuring newlib"; exit 1; }
|
|| { echo "Error configuring newlib"; exit 1; }
|
||||||
touch configured-newlib
|
touch configured-newlib
|
||||||
fi
|
fi
|
||||||
@@ -133,10 +156,13 @@ then
|
|||||||
fi
|
fi
|
||||||
if [ ! -f installed-newlib ]
|
if [ ! -f installed-newlib ]
|
||||||
then
|
then
|
||||||
$MAKE install || { echo "Error installing newlib"; exit 1; }
|
$MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
|
||||||
touch installed-newlib
|
touch installed-newlib
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CC=$OLD_CC
|
||||||
|
export CXX=$OLD_CXX
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# build and install the final compiler
|
# build and install the final compiler
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@@ -157,33 +183,4 @@ then
|
|||||||
touch installed-stage2
|
touch installed-stage2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -fr $prefix/$target/sys-include
|
|
||||||
|
|
||||||
cd $BUILDDIR
|
cd $BUILDDIR
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install the debugger
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/gdb
|
|
||||||
cd $target/gdb
|
|
||||||
|
|
||||||
if [ ! -f configured-gdb ]
|
|
||||||
then
|
|
||||||
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
|
|
||||||
--disable-nls --prefix=$prefix --target=$target --disable-werror --disable-dependency-tracking\
|
|
||||||
$CROSS_PARAMS || { echo "Error configuring gdb"; exit 1; }
|
|
||||||
touch configured-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-gdb ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building gdb"; exit 1; }
|
|
||||||
touch built-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-gdb ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing gdb"; exit 1; }
|
|
||||||
touch installed-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
for archive in $hostarchives
|
|
||||||
do
|
|
||||||
dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' )
|
|
||||||
cd $BUILDDIR/$dir
|
|
||||||
if [ ! -f configured ]; then
|
|
||||||
CXXFLAGS=$cflags CFLAGS=$cflags LDFLAGS=$ldflags ./configure --prefix=$prefix --disable-dependency-tracking $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; }
|
|
||||||
touch configured
|
|
||||||
fi
|
|
||||||
if [ ! -f built ]; then
|
|
||||||
$MAKE || { echo "error building $archive"; exit 1; }
|
|
||||||
touch built
|
|
||||||
fi
|
|
||||||
if [ ! -f installed ]; then
|
|
||||||
$MAKE install || { echo "error installing $archive"; exit 1; }
|
|
||||||
touch installed
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -1,201 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install binutils
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
mkdir -p $target/binutils
|
|
||||||
cd $target/binutils
|
|
||||||
|
|
||||||
if [ ! -f configured-binutils ]
|
|
||||||
then
|
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
|
||||||
--prefix=$prefix --target=$target --disable-nls --disable-debug \
|
|
||||||
--enable-lto --enable-plugins \
|
|
||||||
--enable-poison-system-directories \
|
|
||||||
--disable-dependency-tracking --disable-werror \
|
|
||||||
$CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuring binutils"; exit 1; }
|
|
||||||
touch configured-binutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-binutils ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building binutils"; exit 1; }
|
|
||||||
touch built-binutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f installed-binutils ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing binutils"; exit 1; }
|
|
||||||
touch installed-binutils
|
|
||||||
fi
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install just the c compiler
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/gcc
|
|
||||||
cd $target/gcc
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f configured-gcc ]
|
|
||||||
then
|
|
||||||
CFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \
|
|
||||||
--enable-languages=c,c++,objc,obj-c++ \
|
|
||||||
--disable-multilib\
|
|
||||||
--disable-shared --disable-win32-registry --disable-nls\
|
|
||||||
--enable-cxx-flags="-G0" \
|
|
||||||
--disable-libstdcxx-pch \
|
|
||||||
--target=$target \
|
|
||||||
--with-newlib \
|
|
||||||
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
|
||||||
--enable-lto $plugin_ld \
|
|
||||||
--prefix=$prefix \
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPSP release 17" \
|
|
||||||
$CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuring gcc"; exit 1; }
|
|
||||||
touch configured-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f built-gcc ]
|
|
||||||
then
|
|
||||||
$MAKE all-gcc || { echo "Error building gcc"; exit 1; }
|
|
||||||
touch built-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f installed-gcc ]
|
|
||||||
then
|
|
||||||
$MAKE install-gcc || { echo "Error installing gcc"; exit 1; }
|
|
||||||
touch installed-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset CFLAGS
|
|
||||||
cd $BUILDDIR/pspsdk-$PSPSDK_VER
|
|
||||||
|
|
||||||
if [ ! -f bootstrap-sdk ]
|
|
||||||
then
|
|
||||||
./bootstrap || { echo "ERROR RUNNING PSPSDK BOOTSTRAP"; exit 1; }
|
|
||||||
touch bootstrap-sdk
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f configured-sdk ]
|
|
||||||
then
|
|
||||||
CFLAGS_FOR_HOST=$cflags LDFLAGS=$ldflags ./configure --with-pspdev="$prefix" --disable-dependency-tracking $CROSS_PARAMS || { echo "ERROR RUNNING PSPSDK CONFIGURE"; exit 1; }
|
|
||||||
touch configured-sdk
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f install-sdk-data ]
|
|
||||||
then
|
|
||||||
$MAKE install-data || { echo "ERROR INSTALLING PSPSDK HEADERS"; exit 1; }
|
|
||||||
touch install-sdk-data
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
unset CFLAGS
|
|
||||||
unset CFLAGS_FOR_HOST
|
|
||||||
unset LDFLAGS
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install newlib
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/newlib
|
|
||||||
cd $target/newlib
|
|
||||||
|
|
||||||
if [ ! -f configured-newlib ]
|
|
||||||
then
|
|
||||||
../../newlib-$NEWLIB_VER/configure \
|
|
||||||
--target=$target \
|
|
||||||
--prefix=$prefix \
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
|| { echo "Error configuring newlib"; exit 1; }
|
|
||||||
touch configured-newlib
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-newlib ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building newlib"; exit 1; }
|
|
||||||
touch built-newlib
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-newlib ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing newlib"; exit 1; }
|
|
||||||
touch installed-newlib
|
|
||||||
fi
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install the final compiler
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
cd $target/gcc
|
|
||||||
|
|
||||||
if [ ! -f built-stage2 ]
|
|
||||||
then
|
|
||||||
$MAKE all || { echo "Error building gcc stage2"; exit 1; }
|
|
||||||
touch built-stage2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-stage2 ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing gcc stage2"; exit 1; }
|
|
||||||
touch installed-stage2
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -fr $prefix/$target/sys-include
|
|
||||||
cd $BUILDDIR/pspsdk-$PSPSDK_VER
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install the psp sdk
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
echo "building pspsdk ..."
|
|
||||||
|
|
||||||
if [ ! -f built-sdk ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "ERROR BUILDING PSPSDK"; exit 1; }
|
|
||||||
touch built-sdk
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-sdk ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "ERROR INSTALLING PSPSDK"; exit 1; }
|
|
||||||
touch installed-sdk
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install the debugger
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/gdb
|
|
||||||
cd $target/gdb
|
|
||||||
|
|
||||||
if [ ! -f configured-gdb ]
|
|
||||||
then
|
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../gdb-$GDB_VER/configure \
|
|
||||||
--disable-nls --prefix=$prefix --target=$target --disable-werror \
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
$CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuring gdb"; exit 1; }
|
|
||||||
touch configured-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-gdb ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building gdb"; exit 1; }
|
|
||||||
touch built-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-gdb ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing gdb"; exit 1; }
|
|
||||||
touch installed-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ do
|
|||||||
echo
|
echo
|
||||||
echo "Please select the toolchain you require"
|
echo "Please select the toolchain you require"
|
||||||
echo
|
echo
|
||||||
echo "1: devkitARM (gba gp32 ds)"
|
echo "1: devkitARM (gba gp32 ds 3ds)"
|
||||||
echo "2: devkitPPC (gamecube wii)"
|
echo "2: devkitPPC (gamecube wii wii-u)"
|
||||||
echo "3: devkitPSP (PSP)"
|
echo "3: devkitA64 (switch)"
|
||||||
read VERSION
|
read VERSION
|
||||||
|
|
||||||
if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ]
|
if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ]
|
||||||
@@ -30,33 +30,31 @@ done
|
|||||||
|
|
||||||
case "$VERSION" in
|
case "$VERSION" in
|
||||||
"1" )
|
"1" )
|
||||||
GCC_VER=4.9.2
|
GCC_VER=15.2.0
|
||||||
BINUTILS_VER=2.24
|
BINUTILS_VER=2.45.1
|
||||||
NEWLIB_VER=2.1.0
|
NEWLIB_VER=4.5.0.20241231
|
||||||
GDB_VER=7.7.1
|
|
||||||
basedir='dkarm-eabi'
|
basedir='dkarm-eabi'
|
||||||
package=devkitARM
|
package=devkitARM
|
||||||
target=arm-none-eabi
|
target=arm-none-eabi
|
||||||
toolchain=DEVKITARM
|
toolchain=DEVKITARM
|
||||||
;;
|
;;
|
||||||
"2" )
|
"2" )
|
||||||
GCC_VER=4.8.2
|
GCC_VER=15.2.0
|
||||||
BINUTILS_VER=2.24
|
BINUTILS_VER=2.45.1
|
||||||
NEWLIB_VER=2.0.0
|
MN_BINUTILS_VER=2.24
|
||||||
GDB_VER=7.7
|
NEWLIB_VER=4.5.0.20241231
|
||||||
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=15.2.0
|
||||||
BINUTILS_VER=2.22
|
BINUTILS_VER=2.45.1
|
||||||
NEWLIB_VER=1.20.0
|
NEWLIB_VER=4.5.0.20241231
|
||||||
GDB_VER=7.4
|
basedir='dka64'
|
||||||
basedir='dkpsp'
|
package=devkitA64
|
||||||
package=devkitPSP
|
target=aarch64-none-elf
|
||||||
target=psp
|
toolchain=DEVKITA64
|
||||||
toolchain=DEVKITPSP
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
0
strip_bins.sh
Normal file → Executable file
0
strip_bins.sh
Normal file → Executable file
@@ -27,5 +27,5 @@ fi
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
|
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
|
||||||
export PATH=$PATH:$TOOLPATH/$package/bin
|
export PATH=$PATH:$TOOLPATH/$package/bin
|
||||||
|
export prefix=$INSTALLDIR/$CROSSBUILD/$package
|
||||||
. ./strip_bins.sh
|
. ./strip_bins.sh
|
||||||
|
|||||||
Reference in New Issue
Block a user