mirror of
https://github.com/devkitPro/buildscripts.git
synced 2026-03-24 11:04:11 -05:00
Compare commits
746 Commits
devkitPSP_
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2e6e22b37 | ||
|
|
f1a462cc36 | ||
|
|
9681963375 | ||
|
|
e9f9826e26 | ||
|
|
6af2efa45a | ||
|
|
0aa89d4699 | ||
|
|
9fa34ef096 | ||
|
|
86cc404510 | ||
|
|
4b0ff1e466 | ||
|
|
0ddec6ce6d | ||
|
|
8d894d563c | ||
|
|
51244357b7 | ||
|
|
f1d8ff0e21 | ||
|
|
ae56dba8d0 | ||
|
|
e755556799 | ||
|
|
9acf8a8bbc | ||
|
|
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 | ||
|
|
f7de61f3c9 | ||
|
|
e897a44640 | ||
|
|
e0caf9ea02 | ||
|
|
e454bd0dd7 | ||
|
|
ac53b3f62f | ||
|
|
bb77177e7b | ||
|
|
00dfc2dbbb | ||
|
|
98596aad6d | ||
|
|
2f10349942 | ||
|
|
ae01482942 | ||
|
|
b8b237c88d | ||
|
|
2ebf134e6f | ||
|
|
1689594d0a | ||
|
|
ccae1fd3bc | ||
|
|
97f020d9dd | ||
|
|
a9486a0343 | ||
|
|
4abda470f2 | ||
|
|
423bf8e261 | ||
|
|
e012872028 | ||
|
|
695eb60d08 | ||
|
|
98ed1540dd | ||
|
|
2f624a1c28 | ||
|
|
f31d3ff732 | ||
|
|
d6ea5c780e | ||
|
|
2c11d43aef | ||
|
|
dcc84df004 | ||
|
|
496091cd3d | ||
|
|
365d7f8e70 | ||
|
|
acde84974f | ||
|
|
b72392a9f1 | ||
|
|
8bb0b846dc | ||
|
|
814731ce26 | ||
|
|
2088ec214e | ||
|
|
722d723f96 | ||
|
|
0c0cf5f076 | ||
|
|
fc5620fcfa | ||
|
|
ea2bddb2ed | ||
|
|
27249e6df4 | ||
|
|
9eca385eea | ||
|
|
ad8c286e3f | ||
|
|
3b602dd277 | ||
|
|
2719a32a3c | ||
|
|
bddbc05347 | ||
|
|
31a3aebd97 | ||
|
|
398f970194 | ||
|
|
8adc6c5a3a | ||
|
|
9c99a85093 | ||
|
|
3a50a29076 | ||
|
|
71c4499626 | ||
|
|
93040254e6 | ||
|
|
6cd779bb23 | ||
|
|
0b27b8fd31 | ||
|
|
7467c56259 | ||
|
|
c372699fc7 | ||
|
|
4572684bf5 | ||
|
|
89fa563280 | ||
|
|
c9b0f0a993 | ||
|
|
def31f974b | ||
|
|
1baf7cd020 | ||
|
|
edbd8b0249 | ||
|
|
471ea1e10e | ||
|
|
c970193166 | ||
|
|
4a41ed304e | ||
|
|
bf3a5359b4 | ||
|
|
93f3a57a16 | ||
|
|
fb92e0d43e | ||
|
|
98adbbcc9b | ||
|
|
d98429e0fa |
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -1,4 +1,8 @@
|
||||||
config.sh
|
config.sh
|
||||||
.devkitARM*
|
.devkitARM*
|
||||||
.devkitPPC*
|
.devkitPPC*
|
||||||
.devkitPSP*
|
.devkitA64*
|
||||||
|
*.xz
|
||||||
|
*.gz
|
||||||
|
*.bz2
|
||||||
|
*~
|
||||||
|
|
|
||||||
107
README.TXT
107
README.TXT
|
|
@ -1,59 +1,91 @@
|
||||||
devkitPro build scripts
|
devkitPro build scripts
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
This readme will guide you through building devkitARM, devkitPPC or devkitPSP from source using a set of scripts.
|
This readme will guide you through building devkitARM, devkitPPC or devkitA64
|
||||||
|
from source using a set of scripts.
|
||||||
|
|
||||||
To use these scripts under minsys and MinGW you will need some additional packages over and above the base install.
|
Please note that we can't guarantee that what you build with these scripts
|
||||||
|
will function in the same way as the binaries we distribute. Where possible
|
||||||
|
you should use the binary distributions. We also offer no support for any
|
||||||
|
problems you may encounter with these scripts.
|
||||||
|
|
||||||
The minsys developer toolkit
|
The windows versions of the toolchains are now cross compiled on linux using
|
||||||
|
mingw-w64
|
||||||
|
|
||||||
http://prdownloads.sourceforge.net/mingw/msysDTK-1.0.1.exe?download
|
Preparing to build
|
||||||
|
--------------------------
|
||||||
Bison, Flex and Wget from the gnuwin32 project
|
|
||||||
|
|
||||||
http://sourceforge.net/projects/gnuwin32/
|
|
||||||
|
|
||||||
For devkitPSP a command line subversion client is required to get the PSP SDK http://www.tigris.org
|
|
||||||
|
|
||||||
required packages for building on debian/*buntu
|
required packages for building on debian/*buntu
|
||||||
|
|
||||||
sudo apt-get install build-essential autoconf automake bison flex libncurses5-dev libreadline-dev texinfo
|
sudo apt-get install build-essential autoconf automake bison flex libncurses5-dev
|
||||||
|
libreadline-dev texinfo pkg-config
|
||||||
|
|
||||||
for building gcc libgmp, libmpfr and libmpc are required
|
For building gcc libgmp, libmpfr and libmpc are required - these are built as
|
||||||
|
static libraries to make packaging simpler. If you're building the tools for
|
||||||
|
personal use then the versions packaged by your chosen distro should suffice.
|
||||||
|
|
||||||
http://gmplib.org/
|
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 and zlib
|
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
|
||||||
|
|
||||||
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
|
||||||
|
packaging but you can probably use the versions supplied by your distro.
|
||||||
|
|
||||||
Downloading the source packages
|
https://freeimage.sourceforge.net/
|
||||||
-------------------------------
|
https://www.zlib.net
|
||||||
|
https://www.libusb.org
|
||||||
|
https://expat.sourceforge.net/
|
||||||
|
|
||||||
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 libfreeimage-dev zlib1g-dev libusb-dev libudev-dev libexpat1-dev
|
||||||
|
|
||||||
|
|
||||||
|
Building gxtexconv for cube/wii needs GL/gl.h which can be obtained with
|
||||||
|
|
||||||
|
sudo apt-get install mesa-common-dev
|
||||||
|
|
||||||
|
Tools for devkitA64 require liblz4.
|
||||||
|
|
||||||
|
http://lz4.github.io/lz4/
|
||||||
|
|
||||||
|
sudo apt-get install liblz4-dev
|
||||||
|
|
||||||
|
The liblz4 with Ubuntu 14.04 isn't new enough. Either upgrade to at least 16.04 or
|
||||||
|
build this from source.
|
||||||
|
|
||||||
|
For building the OSX versions we install the Xcode commandline tools and build
|
||||||
|
pkg-config from source as well as static versions of the libraries listed above.
|
||||||
|
This helps keep the dependencies to a minimum so end users can use the tools
|
||||||
|
with only Xcode command line tools to obtain make.
|
||||||
|
|
||||||
|
To avoid having to manually answer prompts during the build the script will
|
||||||
|
read variables from config.sh if it exists. Copy config.sh.sample to config.sh
|
||||||
|
and set the variables as appropriate for your build.
|
||||||
|
|
||||||
|
The script will download the source packages it needs. These will be downloaded
|
||||||
|
to the script directory by default but you can set BUILD_DKPRO_SRCDIR if you want
|
||||||
|
to put them somewhere else. When its finished you have the option to delete
|
||||||
|
all temporary files, sources and their source packages.
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
|
@ -65,25 +97,21 @@ Several specs files are built in for the various platforms
|
||||||
-specs=ds_cart for a DS arm7 binary which runs from GBA cart.
|
-specs=ds_cart for a DS arm7 binary which runs from GBA cart.
|
||||||
-specs=gp32.specs for standard GP32 app.
|
-specs=gp32.specs for standard GP32 app.
|
||||||
-specs=gp32_gpsdk.specs for official gamepark SDK GP32 app.
|
-specs=gp32_gpsdk.specs for official gamepark SDK GP32 app.
|
||||||
|
-specs=3dsx.specs for a 3DS homebrew binary.
|
||||||
|
|
||||||
Using devkitPPC
|
Using devkitPPC
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
to use the built in crt0 and linkscript use powerpc-gekko-gcc to link your project, using the command line switch -mgcn for a bare bones system, -mogc to use libogc and the multi-threaded microkernel for gamecube, -mrvl for wii.
|
to use the built in crt0 and linkscript use powerpc-eabi-gcc to link your project,
|
||||||
|
using the command line switch -mgcn for a bare bones system, -mogc to use libogc and
|
||||||
|
the multi-threaded microkernel for gamecube, -mrvl for wii, -mwup for wii u.
|
||||||
|
|
||||||
Using devkitPSP
|
|
||||||
---------------
|
|
||||||
|
|
||||||
All you need to do now to use devkitPSP is make sure that your freshly built tools are in your PATH, something like this;
|
|
||||||
|
|
||||||
export PATH=$PATH:<path to devkitPSP>/bin
|
|
||||||
|
|
||||||
(Obviously replace <path to devkitPSP> with the full path to the devkitPSP installation directory)
|
|
||||||
|
|
||||||
Getting started
|
Getting started
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
The best thing to do next is test the compiler, so grab an examples tarball from sourceforge & run make in the top level.
|
The best thing to do next is test the compiler, so grab an examples tarball
|
||||||
|
from sourceforge & run make in the top level.
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
-------
|
-------
|
||||||
|
|
@ -91,6 +119,7 @@ Credits
|
||||||
* Thanks to WinterMute for bringing us devkitPro, the website is http://www.devkitpro.org
|
* Thanks to WinterMute for bringing us devkitPro, the website is http://www.devkitpro.org
|
||||||
* Build scripts written by WinterMute and tied together by GreenGianT
|
* Build scripts written by WinterMute and tied together by GreenGianT
|
||||||
* Thanks to Mr Spiv, Honkey Kong, Raleigh and JoostP for OS X testing
|
* Thanks to Mr Spiv, Honkey Kong, Raleigh and JoostP for OS X testing
|
||||||
|
* libctru by Smealum, YellowS8, fincs, mtheall & WinterMute with contributions from many others.
|
||||||
* libogc written and supplied by Shagkur. Additional code by WinterMute, Bushing, Marcan & Tybor
|
* libogc written and supplied by Shagkur. Additional code by WinterMute, Bushing, Marcan & Tybor
|
||||||
* libgba by WinterMute
|
* libgba by WinterMute
|
||||||
* libnds by Joat, Dovoto and WinterMute with contributions from many others.
|
* libnds by Joat, Dovoto and WinterMute with contributions from many others.
|
||||||
|
|
|
||||||
35
build-binutils.sh
Normal file
35
build-binutils.sh
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install binutils
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
mkdir -p $target/binutils
|
||||||
|
pushd $target/binutils
|
||||||
|
|
||||||
|
if [ ! -f configured-binutils ]
|
||||||
|
then
|
||||||
|
CPPFLAGS="$cppflags $CPPFLAGS" LDFLAGS="$ldflags $LDFLAGS" ../../binutils-$BINUTILS_VER/configure \
|
||||||
|
--prefix=$prefix --target=$target \
|
||||||
|
--disable-nls --disable-werror \
|
||||||
|
--disable-shared --disable-debug \
|
||||||
|
--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
|
||||||
|
popd
|
||||||
40
build-crtls.sh
Executable file
40
build-crtls.sh
Executable file
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# set env variables
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export DEVKITPRO=$TOOLPATH
|
||||||
|
export DEVKITPPC=$DEVKITPRO/devkitPPC
|
||||||
|
export DEVKITARM=$DEVKITPRO/devkitARM
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Install the rules files
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
if [ ! -f extracted-${_prefix}-rules ]; then
|
||||||
|
tar -xvf $SRCDIR/${_prefix}-rules-${_rules_ver}.tar.gz || touch extracted-${_prefix}-rules
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd ${_prefix}-rules-${_rules_ver}
|
||||||
|
|
||||||
|
if [ ! -f installed-${_prefix}-rules ]; then
|
||||||
|
$MAKE install || touch installed-${_prefix}-rules
|
||||||
|
fi
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Install the linkscripts
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
if [ $VERSION -ne 3 ]; then
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
if [ ! -f extracted-${_prefix}-crtls ]; then
|
||||||
|
tar -xvf $SRCDIR/${_prefix}-crtls-${_crtls_ver}.tar.gz || touch extracted-${_prefix}-crtls
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd ${_prefix}-crtls-${_crtls_ver}
|
||||||
|
|
||||||
|
if [ ! -f installed-${_prefix}-crtls ]; then
|
||||||
|
$MAKE install || touch installed-${_prefix}-crtls
|
||||||
|
fi
|
||||||
|
fi
|
||||||
281
build-devkit.sh
281
build-devkit.sh
|
|
@ -1,18 +1,16 @@
|
||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Build scripts for
|
# devkitARM release 67.1
|
||||||
# devkitARM release 38
|
# devkitPPC release 49.2
|
||||||
# devkitPPC release 26
|
# devkitA64 release 29.2
|
||||||
# devkitPSP release 17
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
if [ 1 -eq 1 ] ; then
|
if [ 0 -eq 1 ] ; then
|
||||||
echo "Currently in release cycle, proceed with caution, do not report problems, do not ask for support."
|
|
||||||
echo "Please use the latest release buildscripts unless advised otherwise by devkitPro staff."
|
echo "Please use the latest release buildscripts unless advised otherwise by devkitPro staff."
|
||||||
echo "http://sourceforge.net/projects/devkitpro/files/buildscripts/"
|
echo "https://github.com/devkitPro/buildscripts/releases/latest"
|
||||||
echo
|
echo
|
||||||
echo "The scripts in svn are quite often dependent on things which currently only exist on developer"
|
echo "The scripts in the git repository may be dependent on things which currently only exist"
|
||||||
echo "machines. This is not a bug, use stable releases."
|
echo "on developer machines. This is not a bug, use stable releases."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -20,53 +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.10
|
|
||||||
LIBGBA_VER=20090222
|
|
||||||
LIBNDS_VER=1.5.5
|
DKARM_RULES_VER=1.6.1
|
||||||
DEFAULT_ARM7_VER=0.5.24
|
DKARM_CRTLS_VER=1.2.7
|
||||||
DSWIFI_VER=0.3.13
|
|
||||||
LIBMIRKO_VER=0.9.7
|
DKPPC_RULES_VER=1.2.1
|
||||||
MAXMOD_VER=1.0.7
|
DKPPC_CRTLS_VER=1.0.0
|
||||||
FILESYSTEM_VER=0.9.9
|
|
||||||
LIBFAT_VER=1.0.11
|
DKA64_RULES_VER=1.1.1
|
||||||
PSPSDK_VER=20120404
|
|
||||||
GBATOOLS_VER=1.0.0
|
OSXMIN=${OSXMIN:-10.9}
|
||||||
GRIT_VER=0.8.10
|
|
||||||
NDSTOOL_VER=1.50.1
|
#---------------------------------------------------------------------------------
|
||||||
GENERAL_TOOLS_VER=1.0.0
|
# find proper patch
|
||||||
DLDITOOL_VER=1.24.0
|
#---------------------------------------------------------------------------------
|
||||||
GXTEXCONV_VER=0.1.9
|
if [ -z "$PATCH" -a -x "$(which gpatch)" ]; then PATCH=$(which gpatch); fi
|
||||||
GCDSPSUITE_VER=1.4.0
|
if [ -z "$PATCH" -a -x "$(which patch)" ]; then PATCH=$(which patch); fi
|
||||||
ELF2DOL_VER=1.0.0
|
if [ -z "$PATCH" ]; then
|
||||||
WIILOAD_VER=0.5.1
|
echo no patch found
|
||||||
MMUTIL_VER=1.8.6
|
exit 1
|
||||||
|
fi
|
||||||
|
echo use $PATCH as patch
|
||||||
|
export PATCH
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
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.$4" || { echo "Error extracting "$1; exit 1; }
|
||||||
extractflags="-xjf"
|
touch extracted-$1-$2
|
||||||
archivetype=".tar.bz2"
|
|
||||||
elif [ $3 == "gz" ]; then
|
|
||||||
extractflags="-xzf"
|
|
||||||
archivetype=".tar.gz"
|
|
||||||
else
|
|
||||||
echo "invalid archive type"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
tar $extractflags $SRCDIR/$1-$2$archivetype || { echo "Error extracting "$1; exit 1; }
|
|
||||||
touch extracted-$1
|
|
||||||
fi
|
fi
|
||||||
if [[ ! -f patched-$1 && -f $patchdir/$1-$2.patch ]]; then
|
if [[ ! -f patched-$1-$2 && -f $patchdir/$1-$2-$3.patch ]]; then
|
||||||
echo "patching $1"
|
echo "patching $1-$2"
|
||||||
patch -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; }
|
$PATCH -p1 -d $1-$2 -i $patchdir/$1-$2-$3.patch || { echo "Error patching $1"; exit 1; }
|
||||||
touch patched-$1
|
touch patched-$1-$2
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -77,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
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
@ -98,27 +85,25 @@ 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 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;
|
||||||
|
|
||||||
if test "`curl -V`"; then
|
if test "`wget -V`"; then
|
||||||
|
FETCH='wget -U "dkp-buildscript"'
|
||||||
|
elif test "`curl -V`"; then
|
||||||
FETCH="curl -f -L -O"
|
FETCH="curl -f -L -O"
|
||||||
elif test "`wget -V`"; then
|
|
||||||
FETCH=wget
|
|
||||||
else
|
else
|
||||||
echo "ERROR: Please make sure you have wget or curl installed."
|
echo "ERROR: Please make sure you have wget or curl installed."
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -138,23 +123,28 @@ 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
|
||||||
|
CROSS_PARAMS="$CROSS_PARAMS --host=`./config.guess`"
|
||||||
|
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
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo 'Ready to install '$package' in '$INSTALLDIR
|
echo 'Ready to install '$package' in '$prefix
|
||||||
echo
|
echo
|
||||||
echo 'press return to continue'
|
echo 'press return to continue'
|
||||||
|
|
||||||
|
|
@ -164,47 +154,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)/patches
|
||||||
scriptdir=$(pwd)/$basedir/scripts
|
scriptdir=$(pwd)/$basedir/scripts
|
||||||
|
|
||||||
archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.bz2 newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.bz2"
|
archives="binutils-${BINUTILS_VER}.tar.xz gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz"
|
||||||
|
|
||||||
if [ $VERSION -eq 1 ]; then
|
|
||||||
targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2
|
|
||||||
libmirko-src-${LIBMIRKO_VER}.tar.bz2 dswifi-src-${DSWIFI_VER}.tar.bz2 maxmod-src-${MAXMOD_VER}.tar.bz2
|
|
||||||
default-arm7-src-${DEFAULT_ARM7_VER}.tar.bz2 libfilesystem-src-${FILESYSTEM_VER}.tar.bz2
|
|
||||||
libfat-src-${LIBFAT_VER}.tar.bz2"
|
|
||||||
hostarchives="gbatools-$GBATOOLS_VER.tar.bz2 grit-$GRIT_VER.tar.bz2 ndstool-$NDSTOOL_VER.tar.bz2
|
|
||||||
general-tools-$GENERAL_TOOLS_VER.tar.bz2 dlditool-$DLDITOOL_VER.tar.bz2 mmutil-$MMUTIL_VER.tar.bz2"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $VERSION -eq 2 ]; then
|
if [ $VERSION -eq 2 ]; then
|
||||||
targetarchives="libogc-src-${LIBOGC_VER}.tar.bz2 libfat-src-${LIBFAT_VER}.tar.bz2"
|
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives"
|
||||||
hostarchives="gxtexconv-$GXTEXCONV_VER.tar.bz2 gcdspsuite-$GCDSPSUITE_VER.tar.bz2
|
|
||||||
wiiload-$WIILOAD_VER.tar.bz2 elf2dol-$ELF2DOL_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $VERSION -eq 3 ]; then
|
if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ]; then
|
||||||
targetarchives="pspsdk-src-${PSPSDK_VER}.tar.bz2"
|
if [ $VERSION -eq 1 ]; then
|
||||||
|
archives="devkitarm-rules-$DKARM_RULES_VER.tar.gz devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz $archives"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $VERSION -eq 2 ]; then
|
||||||
|
archives="devkitppc-crtls-$DKPPC_CRTLS_VER.tar.gz devkitppc-rules-$DKPPC_RULES_VER.tar.gz $archives"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $VERSION -eq 3 ]; then
|
||||||
|
archives="devkita64-rules-$DKA64_RULES_VER.tar.gz $archives"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
|
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
|
||||||
|
|
@ -213,12 +211,12 @@ else
|
||||||
SRCDIR=`pwd`
|
SRCDIR=`pwd`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd $SRCDIR
|
cd "$SRCDIR"
|
||||||
for archive in $archives $targetarchives $hostarchives
|
for archive in $archives
|
||||||
do
|
do
|
||||||
echo $archive
|
echo $archive
|
||||||
if [ ! -f $archive ]; then
|
if [ ! -f $archive ]; then
|
||||||
$FETCH http://downloads.sf.net/devkitpro/$archive || { echo "Error: Failed to download $archive"; exit 1; }
|
$FETCH https://downloads.devkitpro.org/$archive || { echo "Error: Failed to download $archive"; exit 1; }
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
@ -226,45 +224,40 @@ 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 $BINUTILS_PKGREL xz
|
||||||
extract_and_patch gcc $GCC_VER bz2
|
|
||||||
rm -fr gcc-$GCC_VER/zlib
|
|
||||||
extract_and_patch newlib $NEWLIB_VER gz
|
|
||||||
extract_and_patch gdb $GDB_VER bz2
|
|
||||||
|
|
||||||
for archive in $targetarchives
|
extract_and_patch gcc $GCC_VER $GCC_PKGREL xz
|
||||||
do
|
if [ "$GCC_DOWNLOAD_PREREQS" != "0" ] && [ ! -f downloaded_prereqs ]; then
|
||||||
destdir=$(echo $archive | sed -e 's/\(.*\)-src-\(.*\)\.tar\.bz2/\1-\2/' )
|
cd gcc-${GCC_VER}
|
||||||
echo $destdir
|
./contrib/download_prerequisites && touch downloaded_prereqs
|
||||||
if [ ! -d $destdir ]; then
|
cd ..
|
||||||
mkdir -p $destdir
|
fi
|
||||||
bzip2 -cd $SRCDIR/$archive | tar -xf - -C $destdir || { echo "Error extracting "$archive; exit 1; }
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for archive in $hostarchives
|
extract_and_patch newlib $NEWLIB_VER $NEWLIB_PKGREL gz
|
||||||
do
|
|
||||||
tar -xjf $SRCDIR/$archive
|
if [ $VERSION -eq 2 ]; then extract_and_patch binutils $MN_BINUTILS_VER bz2; fi
|
||||||
done
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Build and install devkit components
|
# Build and install devkit components
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
if [ -f $scriptdir/build-gcc.sh ]; then . $scriptdir/build-gcc.sh || { echo "Error building toolchain"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
. ${BUILDSCRIPTDIR}/build-binutils.sh || { echo "Error building binutils"; exit 1; };
|
||||||
if [ -f $scriptdir/build-tools.sh ]; then . $scriptdir/build-tools.sh || { echo "Error building tools"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
if [ $VERSION -eq 2 ]; then . ${BUILDSCRIPTDIR}/build-mn10200-binutils.sh || { echo "Error building mn10200 binutils"; exit 1; }; fi
|
||||||
if [ -f $scriptdir/build-crtls.sh ]; then . $scriptdir/build-crtls.sh || { echo "Error building crtls"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
|
||||||
|
|
||||||
if [ "$CROSSBUILD" = "i686-w64-mingw32" ]; then
|
. ${BUILDSCRIPTDIR}/build-gcc-stage1.sh || { echo "Error building gcc stage1"; exit 1; };
|
||||||
if [ $VERSION -ne 3 ]; then
|
. ${BUILDSCRIPTDIR}/build-newlib.sh || { echo "Error building newlib"; exit 1; };
|
||||||
cp -v /opt/i686-w64-mingw32/mingw/lib/FreeImage.dll $prefix/bin
|
. ${BUILDSCRIPTDIR}/build-gcc-stage2.sh || { echo "Error building gcc stage2"; exit 1; };
|
||||||
fi
|
|
||||||
cp -v /opt/i686-w64-mingw32/mingw/lib/libstdc++-6.dll \
|
|
||||||
/opt/i686-w64-mingw32/mingw/lib/libgcc_s_sjlj-1.dll \
|
if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ]; then
|
||||||
$prefix/bin
|
. ${BUILDSCRIPTDIR}/build-crtls.sh || { echo "Error building crtls & rules"; exit 1; };
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "stripping installed binaries"
|
cd $BUILDSCRIPTDIR
|
||||||
. ./strip_bins.sh
|
|
||||||
|
if [ "$BUILD_DKPRO_NO_STRIP_BINARIES" != "1" ]; then
|
||||||
|
echo "stripping installed binaries"
|
||||||
|
. ./strip_bins.sh
|
||||||
|
fi
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Clean up temporary files and source directories
|
# Clean up temporary files and source directories
|
||||||
|
|
@ -288,5 +281,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
|
||||||
|
|
|
||||||
56
build-gcc-stage1.sh
Executable file
56
build-gcc-stage1.sh
Executable file
|
|
@ -0,0 +1,56 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install the full compiler
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
mkdir -p ${BUILDDIR}/$target/gcc
|
||||||
|
cd ${BUILDDIR}/$target/gcc
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -f configured-gcc ]
|
||||||
|
then
|
||||||
|
CPPFLAGS="$cppflags $CPPFLAGS" \
|
||||||
|
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 \
|
||||||
|
--target=$target \
|
||||||
|
--prefix=$prefix \
|
||||||
|
--enable-languages=c,c++,objc,lto \
|
||||||
|
--with-gnu-as --with-gnu-ld --with-gcc \
|
||||||
|
--enable-cxx-flags='-ffunction-sections' \
|
||||||
|
--disable-libstdcxx-verbose \
|
||||||
|
--enable-poison-system-directories \
|
||||||
|
--enable-threads=posix --disable-win32-registry --disable-nls --disable-debug \
|
||||||
|
--disable-libmudflap --disable-libssp --disable-libgomp \
|
||||||
|
--disable-libstdcxx-pch \
|
||||||
|
--enable-libstdcxx-time=yes \
|
||||||
|
--enable-libstdcxx-filesystem-ts \
|
||||||
|
--with-newlib=yes \
|
||||||
|
--with-native-system-header-dir=/include \
|
||||||
|
--with-sysroot=${prefix}/${target} \
|
||||||
|
--enable-lto \
|
||||||
|
--disable-tm-clone-registry \
|
||||||
|
--disable-__cxa_atexit \
|
||||||
|
--with-bugurl="https://devkitpro.org" \
|
||||||
|
${_toolchain_options} \
|
||||||
|
$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 stage 1"; exit 1; }
|
||||||
|
touch installed-gcc
|
||||||
|
fi
|
||||||
21
build-gcc-stage2.sh
Executable file
21
build-gcc-stage2.sh
Executable file
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install the full compiler
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
mkdir -p ${BUILDDIR}/$target/gcc
|
||||||
|
cd ${BUILDDIR}/$target/gcc
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -f built-gcc-stage2 ]
|
||||||
|
then
|
||||||
|
$MAKE || { echo "Error building gcc stage2"; exit 1; }
|
||||||
|
touch built-gcc-stage2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f installed-gcc-stage2 ]
|
||||||
|
then
|
||||||
|
$MAKE install-strip || { echo "Error installing gcc"; exit 1; }
|
||||||
|
touch installed-gcc-stage2
|
||||||
|
fi
|
||||||
33
build-mn10200-binutils.sh
Normal file
33
build-mn10200-binutils.sh
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# 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
|
||||||
|
pushd mn10200/binutils
|
||||||
|
|
||||||
|
if [ ! -f configured-binutils ]
|
||||||
|
then
|
||||||
|
../../binutils-$MN_BINUTILS_VER/configure \
|
||||||
|
--prefix=$prefix --target=mn10200 --disable-nls --disable-debug \
|
||||||
|
--disable-multilib \
|
||||||
|
--disable-werror $CROSS_PARAMS \
|
||||||
|
|| { echo "Error configuing mn10200 binutils"; exit 1; }
|
||||||
|
touch configured-binutils
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f built-binutils ]
|
||||||
|
then
|
||||||
|
$MAKE || { echo "Error building mn10200 binutils"; exit 1; }
|
||||||
|
touch built-binutils
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f installed-binutils ]
|
||||||
|
then
|
||||||
|
$MAKE install || { echo "Error installing mn10200 binutils"; exit 1; }
|
||||||
|
touch installed-binutils
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd
|
||||||
56
build-newlib.sh
Normal file
56
build-newlib.sh
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install newlib
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
unset CFLAGS
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
OLD_CC=$CC
|
||||||
|
OLDCXX=$CXX
|
||||||
|
unset CC
|
||||||
|
unset CXX
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install newlib
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
mkdir -p ${BUILDDIR}/$target/newlib
|
||||||
|
cd ${BUILDDIR}/$target/newlib
|
||||||
|
|
||||||
|
_target_cflags="-O2 -ffunction-sections -fdata-sections"
|
||||||
|
|
||||||
|
if [ $VERSION -eq 2 ]; then
|
||||||
|
_target_cflags="${_target_cflags} -DCUSTOM_MALLOC_LOCK"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f configured-newlib ]
|
||||||
|
then
|
||||||
|
CFLAGS_FOR_TARGET="${_target_cflags}" \
|
||||||
|
../../newlib-$NEWLIB_VER/configure \
|
||||||
|
--disable-newlib-supplied-syscalls \
|
||||||
|
--enable-newlib-mb \
|
||||||
|
--disable-newlib-wide-orient \
|
||||||
|
--enable-newlib-register-fini \
|
||||||
|
--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
|
||||||
2016
config.guess
vendored
2016
config.guess
vendored
File diff suppressed because it is too large
Load Diff
44
config.sh.sample
Normal file → Executable file
44
config.sh.sample
Normal file → Executable file
|
|
@ -9,29 +9,25 @@
|
||||||
# 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
|
||||||
|
|
@ -40,3 +36,17 @@ BUILD_DKPRO_DOWNLOAD=0
|
||||||
# 1: Use defaults, don't pause for answers
|
# 1: Use defaults, don't pause for answers
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
BUILD_DKPRO_AUTOMATED=0
|
BUILD_DKPRO_AUTOMATED=0
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Download prerequisites before building gcc
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# 0: use pre-compiled prereqs
|
||||||
|
# 1: run included download script
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
GCC_DOWNLOAD_PREREQS=0
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# set OSX SDK path if needed
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
#export OSXSDKPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX10.12.sdk
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
export CROSSBUILD=i686-w64-mingw32
|
|
||||||
export PATH=/opt/i686-w64-mingw32/bin:$PATH
|
|
||||||
|
|
@ -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,162 +0,0 @@
|
||||||
diff -Nbaur binutils-2.22/bfd/bfd-in2.h binutils-2.22-arm/bfd/bfd-in2.h
|
|
||||||
--- binutils-2.22/bfd/bfd-in2.h 2011-09-16 02:15:18.000000000 +0100
|
|
||||||
+++ binutils-2.22-arm/bfd/bfd-in2.h 2012-04-01 12:58:20.000000000 +0100
|
|
||||||
@@ -38,6 +38,8 @@
|
|
||||||
|
|
||||||
#include "ansidecl.h"
|
|
||||||
#include "symcat.h"
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+
|
|
||||||
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
|
||||||
#ifndef SABER
|
|
||||||
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
|
||||||
@@ -308,8 +310,6 @@
|
|
||||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
|
||||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
|
||||||
|
|
||||||
-/* Forward define. */
|
|
||||||
-struct stat;
|
|
||||||
|
|
||||||
typedef enum bfd_print_symbol
|
|
||||||
{
|
|
||||||
diff -Nbaur binutils-2.22/bfd/bfd-in.h binutils-2.22-arm/bfd/bfd-in.h
|
|
||||||
--- binutils-2.22/bfd/bfd-in.h 2011-09-16 02:15:18.000000000 +0100
|
|
||||||
+++ binutils-2.22-arm/bfd/bfd-in.h 2012-04-01 12:58:20.000000000 +0100
|
|
||||||
@@ -31,6 +31,8 @@
|
|
||||||
|
|
||||||
#include "ansidecl.h"
|
|
||||||
#include "symcat.h"
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+
|
|
||||||
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
|
||||||
#ifndef SABER
|
|
||||||
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
|
||||||
@@ -301,8 +303,6 @@
|
|
||||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
|
||||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
|
||||||
|
|
||||||
-/* Forward define. */
|
|
||||||
-struct stat;
|
|
||||||
|
|
||||||
typedef enum bfd_print_symbol
|
|
||||||
{
|
|
||||||
diff -Nbaur binutils-2.22/bfd/config.in binutils-2.22-arm/bfd/config.in
|
|
||||||
--- binutils-2.22/bfd/config.in 2011-05-12 08:41:40.000000000 +0100
|
|
||||||
+++ binutils-2.22-arm/bfd/config.in 2012-04-03 17:35:45.000000000 +0100
|
|
||||||
@@ -245,6 +245,9 @@
|
|
||||||
/* Define if <sys/procfs.h> has win32_pstatus_t. */
|
|
||||||
#undef HAVE_WIN32_PSTATUS_T
|
|
||||||
|
|
||||||
+/* Define to 1 if you have the <windows.h> header file. */
|
|
||||||
+#undef HAVE_WINDOWS_H
|
|
||||||
+
|
|
||||||
/* Define to 1 if you have the <zlib.h> header file. */
|
|
||||||
#undef HAVE_ZLIB_H
|
|
||||||
|
|
||||||
diff -Nbaur binutils-2.22/bfd/configure binutils-2.22-arm/bfd/configure
|
|
||||||
--- binutils-2.22/bfd/configure 2011-11-21 11:55:48.000000000 +0000
|
|
||||||
+++ binutils-2.22-arm/bfd/configure 2012-04-03 17:35:45.000000000 +0100
|
|
||||||
@@ -13508,6 +13508,22 @@
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
+
|
|
||||||
+for ac_header in windows.h dlfcn.h
|
|
||||||
+do :
|
|
||||||
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
|
||||||
+eval as_val=\$$as_ac_Header
|
|
||||||
+ if test "x$as_val" = x""yes; then :
|
|
||||||
+ cat >>confdefs.h <<_ACEOF
|
|
||||||
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
+
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
|
|
||||||
$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
|
|
||||||
if test "${gcc_cv_header_string+set}" = set; then :
|
|
||||||
diff -Nbaur binutils-2.22/bfd/configure.in binutils-2.22-arm/bfd/configure.in
|
|
||||||
--- binutils-2.22/bfd/configure.in 2011-11-21 11:55:46.000000000 +0000
|
|
||||||
+++ binutils-2.22-arm/bfd/configure.in 2012-04-03 17:35:45.000000000 +0100
|
|
||||||
@@ -190,6 +190,9 @@
|
|
||||||
GCC_HEADER_STDINT(bfd_stdint.h)
|
|
||||||
AC_HEADER_TIME
|
|
||||||
AC_HEADER_DIRENT
|
|
||||||
+
|
|
||||||
+AC_CHECK_HEADERS(windows.h dlfcn.h)
|
|
||||||
+
|
|
||||||
ACX_HEADER_STRING
|
|
||||||
AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno)
|
|
||||||
AC_CHECK_FUNCS(strtoull)
|
|
||||||
diff -Nbaur binutils-2.22/bfd/plugin.c binutils-2.22-arm/bfd/plugin.c
|
|
||||||
--- binutils-2.22/bfd/plugin.c 2011-07-11 16:03:07.000000000 +0100
|
|
||||||
+++ binutils-2.22-arm/bfd/plugin.c 2012-04-03 17:35:45.000000000 +0100
|
|
||||||
@@ -25,7 +25,13 @@
|
|
||||||
#if BFD_SUPPORTS_PLUGINS
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
+#ifdef HAVE_DLFCN_H
|
|
||||||
#include <dlfcn.h>
|
|
||||||
+#elif defined (HAVE_WINDOWS_H)
|
|
||||||
+#include <windows.h>
|
|
||||||
+#else
|
|
||||||
+#error Unknown how to handle dynamic-load-libraries.
|
|
||||||
+#endif
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include "plugin-api.h"
|
|
||||||
#include "sysdep.h"
|
|
||||||
@@ -34,6 +40,37 @@
|
|
||||||
#include "libiberty.h"
|
|
||||||
#include <dirent.h>
|
|
||||||
|
|
||||||
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
|
|
||||||
+
|
|
||||||
+#define RTLD_NOW 0 /* Dummy value. */
|
|
||||||
+
|
|
||||||
+static void *
|
|
||||||
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
|
|
||||||
+{
|
|
||||||
+ return LoadLibrary (file);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void *
|
|
||||||
+dlsym (void *handle, const char *name)
|
|
||||||
+{
|
|
||||||
+ return GetProcAddress (handle, name);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int ATTRIBUTE_UNUSED
|
|
||||||
+dlclose (void *handle)
|
|
||||||
+{
|
|
||||||
+ FreeLibrary (handle);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static const char *
|
|
||||||
+dlerror (void)
|
|
||||||
+{
|
|
||||||
+ return "Unable to load DLL.";
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) */
|
|
||||||
+
|
|
||||||
#define bfd_plugin_close_and_cleanup _bfd_generic_close_and_cleanup
|
|
||||||
#define bfd_plugin_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
|
|
||||||
#define bfd_plugin_new_section_hook _bfd_generic_new_section_hook
|
|
||||||
diff -Nbaur binutils-2.22/include/opcode/arm.h binutils-2.22-arm/include/opcode/arm.h
|
|
||||||
--- binutils-2.22/include/opcode/arm.h 2011-05-31 15:12:55.000000000 +0100
|
|
||||||
+++ binutils-2.22-arm/include/opcode/arm.h 2012-04-01 12:58:20.000000000 +0100
|
|
||||||
@@ -109,7 +109,8 @@
|
|
||||||
#define ARM_AEXT_V6KT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K)
|
|
||||||
#define ARM_AEXT_V6ZT2 (ARM_AEXT_V6T2 | ARM_EXT_SEC)
|
|
||||||
#define ARM_AEXT_V6ZKT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K | ARM_EXT_SEC)
|
|
||||||
-#define ARM_AEXT_V7_ARM (ARM_AEXT_V6KT2 | ARM_EXT_V7 | ARM_EXT_BARRIER)
|
|
||||||
+#define ARM_AEXT_V7_ARM (ARM_AEXT_V6KT2 | ARM_EXT_V7 | ARM_EXT_BARRIER \
|
|
||||||
+ | ARM_EXT_OS )
|
|
||||||
#define ARM_AEXT_V7A (ARM_AEXT_V7_ARM | ARM_EXT_V7A)
|
|
||||||
#define ARM_AEXT_V7R (ARM_AEXT_V7_ARM | ARM_EXT_V7R | ARM_EXT_DIV)
|
|
||||||
#define ARM_AEXT_NOTM \
|
|
||||||
|
|
@ -1,167 +0,0 @@
|
||||||
diff -Nbaur gcc-4.7.0/gcc/config/arm/t-arm-elf gcc-4.7.0-arm/gcc/config/arm/t-arm-elf
|
|
||||||
--- gcc-4.7.0/gcc/config/arm/t-arm-elf 2011-11-02 15:23:48.000000000 +0000
|
|
||||||
+++ gcc-4.7.0-arm/gcc/config/arm/t-arm-elf 2012-04-05 20:36:17.000000000 +0100
|
|
||||||
@@ -26,22 +26,44 @@
|
|
||||||
#MULTILIB_DIRNAMES += fa526 fa626 fa606te fa626te fmp626 fa726te
|
|
||||||
#MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=fa526 *mthumb*/*mcpu=fa626
|
|
||||||
|
|
||||||
-#MULTILIB_OPTIONS += march=armv7
|
|
||||||
-#MULTILIB_DIRNAMES += thumb2
|
|
||||||
-#MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7*
|
|
||||||
-#MULTILIB_MATCHES += march?armv7=march?armv7-a
|
|
||||||
-#MULTILIB_MATCHES += march?armv7=march?armv7-r
|
|
||||||
-#MULTILIB_MATCHES += march?armv7=march?armv7-m
|
|
||||||
-#MULTILIB_MATCHES += march?armv7=mcpu?cortex-a8
|
|
||||||
-#MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4
|
|
||||||
-#MULTILIB_MATCHES += march?armv7=mcpu?cortex-m3
|
|
||||||
+#mfloat-abi=hard|mfpu=fpv4-sp-d16
|
|
||||||
+
|
|
||||||
+MULTILIB_OPTIONS += march=armv7/march=armv6-m/mcpu=cortex-m4
|
|
||||||
+MULTILIB_DIRNAMES += thumb2 armv6-m cortex-m4
|
|
||||||
+MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7*
|
|
||||||
+MULTILIB_EXCEPTIONS += march=armv6-m* marm/*march=armv6-m*
|
|
||||||
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* marm/*mcpu=cortex-m4*
|
|
||||||
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* mthumb/mcpu=cortex-m4
|
|
||||||
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* mthumb/mcpu=cortex-m4/mbig-endian
|
|
||||||
+MULTILIB_MATCHES += march?armv7=march?armv7-a
|
|
||||||
+MULTILIB_MATCHES += march?armv7=march?armv7-r
|
|
||||||
+MULTILIB_MATCHES += march?armv7=march?armv7-m
|
|
||||||
+MULTILIB_MATCHES += march?armv7=mcpu?cortex-a8
|
|
||||||
+MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4
|
|
||||||
+MULTILIB_MATCHES += march?armv7=mcpu?cortex-m3
|
|
||||||
+MULTILIB_MATCHES += march?armv6-m=mcpu?cortex-m0
|
|
||||||
+MULTILIB_MATCHES += march?armv6-m=mcpu?cortex-m1
|
|
||||||
+
|
|
||||||
+MULTILIB_OPTIONS += mfloat-abi=hard mfpu=fpv4-sp-d16
|
|
||||||
+MULTILIB_DIRNAMES += float-abi-hard fpuv4-sp-d16
|
|
||||||
+MULTILIB_EXCEPTIONS += mfloat* marm/mfloat*
|
|
||||||
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mfloat*
|
|
||||||
+MULTILIB_EXCEPTIONS += mfloat* mthumb*march=armv6-m*mfloat*
|
|
||||||
+MULTILIB_EXCEPTIONS += mfloat* mthumb*march=armv7*mfloat*
|
|
||||||
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mcpu=cortex-m4/mfloat-abi=hard
|
|
||||||
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mcpu=cortex-m4/mfloat-abi=hard/mbig-endian
|
|
||||||
+MULTILIB_EXCEPTIONS += mfpu* mthumb*march=armv6-m*mfpu*
|
|
||||||
+MULTILIB_EXCEPTIONS += mfpu* mthumb*march=armv7*mfpu*
|
|
||||||
+MULTILIB_EXCEPTIONS += mfpu* mthumb/mcpu=cortex-m4/mfpu*
|
|
||||||
+MULTILIB_EXCEPTIONS += mfpu* mthumb/mfpu*
|
|
||||||
+MULTILIB_EXCEPTIONS += mfpu* marm/mfpu*
|
|
||||||
|
|
||||||
# Not quite true. We can support hard-vfp calling in Thumb2, but how do we
|
|
||||||
# express that here? Also, we really need architecture v5e or later
|
|
||||||
# (mcrr etc).
|
|
||||||
-MULTILIB_OPTIONS += mfloat-abi=hard
|
|
||||||
-MULTILIB_DIRNAMES += fpu
|
|
||||||
-MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
|
|
||||||
+#MULTILIB_OPTIONS += mfloat-abi=hard
|
|
||||||
+#MULTILIB_DIRNAMES += fpu
|
|
||||||
+#MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
|
|
||||||
#MULTILIB_EXCEPTIONS += *mcpu=fa526/*mfloat-abi=hard*
|
|
||||||
#MULTILIB_EXCEPTIONS += *mcpu=fa626/*mfloat-abi=hard*
|
|
||||||
|
|
||||||
@@ -49,9 +71,9 @@
|
|
||||||
# MULTILIB_DIRNAMES += ep9312
|
|
||||||
# MULTILIB_EXCEPTIONS += *mthumb/*mcpu=ep9312*
|
|
||||||
#
|
|
||||||
-# MULTILIB_OPTIONS += mlittle-endian/mbig-endian
|
|
||||||
-# MULTILIB_DIRNAMES += le be
|
|
||||||
-# MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=mle
|
|
||||||
+MULTILIB_OPTIONS += mlittle-endian/mbig-endian
|
|
||||||
+MULTILIB_DIRNAMES += le be
|
|
||||||
+MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=mle
|
|
||||||
#
|
|
||||||
# MULTILIB_OPTIONS += mfloat-abi=hard/mfloat-abi=soft
|
|
||||||
# MULTILIB_DIRNAMES += fpu soft
|
|
||||||
diff -Nbaur gcc-4.7.0/gcc/config/arm/unknown-elf.h gcc-4.7.0-arm/gcc/config/arm/unknown-elf.h
|
|
||||||
--- gcc-4.7.0/gcc/config/arm/unknown-elf.h 2011-03-31 13:13:13.000000000 +0100
|
|
||||||
+++ gcc-4.7.0-arm/gcc/config/arm/unknown-elf.h 2012-04-05 20:36:17.000000000 +0100
|
|
||||||
@@ -94,4 +94,4 @@
|
|
||||||
udivmoddi4, which will depend on the exception unwind routines,
|
|
||||||
which will depend on abort, which is defined in libc. */
|
|
||||||
#undef LINK_GCC_C_SEQUENCE_SPEC
|
|
||||||
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L --end-group"
|
|
||||||
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
|
|
||||||
diff -Nbaur gcc-4.7.0/gcc/gcc.c gcc-4.7.0-arm/gcc/gcc.c
|
|
||||||
--- gcc-4.7.0/gcc/gcc.c 2012-02-28 17:31:38.000000000 +0000
|
|
||||||
+++ gcc-4.7.0-arm/gcc/gcc.c 2012-04-05 20:36:17.000000000 +0100
|
|
||||||
@@ -548,6 +548,11 @@
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifndef LIBGLOSS_SPEC
|
|
||||||
+# define LIBGLOSS_SPEC "-lsysbase"
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
|
|
||||||
#ifndef STARTFILE_SPEC
|
|
||||||
#define STARTFILE_SPEC \
|
|
||||||
@@ -717,6 +722,7 @@
|
|
||||||
static const char *mflib_spec = MFLIB_SPEC;
|
|
||||||
static const char *link_gomp_spec = "";
|
|
||||||
static const char *libgcc_spec = LIBGCC_SPEC;
|
|
||||||
+static const char *libgloss_spec = LIBGLOSS_SPEC;
|
|
||||||
static const char *endfile_spec = ENDFILE_SPEC;
|
|
||||||
static const char *startfile_spec = STARTFILE_SPEC;
|
|
||||||
static const char *linker_name_spec = LINKER_NAME;
|
|
||||||
@@ -1201,6 +1207,7 @@
|
|
||||||
INIT_STATIC_SPEC ("mflib", &mflib_spec),
|
|
||||||
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
|
|
||||||
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
|
|
||||||
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
|
|
||||||
INIT_STATIC_SPEC ("startfile", &startfile_spec),
|
|
||||||
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
|
|
||||||
INIT_STATIC_SPEC ("version", &compiler_version),
|
|
||||||
diff -Nbaur gcc-4.7.0/libcpp/Makefile.in gcc-4.7.0-arm/libcpp/Makefile.in
|
|
||||||
--- gcc-4.7.0/libcpp/Makefile.in 2012-03-22 07:37:39.000000000 +0000
|
|
||||||
+++ gcc-4.7.0-arm/libcpp/Makefile.in 2012-04-05 20:36:17.000000000 +0100
|
|
||||||
@@ -214,8 +214,7 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
|
||||||
# not atomically write the dependency output file.
|
|
||||||
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
|
|
||||||
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
|
||||||
+COMPILE = $(COMPILE.base) -o $@
|
|
||||||
else
|
|
||||||
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
|
||||||
$(depcomp) $(COMPILE.base)
|
|
||||||
diff -Nbaur gcc-4.7.0/libgcc/crtstuff.c gcc-4.7.0-arm/libgcc/crtstuff.c
|
|
||||||
--- gcc-4.7.0/libgcc/crtstuff.c 2011-12-06 21:35:41.000000000 +0000
|
|
||||||
+++ gcc-4.7.0-arm/libgcc/crtstuff.c 2012-04-05 20:36:50.000000000 +0100
|
|
||||||
@@ -49,7 +49,7 @@
|
|
||||||
|
|
||||||
/* Target machine header files require this define. */
|
|
||||||
#define IN_LIBGCC2
|
|
||||||
-
|
|
||||||
+#define USED_FOR_TARGET
|
|
||||||
/* FIXME: Including auto-host is incorrect, but until we have
|
|
||||||
identified the set of defines that need to go into auto-target.h,
|
|
||||||
this will have to do. */
|
|
||||||
diff -Nbaur gcc-4.7.0/libgcc/Makefile.in gcc-4.7.0-arm/libgcc/Makefile.in
|
|
||||||
--- gcc-4.7.0/libgcc/Makefile.in 2011-11-22 03:01:02.000000000 +0000
|
|
||||||
+++ gcc-4.7.0-arm/libgcc/Makefile.in 2012-04-05 20:36:17.000000000 +0100
|
|
||||||
@@ -500,14 +500,14 @@
|
|
||||||
lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
|
|
||||||
$(lib2-divmod-o): %$(objext): $(srcdir)/libgcc2.c
|
|
||||||
$(gcc_compile) -DL$* -c $< \
|
|
||||||
- -fexceptions -fnon-call-exceptions $(vis_hide)
|
|
||||||
+ -fno-exceptions -fnon-call-exceptions $(vis_hide)
|
|
||||||
libgcc-objects += $(lib2-divmod-o)
|
|
||||||
|
|
||||||
ifeq ($(enable_shared),yes)
|
|
||||||
lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
|
|
||||||
$(lib2-divmod-s-o): %_s$(objext): $(srcdir)/libgcc2.c
|
|
||||||
$(gcc_s_compile) -DL$* -c $< \
|
|
||||||
- -fexceptions -fnon-call-exceptions
|
|
||||||
+ -fno-exceptions -fnon-call-exceptions
|
|
||||||
libgcc-s-objects += $(lib2-divmod-s-o)
|
|
||||||
endif
|
|
||||||
|
|
||||||
@@ -810,7 +810,7 @@
|
|
||||||
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
|
|
||||||
# LIB2ADDEHSHARED matter. (Usually all three are identical.)
|
|
||||||
|
|
||||||
-c_flags := -fexceptions
|
|
||||||
+c_flags := -fno-exceptions
|
|
||||||
|
|
||||||
ifeq ($(enable_shared),yes)
|
|
||||||
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
diff -Nbaur gdb-7.4/gdb/Makefile.in gdb-7.4-arm/gdb/Makefile.in
|
|
||||||
--- gdb-7.4/gdb/Makefile.in 2012-01-06 04:43:01.000000000 +0000
|
|
||||||
+++ gdb-7.4-arm/gdb/Makefile.in 2012-02-28 03:07:12.000000000 +0000
|
|
||||||
@@ -2195,10 +2195,10 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
|
||||||
# not atomically write the dependency output file.
|
|
||||||
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
|
||||||
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
|
||||||
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
|
||||||
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
|
||||||
+#@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
|
||||||
+#@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
|
||||||
+#@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
|
||||||
+#@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
|
||||||
@GMAKE_TRUE@else
|
|
||||||
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
|
|
||||||
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
|
|
||||||
diff -Nbaur gdb-7.4/sim/common/Make-common.in gdb-7.4-arm/sim/common/Make-common.in
|
|
||||||
--- gdb-7.4/sim/common/Make-common.in 2012-01-06 04:54:38.000000000 +0000
|
|
||||||
+++ gdb-7.4-arm/sim/common/Make-common.in 2012-02-28 03:07:41.000000000 +0000
|
|
||||||
@@ -417,10 +417,7 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
|
||||||
# not atomically write the dependency output file.
|
|
||||||
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
|
||||||
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
|
||||||
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
|
||||||
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
|
||||||
+@GMAKE_TRUE@override COMPILE.post = -c -o $@
|
|
||||||
@GMAKE_TRUE@else
|
|
||||||
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
|
|
||||||
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,137 +0,0 @@
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# change shell on Snow Leopard
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
UNAME_S := $(shell uname -s)
|
|
||||||
UNAME_R := $(shell uname -r)
|
|
||||||
|
|
||||||
ifneq (,$(findstring Darwin,$(UNAME_S)))
|
|
||||||
ifneq (,$(findstring 10.8.0,$(UNAME_R)))
|
|
||||||
export SHELL=/bin/bash
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# path to tools
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
export PORTLIBS := $(DEVKITPRO)/portlibs/arm
|
|
||||||
export PATH := $(DEVKITARM)/bin:$(PORTLIBS)/bin:$(PATH)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# the prefix on the compiler executables
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
PREFIX := arm-eabi-
|
|
||||||
|
|
||||||
export CC := $(PREFIX)gcc
|
|
||||||
export CXX := $(PREFIX)g++
|
|
||||||
export AS := $(PREFIX)as
|
|
||||||
export AR := $(PREFIX)ar
|
|
||||||
export OBJCOPY := $(PREFIX)objcopy
|
|
||||||
|
|
||||||
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
|
|
||||||
|
|
||||||
ifneq (,$(ISVC))
|
|
||||||
ERROR_FILTER := 2>&1 | sed -e 's/\(.[a-zA-Z]\+\):\([0-9]\+\):/\1(\2):/g'
|
|
||||||
endif
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.a:
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
@echo $(notdir $@)
|
|
||||||
@rm -f $@
|
|
||||||
$(AR) -rc $@ $^
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm.o: %.arm.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CXXFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm.o: %.arm.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm.o: %.arm.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(OBJCFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.thumb.o: %.thumb.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CXXFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.thumb.o: %.thumb.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.thumb.o: %.thumb.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(OBJCFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.iwram.o: %.iwram.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.iwram.o: %.iwram.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.iwram.o: %.iwram.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(OBJCFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.itcm.o: %.itcm.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.itcm.o: %.itcm.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.itcm.o: %.itcm.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(OBJCFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.cpp
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.c
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.m
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(OBJCFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.s
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.o: %.S
|
|
||||||
@echo $(notdir $<)
|
|
||||||
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# canned command sequence for binary data
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
define bin2o
|
|
||||||
bin2s $< | $(AS) -o $(@)
|
|
||||||
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
|
|
||||||
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
|
|
||||||
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
|
|
||||||
endef
|
|
||||||
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
ifeq ($(strip $(DEVKITPRO)),)
|
|
||||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(DEVKITARM)/base_rules
|
|
||||||
|
|
||||||
LIBNDS := $(DEVKITPRO)/libnds
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_TITLE)),)
|
|
||||||
GAME_TITLE := $(notdir $(OUTPUT))
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_SUBTITLE1)),)
|
|
||||||
GAME_SUBTITLE1 := www.devkitpro.org
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_SUBTITLE2)),)
|
|
||||||
GAME_SUBTITLE2 := www.drunkencoders.com
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_ICON)),)
|
|
||||||
GAME_ICON := $(DEVKITPRO)/libnds/icon.bmp
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(strip $(NITRO_FILES)),)
|
|
||||||
_ADDFILES := -d $(NITRO_FILES)
|
|
||||||
endif
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.nds: %.arm9
|
|
||||||
@ndstool -c $@ -9 $< -b $(GAME_ICON) "$(GAME_TITLE);$(GAME_SUBTITLE1);$(GAME_SUBTITLE2)" $(_ADDFILES)
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.nds: %.elf
|
|
||||||
@ndstool -c $@ -9 $< -b $(GAME_ICON) "$(GAME_TITLE);$(GAME_SUBTITLE1);$(GAME_SUBTITLE2)" $(_ADDFILES)
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm9: %.elf
|
|
||||||
@$(OBJCOPY) -O binary $< $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.arm7: %.elf
|
|
||||||
@$(OBJCOPY) -O binary $< $@
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
%.elf:
|
|
||||||
@echo linking $(notdir $@)
|
|
||||||
@$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
|
|
||||||
|
|
@ -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 $@
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
export DEVKITPRO=$TOOLPATH
|
|
||||||
export DEVKITARM=$DEVKITPRO/devkitARM
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# copy base rulesets
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
cp -v $BUILDSCRIPTDIR/dkarm-eabi/rules/* $prefix
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# Install and build the gba crt
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
cp -v $BUILDSCRIPTDIR/dkarm-eabi/crtls/* $prefix/arm-eabi/lib/
|
|
||||||
cd $prefix/arm-eabi/lib/
|
|
||||||
$MAKE CRT=gba
|
|
||||||
$MAKE CRT=gp32
|
|
||||||
$MAKE CRT=er
|
|
||||||
$MAKE CRT=gp32_gpsdk
|
|
||||||
$MAKE CRT=ds_arm7
|
|
||||||
$MAKE CRT=ds_arm9
|
|
||||||
$MAKE CRT=ds_cart
|
|
||||||
|
|
||||||
cd $BUILDDIR/libnds-$LIBNDS_VER
|
|
||||||
$MAKE || { echo "error building libnds"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libnds"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/default-arm7-$DEFAULT_ARM7_VER
|
|
||||||
$MAKE || { echo "error building default arm7"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing default arm7"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libfat-$LIBFAT_VER
|
|
||||||
$MAKE nds-install || { echo "error building nds libfat"; exit 1; }
|
|
||||||
$MAKE gba-install || { echo "error installing gba libfat"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/maxmod-$MAXMOD_VER
|
|
||||||
$MAKE || { echo "error building maxmod"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing maxmod"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libmirko-$LIBMIRKO_VER
|
|
||||||
$MAKE || { echo "error building libmirko"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libmirko"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libfilesystem-$FILESYSTEM_VER
|
|
||||||
$MAKE || { echo "error building libfilesystem"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libfilesystem"; exit 1; }
|
|
||||||
|
|
@ -1,162 +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-dependency-tracking --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-stage1
|
|
||||||
cd $target/gcc-stage1
|
|
||||||
|
|
||||||
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++ \
|
|
||||||
--with-march=armv4t\
|
|
||||||
--enable-poison-system-directories \
|
|
||||||
--enable-interwork --enable-multilib \
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
--disable-threads --disable-win32-registry --disable-nls --disable-debug\
|
|
||||||
--disable-libmudflap --disable-libssp --disable-libgomp \
|
|
||||||
--disable-libstdcxx-pch \
|
|
||||||
--target=$target \
|
|
||||||
--with-newlib \
|
|
||||||
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
|
||||||
--prefix=$prefix \
|
|
||||||
--enable-lto $plugin_ld\
|
|
||||||
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 39" \
|
|
||||||
$CROSS_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
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install newlib
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/newlib
|
|
||||||
cd $target/newlib
|
|
||||||
|
|
||||||
if [ ! -f configured-newlib ]
|
|
||||||
then
|
|
||||||
CFLAGS_FOR_TARGET="-DREENTRANT_SYSCALLS_PROVIDED -D__DEFAULT_UTF8__ -O2" ../../newlib-$NEWLIB_VER/configure \
|
|
||||||
--disable-newlib-supplied-syscalls \
|
|
||||||
--enable-newlib-mb \
|
|
||||||
--enable-newlib-io-long-long \
|
|
||||||
--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 || { 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
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# 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,149 +0,0 @@
|
||||||
diff -Nbaur binutils-2.22/bfd/bfd-in2.h binutils-2.22-ppc/bfd/bfd-in2.h
|
|
||||||
--- binutils-2.22/bfd/bfd-in2.h 2011-09-16 02:15:18.000000000 +0100
|
|
||||||
+++ binutils-2.22-ppc/bfd/bfd-in2.h 2012-04-03 15:06:10.000000000 +0100
|
|
||||||
@@ -38,6 +38,8 @@
|
|
||||||
|
|
||||||
#include "ansidecl.h"
|
|
||||||
#include "symcat.h"
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+
|
|
||||||
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
|
||||||
#ifndef SABER
|
|
||||||
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
|
||||||
@@ -308,8 +310,6 @@
|
|
||||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
|
||||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
|
||||||
|
|
||||||
-/* Forward define. */
|
|
||||||
-struct stat;
|
|
||||||
|
|
||||||
typedef enum bfd_print_symbol
|
|
||||||
{
|
|
||||||
diff -Nbaur binutils-2.22/bfd/bfd-in.h binutils-2.22-ppc/bfd/bfd-in.h
|
|
||||||
--- binutils-2.22/bfd/bfd-in.h 2011-09-16 02:15:18.000000000 +0100
|
|
||||||
+++ binutils-2.22-ppc/bfd/bfd-in.h 2012-04-03 15:06:10.000000000 +0100
|
|
||||||
@@ -31,6 +31,8 @@
|
|
||||||
|
|
||||||
#include "ansidecl.h"
|
|
||||||
#include "symcat.h"
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+
|
|
||||||
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
|
||||||
#ifndef SABER
|
|
||||||
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
|
||||||
@@ -301,8 +303,6 @@
|
|
||||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
|
||||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
|
||||||
|
|
||||||
-/* Forward define. */
|
|
||||||
-struct stat;
|
|
||||||
|
|
||||||
typedef enum bfd_print_symbol
|
|
||||||
{
|
|
||||||
diff -Nbaur binutils-2.22/bfd/config.in binutils-2.22-ppc/bfd/config.in
|
|
||||||
--- binutils-2.22/bfd/config.in 2011-05-12 08:41:40.000000000 +0100
|
|
||||||
+++ binutils-2.22-ppc/bfd/config.in 2012-04-03 14:50:51.000000000 +0100
|
|
||||||
@@ -245,6 +245,9 @@
|
|
||||||
/* Define if <sys/procfs.h> has win32_pstatus_t. */
|
|
||||||
#undef HAVE_WIN32_PSTATUS_T
|
|
||||||
|
|
||||||
+/* Define to 1 if you have the <windows.h> header file. */
|
|
||||||
+#undef HAVE_WINDOWS_H
|
|
||||||
+
|
|
||||||
/* Define to 1 if you have the <zlib.h> header file. */
|
|
||||||
#undef HAVE_ZLIB_H
|
|
||||||
|
|
||||||
diff -Nbaur binutils-2.22/bfd/configure binutils-2.22-ppc/bfd/configure
|
|
||||||
--- binutils-2.22/bfd/configure 2011-11-21 11:55:48.000000000 +0000
|
|
||||||
+++ binutils-2.22-ppc/bfd/configure 2012-04-03 14:50:59.000000000 +0100
|
|
||||||
@@ -13508,6 +13508,22 @@
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
+
|
|
||||||
+for ac_header in windows.h dlfcn.h
|
|
||||||
+do :
|
|
||||||
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
|
||||||
+eval as_val=\$$as_ac_Header
|
|
||||||
+ if test "x$as_val" = x""yes; then :
|
|
||||||
+ cat >>confdefs.h <<_ACEOF
|
|
||||||
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
+
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
|
|
||||||
$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
|
|
||||||
if test "${gcc_cv_header_string+set}" = set; then :
|
|
||||||
diff -Nbaur binutils-2.22/bfd/configure.in binutils-2.22-ppc/bfd/configure.in
|
|
||||||
--- binutils-2.22/bfd/configure.in 2011-11-21 11:55:46.000000000 +0000
|
|
||||||
+++ binutils-2.22-ppc/bfd/configure.in 2012-04-03 14:51:23.000000000 +0100
|
|
||||||
@@ -190,6 +190,9 @@
|
|
||||||
GCC_HEADER_STDINT(bfd_stdint.h)
|
|
||||||
AC_HEADER_TIME
|
|
||||||
AC_HEADER_DIRENT
|
|
||||||
+
|
|
||||||
+AC_CHECK_HEADERS(windows.h dlfcn.h)
|
|
||||||
+
|
|
||||||
ACX_HEADER_STRING
|
|
||||||
AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno)
|
|
||||||
AC_CHECK_FUNCS(strtoull)
|
|
||||||
diff -Nbaur binutils-2.22/bfd/plugin.c binutils-2.22-ppc/bfd/plugin.c
|
|
||||||
--- binutils-2.22/bfd/plugin.c 2011-07-11 16:03:07.000000000 +0100
|
|
||||||
+++ binutils-2.22-ppc/bfd/plugin.c 2012-04-03 14:51:32.000000000 +0100
|
|
||||||
@@ -25,7 +25,13 @@
|
|
||||||
#if BFD_SUPPORTS_PLUGINS
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
+#ifdef HAVE_DLFCN_H
|
|
||||||
#include <dlfcn.h>
|
|
||||||
+#elif defined (HAVE_WINDOWS_H)
|
|
||||||
+#include <windows.h>
|
|
||||||
+#else
|
|
||||||
+#error Unknown how to handle dynamic-load-libraries.
|
|
||||||
+#endif
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include "plugin-api.h"
|
|
||||||
#include "sysdep.h"
|
|
||||||
@@ -34,6 +40,37 @@
|
|
||||||
#include "libiberty.h"
|
|
||||||
#include <dirent.h>
|
|
||||||
|
|
||||||
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
|
|
||||||
+
|
|
||||||
+#define RTLD_NOW 0 /* Dummy value. */
|
|
||||||
+
|
|
||||||
+static void *
|
|
||||||
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
|
|
||||||
+{
|
|
||||||
+ return LoadLibrary (file);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void *
|
|
||||||
+dlsym (void *handle, const char *name)
|
|
||||||
+{
|
|
||||||
+ return GetProcAddress (handle, name);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int ATTRIBUTE_UNUSED
|
|
||||||
+dlclose (void *handle)
|
|
||||||
+{
|
|
||||||
+ FreeLibrary (handle);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static const char *
|
|
||||||
+dlerror (void)
|
|
||||||
+{
|
|
||||||
+ return "Unable to load DLL.";
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) */
|
|
||||||
+
|
|
||||||
#define bfd_plugin_close_and_cleanup _bfd_generic_close_and_cleanup
|
|
||||||
#define bfd_plugin_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
|
|
||||||
#define bfd_plugin_new_section_hook _bfd_generic_new_section_hook
|
|
||||||
|
|
@ -1,237 +0,0 @@
|
||||||
diff -Nbaur gcc-4.6.3/gcc/config/rs6000/rs6000.h gcc-4.6.3-ppc/gcc/config/rs6000/rs6000.h
|
|
||||||
--- gcc-4.6.3/gcc/config/rs6000/rs6000.h 2011-07-27 19:17:15.000000000 +0100
|
|
||||||
+++ gcc-4.6.3-ppc/gcc/config/rs6000/rs6000.h 2012-04-21 22:54:04.000000000 +0100
|
|
||||||
@@ -200,6 +200,7 @@
|
|
||||||
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
|
|
||||||
SUBTARGET_EXTRA_SPECS
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
/* -mcpu=native handling only makes sense with compiler running on
|
|
||||||
an PowerPC chip. If changing this condition, also change
|
|
||||||
the condition in driver-rs6000.c. */
|
|
||||||
@@ -214,6 +215,8 @@
|
|
||||||
#else
|
|
||||||
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
+#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
|
||||||
|
|
||||||
#ifndef CC1_CPU_SPEC
|
|
||||||
#ifdef HAVE_LOCAL_CPU_DETECT
|
|
||||||
diff -Nbaur gcc-4.6.3/gcc/config/rs6000/sysv4.h gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.h
|
|
||||||
--- gcc-4.6.3/gcc/config/rs6000/sysv4.h 2011-03-07 07:50:23.000000000 +0000
|
|
||||||
+++ gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.h 2012-04-21 22:54:04.000000000 +0100
|
|
||||||
@@ -603,7 +603,11 @@
|
|
||||||
|
|
||||||
/* Default starting address if specified. */
|
|
||||||
#define LINK_START_SPEC "\
|
|
||||||
-%{mads : %(link_start_ads) ; \
|
|
||||||
+%{mgcn|mogc : %(link_start_ogc) ; \
|
|
||||||
+ mvgc : %(link_start_vgc) ; \
|
|
||||||
+ mgcbios : %(link_start_gcb) ; \
|
|
||||||
+ mrvl : %(link_start_rvl) ; \
|
|
||||||
+ mads : %(link_start_ads) ; \
|
|
||||||
myellowknife : %(link_start_yellowknife) ; \
|
|
||||||
mmvme : %(link_start_mvme) ; \
|
|
||||||
msim : %(link_start_sim) ; \
|
|
||||||
@@ -641,7 +645,8 @@
|
|
||||||
|
|
||||||
/* Any specific OS flags. */
|
|
||||||
#define LINK_OS_SPEC "\
|
|
||||||
-%{mads : %(link_os_ads) ; \
|
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
|
|
||||||
+ mads : %(link_os_ads) ; \
|
|
||||||
myellowknife : %(link_os_yellowknife) ; \
|
|
||||||
mmvme : %(link_os_mvme) ; \
|
|
||||||
msim : %(link_os_sim) ; \
|
|
||||||
@@ -660,7 +665,10 @@
|
|
||||||
/* Override rs6000.h definition. */
|
|
||||||
#undef CPP_SPEC
|
|
||||||
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
|
|
||||||
-%{mads : %(cpp_os_ads) ; \
|
|
||||||
+%{mgcn : %(cpp_os_gcn) ; \
|
|
||||||
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
|
|
||||||
+ mrvl : %(cpp_os_rvl) ; \
|
|
||||||
+ mads : %(cpp_os_ads) ; \
|
|
||||||
myellowknife : %(cpp_os_yellowknife) ; \
|
|
||||||
mmvme : %(cpp_os_mvme) ; \
|
|
||||||
msim : %(cpp_os_sim) ; \
|
|
||||||
@@ -675,7 +683,10 @@
|
|
||||||
|
|
||||||
#undef STARTFILE_SPEC
|
|
||||||
#define STARTFILE_SPEC "\
|
|
||||||
-%{mads : %(startfile_ads) ; \
|
|
||||||
+%{mgcn : %(startfile_gcn) ; \
|
|
||||||
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
|
|
||||||
+ mrvl : %(startfile_ogc) ; \
|
|
||||||
+ mads : %(startfile_ads) ; \
|
|
||||||
myellowknife : %(startfile_yellowknife) ; \
|
|
||||||
mmvme : %(startfile_mvme) ; \
|
|
||||||
msim : %(startfile_sim) ; \
|
|
||||||
@@ -686,11 +697,12 @@
|
|
||||||
mcall-openbsd: %(startfile_openbsd) ; \
|
|
||||||
: %(startfile_default) }"
|
|
||||||
|
|
||||||
-#define STARTFILE_DEFAULT_SPEC "ecrti.o%s crtbegin.o%s"
|
|
||||||
+#define STARTFILE_DEFAULT_SPEC "crt0.o%s ecrti.o%s crtbegin.o%s"
|
|
||||||
|
|
||||||
#undef LIB_SPEC
|
|
||||||
#define LIB_SPEC "\
|
|
||||||
-%{mads : %(lib_ads) ; \
|
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
|
|
||||||
+ mads : %(lib_ads) ; \
|
|
||||||
myellowknife : %(lib_yellowknife) ; \
|
|
||||||
mmvme : %(lib_mvme) ; \
|
|
||||||
msim : %(lib_sim) ; \
|
|
||||||
@@ -701,11 +713,12 @@
|
|
||||||
mcall-openbsd: %(lib_openbsd) ; \
|
|
||||||
: %(lib_default) }"
|
|
||||||
|
|
||||||
-#define LIB_DEFAULT_SPEC "-lc"
|
|
||||||
+#define LIB_DEFAULT_SPEC "--start-group -lsysbase -lc --end-group"
|
|
||||||
|
|
||||||
#undef ENDFILE_SPEC
|
|
||||||
#define ENDFILE_SPEC "\
|
|
||||||
-%{mads : %(endfile_ads) ; \
|
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
|
|
||||||
+ mads : %(endfile_ads) ; \
|
|
||||||
myellowknife : %(endfile_yellowknife) ; \
|
|
||||||
mmvme : %(endfile_mvme) ; \
|
|
||||||
msim : %(endfile_sim) ; \
|
|
||||||
@@ -722,16 +735,27 @@
|
|
||||||
|
|
||||||
/* Motorola ADS support. */
|
|
||||||
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
|
|
||||||
+#define LIB_OGC_SPEC "--start-group -lsysbase -lc --end-group"
|
|
||||||
|
|
||||||
#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s"
|
|
||||||
+#define STARTFILE_OGC_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
|
|
||||||
|
|
||||||
#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
|
|
||||||
+#define ENDFILE_OGC_SPEC "crtend.o%s ecrtn.o%s"
|
|
||||||
|
|
||||||
#define LINK_START_ADS_SPEC "-T ads.ld%s"
|
|
||||||
+#define LINK_START_OGC_SPEC "-T ogc.ld%s"
|
|
||||||
+#define LINK_START_RVL_SPEC "-T rvl.ld%s"
|
|
||||||
+#define LINK_START_VGC_SPEC "-T vgcogc.ld%s"
|
|
||||||
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
|
|
||||||
|
|
||||||
#define LINK_OS_ADS_SPEC ""
|
|
||||||
+#define LINK_OS_OGC_SPEC "--gc-sections"
|
|
||||||
|
|
||||||
#define CPP_OS_ADS_SPEC ""
|
|
||||||
+#define CPP_OS_GCN_SPEC "-D__gamecube__ -ffunction-sections -fdata-sections"
|
|
||||||
+#define CPP_OS_OGC_SPEC "-D__gamecube__ -DHW_DOL -ffunction-sections -fdata-sections"
|
|
||||||
+#define CPP_OS_RVL_SPEC "-D__wii__ -DHW_RVL -ffunction-sections -fdata-sections"
|
|
||||||
|
|
||||||
/* Motorola Yellowknife support. */
|
|
||||||
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
|
|
||||||
@@ -926,6 +950,7 @@
|
|
||||||
#undef SUBTARGET_EXTRA_SPECS
|
|
||||||
#define SUBTARGET_EXTRA_SPECS \
|
|
||||||
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
|
|
||||||
+ { "lib_ogc", LIB_OGC_SPEC }, \
|
|
||||||
{ "lib_ads", LIB_ADS_SPEC }, \
|
|
||||||
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "lib_mvme", LIB_MVME_SPEC }, \
|
|
||||||
@@ -936,6 +961,7 @@
|
|
||||||
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
|
|
||||||
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
|
|
||||||
{ "lib_default", LIB_DEFAULT_SPEC }, \
|
|
||||||
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
|
|
||||||
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
|
|
||||||
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
|
|
||||||
@@ -946,6 +972,7 @@
|
|
||||||
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
|
|
||||||
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
|
|
||||||
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
|
|
||||||
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
|
|
||||||
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
|
|
||||||
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
|
|
||||||
@@ -959,7 +986,11 @@
|
|
||||||
{ "link_shlib", LINK_SHLIB_SPEC }, \
|
|
||||||
{ "link_target", LINK_TARGET_SPEC }, \
|
|
||||||
{ "link_start", LINK_START_SPEC }, \
|
|
||||||
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \
|
|
||||||
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \
|
|
||||||
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \
|
|
||||||
{ "link_start_ads", LINK_START_ADS_SPEC }, \
|
|
||||||
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \
|
|
||||||
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
|
|
||||||
{ "link_start_sim", LINK_START_SIM_SPEC }, \
|
|
||||||
@@ -970,6 +1001,7 @@
|
|
||||||
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
|
|
||||||
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
|
|
||||||
{ "link_os", LINK_OS_SPEC }, \
|
|
||||||
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \
|
|
||||||
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
|
|
||||||
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
|
|
||||||
@@ -984,6 +1016,9 @@
|
|
||||||
{ "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \
|
|
||||||
{ "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \
|
|
||||||
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
|
|
||||||
+ { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \
|
|
||||||
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
|
|
||||||
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
|
|
||||||
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
|
|
||||||
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
|
|
||||||
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
|
|
||||||
diff -Nbaur gcc-4.6.3/gcc/config/rs6000/sysv4.opt gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.opt
|
|
||||||
--- gcc-4.6.3/gcc/config/rs6000/sysv4.opt 2011-01-03 20:52:22.000000000 +0000
|
|
||||||
+++ gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.opt 2012-04-21 22:54:04.000000000 +0100
|
|
||||||
@@ -108,6 +108,26 @@
|
|
||||||
Target RejectNegative
|
|
||||||
Link with libads.a, libc.a and crt0.o
|
|
||||||
|
|
||||||
+mgcn
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use ogc linker script
|
|
||||||
+
|
|
||||||
+mogc
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use ogc linker script
|
|
||||||
+
|
|
||||||
+mgcbios
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use gcbogc linker script
|
|
||||||
+
|
|
||||||
+mvgc
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use gcbogc linker script
|
|
||||||
+
|
|
||||||
+mrvl
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use rvl linker script
|
|
||||||
+
|
|
||||||
myellowknife
|
|
||||||
Target RejectNegative
|
|
||||||
Link with libyk.a, libc.a and crt0.o
|
|
||||||
diff -Nbaur gcc-4.6.3/gcc/config.gcc gcc-4.6.3-ppc/gcc/config.gcc
|
|
||||||
--- gcc-4.6.3/gcc/config.gcc 2011-07-22 17:44:50.000000000 +0100
|
|
||||||
+++ gcc-4.6.3-ppc/gcc/config.gcc 2012-04-21 22:54:04.000000000 +0100
|
|
||||||
@@ -2133,7 +2133,7 @@
|
|
||||||
use_gcc_stdint=wrap
|
|
||||||
;;
|
|
||||||
powerpc-*-eabi*)
|
|
||||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h"
|
|
||||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/750cl.h"
|
|
||||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
|
||||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
|
|
||||||
use_gcc_stdint=wrap
|
|
||||||
diff -Nbaur gcc-4.6.3/libcpp/Makefile.in gcc-4.6.3-ppc/libcpp/Makefile.in
|
|
||||||
--- gcc-4.6.3/libcpp/Makefile.in 2012-03-01 12:03:46.000000000 +0000
|
|
||||||
+++ gcc-4.6.3-ppc/libcpp/Makefile.in 2012-04-21 22:54:04.000000000 +0100
|
|
||||||
@@ -212,8 +212,7 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
|
||||||
# not atomically write the dependency output file.
|
|
||||||
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
|
|
||||||
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
|
||||||
+COMPILE = $(COMPILE.base) -o $@
|
|
||||||
else
|
|
||||||
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
|
||||||
$(depcomp) $(COMPILE.base)
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
diff -Nbaur gdb-7.4/gdb/Makefile.in gdb-7.4-ppc/gdb/Makefile.in
|
|
||||||
--- gdb-7.4/gdb/Makefile.in 2012-01-06 04:43:01.000000000 +0000
|
|
||||||
+++ gdb-7.4-ppc/gdb/Makefile.in 2012-01-28 15:56:00.000000000 +0000
|
|
||||||
@@ -2195,10 +2195,10 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
|
||||||
# not atomically write the dependency output file.
|
|
||||||
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
|
||||||
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
|
||||||
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
|
||||||
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
|
||||||
+#@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
|
||||||
+#@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
|
||||||
+#@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
|
||||||
+#@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
|
||||||
@GMAKE_TRUE@else
|
|
||||||
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
|
|
||||||
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
|
|
||||||
diff -Nbaur gdb-7.4/sim/ppc/Makefile.in gdb-7.4-ppc/sim/ppc/Makefile.in
|
|
||||||
--- gdb-7.4/sim/ppc/Makefile.in 2009-09-16 00:26:44.000000000 +0100
|
|
||||||
+++ gdb-7.4-ppc/sim/ppc/Makefile.in 2012-02-25 13:30:02.000000000 +0000
|
|
||||||
@@ -551,7 +551,7 @@
|
|
||||||
PACKAGE_OBJ = @sim_pk_obj@
|
|
||||||
|
|
||||||
|
|
||||||
-psim: $(TARGETLIB) main.o $(LIBIBERTY_LIB) $(BFD_LIB) $(LIBS) $(LIBINTL_DEP)
|
|
||||||
+psim: $(TARGETLIB) main.o $(LIBIBERTY_LIB) $(BFD_LIB) $(LIBINTL_DEP)
|
|
||||||
$(CC) $(CFLAGS) $(SIM_CFLAGS) $(LDFLAGS) -o psim$(EXEEXT) main.o $(TARGETLIB) $(BFD_LIB) $(LIBINTL) $(LIBIBERTY_LIB) $(LIBS)
|
|
||||||
|
|
||||||
run: psim
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -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 $@
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
export DEVKITPPC=$TOOLPATH/devkitPPC
|
|
||||||
export DEVKITPRO=$TOOLPATH
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# Install and build the gamecube crt and libogc
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "installing linkscripts ..."
|
|
||||||
cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# copy base rulesets
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
cp $BUILDSCRIPTDIR/dkppc/rules/* $prefix
|
|
||||||
|
|
||||||
cd $BUILDDIR/libogc-$LIBOGC_VER
|
|
||||||
|
|
||||||
if [ ! -f installed ]; then
|
|
||||||
echo "Building & installing libogc"
|
|
||||||
$MAKE install || { echo "libogc install failed"; exit 1; }
|
|
||||||
touch installed
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $BUILDDIR/libfat-$LIBFAT_VER
|
|
||||||
|
|
||||||
if [ ! -f installed ]; then
|
|
||||||
echo "Building & installing libfat"
|
|
||||||
$MAKE ogc-install || { echo "libfat install failed"; exit 1; }
|
|
||||||
touch installed
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
@ -1,189 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# Check Parameters
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install ppc 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-shared --disable-debug \
|
|
||||||
--disable-werror \
|
|
||||||
--enable-poison-system-directories \
|
|
||||||
--enable-plugins --enable-lto --disable-dependency-tracking \
|
|
||||||
--disable-werror $CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuing ppc binutils"; exit 1; }
|
|
||||||
touch configured-binutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-binutils ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building ppc binutils"; exit 1; }
|
|
||||||
touch built-binutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-binutils ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing ppc binutils"; exit 1; }
|
|
||||||
touch installed-binutils
|
|
||||||
fi
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install mn10200 binutils
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
mkdir -p mn10200/binutils
|
|
||||||
cd mn10200/binutils
|
|
||||||
|
|
||||||
if [ ! -f configured-binutils ]
|
|
||||||
then
|
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
|
||||||
--prefix=$prefix --target=mn10200 --disable-nls --disable-debug \
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
--disable-werror $CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuing mn10200 binutils"; exit 1; }
|
|
||||||
touch configured-binutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-binutils ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building mn10200 binutils"; exit 1; }
|
|
||||||
touch built-binutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-binutils ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing mn10200 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 \
|
|
||||||
--enable-lto $plugin_ld \
|
|
||||||
--with-cpu=750 \
|
|
||||||
--disable-nls --disable-shared --enable-threads --disable-multilib \
|
|
||||||
--disable-win32-registry \
|
|
||||||
--disable-libstdcxx-pch \
|
|
||||||
--target=$target \
|
|
||||||
--with-newlib \
|
|
||||||
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
|
||||||
--prefix=$prefix\
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPPC release 26" \
|
|
||||||
$CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuring gcc stage 1"; exit 1; }
|
|
||||||
touch configured-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-gcc-stage1 ]
|
|
||||||
then
|
|
||||||
$MAKE all-gcc || { echo "Error building gcc stage1"; exit 1; }
|
|
||||||
touch built-gcc-stage1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-gcc-stage1 ]
|
|
||||||
then
|
|
||||||
$MAKE install-gcc || { echo "Error installing gcc stage1"; exit 1; }
|
|
||||||
touch installed-gcc-stage1
|
|
||||||
fi
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install newlib
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
cd $BUILDDIR
|
|
||||||
mkdir -p $target/newlib
|
|
||||||
cd $target/newlib
|
|
||||||
|
|
||||||
unset CFLAGS
|
|
||||||
unset LDFLAGS
|
|
||||||
|
|
||||||
if [ ! -f configured-newlib ]
|
|
||||||
then
|
|
||||||
../../newlib-$NEWLIB_VER/configure \
|
|
||||||
--target=$target \
|
|
||||||
--prefix=$prefix \
|
|
||||||
--enable-newlib-mb \
|
|
||||||
--enable-newlib-hw-fp \
|
|
||||||
|| { 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
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# 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
|
||||||
|
|
|
||||||
539
patches/binutils-2.45.1-2.patch
Normal file
539
patches/binutils-2.45.1-2.patch
Normal file
|
|
@ -0,0 +1,539 @@
|
||||||
|
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/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/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,
|
||||||
|
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
|
||||||
|
index 712cd31d19e..5d6dbb3b48d 100644
|
||||||
|
--- a/opcodes/ppc-opc.c
|
||||||
|
+++ b/opcodes/ppc-opc.c
|
||||||
|
@@ -5107,7 +5107,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
|
||||||
1203
patches/gcc-15.2.0-7.patch
Normal file
1203
patches/gcc-15.2.0-7.patch
Normal file
File diff suppressed because it is too large
Load Diff
13427
patches/newlib-4.6.0.20260123-4.patch
Normal file
13427
patches/newlib-4.6.0.20260123-4.patch
Normal file
File diff suppressed because it is too large
Load Diff
72
select_toolchain.sh
Normal file → Executable file
72
select_toolchain.sh
Normal file → Executable file
|
|
@ -1,13 +1,25 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
VERSION=0
|
VERSION=0
|
||||||
|
case "$BUILD_DKPRO_PACKAGE" in
|
||||||
|
"1" )
|
||||||
|
VERSION=1
|
||||||
|
;;
|
||||||
|
"2" )
|
||||||
|
VERSION=2
|
||||||
|
;;
|
||||||
|
"3" )
|
||||||
|
VERSION=3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
while [ $VERSION -eq 0 ]
|
while [ $VERSION -eq 0 ]
|
||||||
do
|
do
|
||||||
echo
|
echo
|
||||||
echo "Please select the toolchain you require"
|
echo "Please select the toolchain you require"
|
||||||
echo
|
echo
|
||||||
echo "1: devkitARM (gba gp32 ds)"
|
echo "1: devkitARM (gba gp32 ds 3ds)"
|
||||||
echo "2: devkitPPC (gamecube wii)"
|
echo "2: devkitPPC (gamecube wii wii-u)"
|
||||||
echo "3: devkitPSP (PSP)"
|
echo "3: devkitA64 (switch)"
|
||||||
read VERSION
|
read VERSION
|
||||||
|
|
||||||
if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ]
|
if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ]
|
||||||
|
|
@ -18,33 +30,53 @@ done
|
||||||
|
|
||||||
case "$VERSION" in
|
case "$VERSION" in
|
||||||
"1" )
|
"1" )
|
||||||
GCC_VER=4.7.0
|
BINUTILS_VER=2.45.1
|
||||||
BINUTILS_VER=2.22
|
GCC_VER=15.2.0
|
||||||
NEWLIB_VER=1.20.0
|
NEWLIB_VER=4.6.0.20260123
|
||||||
GDB_VER=7.4
|
BINUTILS_PKGREL=2
|
||||||
|
GCC_PKGREL=7
|
||||||
|
NEWLIB_PKGREL=4
|
||||||
basedir='dkarm-eabi'
|
basedir='dkarm-eabi'
|
||||||
package=devkitARM
|
package=devkitARM
|
||||||
target=arm-eabi
|
target=arm-none-eabi
|
||||||
toolchain=DEVKITARM
|
toolchain=DEVKITARM
|
||||||
|
_prefix=devkitarm
|
||||||
|
_toolchain_options='--with-march=armv4t --enable-interwork --enable-multilib --with-pkgversion="devkitARM"'
|
||||||
|
_rules_ver=${DKARM_RULES_VER}
|
||||||
|
_crtls_ver=${DKARM_CRTLS_VER}
|
||||||
;;
|
;;
|
||||||
"2" )
|
"2" )
|
||||||
GCC_VER=4.6.3
|
BINUTILS_VER=2.45.1
|
||||||
BINUTILS_VER=2.22
|
GCC_VER=15.2.0
|
||||||
NEWLIB_VER=1.20.0
|
MN_BINUTILS_VER=2.24
|
||||||
GDB_VER=7.4
|
NEWLIB_VER=4.6.0.20260123
|
||||||
|
BINUTILS_PKGREL=2
|
||||||
|
GCC_PKGREL=7
|
||||||
|
NEWLIB_PKGREL=4
|
||||||
basedir='dkppc'
|
basedir='dkppc'
|
||||||
package=devkitPPC
|
package=devkitPPC
|
||||||
target=powerpc-eabi
|
target=powerpc-eabi
|
||||||
toolchain=DEVKITPPC
|
toolchain=DEVKITPPC
|
||||||
|
_prefix=devkitppc
|
||||||
|
cppflags="-DSTDINT_LONG32=0 ${cppflags}"
|
||||||
|
_toolchain_options='--with-cpu=750 --disable-multilib --with-pkgversion="devkitPPC"'
|
||||||
|
_rules_ver=${DKPPC_RULES_VER}
|
||||||
|
_crtls_ver=${DKPPC_CRTLS_VER}
|
||||||
;;
|
;;
|
||||||
"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.6.0.20260123
|
||||||
GDB_VER=7.4
|
BINUTILS_PKGREL=2
|
||||||
basedir='dkpsp'
|
GCC_PKGREL=7
|
||||||
package=devkitPSP
|
NEWLIB_PKGREL=4
|
||||||
target=psp
|
basedir='dka64'
|
||||||
toolchain=DEVKITPSP
|
package=devkitA64
|
||||||
|
target=aarch64-none-elf
|
||||||
|
toolchain=DEVKITA64
|
||||||
|
_prefix=devkita64
|
||||||
|
_toolchain_options='--with-march=armv8 --enable-multilib --with-pkgversion="devkitA64"'
|
||||||
|
_rules_ver=${DKA64_RULES_VER}
|
||||||
|
_crtls_ver=${DKA64_CRTLS_VER}
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
4
strip_bins.sh
Normal file → Executable file
4
strip_bins.sh
Normal file → Executable file
|
|
@ -19,6 +19,10 @@ do
|
||||||
then
|
then
|
||||||
$HOST_STRIP $f
|
$HOST_STRIP $f
|
||||||
fi
|
fi
|
||||||
|
if [[ "$f" == *.dll ]]
|
||||||
|
then
|
||||||
|
$HOST_STRIP -d $f
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ $VERSION -eq 2 ]; then
|
if [ $VERSION -eq 2 ]; then
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user