mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2026-01-07 09:01:42 +01:00
Compare commits
1047 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df7769a808 | ||
|
|
a4bd44b878 | ||
|
|
140ecd5820 | ||
|
|
7b02498583 | ||
|
|
d8d9ba50ea | ||
|
|
bc989dcfb8 | ||
|
|
7342ada9e4 | ||
|
|
056918b327 | ||
|
|
fc0cd82e46 | ||
|
|
e5d5c1aab6 | ||
|
|
01c67399b1 | ||
|
|
7e8240f961 | ||
|
|
1cd315930c | ||
|
|
fbb8e03b88 | ||
|
|
c3e02d7204 | ||
|
|
d64d53d932 | ||
|
|
d6ba5ab1f7 | ||
|
|
be924849d2 | ||
|
|
e67992dad7 | ||
|
|
39c946d2b8 | ||
|
|
3356cd5be7 | ||
|
|
3c77469bb6 | ||
|
|
4ac932b0f7 | ||
|
|
eb04bc3637 | ||
|
|
0bd0f10d2c | ||
|
|
e6ad6af7b2 | ||
|
|
181685b575 | ||
|
|
d72c7a9653 | ||
|
|
eaa8dee857 | ||
|
|
c7c2c8d131 | ||
|
|
ae82a02058 | ||
|
|
c9a2ea98b6 | ||
|
|
135c61b9fe | ||
|
|
d9f2421530 | ||
|
|
239bb4d2cb | ||
|
|
cb126a3818 | ||
|
|
7e120f68e8 | ||
|
|
c62f7c7ec5 | ||
|
|
0a8ed973da | ||
|
|
8cd2aa8c64 | ||
|
|
a4aa79ba87 | ||
|
|
cb7c345a1d | ||
|
|
2144b9acc2 | ||
|
|
b46b43b285 | ||
|
|
d132d74dd0 | ||
|
|
8b4538db5f | ||
|
|
9549e2dce7 | ||
|
|
5d8706c95b | ||
|
|
ecec377dfb | ||
|
|
1024d6cff1 | ||
|
|
75e441bde8 | ||
|
|
04cfde006d | ||
|
|
42e29debd9 | ||
|
|
1320f8414e | ||
|
|
1c123ba7ee | ||
|
|
53342071dd | ||
|
|
2d4322b265 | ||
|
|
da4d3b0482 | ||
|
|
461702e4e6 | ||
|
|
d71c0e6a0b | ||
|
|
d1d2698351 | ||
|
|
f5ed1d3224 | ||
|
|
44d4120f65 | ||
|
|
e86933fff3 | ||
|
|
b2679e3dc4 | ||
|
|
3a4aad2225 | ||
|
|
e4b2c239c4 | ||
|
|
f25ae0ee7e | ||
|
|
36a66bf5ec | ||
|
|
99d320c026 | ||
|
|
18cbe9120e | ||
|
|
9ba9de33df | ||
|
|
4862cbc68f | ||
|
|
df52a32006 | ||
|
|
25f67f3bbe | ||
|
|
617591c8ba | ||
|
|
8053bdbf2d | ||
|
|
6ced2b5d2a | ||
|
|
dd52284e0b | ||
|
|
c88a15e039 | ||
|
|
df74e95462 | ||
|
|
1e3b590be6 | ||
|
|
c96f92022a | ||
|
|
8bd34264b5 | ||
|
|
41a50c0fb9 | ||
|
|
1a936aa049 | ||
|
|
2fba7411ca | ||
|
|
183ac93d85 | ||
|
|
0861a6d60d | ||
|
|
da6f9c197a | ||
|
|
53a62962d6 | ||
|
|
858159d403 | ||
|
|
2d7b160a7f | ||
|
|
0e07c950a5 | ||
|
|
3a0a5d1605 | ||
|
|
6c88f27e20 | ||
|
|
7c87c80e68 | ||
|
|
83714e4d7c | ||
|
|
ed7d472203 | ||
|
|
83dd0343b2 | ||
|
|
dd8645d32f | ||
|
|
d62de15335 | ||
|
|
9ecd8b0f2b | ||
|
|
a803c035d3 | ||
|
|
38378b7ee0 | ||
|
|
be7516a167 | ||
|
|
847a1275a1 | ||
|
|
81ff5505f8 | ||
|
|
292c6a1d24 | ||
|
|
37121880e9 | ||
|
|
9f1388e712 | ||
|
|
b65efc86e6 | ||
|
|
adc046b472 | ||
|
|
e05ed764eb | ||
|
|
a4229edc8a | ||
|
|
3af7af1151 | ||
|
|
77326c3251 | ||
|
|
5a6833dd04 | ||
|
|
d0b1d7b43f | ||
|
|
27a64b8f8b | ||
|
|
ba79b2bcce | ||
|
|
3e36dc32ab | ||
|
|
720e501aea | ||
|
|
24204ae112 | ||
|
|
b6cb5e539d | ||
|
|
02adc66969 | ||
|
|
df331b6c01 | ||
|
|
e3c64d0972 | ||
|
|
1966035b23 | ||
|
|
1c0385ff6f | ||
|
|
9f9f353cf4 | ||
|
|
2d526410d4 | ||
|
|
85df6f646d | ||
|
|
545a471906 | ||
|
|
ea504457e0 | ||
|
|
a6e5f5eb91 | ||
|
|
b705fe7b12 | ||
|
|
70757fa269 | ||
|
|
74e14ce601 | ||
|
|
9b42254d9a | ||
|
|
98a4c7fec4 | ||
|
|
045f71ec25 | ||
|
|
f8a4e42fb3 | ||
|
|
70586de1c1 | ||
|
|
e94376800f | ||
|
|
0c5307c12b | ||
|
|
41cc1e2f4a | ||
|
|
8aee53f1b5 | ||
|
|
afc679f6ad | ||
|
|
fbb62aa566 | ||
|
|
2588620965 | ||
|
|
ca93e7004f | ||
|
|
b44a1bd105 | ||
|
|
ee93235260 | ||
|
|
afac13bfe2 | ||
|
|
c299b2e4c0 | ||
|
|
ee2df8c3c0 | ||
|
|
fb444f04e2 | ||
|
|
be3968f8b4 | ||
|
|
76b7afa4ea | ||
|
|
498a2a778a | ||
|
|
86b4193a54 | ||
|
|
b03add14fc | ||
|
|
f5a046aae8 | ||
|
|
9c946f5a9c | ||
|
|
63fd308170 | ||
|
|
b281273d71 | ||
|
|
013d469322 | ||
|
|
55c5ae3011 | ||
|
|
848ef2c6e7 | ||
|
|
ce43c743ff | ||
|
|
35092b1bf3 | ||
|
|
4231c49495 | ||
|
|
ef791d4adb | ||
|
|
674e1ca1c7 | ||
|
|
b1bd74bb7d | ||
|
|
13069fe969 | ||
|
|
23fe7ade81 | ||
|
|
836de5036c | ||
|
|
55a531c45f | ||
|
|
6e5fbc5669 | ||
|
|
2cd0e300b8 | ||
|
|
ff8174e3e4 | ||
|
|
2c29ae4f3c | ||
|
|
07a295701d | ||
|
|
b3583c3d0d | ||
|
|
95a1a60964 | ||
|
|
d2bd33c264 | ||
|
|
2730836d77 | ||
|
|
26f967ece4 | ||
|
|
365010ff3e | ||
|
|
625c4ba907 | ||
|
|
0969410407 | ||
|
|
397abc7260 | ||
|
|
b90f2341f9 | ||
|
|
b362a78fef | ||
|
|
78db31beb6 | ||
|
|
53e6cf8989 | ||
|
|
718a6bf6c2 | ||
|
|
b32aa9d2d5 | ||
|
|
98b2aad842 | ||
|
|
6b9e679958 | ||
|
|
e9c4f04da5 | ||
|
|
a6714f583f | ||
|
|
d0ae7f5633 | ||
|
|
1baf4d94fb | ||
|
|
f181e2fb8f | ||
|
|
0294919402 | ||
|
|
4e0aea2b65 | ||
|
|
e0c099ccb2 | ||
|
|
b7d1b4674b | ||
|
|
03f9d08651 | ||
|
|
84ca32b8df | ||
|
|
90841ef428 | ||
|
|
311fc82f63 | ||
|
|
59fbc51787 | ||
|
|
d7a72c75ba | ||
|
|
fcc90d4983 | ||
|
|
b640ef0cf0 | ||
|
|
3ca0fc1853 | ||
|
|
872a9b9303 | ||
|
|
f788ac2dbd | ||
|
|
5e44010f8c | ||
|
|
4b6857d9ba | ||
|
|
86803785e8 | ||
|
|
9e9551fdd8 | ||
|
|
28c94557eb | ||
|
|
c7a512e006 | ||
|
|
9d5707e87d | ||
|
|
0d636dcf1c | ||
|
|
08b41f30d8 | ||
|
|
89def18fca | ||
|
|
83a639538d | ||
|
|
94ffffd5cb | ||
|
|
bc7a44e595 | ||
|
|
05fb73163c | ||
|
|
cd3371e702 | ||
|
|
fbf72650b9 | ||
|
|
11bbc5d5bc | ||
|
|
de088dd719 | ||
|
|
07ebbaac23 | ||
|
|
11cc8fa5e6 | ||
|
|
d9989f8e0e | ||
|
|
db3fbf8180 | ||
|
|
1c45f6db9e | ||
|
|
76501ba258 | ||
|
|
80129bc004 | ||
|
|
f00f0ea36c | ||
|
|
43560f0748 | ||
|
|
1832138a31 | ||
|
|
979b63326f | ||
|
|
45ad71b565 | ||
|
|
c90d91d5fc | ||
|
|
f0108fe6f5 | ||
|
|
f9eb9cccb9 | ||
|
|
5e98ce13ab | ||
|
|
a8cfef66b3 | ||
|
|
47f544e802 | ||
|
|
2299cf4c82 | ||
|
|
b23471dfea | ||
|
|
d346ecbbb3 | ||
|
|
e96d855817 | ||
|
|
910804d2fa | ||
|
|
3af63c10ab | ||
|
|
dc37688eb9 | ||
|
|
a682d9348d | ||
|
|
769dc2ec55 | ||
|
|
d70f7c5e50 | ||
|
|
4867065f0c | ||
|
|
cb5a0045e9 | ||
|
|
3921d2c36d | ||
|
|
734c8fdcc0 | ||
|
|
9ed4d2afe1 | ||
|
|
e0caf9f660 | ||
|
|
1144807f1f | ||
|
|
331eea0db7 | ||
|
|
575b9e1d81 | ||
|
|
7880134a10 | ||
|
|
d192004010 | ||
|
|
1ab450b848 | ||
|
|
7100220f9b | ||
|
|
55b13f6d55 | ||
|
|
7df5e956d1 | ||
|
|
e65f42fe5e | ||
|
|
817fbc9a0b | ||
|
|
62180d1385 | ||
|
|
c69aa15d0e | ||
|
|
306f12db9e | ||
|
|
7ac64fa594 | ||
|
|
ded210964b | ||
|
|
bf0670e111 | ||
|
|
a6d309e0bb | ||
|
|
4cf465320c | ||
|
|
65b5c68b97 | ||
|
|
52e3d262a1 | ||
|
|
ce46bf1737 | ||
|
|
7be7d19ba5 | ||
|
|
aa21a39d97 | ||
|
|
e3c7ca0c53 | ||
|
|
0d2b8790d3 | ||
|
|
662f05162a | ||
|
|
2b0e8a56df | ||
|
|
b9760f8836 | ||
|
|
efedb2236a | ||
|
|
0ffd8f54e0 | ||
|
|
ef46184e89 | ||
|
|
a4641686a0 | ||
|
|
4c7ea63262 | ||
|
|
0aba89442c | ||
|
|
2cb284f394 | ||
|
|
ce872b40fb | ||
|
|
f53d569221 | ||
|
|
ea6a45ae32 | ||
|
|
fbca39ee5d | ||
|
|
36b68b66fa | ||
|
|
9dbee5740e | ||
|
|
ba3ab12326 | ||
|
|
7640dd5bee | ||
|
|
218b17b913 | ||
|
|
0fb0f54897 | ||
|
|
b7f1641806 | ||
|
|
dea3e2e152 | ||
|
|
036b7a86a5 | ||
|
|
310f795628 | ||
|
|
6c5a8b341b | ||
|
|
5ef912b870 | ||
|
|
fd65dbfc50 | ||
|
|
f7e31fc6c2 | ||
|
|
e179cdf2fb | ||
|
|
3b975443ec | ||
|
|
f1d3652b00 | ||
|
|
7998ff0c05 | ||
|
|
811a0f0155 | ||
|
|
56ac0fe70e | ||
|
|
92a8efc635 | ||
|
|
f90e336a8f | ||
|
|
bca2254386 | ||
|
|
3d2d72a852 | ||
|
|
949983f6b0 | ||
|
|
c73d500311 | ||
|
|
af2548723c | ||
|
|
899dcb6de0 | ||
|
|
93c9356496 | ||
|
|
3a9f12ff35 | ||
|
|
a5aa8a0943 | ||
|
|
0ecb9e3298 | ||
|
|
2077fb46a1 | ||
|
|
95737d0cbb | ||
|
|
9f20021e7a | ||
|
|
bad3865d4e | ||
|
|
9ed55aba81 | ||
|
|
9f5159e694 | ||
|
|
39b38dd6cf | ||
|
|
34668d416b | ||
|
|
6663780cd0 | ||
|
|
8fa6d6114b | ||
|
|
059de12e57 | ||
|
|
d0cc3fc376 | ||
|
|
393c6a7961 | ||
|
|
a252fc3e6c | ||
|
|
729eada18b | ||
|
|
a7ac1a62c9 | ||
|
|
9b7b52281b | ||
|
|
f44a7ee069 | ||
|
|
2abe4f48b7 | ||
|
|
92e93b59c6 | ||
|
|
ac8ea93468 | ||
|
|
43a5a8356f | ||
|
|
8890e99b2c | ||
|
|
68ba7cf2a3 | ||
|
|
34b016cb42 | ||
|
|
cf8bea660b | ||
|
|
4da9c57770 | ||
|
|
c1ac5e8862 | ||
|
|
cd74d63c12 | ||
|
|
73825fc885 | ||
|
|
06c0a051da | ||
|
|
5c3276599b | ||
|
|
2d2d444adf | ||
|
|
ade072e46b | ||
|
|
c09fe5cafb | ||
|
|
657e4c62cb | ||
|
|
0b8bc76cef | ||
|
|
96eebc523f | ||
|
|
a239e8e462 | ||
|
|
2c66a6c3fd | ||
|
|
7d47787007 | ||
|
|
225ef04d34 | ||
|
|
990a6d67a1 | ||
|
|
57cf63def3 | ||
|
|
f4bbd7d192 | ||
|
|
9cf82cab33 | ||
|
|
aaf5561c57 | ||
|
|
e4db025a73 | ||
|
|
5e55abdeff | ||
|
|
2111493f31 | ||
|
|
5b58b51e22 | ||
|
|
c5ccd42ac0 | ||
|
|
ef7b8cbc9e | ||
|
|
2fdbbbae4e | ||
|
|
fdaf5c86b2 | ||
|
|
977ad1ae6a | ||
|
|
60cf6eb1de | ||
|
|
3069fdf9a9 | ||
|
|
abe7f3a325 | ||
|
|
9be3194788 | ||
|
|
1b9e0aa8c7 | ||
|
|
d8dfb1b778 | ||
|
|
1b0d81a994 | ||
|
|
753b8d0fea | ||
|
|
022ee216f4 | ||
|
|
6e78f6cb4b | ||
|
|
9a37a1e776 | ||
|
|
caef089b98 | ||
|
|
183a7b7797 | ||
|
|
34f54b7bb3 | ||
|
|
bb11fa02a6 | ||
|
|
1cef1a3806 | ||
|
|
77b5bbb1b5 | ||
|
|
db3c413268 | ||
|
|
080f83060e | ||
|
|
ca3dbff3f8 | ||
|
|
690e6e149c | ||
|
|
63495e2114 | ||
|
|
d950166573 | ||
|
|
624d93d4fa | ||
|
|
9efc3ebc3f | ||
|
|
6d2cb04013 | ||
|
|
2aa1723b39 | ||
|
|
c8f3efcc75 | ||
|
|
41e1560d14 | ||
|
|
5d5bcb4bca | ||
|
|
0930f81131 | ||
|
|
84aedee955 | ||
|
|
7f6ca92673 | ||
|
|
1edc810119 | ||
|
|
3f7bac73fe | ||
|
|
8098787972 | ||
|
|
4b9d7640a7 | ||
|
|
7fe5113fe7 | ||
|
|
0c82e12244 | ||
|
|
ae1cce3a74 | ||
|
|
aff3ad21b8 | ||
|
|
d7850a0df7 | ||
|
|
e96eb944c2 | ||
|
|
150ca9b5b1 | ||
|
|
08d9e03b81 | ||
|
|
fba51e328b | ||
|
|
99d83d8d85 | ||
|
|
6247222cf6 | ||
|
|
6c64bcc393 | ||
|
|
b513e518d2 | ||
|
|
2114fddad9 | ||
|
|
6a0c40f1fe | ||
|
|
38d1512949 | ||
|
|
e3a36e4914 | ||
|
|
a805814fd4 | ||
|
|
a133e18a3b | ||
|
|
72ce2b8c22 | ||
|
|
1e6bf5f9e1 | ||
|
|
7f1dcd2d0f | ||
|
|
98f8b67c3a | ||
|
|
de9921986c | ||
|
|
45d90a7775 | ||
|
|
670922cd27 | ||
|
|
0f3dd95156 | ||
|
|
34fda8a36d | ||
|
|
be6d973a49 | ||
|
|
37fcc133f6 | ||
|
|
0e1661c2f1 | ||
|
|
d486ceec9f | ||
|
|
1456a4c423 | ||
|
|
a4b2fe3b1c | ||
|
|
19a9622303 | ||
|
|
d6c5c969f0 | ||
|
|
e0b5ab6bcb | ||
|
|
28253f9cb3 | ||
|
|
026d5787bb | ||
|
|
f2af16c789 | ||
|
|
0bd861fdb9 | ||
|
|
9f2b02319f | ||
|
|
23ee6aa5f6 | ||
|
|
c12f12ce8e | ||
|
|
c72513c86b | ||
|
|
8f806006bd | ||
|
|
6f001f2e2f | ||
|
|
f2e822b50f | ||
|
|
3756a7daa9 | ||
|
|
92de62f50b | ||
|
|
f5dd0bab3f | ||
|
|
11da6c2e2a | ||
|
|
226ae73a8d | ||
|
|
f92a419833 | ||
|
|
b7ca44871e | ||
|
|
b0942f5a43 | ||
|
|
107837ccd7 | ||
|
|
cd78cc6fdb | ||
|
|
c7e50e8305 | ||
|
|
5530cf1226 | ||
|
|
8a3ced949a | ||
|
|
ec4173f8cc | ||
|
|
0597c930f1 | ||
|
|
519c627fe5 | ||
|
|
05802c5a7a | ||
|
|
28fff3ad36 | ||
|
|
1a4c564ed2 | ||
|
|
8a49894619 | ||
|
|
3a6039c5be | ||
|
|
8eb6166ca1 | ||
|
|
d13610cef5 | ||
|
|
6a8e4a71ed | ||
|
|
190c5bdf8a | ||
|
|
212be87e66 | ||
|
|
ce65360838 | ||
|
|
04d8c6d439 | ||
|
|
29264f0049 | ||
|
|
a54b1ff70e | ||
|
|
facee61c79 | ||
|
|
500e68f0b1 | ||
|
|
b002fe5992 | ||
|
|
e886514c96 | ||
|
|
634d001c64 | ||
|
|
d56e09153a | ||
|
|
71962ebfb0 | ||
|
|
c736a3d9c7 | ||
|
|
34198dbc4c | ||
|
|
846cfeee6e | ||
|
|
fb2ceb5470 | ||
|
|
737e6157fe | ||
|
|
fc61f2721e | ||
|
|
3b69a96c58 | ||
|
|
a325f5589a | ||
|
|
a3319eba8a | ||
|
|
2929434832 | ||
|
|
51e553fe0e | ||
|
|
ce2883fbbd | ||
|
|
7125621712 | ||
|
|
1f0201f90b | ||
|
|
1b2d47b99b | ||
|
|
8eca7db307 | ||
|
|
77f845359a | ||
|
|
a33a3ae92b | ||
|
|
d7787c25cf | ||
|
|
e66e60f894 | ||
|
|
2801325742 | ||
|
|
91bd86216a | ||
|
|
becf7cffb3 | ||
|
|
0f1f7c3b7f | ||
|
|
5223492f6b | ||
|
|
aff549a4ab | ||
|
|
f11a30cdf8 | ||
|
|
95a3c51ea7 | ||
|
|
daf33b796d | ||
|
|
21a5efbe75 | ||
|
|
1996b05795 | ||
|
|
c9abbe87df | ||
|
|
ba5d36a6d6 | ||
|
|
728414c987 | ||
|
|
ae38e974f0 | ||
|
|
02a9f5a885 | ||
|
|
a96301c84e | ||
|
|
673cb7c129 | ||
|
|
f87e976a33 | ||
|
|
19addb504b | ||
|
|
8808e17f23 | ||
|
|
1d736d2851 | ||
|
|
abc4e4d7d0 | ||
|
|
49d555edee | ||
|
|
19009fcd51 | ||
|
|
bb7d4b2b35 | ||
|
|
b092cb33e6 | ||
|
|
a3c07597f2 | ||
|
|
d7310fb0f7 | ||
|
|
04d90d25e3 | ||
|
|
c9ac8cc788 | ||
|
|
b36bff7dcd | ||
|
|
7ee29eeb6a | ||
|
|
46e4eafc0c | ||
|
|
dc37d152e7 | ||
|
|
55323320b6 | ||
|
|
22534d46e9 | ||
|
|
e1edb38d9e | ||
|
|
1716bf859b | ||
|
|
23a89dba04 | ||
|
|
132dde52c3 | ||
|
|
b0e98512a7 | ||
|
|
68ff9b2b00 | ||
|
|
35703f67d9 | ||
|
|
5fee6662ef | ||
|
|
2e48a18645 | ||
|
|
7fe1c05c7c | ||
|
|
80a48b15c7 | ||
|
|
2791b0619d | ||
|
|
6cb5b0ee66 | ||
|
|
ba330f23de | ||
|
|
b8117e7869 | ||
|
|
8ab0372f60 | ||
|
|
57069c5967 | ||
|
|
7895bef72f | ||
|
|
438ccadcce | ||
|
|
f8eed77f36 | ||
|
|
72990b87b1 | ||
|
|
fa2cb78a09 | ||
|
|
156e82c164 | ||
|
|
44c78fb98c | ||
|
|
bc38b1c703 | ||
|
|
4728aa064a | ||
|
|
b4148f3379 | ||
|
|
169880d486 | ||
|
|
5bed80aab9 | ||
|
|
500a66b0d8 | ||
|
|
f82d12c1b4 | ||
|
|
2bcf6f798f | ||
|
|
707346f099 | ||
|
|
b95c7e9523 | ||
|
|
784f62993b | ||
|
|
6581804c68 | ||
|
|
3d517c6b50 | ||
|
|
bb7b93499c | ||
|
|
c3c47e6790 | ||
|
|
d5cc4b8c89 | ||
|
|
a656854b1e | ||
|
|
f6c4154043 | ||
|
|
0c1962f5de | ||
|
|
74210780a0 | ||
|
|
f0b6dc4e4f | ||
|
|
bf106fcab7 | ||
|
|
e51e3b724f | ||
|
|
d3b90b4164 | ||
|
|
4ce3f156ec | ||
|
|
a4b5c38070 | ||
|
|
9f50973389 | ||
|
|
99a605b4b3 | ||
|
|
eff5854b96 | ||
|
|
75b1007388 | ||
|
|
30c006f23f | ||
|
|
18a0513e0d | ||
|
|
92a8ffe4ab | ||
|
|
f5bf509c49 | ||
|
|
2c09c3cf0b | ||
|
|
9b19c5b40c | ||
|
|
a1e95a3802 | ||
|
|
5bc757e86c | ||
|
|
e6fcfd056b | ||
|
|
c0563bc803 | ||
|
|
af17406ae2 | ||
|
|
d08b7168c3 | ||
|
|
476f58c4af | ||
|
|
a38fe743aa | ||
|
|
d7444b88be | ||
|
|
541f7a7a41 | ||
|
|
1736731b74 | ||
|
|
2d91b17b0a | ||
|
|
9b77e947fa | ||
|
|
c45761e2a8 | ||
|
|
d44a3683b1 | ||
|
|
bcbe3b2577 | ||
|
|
157108fe22 | ||
|
|
837cc6d064 | ||
|
|
caefa97f8c | ||
|
|
b071e2accc | ||
|
|
1c75e97108 | ||
|
|
ccd014ed3f | ||
|
|
3362748733 | ||
|
|
cf3105821b | ||
|
|
564c0a977b | ||
|
|
9d92d626e3 | ||
|
|
53ac035768 | ||
|
|
f5561769de | ||
|
|
3f659885ec | ||
|
|
78845e9e0b | ||
|
|
5f0efc9ebc | ||
|
|
bc54af4743 | ||
|
|
f907666b7c | ||
|
|
6b4a0e7c26 | ||
|
|
63ff9298d5 | ||
|
|
27c8e4b84a | ||
|
|
0ed8a9f6fc | ||
|
|
3fbdd52bdf | ||
|
|
575bf80be6 | ||
|
|
70d7880102 | ||
|
|
762e078636 | ||
|
|
7eb8c115ec | ||
|
|
38ab95c64b | ||
|
|
3a2b2b4fd8 | ||
|
|
75c23332be | ||
|
|
5fb46fd5a8 | ||
|
|
7dea7787e2 | ||
|
|
9f5d2eb156 | ||
|
|
5d8f395e2b | ||
|
|
f495cb2581 | ||
|
|
11b424e02b | ||
|
|
eceef28d8c | ||
|
|
c7d240fc1a | ||
|
|
2890d62dbb | ||
|
|
f1cce86e5b | ||
|
|
109adcf650 | ||
|
|
a0b9feb69b | ||
|
|
b901dad72f | ||
|
|
69411a12bb | ||
|
|
20ff6025ba | ||
|
|
54f18dfa74 | ||
|
|
625332a903 | ||
|
|
3888d500b9 | ||
|
|
882b752caf | ||
|
|
5c3da1ee7e | ||
|
|
f2f06cfb5d | ||
|
|
2dace6e70f | ||
|
|
8ce591cea8 | ||
|
|
daf491a814 | ||
|
|
985efdc475 | ||
|
|
7e34622217 | ||
|
|
98f8ed01aa | ||
|
|
4efdcb87d1 | ||
|
|
734af9cd47 | ||
|
|
640336ebe6 | ||
|
|
b9859c555d | ||
|
|
6d2cecc165 | ||
|
|
78d224e10f | ||
|
|
cfc55e5aa1 | ||
|
|
431a99ccf9 | ||
|
|
3aafcb67df | ||
|
|
158f98af37 | ||
|
|
89ddf727ca | ||
|
|
374e15fb40 | ||
|
|
a4e4149340 | ||
|
|
7dcb52915b | ||
|
|
ffb15fdb04 | ||
|
|
ea25541820 | ||
|
|
9c273720d6 | ||
|
|
aa93fd7701 | ||
|
|
abe67eceb0 | ||
|
|
6572ca3124 | ||
|
|
2b339c9319 | ||
|
|
7378cf14d9 | ||
|
|
6f5c11015d | ||
|
|
a1e7efde4a | ||
|
|
5db54afdea | ||
|
|
ec05f75ccd | ||
|
|
c3da619227 | ||
|
|
c20e1ffd6c | ||
|
|
bd18ff374c | ||
|
|
1eabc28737 | ||
|
|
f45e422039 | ||
|
|
6b9ad54671 | ||
|
|
246f900195 | ||
|
|
c3121fbc7e | ||
|
|
36eac9c460 | ||
|
|
7cf17a50bb | ||
|
|
be587b0b28 | ||
|
|
8baf254d15 | ||
|
|
f495312b72 | ||
|
|
29ceaebc37 | ||
|
|
9c1cae042e | ||
|
|
9ab742ede8 | ||
|
|
ccbd107813 | ||
|
|
37f89e6be6 | ||
|
|
c0b1b0d0e7 | ||
|
|
d3c3800a29 | ||
|
|
6f0719f802 | ||
|
|
41fbcaf73d | ||
|
|
25c1ab1e55 | ||
|
|
5245d5d52c | ||
|
|
0955245ab5 | ||
|
|
6f9b7f8e40 | ||
|
|
709178cf04 | ||
|
|
d65cdc272a | ||
|
|
9a744b5c79 | ||
|
|
bb3e41d286 | ||
|
|
95408ff1c7 | ||
|
|
2ca2c1d52f | ||
|
|
e5b31c9351 | ||
|
|
6474c4d2a3 | ||
|
|
049e350efd | ||
|
|
5cd8be04d6 | ||
|
|
dcb3877665 | ||
|
|
cbe3e79eb9 | ||
|
|
7533d0caf7 | ||
|
|
ddc7fcdc27 | ||
|
|
93a394d6ee | ||
|
|
a20650acd0 | ||
|
|
ae3ddc1514 | ||
|
|
7c19b04e6d | ||
|
|
d6b705678a | ||
|
|
2b8c80bc91 | ||
|
|
dcc737282d | ||
|
|
5ab764cefb | ||
|
|
1e8cbf3a53 | ||
|
|
6d38b07902 | ||
|
|
983ec86773 | ||
|
|
cc513a8564 | ||
|
|
bf1ca00b7c | ||
|
|
13ac5e3af2 | ||
|
|
dbeca02bca | ||
|
|
4b7f7c425e | ||
|
|
b4884449a6 | ||
|
|
2d9848a160 | ||
|
|
e8dbd32204 | ||
|
|
f217a785d5 | ||
|
|
f74b88af11 | ||
|
|
6593dfa333 | ||
|
|
55db965e8d | ||
|
|
41f3ac5368 | ||
|
|
04b6a83eb6 | ||
|
|
4189f3e295 | ||
|
|
21eac83406 | ||
|
|
e438672595 | ||
|
|
c8a460e29d | ||
|
|
cd7e4c8c16 | ||
|
|
3cb2c5c25a | ||
|
|
ff895e1ca9 | ||
|
|
aa6a17064b | ||
|
|
9c3e20af57 | ||
|
|
0af0decb66 | ||
|
|
9c81e25271 | ||
|
|
a0f3e72c24 | ||
|
|
30d5c660bc | ||
|
|
9a4b556a63 | ||
|
|
091b24c59d | ||
|
|
e15e0c33b4 | ||
|
|
67de841056 | ||
|
|
b55f667040 | ||
|
|
48d58f76ef | ||
|
|
9f224e129c | ||
|
|
762fd67d8d | ||
|
|
408319a638 | ||
|
|
a58629198d | ||
|
|
7b529c7ee7 | ||
|
|
6bc7c5dcb7 | ||
|
|
acc448eb85 | ||
|
|
77aa98ea04 | ||
|
|
4b717b5ba1 | ||
|
|
5fb4ac8429 | ||
|
|
d7a336ae22 | ||
|
|
4bd0381466 | ||
|
|
93f31249a1 | ||
|
|
62b559b4e9 | ||
|
|
a55533ffab | ||
|
|
7511a7950b | ||
|
|
448b83e288 | ||
|
|
8dd995ca0d | ||
|
|
dfc84e8c89 | ||
|
|
968deb7658 | ||
|
|
8a416b2365 | ||
|
|
52adb9a491 | ||
|
|
fba8695a1c | ||
|
|
85a8187c52 | ||
|
|
3c5e7ab5f1 | ||
|
|
18ea7bbd4d | ||
|
|
efa88ff48b | ||
|
|
667d968e28 | ||
|
|
9db4736a1e | ||
|
|
b9b38ef01c | ||
|
|
6b96799305 | ||
|
|
52ca0b6388 | ||
|
|
d6e7567e90 | ||
|
|
aa4f13c0ea | ||
|
|
c457ab9c1a | ||
|
|
36e0024524 | ||
|
|
a792499b68 | ||
|
|
17e9572501 | ||
|
|
ce119517a2 | ||
|
|
83f31097a2 | ||
|
|
c93ecb6623 | ||
|
|
6426b52076 | ||
|
|
4bdcad4b69 | ||
|
|
50f960454d | ||
|
|
5b2078e713 | ||
|
|
80d9f0356a | ||
|
|
af32180a74 | ||
|
|
670501c6c6 | ||
|
|
381c57e0d4 | ||
|
|
c443776640 | ||
|
|
5cf9793864 | ||
|
|
9ff93a56c0 | ||
|
|
dfb66312ab | ||
|
|
5fcb4ac25f | ||
|
|
34d162ce41 | ||
|
|
7a40a76a81 | ||
|
|
3235e8028e | ||
|
|
62854e9b81 | ||
|
|
9a0c9857b1 | ||
|
|
43eef4d0ef | ||
|
|
38241ca3a4 | ||
|
|
3e7a0f0bfd | ||
|
|
a59a9f6a2b | ||
|
|
360fcdc7bd | ||
|
|
c24951c366 | ||
|
|
3cd3bb0958 | ||
|
|
6a10c59513 | ||
|
|
ac40d6f126 | ||
|
|
4407396c1c | ||
|
|
dde1b747f6 | ||
|
|
bf6e1ab5ce | ||
|
|
ae3c69bfc5 | ||
|
|
fa13ff6051 | ||
|
|
682a3fcf9b | ||
|
|
01848008df | ||
|
|
239fc2abf7 | ||
|
|
fdaa7a673c | ||
|
|
0eca63f398 | ||
|
|
4d0c91a7c9 | ||
|
|
b383b9ba47 | ||
|
|
4c7ea8f9ef | ||
|
|
30c988b71e | ||
|
|
909d0bb109 | ||
|
|
2fb4d43825 | ||
|
|
dfd2d3b478 | ||
|
|
338714d4e6 | ||
|
|
7210444d87 | ||
|
|
f3779adaed | ||
|
|
3141814177 | ||
|
|
30e0321d0a | ||
|
|
ee0a2ddfe6 | ||
|
|
0a801a25db | ||
|
|
0b946fc36e | ||
|
|
c49c7ce7e8 | ||
|
|
a0e99eb3e4 | ||
|
|
dbda92bd87 | ||
|
|
70eb231ee9 | ||
|
|
e1ffbcca68 | ||
|
|
70d13b11e3 | ||
|
|
8cc0b7c935 | ||
|
|
5bdc7a2a88 | ||
|
|
704059e82c | ||
|
|
5cb762fd3a | ||
|
|
01e7cde127 | ||
|
|
e8b11fe509 | ||
|
|
da01f1bc64 | ||
|
|
3a1ab0ea9d | ||
|
|
eadcba1cd9 | ||
|
|
12d90b9484 | ||
|
|
cafa9bd6e5 | ||
|
|
98a56c7ab7 | ||
|
|
29b2194847 | ||
|
|
ec720fb754 | ||
|
|
5141220c5e | ||
|
|
c97385de9d | ||
|
|
bb97fb0834 | ||
|
|
6c504b042e | ||
|
|
ce4febb72c | ||
|
|
6c1e7ccb5e | ||
|
|
0f0ac3ef39 | ||
|
|
fad23a5a1f | ||
|
|
cb437cbfe4 | ||
|
|
08c333279b | ||
|
|
dadf7053f7 | ||
|
|
f79194f505 | ||
|
|
008e969429 | ||
|
|
fc99cf1793 | ||
|
|
21f481e5dd | ||
|
|
998865b735 | ||
|
|
a98209a61f | ||
|
|
32036d6953 | ||
|
|
f6c6028287 | ||
|
|
f27b8e12bd | ||
|
|
0b9679e5b7 | ||
|
|
9e05cd8605 | ||
|
|
c1c925728c | ||
|
|
1696f0a3a6 | ||
|
|
cee6cf433e | ||
|
|
52c2b63a7a | ||
|
|
b96bd0ebfc | ||
|
|
db380d5775 | ||
|
|
003df98660 | ||
|
|
788f7f3485 | ||
|
|
612e107faa | ||
|
|
8fbcd87b24 | ||
|
|
729c6246fb | ||
|
|
35e50729a8 | ||
|
|
c8359c3738 | ||
|
|
45b78120fc | ||
|
|
5b0c4babe6 | ||
|
|
f6a7442983 | ||
|
|
774e9847c4 | ||
|
|
356e978bce | ||
|
|
82adf1a224 | ||
|
|
b0277a9631 | ||
|
|
599d2d5eaf | ||
|
|
19b81a2817 | ||
|
|
0dd9ef9b43 | ||
|
|
d6dea71e06 | ||
|
|
e267adc80a | ||
|
|
7313e1145f | ||
|
|
50cb7df534 | ||
|
|
c6d6482bfe | ||
|
|
22ac1684a0 | ||
|
|
9c7b430e11 | ||
|
|
428d02d5d7 | ||
|
|
875dc24cfc | ||
|
|
1f4cfb029b | ||
|
|
b82f9f3c1e | ||
|
|
3c05d51ed6 | ||
|
|
4df63bafc0 | ||
|
|
bc95863f7d | ||
|
|
aafc1e13c0 | ||
|
|
2f408651fb | ||
|
|
6d8002eb26 | ||
|
|
154ae789ef | ||
|
|
aa58d21213 | ||
|
|
c8cce21323 | ||
|
|
d64aeff387 | ||
|
|
ed94c35f61 | ||
|
|
00b75f8353 | ||
|
|
2d9fcecd29 | ||
|
|
da823fbf44 | ||
|
|
51ba3f9981 | ||
|
|
3bc126336f | ||
|
|
36f8c82970 | ||
|
|
f8b167cccd | ||
|
|
9934e0af8e | ||
|
|
d6a9b93b5a | ||
|
|
3cf74e191f | ||
|
|
fa91c4b435 | ||
|
|
72ec2d876a | ||
|
|
b26797f892 | ||
|
|
bdef27482c | ||
|
|
a3005a16fc | ||
|
|
5d3cbf89ec | ||
|
|
6d1572722f | ||
|
|
9351f319e2 | ||
|
|
94422f1795 | ||
|
|
98d775ab1f | ||
|
|
be95b163a6 | ||
|
|
49cbc41c82 | ||
|
|
4da8658b14 | ||
|
|
cc18a50e59 | ||
|
|
211a79fc65 | ||
|
|
308ec93f02 | ||
|
|
05b4f2e796 | ||
|
|
d2703f3e8d | ||
|
|
66b26ccfb4 | ||
|
|
7a9f2e7625 | ||
|
|
9936975b96 | ||
|
|
e59f431f8d | ||
|
|
0582a3ba99 | ||
|
|
581521ba96 | ||
|
|
2e24ba80e9 | ||
|
|
c9f2ba541b | ||
|
|
4f45d8c3a2 | ||
|
|
ffc05ac66b | ||
|
|
8fff72a23b | ||
|
|
07ee2dd259 | ||
|
|
a56ce23775 | ||
|
|
0d30a781cf | ||
|
|
3e2cf1a294 | ||
|
|
a6d2266193 |
16
.hgtags
16
.hgtags
@@ -72,3 +72,19 @@ b5dab6a313fdff4c043250e4d9c8f66fd624d27e jdk7-b93
|
||||
654298d26561b76dfe3cfcffbbd7078080837300 jdk7-b95
|
||||
d260f892491e040ae385a8e6df59557a7d721abf jdk7-b96
|
||||
7e406ebed9a5968b584f3c3e6b60893b5d6d9741 jdk7-b97
|
||||
db6e660120446c407e2d908d52ec046592b21726 jdk7-b98
|
||||
c4c8a5bc54f66abc68cd185d9294042121922154 jdk7-b99
|
||||
2d6ba7a221915bdf0311acc5641c7f3875cb793e jdk7-b100
|
||||
2548ac036b8fca3326d058d758e6df8355a42469 jdk7-b101
|
||||
88db80c8e49cea352c2900f689600dc410761c1f jdk7-b102
|
||||
64770970865839b0443066370e7d476ef47e90cd jdk7-b103
|
||||
10bc903a228d3a8efdf46fb8c3fcf82a59b88bc5 jdk7-b104
|
||||
1ce7938efb03224ccc8b3cdd7803eb39e889539c jdk7-b105
|
||||
6bdae472f77205046703b685eff2ac4f7a0ecf4e jdk7-b106
|
||||
439de530aac531a360beedba6e2fe51e17292cc0 jdk7-b107
|
||||
044d31b99ef5609389fc771c422e722e5e224228 jdk7-b108
|
||||
e02b4d709e177d08d56130a4bc68061e4bbacc7d jdk7-b109
|
||||
a6442d6bc38a44152e0662688213ce4d2701f42a jdk7-b110
|
||||
69f3edf083477955b5bd2f754252c7504167d8e1 jdk7-b111
|
||||
f960f117f1623629f64203e2b09a92a8f6f14ff5 jdk7-b112
|
||||
1fee41c7ed2b3388970a756a85aa693c0de8407a jdk7-b113
|
||||
|
||||
@@ -72,3 +72,19 @@ d7f35c61afa092b6357c2c4bce3f298f16620f71 jdk7-b94
|
||||
fd3663286e77b9f13c39eee124db2beb079b3ca6 jdk7-b95
|
||||
cf71cb5151166f35433afebaf67dbf34a704a170 jdk7-b96
|
||||
5e197c942c6ebd8b92f324a31049c5f1d26d40ef jdk7-b97
|
||||
6cea9984d73d74de0cd01f30d07ac0a1ed196117 jdk7-b98
|
||||
e7f18db469a3e947b7096bfd12e87380e5a042cd jdk7-b99
|
||||
b218a53ec7d3d42be61d31d6917a6c5c037b6f56 jdk7-b100
|
||||
4193eaf5f1b82794c6a0fb1a8d11af43d1b1d611 jdk7-b101
|
||||
a136a51f5113da4dad3853b74a8536ab583ab112 jdk7-b102
|
||||
be2aedc4e3b1751c1310f334242ba69e90867f38 jdk7-b103
|
||||
f8be576feefce0c6695f188ef97ec16b73ad9cfd jdk7-b104
|
||||
9f96a4269d7727dad68864eaab795eafce270311 jdk7-b105
|
||||
43096cccf1cee749c2f4e7714ee71f4e9e0f4d7f jdk7-b106
|
||||
7d396ad455c3b2f68b0d7094891c5aba7c757a6e jdk7-b107
|
||||
140fdef4ddf52244013b6157dc542cd9f677bb6f jdk7-b108
|
||||
81dfc728d7bb7e1fff4a4dc6d0f7cea5a3315667 jdk7-b109
|
||||
2a02d4a6955c7c078aee9a604cb3be409800d82c jdk7-b110
|
||||
9702d6fef68e17533ee7fcf5923b11ead3e912ce jdk7-b111
|
||||
b852103caf73da70068473777ae867a457bb3ae1 jdk7-b112
|
||||
c1df968c4527bfab5f97662a89245f15d12d378b jdk7-b113
|
||||
|
||||
80
Makefile
80
Makefile
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1995, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -29,10 +29,6 @@ ifndef TOPDIR
|
||||
TOPDIR:=.
|
||||
endif
|
||||
|
||||
ifndef CONTROL_TOPDIR
|
||||
CONTROL_TOPDIR=$(TOPDIR)
|
||||
endif
|
||||
|
||||
# Openjdk sources (only used if SKIP_OPENJDK_BUILD!=true)
|
||||
OPENJDK_SOURCETREE=$(TOPDIR)/openjdk
|
||||
OPENJDK_BUILDDIR:=$(shell \
|
||||
@@ -120,7 +116,7 @@ endif
|
||||
all_product_build::
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
# Generis build of basic repo series
|
||||
# Generic build of basic repo series
|
||||
generic_build_repo_series::
|
||||
$(MKDIR) -p $(OUTPUTDIR)
|
||||
$(MKDIR) -p $(OUTPUTDIR)/j2sdk-image
|
||||
@@ -179,11 +175,15 @@ endif
|
||||
# The install process needs to know what the DEBUG_NAME is, so
|
||||
# look for INSTALL_DEBUG_NAME in the install rules.
|
||||
#
|
||||
# NOTE: On windows, do not use $(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME).
|
||||
# Due to the use of short paths in $(ABS_OUTPUTDIR), this may
|
||||
# not be the same location.
|
||||
#
|
||||
|
||||
# Location of fresh bootdir output
|
||||
ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk
|
||||
FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/j2sdk-image
|
||||
FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME)/j2sdk-image
|
||||
FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME)/j2sdk-image
|
||||
|
||||
create_fresh_product_bootdir: FRC
|
||||
@$(START_ECHO)
|
||||
@@ -248,10 +248,14 @@ build_product_image:
|
||||
generic_build_repo_series
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
# NOTE: On windows, do not use $(ABS_OUTPUTDIR)-$(DEBUG_NAME).
|
||||
# Due to the use of short paths in $(ABS_OUTPUTDIR), this may
|
||||
# not be the same location.
|
||||
|
||||
generic_debug_build:
|
||||
@$(START_ECHO)
|
||||
$(MAKE) \
|
||||
ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)-$(DEBUG_NAME) \
|
||||
ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME) \
|
||||
DEBUG_NAME=$(DEBUG_NAME) \
|
||||
GENERATE_DOCS=false \
|
||||
$(BOOT_CYCLE_DEBUG_SETTINGS) \
|
||||
@@ -348,8 +352,8 @@ endif
|
||||
|
||||
clobber::
|
||||
$(RM) -r $(OUTPUTDIR)/*
|
||||
$(RM) -r $(OUTPUTDIR)-debug/*
|
||||
$(RM) -r $(OUTPUTDIR)-fastdebug/*
|
||||
$(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-debug/*
|
||||
$(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-fastdebug/*
|
||||
-($(RMDIR) -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1; $(TRUE))
|
||||
|
||||
clean: clobber
|
||||
@@ -550,6 +554,60 @@ ifeq ($(BUNDLE_RULES_AVAILABLE), true)
|
||||
include $(BUNDLE_RULES)
|
||||
endif
|
||||
|
||||
################################################################
|
||||
# rule to test
|
||||
################################################################
|
||||
|
||||
.NOTPARALLEL: test_run
|
||||
|
||||
test:
|
||||
$(MAKE) test_run
|
||||
|
||||
test_run: test_clean test_start test_summary
|
||||
|
||||
test_start:
|
||||
@$(ECHO) "Tests started at `$(DATE)`"
|
||||
|
||||
test_clean:
|
||||
$(RM) $(OUTPUTDIR)/test_failures.txt $(OUTPUTDIR)/test_log.txt
|
||||
|
||||
test_summary: $(OUTPUTDIR)/test_failures.txt
|
||||
@$(ECHO) "#################################################"
|
||||
@$(ECHO) "Tests completed at `$(DATE)`"
|
||||
@( $(EGREP) '^TEST STATS:' $(OUTPUTDIR)/test_log.txt \
|
||||
|| $(ECHO) "No TEST STATS seen in log" )
|
||||
@$(ECHO) "For complete details see: $(OUTPUTDIR)/test_log.txt"
|
||||
@$(ECHO) "#################################################"
|
||||
@if [ -s $< ] ; then \
|
||||
$(ECHO) "ERROR: Test failure count: `$(CAT) $< | $(WC) -l`"; \
|
||||
$(CAT) $<; \
|
||||
exit 1; \
|
||||
else \
|
||||
$(ECHO) "Success! No failures detected"; \
|
||||
fi
|
||||
|
||||
# Get failure list from log
|
||||
$(OUTPUTDIR)/test_failures.txt: $(OUTPUTDIR)/test_log.txt
|
||||
@$(RM) $@
|
||||
@( $(EGREP) '^FAILED:' $< || $(ECHO) "" ) | $(NAWK) 'length>0' > $@
|
||||
|
||||
# Get log file of all tests run
|
||||
JDK_TO_TEST := $(shell \
|
||||
if [ -d "$(ABS_OUTPUTDIR)/j2sdk-image" ] ; then \
|
||||
$(ECHO) "$(ABS_OUTPUTDIR)/j2sdk-image"; \
|
||||
elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then \
|
||||
$(ECHO) "$(ABS_OUTPUTDIR)"; \
|
||||
elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then \
|
||||
$(ECHO) "$(PRODUCT_HOME)"; \
|
||||
fi \
|
||||
)
|
||||
TEST_TARGETS=all
|
||||
$(OUTPUTDIR)/test_log.txt:
|
||||
$(RM) $@
|
||||
( $(CD) test && \
|
||||
$(MAKE) NO_STOPPING=- PRODUCT_HOME=$(JDK_TO_TEST) $(TEST_TARGETS) \
|
||||
) | tee $@
|
||||
|
||||
################################################################
|
||||
# JPRT rule to build
|
||||
################################################################
|
||||
@@ -560,7 +618,7 @@ include ./make/jprt.gmk
|
||||
# PHONY
|
||||
################################################################
|
||||
|
||||
.PHONY: all \
|
||||
.PHONY: all test test_run test_start test_summary test_clean \
|
||||
generic_build_repo_series \
|
||||
what clobber insane \
|
||||
dev dev-build dev-sanity dev-clobber \
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
||||
SunSolve</a> for patch downloads.
|
||||
</td>
|
||||
<td>Sun Studio 12</td>
|
||||
<td>Sun Studio 12 Update 1 + patches</td>
|
||||
<td>JDK 6u14 FCS </td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -158,7 +158,7 @@
|
||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
||||
SunSolve</a> for patch downloads.
|
||||
</td>
|
||||
<td>Sun Studio 12</td>
|
||||
<td>Sun Studio 12 Update 1 + patches</td>
|
||||
<td>JDK 6u14 FCS </td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -168,7 +168,7 @@
|
||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
||||
SunSolve</a> for patch downloads.
|
||||
</td>
|
||||
<td>Sun Studio 12</td>
|
||||
<td>Sun Studio 12 Update 1 + patches</td>
|
||||
<td>JDK 6u14 FCS </td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -178,7 +178,7 @@
|
||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
||||
SunSolve</a> for patch downloads.
|
||||
</td>
|
||||
<td>Sun Studio 12</td>
|
||||
<td>Sun Studio 12 Update 1 + patches</td>
|
||||
<td>JDK 6u14 FCS </td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -941,21 +941,78 @@
|
||||
<strong><a name="studio">Solaris: Sun Studio</a></strong>
|
||||
<blockquote>
|
||||
At a minimum, the
|
||||
<a href="http://developers.sun.com/sunstudio/index.jsp" target="_blank">
|
||||
Sun Studio 12 Compilers</a>
|
||||
(containing version 5.9 of the C and C++ compilers) is required,
|
||||
with patches from the
|
||||
<a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access" target="_blank">
|
||||
SunSolve web site</a>.
|
||||
<a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
|
||||
Sun Studio 12 Update 1 Compilers</a>
|
||||
(containing version 5.10 of the C and C++ compilers) is required,
|
||||
including specific patches.
|
||||
<p>
|
||||
The Solaris SPARC patch list is:
|
||||
<ul>
|
||||
<li>
|
||||
118683-05: SunOS 5.10: Patch for profiling libraries and assembler
|
||||
</li>
|
||||
<li>
|
||||
119963-21: SunOS 5.10: Shared library patch for C++
|
||||
</li>
|
||||
<li>
|
||||
120753-08: SunOS 5.10: Microtasking libraries (libmtsk) patch
|
||||
</li>
|
||||
<li>
|
||||
128228-09: Sun Studio 12 Update 1: Patch for Sun C++ Compiler
|
||||
</li>
|
||||
<li>
|
||||
141860-03: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
|
||||
</li>
|
||||
<li>
|
||||
141861-05: Sun Studio 12 Update 1: Patch for Sun C Compiler
|
||||
</li>
|
||||
<li>
|
||||
142371-01: Sun Studio 12.1 Update 1: Patch for dbx
|
||||
</li>
|
||||
<li>
|
||||
143384-02: Sun Studio 12 Update 1: Patch for debuginfo handling
|
||||
</li>
|
||||
<li>
|
||||
143385-02: Sun Studio 12 Update 1: Patch for Compiler Common patch for Sun C C++ F77 F95
|
||||
</li>
|
||||
<li>
|
||||
142369-01: Sun Studio 12.1: Patch for Performance Analyzer Tools
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
The Solaris X86 patch list is:
|
||||
<ul>
|
||||
<li>
|
||||
119961-07: SunOS 5.10_x86, x64, Patch for profiling libraries and assembler
|
||||
</li>
|
||||
<li>
|
||||
119964-21: SunOS 5.10_x86: Shared library patch for C++_x86
|
||||
</li>
|
||||
<li>
|
||||
120754-08: SunOS 5.10_x86: Microtasking libraries (libmtsk) patch
|
||||
</li>
|
||||
<li>
|
||||
141858-06: Sun Studio 12 Update 1_x86: Sun Compiler Common patch for x86 backend
|
||||
</li>
|
||||
<li>
|
||||
128229-09: Sun Studio 12 Update 1_x86: Patch for C++ Compiler
|
||||
</li>
|
||||
<li>
|
||||
142363-05: Sun Studio 12 Update 1_x86: Patch for C Compiler
|
||||
</li>
|
||||
<li>
|
||||
142368-01: Sun Studio 12.1_x86: Patch for Performance Analyzer Tools
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Set
|
||||
<a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>
|
||||
to point to the location of
|
||||
the compiler binaries, and place this location in the <tt>PATH</tt>.
|
||||
<p>
|
||||
The Sun Studio Express compilers at:
|
||||
The Oracle Solaris Studio Express compilers at:
|
||||
<a href="http://developers.sun.com/sunstudio/downloads/express.jsp" target="_blank">
|
||||
Sun Studio Express Download site</a>
|
||||
Oracle Solaris Studio Express Download site</a>
|
||||
are also an option, although these compilers have not
|
||||
been extensively used yet.
|
||||
</blockquote>
|
||||
|
||||
@@ -72,3 +72,19 @@ bcd2fc089227559ac5be927923609fac29f067fa jdk7-b91
|
||||
06dbf406818c789bb586c1de4c002024cd26ecd2 jdk7-b95
|
||||
edc2a2659c77dabc55cb55bb617bad89e3a05bb3 jdk7-b96
|
||||
4ec9d59374caa1e5d72fa802291b4d66955a4936 jdk7-b97
|
||||
3b99409057e4c255da946f9f540d051a5ef4ab23 jdk7-b98
|
||||
95db968660e7d87c345d5cf3dc2e3db037fb7220 jdk7-b99
|
||||
a56d734a1e970e1a21a8f4feb13053e9a33674c7 jdk7-b100
|
||||
86a239832646a74811695428984b6947c0bd6dc8 jdk7-b101
|
||||
78561a95779090b5106c8d0f1a75360a027ef087 jdk7-b102
|
||||
11e7678c3eb169b77d9a9892fe5e3dfa1d1a0d51 jdk7-b103
|
||||
9607213481d400ac477183191cc080e1bef6f475 jdk7-b104
|
||||
6f21b030092fb61244cc8a0aedf8058f7c022b81 jdk7-b105
|
||||
519daea48888196af76a975a3b31258efa860bad jdk7-b106
|
||||
232adb83eae8375439ccff65b6e205ca0da0510d jdk7-b107
|
||||
8d810527b499a67153365db74421a03c12b46f35 jdk7-b108
|
||||
c3dd858e09b20206459d9e7b0ead99d27ab00eab jdk7-b109
|
||||
0e1f80fda2271f53d4bbb59ec3f301dfbcef6a0a jdk7-b110
|
||||
640fa4d4e2ad4c2d7e4815c955026740d8c52b7a jdk7-b111
|
||||
cc67fdc4fee9a5b25caee4e71b51a8ff24ae7d1a jdk7-b112
|
||||
a89a6c5be9d1a754868d3d359cbf7ad36aa95631 jdk7-b113
|
||||
|
||||
@@ -61,7 +61,6 @@ ABS_OUTPUTDIR = $(call FullPath,$(OUTPUTDIR))
|
||||
CLASSES_DIR = $(BUILD_DIR)/classes
|
||||
GENSRC_DIR = $(BUILD_DIR)/gensrc
|
||||
|
||||
BIN_DIR = $(DIST_DIR)/bin
|
||||
LIB_DIR = $(DIST_DIR)/lib
|
||||
|
||||
#-----
|
||||
|
||||
@@ -28,306 +28,10 @@
|
||||
# targeted to Linux. Should not contain any rules.
|
||||
#
|
||||
|
||||
# Warning: the following variables are overriden by Defs.gmk. Set
|
||||
# values will be silently ignored:
|
||||
# CFLAGS (set $(OTHER_CFLAGS) instead)
|
||||
# CPPFLAGS (set $(OTHER_CPPFLAGS) instead)
|
||||
# CXXFLAGS (set $(OTHER_CXXFLAGS) instead)
|
||||
# LDFLAGS (set $(OTHER_LDFAGS) instead)
|
||||
# LDLIBS (set $(EXTRA_LIBS) instead)
|
||||
# LDLIBS_COMMON (set $(EXTRA_LIBS) instead)
|
||||
|
||||
# Get shared JDK settings
|
||||
include $(BUILDDIR)/common/shared/Defs.gmk
|
||||
|
||||
# Part of INCREMENTAL_BUILD mechanism.
|
||||
# Compiler emits things like: path/file.o: file.h
|
||||
# We want something like: relative_path/file.o relative_path/file.d: file.h
|
||||
CC_DEPEND = -MM
|
||||
CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g'
|
||||
|
||||
ifndef PLATFORM_SRC
|
||||
PLATFORM_SRC = $(TOPDIR)/src/solaris
|
||||
endif # PLATFORM_SRC
|
||||
|
||||
# platform specific include files
|
||||
PLATFORM_INCLUDE_NAME = $(PLATFORM)
|
||||
PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME)
|
||||
|
||||
# suffix used for make dependencies files.
|
||||
DEPEND_SUFFIX = d
|
||||
# The suffix applied to the library name for FDLIBM
|
||||
FDDLIBM_SUFFIX = a
|
||||
# The suffix applied to scripts (.bat for windows, nothing for unix)
|
||||
SCRIPT_SUFFIX =
|
||||
# CC compiler object code output directive flag value
|
||||
CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required!
|
||||
CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required!
|
||||
|
||||
#
|
||||
# Default HPI libraries. Build will build only native, unless
|
||||
# overriden at the make command line. This makes it convenient for
|
||||
# people doing, say, a pthreads port -- they can create a posix
|
||||
# directory here, and say "gnumake HPIS=posix" at the top
|
||||
# level.
|
||||
#
|
||||
HPIS = native
|
||||
|
||||
#
|
||||
# Default optimization
|
||||
#
|
||||
CC_HIGHEST_OPT = -O3
|
||||
CC_HIGHER_OPT = -O3
|
||||
CC_LOWER_OPT = -O2
|
||||
CC_NO_OPT =
|
||||
|
||||
ifeq ($(PRODUCT), java)
|
||||
_OPT = $(CC_HIGHER_OPT)
|
||||
else
|
||||
_OPT = $(CC_LOWER_OPT)
|
||||
CPPFLAGS_DBG += -DLOGGING
|
||||
endif
|
||||
|
||||
# For all platforms, do not omit the frame pointer register usage.
|
||||
# We need this frame pointer to make it easy to walk the stacks.
|
||||
# This should be the default on X86, but ia64 and amd64 may not have this
|
||||
# as the default.
|
||||
CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
|
||||
CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
|
||||
CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
|
||||
CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
|
||||
LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9
|
||||
CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9
|
||||
LDFLAGS_COMMON_sparc += -m32 -mcpu=v9
|
||||
ifeq ($(ZERO_BUILD), true)
|
||||
CFLAGS_REQUIRED = $(ZERO_ARCHFLAG)
|
||||
ifeq ($(ZERO_ENDIANNESS), little)
|
||||
CFLAGS_REQUIRED += -D_LITTLE_ENDIAN
|
||||
endif
|
||||
LDFLAGS_COMMON += $(ZERO_ARCHFLAG)
|
||||
else
|
||||
CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH))
|
||||
LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH))
|
||||
endif
|
||||
|
||||
# Add in platform specific optimizations for all opt levels
|
||||
CC_HIGHEST_OPT += $(_OPT_$(ARCH))
|
||||
CC_HIGHER_OPT += $(_OPT_$(ARCH))
|
||||
CC_LOWER_OPT += $(_OPT_$(ARCH))
|
||||
|
||||
# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off
|
||||
ifdef NO_OPTIMIZATIONS
|
||||
CC_HIGHEST_OPT = $(CC_NO_OPT)
|
||||
CC_HIGHER_OPT = $(CC_NO_OPT)
|
||||
CC_LOWER_OPT = $(CC_NO_OPT)
|
||||
endif
|
||||
|
||||
#
|
||||
# Selection of warning messages
|
||||
#
|
||||
GCC_INHIBIT = -Wno-unused -Wno-parentheses
|
||||
GCC_STYLE =
|
||||
GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT)
|
||||
|
||||
#
|
||||
# Treat compiler warnings as errors, if warnings not allowed
|
||||
#
|
||||
ifeq ($(COMPILER_WARNINGS_FATAL),true)
|
||||
GCC_WARNINGS += -Werror
|
||||
endif
|
||||
|
||||
#
|
||||
# Misc compiler options
|
||||
#
|
||||
ifeq ($(ARCH),ppc)
|
||||
CFLAGS_COMMON = -fsigned-char
|
||||
else # ARCH
|
||||
CFLAGS_COMMON = -fno-strict-aliasing
|
||||
endif # ARCH
|
||||
PIC_CODE_LARGE = -fPIC
|
||||
PIC_CODE_SMALL = -fpic
|
||||
GLOBAL_KPIC = $(PIC_CODE_LARGE)
|
||||
ifeq ($(ARCH), amd64)
|
||||
CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -pipe
|
||||
else
|
||||
CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS)
|
||||
endif
|
||||
|
||||
# Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1
|
||||
DEBUG_FLAG = -g
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
ifeq ($(ARCH_DATA_MODEL), 64)
|
||||
DEBUG_FLAG = -g1
|
||||
endif
|
||||
endif
|
||||
|
||||
CFLAGS_OPT = $(POPT)
|
||||
CFLAGS_DBG = $(DEBUG_FLAG)
|
||||
CFLAGS_COMMON += $(CFLAGS_REQUIRED)
|
||||
|
||||
CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS)
|
||||
CXXFLAGS_OPT = $(POPT)
|
||||
CXXFLAGS_DBG = $(DEBUG_FLAG)
|
||||
CXXFLAGS_COMMON += $(CFLAGS_REQUIRED)
|
||||
|
||||
# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CFLAGS_DBG += $(CC_LOWER_OPT)
|
||||
CXXFLAGS_DBG += $(CC_LOWER_OPT)
|
||||
endif
|
||||
|
||||
CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"'
|
||||
|
||||
# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here)
|
||||
ifneq ($(ARCH),alpha)
|
||||
CPP_ARCH_FLAGS += -D$(ARCH)
|
||||
else
|
||||
CPP_ARCH_FLAGS += -D_$(ARCH)_
|
||||
endif
|
||||
|
||||
CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \
|
||||
-D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT
|
||||
|
||||
ifeq ($(ARCH_DATA_MODEL), 64)
|
||||
CPPFLAGS_COMMON += -D_LP64=1
|
||||
endif
|
||||
|
||||
CPPFLAGS_OPT =
|
||||
CPPFLAGS_DBG = -DDEBUG
|
||||
|
||||
ifdef LIBRARY
|
||||
# Libraries need to locate other libraries at runtime, and you can tell
|
||||
# a library where to look by way of the dynamic runpaths (RPATH or RUNPATH)
|
||||
# buried inside the .so. The $ORIGIN says to look relative to where
|
||||
# the library itself is and it can be followed with relative paths from
|
||||
# that. By default we always look in $ORIGIN, optionally we add relative
|
||||
# paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths.
|
||||
# On Linux we add a flag -z origin, not sure if this is necessary, but
|
||||
# doesn't seem to hurt.
|
||||
# The environment variable LD_LIBRARY_PATH will over-ride these runpaths.
|
||||
# Try: 'readelf -d lib*.so' to see these settings in a library.
|
||||
#
|
||||
LDFLAGS_COMMON += -Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN
|
||||
LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN/%)
|
||||
endif
|
||||
|
||||
EXTRA_LIBS += -lc
|
||||
|
||||
LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs
|
||||
LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION)
|
||||
|
||||
#
|
||||
# -L paths for finding and -ljava
|
||||
#
|
||||
LDFLAGS_OPT = -Xlinker -O1
|
||||
LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH)
|
||||
LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX)
|
||||
|
||||
#
|
||||
# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always
|
||||
# statically link libgcc but will print a warning with the flag. We don't
|
||||
# want the warning, so check gcc version first.
|
||||
#
|
||||
CC_VER_MAJOR := $(shell $(CC) -dumpversion | $(SED) 's/egcs-//' | $(CUT) -d'.' -f1)
|
||||
ifeq ("$(CC_VER_MAJOR)", "3")
|
||||
OTHER_LDFLAGS += -static-libgcc
|
||||
endif
|
||||
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
# (See Rules.gmk) The gcc 5 compiler might have an option for this?
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
|
||||
#
|
||||
# Post Processing of libraries/executables
|
||||
#
|
||||
ifeq ($(VARIANT), OPT)
|
||||
ifneq ($(NO_STRIP), true)
|
||||
# Debug 'strip -g' leaves local function Elf symbols (better stack traces)
|
||||
POST_STRIP_PROCESS = $(STRIP) -g
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o
|
||||
#
|
||||
LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker
|
||||
|
||||
#
|
||||
# Support for Quantify.
|
||||
#
|
||||
ifdef QUANTIFY
|
||||
QUANTIFY_CMD = quantify
|
||||
QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes
|
||||
LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS)
|
||||
endif
|
||||
|
||||
#
|
||||
# Path and option to link against the VM, if you have to. Note that
|
||||
# there are libraries that link against only -ljava, but they do get
|
||||
# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas
|
||||
# the library itself should not.
|
||||
#
|
||||
VM_NAME = server
|
||||
JVMLIB = -L$(BOOTDIR)/jre/lib/$(LIBARCH)/$(VM_NAME) -ljvm
|
||||
JAVALIB = -L$(BOOTDIR)/jre/lib/$(LIBARCH) -ljava $(JVMLIB)
|
||||
|
||||
#
|
||||
# We want to privatize JVM symbols on Solaris. This is so the user can
|
||||
# write a function called FindClass and this should not override the
|
||||
# FindClass that is inside the JVM. At this point in time we are not
|
||||
# concerned with other JNI libraries because we hope that there will
|
||||
# not be as many clashes there.
|
||||
#
|
||||
PRIVATIZE_JVM_SYMBOLS = false
|
||||
|
||||
USE_PTHREADS = true
|
||||
override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME
|
||||
override AWT_RUNPATH =
|
||||
override HAVE_ALTZONE = false
|
||||
override HAVE_FILIOH = false
|
||||
override HAVE_GETHRTIME = false
|
||||
override HAVE_GETHRVTIME = false
|
||||
override HAVE_SIGIGNORE = true
|
||||
override LEX_LIBRARY = -lfl
|
||||
ifeq ($(STATIC_CXX),true)
|
||||
override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic
|
||||
else
|
||||
override LIBCXX = -lstdc++
|
||||
endif
|
||||
override LIBPOSIX4 =
|
||||
override LIBSOCKET =
|
||||
override LIBTHREAD =
|
||||
override MOOT_PRIORITIES = true
|
||||
override NO_INTERRUPTIBLE_IO = true
|
||||
override OPENWIN_HOME = /usr/X11R6
|
||||
ifeq ($(ARCH), amd64)
|
||||
override OPENWIN_LIB = $(OPENWIN_HOME)/lib64
|
||||
else
|
||||
override OPENWIN_LIB = $(OPENWIN_HOME)/lib
|
||||
endif
|
||||
override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER
|
||||
override SUN_CMM_SUBDIR =
|
||||
override THREADS_FLAG = native
|
||||
override USE_GNU_M4 = true
|
||||
override USING_GNU_TAR = true
|
||||
override WRITE_LIBVERSION = false
|
||||
|
||||
# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the
|
||||
# resulting resolved absolute name of the executable in the environment
|
||||
# variable EXECNAME. That executable name is then used that to locate the
|
||||
# installation area.
|
||||
override USE_EXECNAME = true
|
||||
|
||||
# If your platform has DPS, it will have Type1 fonts too, in which case
|
||||
# it is best to enable DPS support until such time as 2D's rasteriser
|
||||
# can fully handle Type1 fonts in all cases. Default is "yes".
|
||||
# HAVE_DPS should only be "no" if the platform has no DPS headers or libs
|
||||
# DPS (Displayable PostScript) is available on Solaris machines
|
||||
HAVE_DPS = no
|
||||
|
||||
#
|
||||
# Japanese manpages
|
||||
#
|
||||
JA_SOURCE_ENCODING = eucJP
|
||||
JA_TARGET_ENCODINGS = eucJP
|
||||
|
||||
|
||||
@@ -28,16 +28,6 @@
|
||||
# targeted to Solaris. Should not contain any rules.
|
||||
#
|
||||
|
||||
# Warning: the following variables are overridden by Defs.gmk. Set
|
||||
# values will be silently ignored:
|
||||
# CFLAGS (set $(OTHER_CFLAGS) instead)
|
||||
# CPPFLAGS (set $(OTHER_CPPFLAGS) instead)
|
||||
# CXXFLAGS (set $(OTHER_CXXFLAGS) instead)
|
||||
# LDFLAGS (set $(OTHER_LDFAGS) instead)
|
||||
# LDLIBS (set $(EXTRA_LIBS) instead)
|
||||
# LDLIBS_COMMON (set $(EXTRA_LIBS) instead)
|
||||
# LINTFLAGS (set $(OTHER_LINTFLAGS) instead)
|
||||
|
||||
# Get shared JDK settings
|
||||
include $(BUILDDIR)/common/shared/Defs.gmk
|
||||
|
||||
@@ -45,600 +35,3 @@ ifndef PLATFORM_SRC
|
||||
PLATFORM_SRC = $(TOPDIR)/src/solaris
|
||||
endif # PLATFORM_SRC
|
||||
|
||||
# platform specific include files
|
||||
PLATFORM_INCLUDE_NAME = $(PLATFORM)
|
||||
PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME)
|
||||
|
||||
# suffix used for make dependencies files
|
||||
DEPEND_SUFFIX = d
|
||||
# suffix used for lint files
|
||||
LINT_SUFFIX = ln
|
||||
# The suffix applied to the library name for FDLIBM
|
||||
FDDLIBM_SUFFIX = a
|
||||
# The suffix applied to scripts (.bat for windows, nothing for unix)
|
||||
SCRIPT_SUFFIX =
|
||||
# CC compiler object code output directive flag value
|
||||
CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required!
|
||||
CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required!
|
||||
|
||||
#
|
||||
# Default HPI libraries. Build will build only native unless
|
||||
# overriden at the make command line. This makes it convenient for
|
||||
# people doing, say, a pthreads port -- they can create a posix
|
||||
# directory here, and say "gnumake HPIS=posix" at the top
|
||||
# level.
|
||||
#
|
||||
HPIS = native
|
||||
|
||||
#
|
||||
# Java default optimization (-x04/-O2) etc. Applies to the VM.
|
||||
#
|
||||
ifeq ($(PRODUCT), java)
|
||||
_OPT = $(CC_HIGHER_OPT)
|
||||
else
|
||||
_OPT = $(CC_LOWER_OPT)
|
||||
CPPFLAGS_DBG += -DLOGGING -DDBINFO
|
||||
endif
|
||||
|
||||
#
|
||||
# If -Xa is in CFLAGS_COMMON it will end up ahead of $(POPT) for the
|
||||
# optimized build, and that ordering of the flags completely freaks
|
||||
# out cc. Hence, -Xa is instead in each CFLAGS variant.
|
||||
#
|
||||
# The more unusual options to the Sun C compiler:
|
||||
# -v Stricter type checking, more error checking
|
||||
# (To turn ALL warnings into fatals, use -errwarn=%all)
|
||||
# -xstrconst Place string literals and constants in read-only area
|
||||
# (means you can't write on your string literals)
|
||||
# -xs Force debug information (stabs) into the .so or a.out
|
||||
# (makes the library/executable debuggable without the
|
||||
# .o files needing to be around, but at a space cost)
|
||||
# -g & -O If you add the -g option to the optimized compiles
|
||||
# you will get better stack retraces, the code is
|
||||
# still optimized. This includes a space cost too.
|
||||
# -xc99=%none Do NOT allow for c99 extensions to be used.
|
||||
# e.g. declarations must precede statements
|
||||
# -xCC Allow the C++ style of comments in C: //
|
||||
# Required with many of the source files.
|
||||
# -mt Assume multi-threaded (important)
|
||||
#
|
||||
|
||||
#
|
||||
# Debug flag for C and C++ compiler
|
||||
#
|
||||
CFLAGS_DEBUG_OPTION=-g
|
||||
CXXFLAGS_DEBUG_OPTION=-g
|
||||
|
||||
# Turn off -g if we are doing tcov build
|
||||
ifdef TCOV_BUILD
|
||||
CFLAGS_DEBUG_OPTION=
|
||||
CXXFLAGS_DEBUG_OPTION=
|
||||
endif
|
||||
|
||||
# FASTDEBUG: Optimize the -g builds, gives us a faster debug java
|
||||
# If true adds -O to the debug compiles. This allows for any assert
|
||||
# tests to remain and debug checking. The resulting code is faster
|
||||
# but less debuggable. Stack traces are still valid, although only
|
||||
# approximate line numbers are given. Printing of local variables
|
||||
# during a debugging session is not possible, but stepping and
|
||||
# printing of global or static variables should be possible.
|
||||
# Performance/size of files should be about the same, maybe smaller.
|
||||
#
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CC_FASTDEBUG_OPT = $(CC_LOWER_OPT)
|
||||
CFLAGS_DEBUG_OPTION = -g $(CC_FASTDEBUG_OPT)
|
||||
CXXFLAGS_DEBUG_OPTION = -g0 $(CC_FASTDEBUG_OPT)
|
||||
endif
|
||||
|
||||
CFLAGS_COMMON = -v -mt -L$(OBJDIR) -xc99=%none
|
||||
CFLAGS_COMMON += -xCC
|
||||
CFLAGS_COMMON += -errshort=tags
|
||||
CFLAGS_OPT = $(POPT)
|
||||
CFLAGS_DBG = $(CFLAGS_DEBUG_OPTION)
|
||||
CFLAGS_COMMON += -Xa $(CFLAGS_REQUIRED)
|
||||
|
||||
# Assume MT behavior all the time (important)
|
||||
CXXFLAGS_COMMON = -mt
|
||||
|
||||
# Assume no C++ exceptions are used
|
||||
CXXFLAGS_COMMON += -features=no%except -DCC_NOEX
|
||||
|
||||
# For C++, these options tell it to assume nothing about locating libraries
|
||||
# either at compile time, or at runtime. Use of these options will likely
|
||||
# require the use of -L and -R options to indicate where libraries will
|
||||
# be found at compile time (-L) and at runtime (-R).
|
||||
# The /usr/lib location comes for free, so no need to specify that one.
|
||||
# Note: C is much simplier and there is no need for these options. This
|
||||
# is mostly needed to avoid dependencies on libraries in the
|
||||
# Compiler install area, also see LIBCXX and LIBM.
|
||||
CXXFLAGS_COMMON += -norunpath -xnolib
|
||||
|
||||
#
|
||||
# Treat compiler warnings as errors, if requested
|
||||
#
|
||||
ifeq ($(COMPILER_WARNINGS_FATAL),true)
|
||||
CFLAGS_COMMON += -errwarn=%all
|
||||
CXXFLAGS_COMMON += -errwarn=%all
|
||||
endif
|
||||
|
||||
CXXFLAGS_OPT = $(POPT)
|
||||
CXXFLAGS_DBG = $(CXXFLAGS_DEBUG_OPTION)
|
||||
CXXFLAGS_COMMON += $(CFLAGS_REQUIRED)
|
||||
|
||||
# Add -xstrconst to the library compiles. This forces all string
|
||||
# literals into the read-only data section, which prevents them from
|
||||
# being written to and increases the runtime pages shared on the system.
|
||||
#
|
||||
ifdef LIBRARY
|
||||
CFLAGS_COMMON +=-xstrconst
|
||||
endif
|
||||
|
||||
# Source browser database
|
||||
#
|
||||
# COMPILE_WITH_SB
|
||||
# If defined adds -xsb to compiles and creates a
|
||||
# source browsing database during compilation.
|
||||
#
|
||||
ifdef COMPILE_WITH_SB
|
||||
ifeq ($(LIBRARY), java)
|
||||
CFLAGS_DBG += -xsb
|
||||
endif
|
||||
endif
|
||||
|
||||
# Lint Flags:
|
||||
# -Xa ANSI C plus K&R, favor ANSI rules
|
||||
# -Xarch=XXX Same as 'cc -xarch=XXX'
|
||||
# -fd report on old style func defs
|
||||
# -errchk=structarg report on 64bit struct args by value
|
||||
# -errchk=longptr64 report on 64bit to 32bit issues (ignores casts)
|
||||
# -errchk=parentheses report on suggested use of extra parens
|
||||
# -v suppress unused args
|
||||
# -x suppress unused externs
|
||||
# -u suppress extern func/vars used/defined
|
||||
# -errfmt=simple use one line errors with position info
|
||||
|
||||
LINTFLAGS_COMMON = -Xa
|
||||
LINTFLAGS_COMMON += -fd
|
||||
LINTFLAGS_COMMON += -errchk=structarg,longptr64,parentheses
|
||||
LINTFLAGS_COMMON += -v
|
||||
LINTFLAGS_COMMON += -x
|
||||
LINTFLAGS_COMMON += -u
|
||||
LINTFLAGS_COMMON += -errfmt=simple
|
||||
LINTFLAGS_OPT =
|
||||
LINTFLAGS_DBG =
|
||||
|
||||
# The -W0,-noglobal tells the compiler to NOT generate mangled global
|
||||
# ELF data symbols for file local static data.
|
||||
# This can break fix&continue, but we'd rather do the same compilations
|
||||
# for deliverable bits as we do for non-deliverable bits
|
||||
# Tell the compilers to never generate globalized names, all the time.
|
||||
CFLAGS_COMMON += -W0,-noglobal
|
||||
|
||||
# Arch specific settings (determines type of .o files and instruction set)
|
||||
ifeq ($(ARCH_FAMILY), sparc)
|
||||
ifdef VIS_NEEDED
|
||||
XARCH_VALUE/32=v8plusa
|
||||
XARCH_VALUE/64=v9a
|
||||
else
|
||||
# Someday this should change to improve optimization on UltraSPARC
|
||||
# and abandon the old v8-only machines like the SPARCstation 10.
|
||||
# Indications with Mustang is that alacrity runs do not show a
|
||||
# big improvement using v8plus over v8, but other benchmarks might.
|
||||
XARCH_VALUE/32=v8
|
||||
XARCH_VALUE/64=v9
|
||||
endif
|
||||
endif
|
||||
ifeq ($(ARCH_FAMILY), i586)
|
||||
XARCH_VALUE/64=amd64
|
||||
XARCH_VALUE/32=
|
||||
endif
|
||||
|
||||
# Arch value based on current data model being built
|
||||
XARCH_VALUE=$(XARCH_VALUE/$(ARCH_DATA_MODEL))
|
||||
ifneq ($(XARCH_VALUE), )
|
||||
# The actual compiler -xarch options to use
|
||||
XARCH_OPTION/32 = -xarch=$(XARCH_VALUE/32)
|
||||
XARCH_OPTION/64 = -xarch=$(XARCH_VALUE/64)
|
||||
XARCH_OPTION = $(XARCH_OPTION/$(ARCH_DATA_MODEL))
|
||||
endif
|
||||
|
||||
# If we have a specific -xarch value to use, add it
|
||||
ifdef XARCH_OPTION
|
||||
CFLAGS_COMMON += $(XARCH_OPTION)
|
||||
CXXFLAGS_COMMON += $(XARCH_OPTION)
|
||||
ASFLAGS_COMMON += $(XARCH_OPTION)
|
||||
EXTRA_LIBS += $(XARCH_OPTION)
|
||||
LINTFLAGS_COMMON += -Xarch=$(XARCH_VALUE)
|
||||
endif
|
||||
|
||||
#
|
||||
# uncomment the following to build with PERTURBALOT set
|
||||
#
|
||||
# OTHER_CFLAGS += -DPERTURBALOT
|
||||
#
|
||||
|
||||
CPPFLAGS_COMMON = -D$(ARCH_FAMILY) -D__solaris__ -D_REENTRANT
|
||||
CPPFLAGS_OPT =
|
||||
CPPFLAGS_DBG = -DDEBUG
|
||||
|
||||
ifeq ($(ARCH_FAMILY), i586)
|
||||
# The macro _LITTLE_ENDIAN needs to be defined the same to avoid the
|
||||
# Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN
|
||||
# (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h).
|
||||
# Note: -Dmacro is the same as #define macro 1
|
||||
# -Dmacro= is the same as #define macro
|
||||
#
|
||||
CPPFLAGS_COMMON += -DcpuIntel -D_LITTLE_ENDIAN= -D$(LIBARCH)
|
||||
# Turn off a superfluous compiler error message on Intel
|
||||
CFLAGS_COMMON += -erroff=E_BAD_PRAGMA_PACK_VALUE
|
||||
endif
|
||||
|
||||
# Java memory management is based on memory mapping by default, but a
|
||||
# system only assuming malloc/free can be built by adding -DUSE_MALLOC
|
||||
|
||||
CPPFLAGS_COMMON += -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS
|
||||
CPPFLAGS_OPT += -DTRIMMED
|
||||
|
||||
LDFLAGS_DEFS_OPTION = -z defs
|
||||
LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION)
|
||||
|
||||
#
|
||||
# -L paths for finding and -ljava
|
||||
#
|
||||
LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH)
|
||||
LDFLAGS_OPT =
|
||||
LDFLAGS_DBG =
|
||||
|
||||
#
|
||||
# We never really want the incremental linker, ever
|
||||
# The -xildoff option tells Sun's compilers to NOT use incremental linker
|
||||
#
|
||||
LDFLAGS_COMMON += -xildoff
|
||||
|
||||
ifdef LIBRARY
|
||||
# Libraries need to locate other libraries at runtime, and you can tell
|
||||
# a library where to look by way of the dynamic runpaths (RPATH or RUNPATH)
|
||||
# buried inside the .so. The $ORIGIN says to look relative to where
|
||||
# the library itself is and it can be followed with relative paths from
|
||||
# that. By default we always look in $ORIGIN, optionally we add relative
|
||||
# paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths.
|
||||
# The environment variable LD_LIBRARY_PATH will over-ride these runpaths.
|
||||
# Try: 'dump -Lv lib*.so' to see these settings in a library.
|
||||
#
|
||||
LDFLAGS_COMMON += -R\$$ORIGIN
|
||||
LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-R\$$ORIGIN/%)
|
||||
endif
|
||||
|
||||
EXTRA_LIBS += -lc
|
||||
|
||||
# Postprocessing is done on the images directories only
|
||||
#
|
||||
ifeq ($(VARIANT), OPT)
|
||||
ifeq ($(PARTIAL_GPROF), true)
|
||||
NO_STRIP = true
|
||||
endif
|
||||
ifeq ($(GPROF), true)
|
||||
NO_STRIP = true
|
||||
endif
|
||||
ifneq ($(NO_STRIP), true)
|
||||
# Debug 'strip -x' leaves local function Elf symbols (better stack traces)
|
||||
POST_STRIP_PROCESS = $(STRIP) -x
|
||||
endif
|
||||
endif
|
||||
POST_MCS_PROCESS=$(MCS) -d -a "JDK $(FULL_VERSION)"
|
||||
|
||||
#
|
||||
# Sun C compiler will take -M and pass it on to ld.
|
||||
# Usage: ld $(LD_MAPFILE_FLAG) mapfile *.o
|
||||
#
|
||||
ifeq ($(CC_VERSION),gcc)
|
||||
LD_MAPFILE_FLAG = -Xlinker -M -Xlinker
|
||||
else
|
||||
LD_MAPFILE_FLAG = -M
|
||||
endif
|
||||
|
||||
#
|
||||
# Variables globally settable from the make command line (default
|
||||
# values in brackets):
|
||||
# GPROF (false)
|
||||
# Eg: % gnumake GPROF=true
|
||||
GPROF = false
|
||||
ifeq ($(GPROF), true)
|
||||
CFLAGS_COMMON += -DGPROF -xpg
|
||||
EXTRA_LIBS += -xpg
|
||||
endif
|
||||
|
||||
# PARTIAL_GPROF is to be used ONLY during compilation - it should not
|
||||
# appear during linking of libraries or programs. It also should
|
||||
# prevent linking with -z defs to allow a symbol to remain undefined.
|
||||
#
|
||||
PARTIAL_GPROF = false
|
||||
ifeq ($(PARTIAL_GPROF), true)
|
||||
CFLAGS_GPROF += -xpg
|
||||
LDFLAGS_DEFS_OPTION = -z nodefs
|
||||
endif
|
||||
|
||||
#
|
||||
# For a TCOV build we add in the TCOV_OPTION
|
||||
#
|
||||
ifdef TCOV_BUILD
|
||||
TCOV_OPTION = -xprofile=tcov
|
||||
LDFLAGS_COMMON += $(TCOV_OPTION) -Kpic
|
||||
CFLAGS_COMMON += $(TCOV_OPTION)
|
||||
CXXFLAGS_COMMON += $(TCOV_OPTION)
|
||||
EXTRA_LIBS += $(TCOV_OPTION)
|
||||
LDNOMAP=true
|
||||
endif
|
||||
|
||||
#
|
||||
# Solaris only uses native threads.
|
||||
#
|
||||
THREADS_FLAG= native
|
||||
THREADS_DIR= threads
|
||||
|
||||
#
|
||||
# Support for Quantify.
|
||||
#
|
||||
ifdef QUANTIFY
|
||||
QUANTIFY_CMD = quantify
|
||||
QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes
|
||||
LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS)
|
||||
ifdef LIBRARY
|
||||
CFLAGS_COMMON += -K PIC
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Support for Purify.
|
||||
#
|
||||
ifdef PURIFY
|
||||
PURIFY_CMD = /net/suntools.eng/export/tools/sparc/bin/purify
|
||||
PURIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes
|
||||
LINK_PRE_CMD = $(PURIFY_CMD) $(PURIFY_OPTIONS)
|
||||
ifdef LIBRARY
|
||||
CFLAGS_COMMON += -K PIC
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Different "levels" of optimization.
|
||||
#
|
||||
ifeq ($(CC_VERSION),gcc)
|
||||
CC_HIGHEST_OPT = -O3
|
||||
CC_HIGHER_OPT = -O3
|
||||
CC_LOWER_OPT = -O2
|
||||
CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer
|
||||
CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
# (See Rules.gmk) May need to wait for gcc 5?
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
else
|
||||
# Highest could be -xO5, but indications are that -xO5 should be reserved
|
||||
# for a per-file use, on sources with known performance impacts.
|
||||
CC_HIGHEST_OPT = -xO4
|
||||
CC_HIGHER_OPT = -xO4
|
||||
CC_LOWER_OPT = -xO2
|
||||
#
|
||||
# WARNING: Use of _OPT=$(CC_HIGHEST_OPT) in your Makefile needs to be
|
||||
# done with care, there are some assumptions below that need to
|
||||
# be understood about the use of pointers, and IEEE behavior.
|
||||
#
|
||||
# Use non-standard floating point mode (not IEEE 754)
|
||||
CC_HIGHEST_OPT += -fns
|
||||
# Do some simplification of floating point arithmetic (not IEEE 754)
|
||||
CC_HIGHEST_OPT += -fsimple
|
||||
# Use single precision floating point with 'float'
|
||||
CC_HIGHEST_OPT += -fsingle
|
||||
# Assume memory references via basic pointer types do not alias
|
||||
# (Source with excessing pointer casting and data access with mixed
|
||||
# pointer types are not recommended)
|
||||
CC_HIGHEST_OPT += -xalias_level=basic
|
||||
# Use intrinsic or inline versions for math/std functions
|
||||
# (If you expect perfect errno behavior, do not use this)
|
||||
CC_HIGHEST_OPT += -xbuiltin=%all
|
||||
# Loop data dependency optimizations (need -xO3 or higher)
|
||||
CC_HIGHEST_OPT += -xdepend
|
||||
# Pointer parameters to functions do not overlap
|
||||
# (Similar to -xalias_level=basic usage, but less obvious sometimes.
|
||||
# If you pass in multiple pointers to the same data, do not use this)
|
||||
CC_HIGHEST_OPT += -xrestrict
|
||||
# Inline some library routines
|
||||
# (If you expect perfect errno behavior, do not use this)
|
||||
CC_HIGHEST_OPT += -xlibmil
|
||||
# Use optimized math routines
|
||||
# (If you expect perfect errno behavior, do not use this)
|
||||
# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now
|
||||
# CC_HIGHEST_OPT += -xlibmopt
|
||||
ifeq ($(ARCH_FAMILY), sparc)
|
||||
# Assume at most 8byte alignment, raise SIGBUS on error
|
||||
### Presents an ABI issue with customer JNI libs?
|
||||
####CC_HIGHEST_OPT += -xmemalign=8s
|
||||
# Automatic prefetch instructions, explicit prefetch macros
|
||||
CC_HIGHEST_OPT += -xprefetch=auto,explicit
|
||||
# Pick ultra as the chip to optimize to
|
||||
CC_HIGHEST_OPT += -xchip=ultra
|
||||
endif
|
||||
ifeq ($(ARCH), i586)
|
||||
# Pick pentium as the chip to optimize to
|
||||
CC_HIGHEST_OPT += -xchip=pentium
|
||||
endif
|
||||
ifdef LIBRARY
|
||||
# The Solaris CBE (Common Build Environment) requires that the use
|
||||
# of appl registers be disabled when compiling a public library (or
|
||||
# a library that's loaded by a public library) on sparc.
|
||||
CFLAGS_REQUIRED_sparc += -xregs=no%appl
|
||||
CFLAGS_REQUIRED_sparcv9 += -xregs=no%appl
|
||||
endif
|
||||
ifeq ($(shell $(EXPR) $(CC_VER) \> 5.6), 1)
|
||||
# Do NOT use the frame pointer register as a general purpose opt register
|
||||
CFLAGS_REQUIRED_i586 += -xregs=no%frameptr
|
||||
CFLAGS_REQUIRED_amd64 += -xregs=no%frameptr
|
||||
# We MUST allow data alignment of 4 for sparc V8 (32bit)
|
||||
# Presents an ABI issue with customer JNI libs? We must be able to
|
||||
# to handle 4byte aligned objects? (rare occurance, but possible?)
|
||||
CFLAGS_REQUIRED_sparc += -xmemalign=4s
|
||||
endif
|
||||
# Just incase someone trys to use the SOS9 compilers
|
||||
ifeq ($(CC_VER), 5.6)
|
||||
# We MUST allow data alignment of 4 for sparc (sparcv9 is ok at 8s)
|
||||
CFLAGS_REQUIRED_sparc += -xmemalign=4s
|
||||
endif
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
# (See Rules.gmk) The SS11 -xpch=auto* options appear to be broken.
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
endif
|
||||
CC_NO_OPT =
|
||||
|
||||
# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off
|
||||
ifdef NO_OPTIMIZATIONS
|
||||
CC_HIGHEST_OPT = $(CC_NO_OPT)
|
||||
CC_HIGHER_OPT = $(CC_NO_OPT)
|
||||
CC_LOWER_OPT = $(CC_NO_OPT)
|
||||
endif
|
||||
|
||||
# Flags required all the time
|
||||
CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH))
|
||||
|
||||
# Add processor specific options for optimizations
|
||||
CC_HIGHEST_OPT += $(_OPT_$(ARCH))
|
||||
CC_HIGHER_OPT += $(_OPT_$(ARCH))
|
||||
CC_LOWER_OPT += $(_OPT_$(ARCH))
|
||||
|
||||
# Secret compiler optimization options that should be in the above macros
|
||||
# but since they differ in format from C to C++, are added into the C or
|
||||
# C++ specific macros for compiler flags.
|
||||
#
|
||||
# On i586 we need to tell the code generator to ALWAYS use a
|
||||
# frame pointer.
|
||||
ifeq ($(ARCH_FAMILY), i586)
|
||||
# Note that in 5.7, this is done with -xregs=no%frameptr
|
||||
ifeq ($(CC_VER), 5.5)
|
||||
# It's not exactly clear when this optimization kicks in, the
|
||||
# current assumption is -xO4 or greater and for C++ with
|
||||
# the -features=no%except option and -xO4 and greater.
|
||||
# Bottom line is, we ALWAYS want a frame pointer!
|
||||
CXXFLAGS_OPT += -Qoption ube -Z~B
|
||||
CFLAGS_OPT += -Wu,-Z~B
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CXXFLAGS_DBG += -Qoption ube -Z~B
|
||||
CFLAGS_DBG += -Wu,-Z~B
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
#
|
||||
# Optimizer for sparc needs to be told not to do certain things
|
||||
# related to frames or save instructions.
|
||||
ifeq ($(ARCH_FAMILY), sparc)
|
||||
# NOTE: Someday the compilers will provide a high-level option for this.
|
||||
# Use save instructions instead of add instructions
|
||||
# This was an optimization starting in SC5.0 that made it hard for us to
|
||||
# find the "save" instruction (which got turned into an "add")
|
||||
CXXFLAGS_OPT += -Qoption cg -Qrm-s
|
||||
CFLAGS_OPT += -Wc,-Qrm-s
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CXXFLAGS_DBG += -Qoption cg -Qrm-s
|
||||
CFLAGS_DBG += -Wc,-Qrm-s
|
||||
endif
|
||||
#
|
||||
# NOTE: Someday the compilers will provide a high-level option for this.
|
||||
# Don't allow tail call code optimization. Started in SC5.0.
|
||||
# We don't like code of this form:
|
||||
# save
|
||||
# <code>
|
||||
# call foo
|
||||
# restore
|
||||
# because we can't tell if the method will have a stack frame
|
||||
# and register windows or not.
|
||||
CXXFLAGS_OPT += -Qoption cg -Qiselect-T0
|
||||
CFLAGS_OPT += -Wc,-Qiselect-T0
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CXXFLAGS_DBG += -Qoption cg -Qiselect-T0
|
||||
CFLAGS_DBG += -Wc,-Qiselect-T0
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Path and option to link against the VM, if you have to. Note that
|
||||
# there are libraries that link against only -ljava, but they do get
|
||||
# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas
|
||||
# the library itself should not.
|
||||
#
|
||||
VM_NAME = server
|
||||
JVMLIB = -L$(BOOTDIR)/jre/lib/$(LIBARCH)/server -ljvm
|
||||
JAVALIB =
|
||||
|
||||
# Part of INCREMENTAL_BUILD mechanism.
|
||||
# Compiler emits things like: path/file.o: file.h
|
||||
# We want something like: relative_path/file.o relative_path/file.d: file.h
|
||||
# In addition on Solaris, any include file starting with / is deleted,
|
||||
# this gets rid of things like /usr/include files, which never change.
|
||||
CC_DEPEND = -xM1
|
||||
CC_DEPEND_FILTER = $(SED) -e '/:[ ]*[/]/d' -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' | $(SORT) -u
|
||||
|
||||
# Location of openwin libraries (do we really need this anymore?)
|
||||
OPENWIN_HOME = /usr/openwin
|
||||
OPENWIN_LIB = $(OPENWIN_HOME)/lib$(ISA_DIR)
|
||||
|
||||
# Runtime graphics library search paths...
|
||||
OPENWIN_RUNTIME_LIB = /usr/openwin/lib$(ISA_DIR)
|
||||
AWT_RUNPATH = -R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_RUNTIME_LIB)
|
||||
|
||||
# C++ Runtime library (libCrun.so), use instead of -lCrun.
|
||||
# Originally used instead of -lCrun to guarantee use of the system
|
||||
# .so version and not the .a or .so that came with the compilers.
|
||||
# With the newer compilers this could probably change back to -lCrun but
|
||||
# in general this is ok to continue to do.
|
||||
LIBCXX = /usr/lib$(ISA_DIR)/libCrun.so.1
|
||||
|
||||
# Math Library (libm.so), do not use -lm.
|
||||
# There might be two versions of libm.so on the build system:
|
||||
# libm.so.1 and libm.so.2, and we want libm.so.1.
|
||||
# Depending on the Solaris release being used to build with,
|
||||
# /usr/lib/libm.so could point at a libm.so.2, so we are
|
||||
# explicit here so that the libjvm.so you have built will work on an
|
||||
# older Solaris release that might not have libm.so.2.
|
||||
# This is a critical factor in allowing builds on Solaris 10 or newer
|
||||
# to run on Solaris 8 or 9.
|
||||
#
|
||||
# Note: Historically there was also a problem picking up a static version
|
||||
# of libm.a from the compiler area, but that problem has gone away
|
||||
# with the newer compilers. Use of libm.a would cause .so bloat.
|
||||
#
|
||||
LIBM = /usr/lib$(ISA_DIR)/libm.so.1
|
||||
|
||||
# Socket library
|
||||
LIBSOCKET = -lsocket
|
||||
|
||||
# GLOBAL_KPIC: If set means all libraries are PIC, position independent code
|
||||
# EXCEPT for select compiles
|
||||
# If a .o file is compiled non-PIC then it should be forced
|
||||
# into the RW data segment with a mapfile option. This is done
|
||||
# with object files which generated from .s files.
|
||||
# The -ztext enforces that no relocations remain in the text segment
|
||||
# so that it remains purely read-only for optimum system performance.
|
||||
# Some libraries may use a smaller size (13bit -Kpic) on sparc instead of
|
||||
# (32 bit -KPIC) and will override GLOBAL_KPIC appropriately.
|
||||
#
|
||||
PIC_CODE_LARGE = -KPIC
|
||||
PIC_CODE_SMALL = -Kpic
|
||||
ifndef TCOV_BUILD
|
||||
GLOBAL_KPIC = $(PIC_CODE_LARGE)
|
||||
CXXFLAGS_COMMON += $(GLOBAL_KPIC)
|
||||
CFLAGS_COMMON += $(GLOBAL_KPIC)
|
||||
LDFLAGS_COMMON += -ztext
|
||||
endif # TCOV_BUILD
|
||||
|
||||
# If your platform has DPS, it will have Type1 fonts too, in which case
|
||||
# it is best to enable DPS support until such time as 2D's rasteriser
|
||||
# can fully handle Type1 fonts in all cases. Default is "yes".
|
||||
# HAVE_DPS should only be "no" if the platform has no DPS headers or libs
|
||||
# DPS (Displayable PostScript) is available on Solaris machines
|
||||
|
||||
HAVE_DPS = yes
|
||||
|
||||
#
|
||||
# Japanese manpages
|
||||
#
|
||||
JA_SOURCE_ENCODING = eucJP
|
||||
JA_TARGET_ENCODINGS = eucJP UTF-8 PCK
|
||||
|
||||
|
||||
@@ -31,363 +31,7 @@
|
||||
# Get shared JDK settings
|
||||
include $(BUILDDIR)/common/shared/Defs.gmk
|
||||
|
||||
# CC compiler object code output directive flag value
|
||||
CC_OBJECT_OUTPUT_FLAG = -Fo
|
||||
CC_PROGRAM_OUTPUT_FLAG = -Fe
|
||||
|
||||
# The suffix applied to the library name for FDLIBM
|
||||
FDDLIBM_SUFFIX = lib
|
||||
# The suffix applied to scripts (.bat for windows, nothing for unix)
|
||||
SCRIPT_SUFFIX = .bat
|
||||
|
||||
HPIS = windows
|
||||
# LIB_LOCATION, which for windows identifies where .exe files go, may be
|
||||
# set by each GNUmakefile. The default is BINDIR.
|
||||
ifndef LIB_LOCATION
|
||||
LIB_LOCATION = $(BINDIR)
|
||||
endif # LIB_LOCATION
|
||||
|
||||
ifndef PLATFORM_SRC
|
||||
PLATFORM_SRC = $(TOPDIR)/src/windows
|
||||
endif # PLATFORM_SRC
|
||||
|
||||
# for backwards compatability, the old "win32" is used here instead of
|
||||
# the more proper "windows"
|
||||
PLATFORM_INCLUDE_NAME = win32
|
||||
PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME)
|
||||
|
||||
# The following DLL's are considered MS runtime libraries and should
|
||||
# not to be REBASEd, see deploy/make/common/Release.gmk.
|
||||
# msvcrt.dll, msvcrnn.dll [msvcr71 or msvcr80 or msvcr90] : Microsoft runtimes
|
||||
MS_RUNTIME_LIBRARIES = msvcrt.dll
|
||||
MSVCRNN_DLL =
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
ifeq ($(COMPILER_VERSION), VS2003)
|
||||
MSVCRNN_DLL = msvcr71.dll
|
||||
MSVCPNN_DLL = msvcp71.dll
|
||||
MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL)
|
||||
endif
|
||||
ifeq ($(COMPILER_VERSION), VS2005)
|
||||
MSVCRNN_DLL = msvcr80.dll
|
||||
MSVCPNN_DLL = msvcp80.dll
|
||||
MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL)
|
||||
endif
|
||||
ifeq ($(COMPILER_VERSION), VS2008)
|
||||
MSVCRNN_DLL = msvcr90.dll
|
||||
MSVCPNN_DLL = msvcp90.dll
|
||||
MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL)
|
||||
endif
|
||||
ifeq ($(COMPILER_VERSION), VS2010)
|
||||
MSVCRNN_DLL = msvcr100.dll
|
||||
MSVCPNN_DLL = msvcp100.dll
|
||||
MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL)
|
||||
endif
|
||||
endif
|
||||
|
||||
# C Compiler flag definitions
|
||||
|
||||
#
|
||||
# Default optimization
|
||||
#
|
||||
ifeq ($(CC_VERSION),msvc)
|
||||
# Visual Studio .NET 2003 or VS2003 compiler option definitions:
|
||||
# -O1 Favors reduced size over speed (-Og -Os -Oy -Ob2 -Gs -GF -Gy)
|
||||
# -O2 Favors speed over reduced size (-Og -Oi -Ot -Oy -Ob2 -Gs -GF -Gy)
|
||||
# -Ox Full optimization (use -O2) (-Og -Oi -Ot -Oy -Ob2)
|
||||
# (Removed in Visual Studio 2005 or VS2005)
|
||||
# -Ob2 More aggressive inlining
|
||||
# -Og Global optimizations
|
||||
# -Oi Replace some functions with intrinsic or special forms
|
||||
# -Op Improve floating point calculations (disables some optimizations)
|
||||
# (Replaced with -fp:precise in VS2005, /Op is default now)
|
||||
# -Os Favor small code
|
||||
# -Ot Favor faster code
|
||||
# -Oy Frame pointer omission
|
||||
# -GB Optimize for pentium (old VC6 option?)
|
||||
# -G6 VS2003 version of -GB?
|
||||
# -GF Pool strings in read-only memory
|
||||
# -Gf Pool strings in read-write memory (the default)
|
||||
# -Gs Controls stack probess
|
||||
# -GS Adds buffer overflow checks on stacks
|
||||
# (Default in VS2005)
|
||||
# -GX Enables exception handling
|
||||
# (Replaced with /EHsc in VS2005)
|
||||
# -Gy Function level linking only
|
||||
#
|
||||
# NOTE: With VC6, -Ox included -Gs.
|
||||
# NOTE: With VC6, -Ox, -O1, and -O2 used -Ob1, not -Ob2.
|
||||
# NOTE: With VC6, -O1 and -O2 used -Gf, not -GF.
|
||||
#
|
||||
ifeq ($(COMPILER_VERSION), VC6)
|
||||
# VC6 (6.2) msvc compiler (the way Tiger and early Mustang were built)
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
GX_OPTION = -GX
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
CC_HIGHEST_OPT = -Ox -Gy -Os -GB
|
||||
CC_HIGHER_OPT = -Ox -Gy -Os -GB
|
||||
CC_LOWER_OPT = -Ox -Gy -Os -GB
|
||||
else
|
||||
CC_HIGHEST_OPT = -Ox -Gy -Op
|
||||
CC_HIGHER_OPT = -Ox -Gy -Op
|
||||
CC_LOWER_OPT = -Ox -Gy -Op
|
||||
endif
|
||||
endif
|
||||
ifeq ($(COMPILER_VERSION), VS2003)
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
AUTOMATIC_PCH_OPTION = -YX
|
||||
# Also known as VC7 compiler
|
||||
GX_OPTION = -GX
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
# Lowered opt level to try and reduce footprint, dll size especially.
|
||||
# Was: CC_HIGHEST_OPT = -O2 -G6
|
||||
# Was: CC_HIGHER_OPT = -O2
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
else
|
||||
CC_HIGHEST_OPT = -O2 -Op
|
||||
CC_HIGHER_OPT = -O2 -Op
|
||||
CC_LOWER_OPT = -O1 -Op
|
||||
endif
|
||||
endif
|
||||
ifeq ($(COMPILER_VERSION), VS2005)
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
# VS2005 compiler, only with Platform SDK right now?
|
||||
GX_OPTION = -EHsc
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
else
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
endif
|
||||
endif
|
||||
ifeq ($(COMPILER_VERSION), VS2008)
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
GX_OPTION = -EHsc
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
else
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
endif
|
||||
endif
|
||||
ifeq ($(COMPILER_VERSION), VS2010)
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
GX_OPTION = -EHsc
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
else
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
endif
|
||||
endif
|
||||
CC_NO_OPT = -Od
|
||||
else # CC_VERSION
|
||||
# GCC not supported, but left for historical reference...
|
||||
CC_HIGHEST_OPT = -O3
|
||||
CC_HIGHER_OPT = -O2
|
||||
CC_LOWER_OPT = -O2
|
||||
CC_NO_OPT =
|
||||
endif
|
||||
|
||||
# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off
|
||||
ifdef NO_OPTIMIZATIONS
|
||||
CC_HIGHEST_OPT = $(CC_NO_OPT)
|
||||
CC_HIGHER_OPT = $(CC_NO_OPT)
|
||||
CC_LOWER_OPT = $(CC_NO_OPT)
|
||||
endif
|
||||
|
||||
ifeq ($(PRODUCT), java)
|
||||
_OPT = $(CC_HIGHER_OPT)
|
||||
else
|
||||
_OPT = $(CC_LOWER_OPT)
|
||||
endif
|
||||
|
||||
# Select the runtime support library carefully, need to be consistent
|
||||
#
|
||||
# VS2003 compiler option definitions:
|
||||
# -MD Use dynamic multi-threaded runtime library
|
||||
# -MDd Use debug version (don't use, doesn't mix with -MD DLL's)
|
||||
# -MT Use static multi-threaded runtime library (-ML is going away)
|
||||
# -MTd Use static debug version (better than -MDd, no runtime issues)
|
||||
# -D_DEBUG Change use of malloc/free/etc to use special debug ones (-MTd)
|
||||
#
|
||||
# NOTE: We also will use /D _STATIC_CPPLIB so we don't need msvcpnn.dll
|
||||
#
|
||||
ifeq ($(MS_RUNTIME_STATIC),true)
|
||||
MS_RUNTIME_OPTION=-MT
|
||||
else
|
||||
MS_RUNTIME_OPTION=-MD
|
||||
endif
|
||||
# The _DEBUG macro option (changes things like malloc to use debug version)
|
||||
MS_RUNTIME_DEBUG_OPTION=
|
||||
MS_RC_DEBUG_OPTION=
|
||||
# Externally set environment variable can force any build to use the debug vers
|
||||
ifeq ($(MFC_DEBUG), true)
|
||||
ifeq ($(MS_RUNTIME_STATIC),true)
|
||||
MS_RUNTIME_OPTION=-MTd
|
||||
else
|
||||
# This MS debugging flag forces a dependence on the debug
|
||||
# version of the runtime library (MSVCRTD.DLL), as does -MDd.
|
||||
# We cannot re-distribute this debug runtime.
|
||||
MS_RUNTIME_OPTION=-MDd
|
||||
endif
|
||||
MS_RUNTIME_DEBUG_OPTION= -D_DEBUG
|
||||
MS_RC_DEBUG_OPTION= -d _DEBUG
|
||||
endif
|
||||
|
||||
# Always add _STATIC_CPPLIB definition
|
||||
STATIC_CPPLIB_OPTION = /D _STATIC_CPPLIB
|
||||
MS_RUNTIME_OPTION += $(STATIC_CPPLIB_OPTION)
|
||||
|
||||
ifeq ($(CC_VERSION),msvc)
|
||||
# VS2003 compiler option definitions:
|
||||
# -Zi Cause *.pdb file to be created, full debug information
|
||||
# -Z7 Full debug inside the .obj, no .pdb
|
||||
# -Zd Basic debug, no local variables? In the .obj
|
||||
# -Zl Don't add runtime library name to obj file?
|
||||
# -Od Turns off optimization and speeds compilation
|
||||
# -YX -Fp/.../foobar.pch Use precompiled headers (try someday?)
|
||||
# -nologo Don't print out startup message
|
||||
# /D _STATIC_CPPLIB
|
||||
# Use static link for the C++ runtime (so msvcpnn.dll not needed)
|
||||
#
|
||||
CFLAGS_COMMON += -Zi -nologo
|
||||
CFLAGS_OPT = $(POPT)
|
||||
CFLAGS_DBG = -Od $(MS_RUNTIME_DEBUG_OPTION)
|
||||
|
||||
# Starting from VS2005 the wchar_t is handled as a built-in C/C++ data type
|
||||
# by default. However, we expect the wchar_t to be a typedef to the
|
||||
# unsigned short data type. The -Zc:wchar_t- option restores the old
|
||||
# behavior (as seen in VS2003) to avoid massive code modifications.
|
||||
# When/if our code will be "C/C++ Standard"-compliant (at least in the area
|
||||
# of handling the wchar_t type), the option won't be necessary.
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
CFLAGS_VS2005 += -Zc:wchar_t-
|
||||
else
|
||||
# The 64bit Platform SDK we use (April 2005) doesn't like this option
|
||||
ifneq ($(CC_VER), 14.00.40310.41)
|
||||
CFLAGS_VS2005 += -Zc:wchar_t-
|
||||
endif
|
||||
endif
|
||||
|
||||
# All builds get the same runtime setting
|
||||
CFLAGS_COMMON += $(MS_RUNTIME_OPTION) $(CFLAGS_$(COMPILER_VERSION))
|
||||
|
||||
|
||||
LDEBUG = /debug
|
||||
|
||||
ifeq ($(VTUNE_SUPPORT), true)
|
||||
OTHER_CFLAGS = -Z7 -Ox
|
||||
LDEBUG += /pdb:NONE
|
||||
endif
|
||||
|
||||
# The new Platform SDK and VS2005 has /GS as a default and requires
|
||||
# bufferoverflowU.lib on the link command line, otherwise
|
||||
# we get missing __security_check_cookie externals at link time.
|
||||
BUFFEROVERFLOWLIB = bufferoverflowU.lib
|
||||
# Always add bufferoverflowU.lib to VS2005 link commands (pack uses LDDFLAGS)
|
||||
LFLAGS_VS2005 = $(BUFFEROVERFLOWLIB)
|
||||
|
||||
# LFLAGS are the flags given to $(LINK) and used to build the actual DLL file
|
||||
BASELFLAGS = -nologo /opt:REF /incremental:no
|
||||
LFLAGS = $(BASELFLAGS) $(LDEBUG) $(EXTRA_LFLAGS) $(LFLAGS_$(COMPILER_VERSION))
|
||||
LDDFLAGS += $(LFLAGS_$(COMPILER_VERSION))
|
||||
|
||||
endif
|
||||
|
||||
#
|
||||
# Preprocessor macro definitions
|
||||
#
|
||||
CPPFLAGS_COMMON = -DWIN32 -DIAL -D_LITTLE_ENDIAN
|
||||
ifeq ($(ARCH), amd64)
|
||||
CPPFLAGS_COMMON += -D_AMD64_ -Damd64
|
||||
else
|
||||
CPPFLAGS_COMMON += -DWIN32 -D_X86_ -Dx86
|
||||
endif
|
||||
CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN
|
||||
|
||||
#
|
||||
# Output options (use specific filenames to avoid parallel compile errors)
|
||||
#
|
||||
CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map
|
||||
|
||||
#
|
||||
# Add warnings and extra on 64bit issues
|
||||
#
|
||||
ifeq ($(ARCH_DATA_MODEL), 64)
|
||||
CFLAGS_COMMON += -Wp64
|
||||
endif
|
||||
CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL)
|
||||
|
||||
#
|
||||
# Treat compiler warnings as errors, if requested
|
||||
#
|
||||
ifeq ($(COMPILER_WARNINGS_FATAL),true)
|
||||
CFLAGS_COMMON += -WX
|
||||
endif
|
||||
|
||||
CPPFLAGS_OPT =
|
||||
CPPFLAGS_DBG = -DDEBUG -DLOGGING
|
||||
|
||||
CXXFLAGS_COMMON = $(CFLAGS_COMMON)
|
||||
CXXFLAGS_OPT = $(CFLAGS_OPT)
|
||||
CXXFLAGS_DBG = $(CFLAGS_DBG)
|
||||
|
||||
ifneq ($(LIBRARY),fdlibm)
|
||||
EXTRA_LIBS += advapi32.lib
|
||||
endif
|
||||
|
||||
#
|
||||
# Path and option to link against the VM, if you have to.
|
||||
#
|
||||
JVMLIB = $(BOOTDIR)/lib/jvm.lib
|
||||
JAVALIB =
|
||||
|
||||
ifeq ($(CC_VERSION), msvc)
|
||||
CC_DEPEND = -FD
|
||||
CC_DEPEND_FILTER =
|
||||
else # CC_VERSION
|
||||
# not supported, but left for historical reference...
|
||||
CC_DEPEND = -MM
|
||||
CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)&!g'
|
||||
endif # CC_VERSION
|
||||
|
||||
LIBRARY_SUFFIX = dll
|
||||
LIB_SUFFIX = lib
|
||||
|
||||
# Settings for the VERSIONINFO tap on windows.
|
||||
VERSIONINFO_RESOURCE = $(TOPDIR)/src/windows/resource/version.rc
|
||||
|
||||
RC_FLAGS = /l 0x409 /r
|
||||
|
||||
ifeq ($(VARIANT), OPT)
|
||||
RC_FLAGS += -d NDEBUG
|
||||
else
|
||||
RC_FLAGS += $(MS_RC_DEBUG_OPTION)
|
||||
endif
|
||||
|
||||
ifndef COPYRIGHT_YEAR
|
||||
COPYRIGHT_YEAR = 2007
|
||||
endif
|
||||
|
||||
RC_FLAGS += -d "JDK_BUILD_ID=$(FULL_VERSION)" \
|
||||
-d "JDK_COMPANY=$(COMPANY_NAME)" \
|
||||
-d "JDK_COMPONENT=$(PRODUCT_NAME) Platform SE binary" \
|
||||
-d "JDK_VER=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER)" \
|
||||
-d "JDK_COPYRIGHT=Copyright \xA9 $(COPYRIGHT_YEAR)" \
|
||||
-d "JDK_NAME=$(PRODUCT_NAME) Platform SE $(JDK_MINOR_VERSION) $(JDK_UPDATE_META_TAG)" \
|
||||
-d "JDK_FVER=$(JDK_VERSION)"
|
||||
|
||||
@@ -73,54 +73,10 @@ JDK_LOCALES = ja zh_CN
|
||||
#
|
||||
JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh
|
||||
|
||||
#
|
||||
# All libraries except libjava and libjvm itself link against libjvm and
|
||||
# libjava, the latter for its exported common utilities. libjava only links
|
||||
# against libjvm. Programs' makefiles take their own responsibility for
|
||||
# adding other libs.
|
||||
#
|
||||
ifdef PACKAGE
|
||||
# put JAVALIB first, but do not lose any platform specific values....
|
||||
LDLIBS_COMMON = $(JAVALIB)
|
||||
endif # PACKAGE
|
||||
|
||||
#
|
||||
# Libraries that must appear ahead of libc.so on the link command line
|
||||
#
|
||||
ifdef PROGRAM
|
||||
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
LDLIBS_COMMON = -lthread -ldl
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM), linux)
|
||||
LDLIBS_COMMON = -ldl
|
||||
endif
|
||||
|
||||
endif # PROGRAM
|
||||
|
||||
LDLIBS_COMMON += $(EXTRA_LIBS)
|
||||
|
||||
#
|
||||
# Default is to build, not import native binaries
|
||||
#
|
||||
ifndef IMPORT_NATIVE_BINARIES
|
||||
IMPORT_NATIVE_BINARIES=false
|
||||
endif
|
||||
# If importing libraries in, no incremental builds
|
||||
ifeq ($(IMPORT_NATIVE_BINARIES),true)
|
||||
INCREMENTAL_BUILD=false
|
||||
endif
|
||||
|
||||
# for generated libraries
|
||||
LIBDIR = $(OUTPUTDIR)/lib
|
||||
ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib
|
||||
# Optional place to save the windows .lib files
|
||||
LIBFILES_DIR = $(OUTPUTDIR)/libfiles
|
||||
# for ext jre files
|
||||
EXTDIR = $(LIBDIR)/ext
|
||||
# for generated include files
|
||||
INCLUDEDIR = $(OUTPUTDIR)/include
|
||||
# for generated class files
|
||||
CLASSBINDIR = $(OUTPUTDIR)/classes
|
||||
DEMOCLASSDIR = $(OUTPUTDIR)/democlasses
|
||||
@@ -131,8 +87,6 @@ BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars
|
||||
ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars
|
||||
# for generated java source files
|
||||
GENSRCDIR = $(OUTPUTDIR)/gensrc
|
||||
# for generated C source files (not javah)
|
||||
GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc
|
||||
# for imported source files
|
||||
IMPORTSRCDIR = $(OUTPUTDIR)/impsrc
|
||||
# for imported documents
|
||||
@@ -196,19 +150,6 @@ override ABS_TEMPDIR = $(ABS_OUTPUTDIR)/$(UNIQUE_PATH)
|
||||
dummy1:=$(shell $(MKDIR) -p $(TEMPDIR))
|
||||
dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK))
|
||||
|
||||
# OBJDIRNAME is the name of the directory where the object code is to
|
||||
# be placed. It's name depends on whether the data model architecture
|
||||
# is 32-bit or not.
|
||||
ifneq ($(ARCH_DATA_MODEL), 32)
|
||||
OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX)
|
||||
else
|
||||
OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX)
|
||||
endif
|
||||
OBJDIR = $(TEMPDIR)/$(OBJDIRNAME)
|
||||
|
||||
# CLASSHDRDIR is where the generated C Class Header files go.
|
||||
CLASSHDRDIR = $(TEMPDIR)/CClassHeaders
|
||||
|
||||
#
|
||||
# CLASSDESTDIR can be used to specify the directory where generated classes
|
||||
# are to be placed. The default is CLASSBINDIR.
|
||||
@@ -217,11 +158,6 @@ ifndef CLASSDESTDIR
|
||||
CLASSDESTDIR = $(CLASSBINDIR)
|
||||
endif
|
||||
|
||||
INCLUDES = -I. -I$(CLASSHDRDIR) \
|
||||
$(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES)
|
||||
OTHER_CPPFLAGS = $(INCLUDES)
|
||||
|
||||
|
||||
#
|
||||
# vpaths. These are the default locations searched for source files.
|
||||
# GNUmakefiles of individual areas often override the default settings.
|
||||
@@ -235,35 +171,6 @@ VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPA
|
||||
VPATH.java = $(VPATH0.java)
|
||||
vpath %.java $(VPATH.java)
|
||||
vpath %.class $(CLASSBINDIR)
|
||||
vpath %.$(OBJECT_SUFFIX) $(OBJDIR)
|
||||
|
||||
#
|
||||
# VPATH.h is used elsewhere to generate include flags. By default,
|
||||
# anyone has access to the include files that the JVM area exports,
|
||||
# namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific
|
||||
# relatives.
|
||||
#
|
||||
ifeq ($(PLATFORM), windows)
|
||||
VPATH.h = $(BOOTDIR)/include;$(BOOTDIR)/include/$(PLATFORM_INCLUDE_NAME)
|
||||
else
|
||||
VPATH.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/include$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/javavm/include
|
||||
endif
|
||||
vpath %.h $(VPATH.h)
|
||||
|
||||
#
|
||||
# Used in two ways: helps link against libjava.so. Also if overridden
|
||||
# determines where your shared library is installed.
|
||||
#
|
||||
ifndef LIB_LOCATION
|
||||
LIB_LOCATION = $(LIBDIR)/$(LIBARCH)
|
||||
endif
|
||||
|
||||
#
|
||||
# Java header and stub variables
|
||||
#
|
||||
CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export)))
|
||||
CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX)
|
||||
STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h
|
||||
|
||||
#
|
||||
# Classpath seen by javac (different from the one seen by the VM
|
||||
@@ -338,38 +245,9 @@ define OTHERSUBDIRS-loop
|
||||
done
|
||||
endef
|
||||
|
||||
#
|
||||
# Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is
|
||||
# used for this file, otherwise the default settings are used.
|
||||
#
|
||||
CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \
|
||||
$(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F)))
|
||||
CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \
|
||||
$(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F)))
|
||||
|
||||
#
|
||||
# Tool flags
|
||||
#
|
||||
ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS)
|
||||
CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS)
|
||||
CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS)
|
||||
CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \
|
||||
$(DEFINES) $(OPTIONS:%=-D%)
|
||||
LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS)
|
||||
LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON)
|
||||
LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \
|
||||
$(OTHER_LINTFLAGS)
|
||||
|
||||
# this should be moved into Defs-<platform>.gmk.....
|
||||
ifeq ($(PLATFORM), windows)
|
||||
VERSION_DEFINES = -DRELEASE="\"$(RELEASE)\""
|
||||
else
|
||||
VERSION_DEFINES = -DRELEASE='"$(RELEASE)"'
|
||||
endif
|
||||
|
||||
# Prevent the use of many default suffix rules we do not need
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .h .obj .cpp .hpp .java .class
|
||||
.SUFFIXES: .java .class
|
||||
|
||||
# Make sure we are all insane
|
||||
ifdef INSANE
|
||||
|
||||
@@ -1,275 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 1995, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
#
|
||||
# Generic makefile for building shared libraries.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/make/common/Classes.gmk
|
||||
|
||||
#
|
||||
# It is important to define these *after* including Classes.gmk
|
||||
# in order to override the values defined inthat makefile.
|
||||
#
|
||||
|
||||
ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX)
|
||||
ACTUAL_LIBRARY_DIR = $(LIB_LOCATION)
|
||||
ACTUAL_LIBRARY = $(ACTUAL_LIBRARY_DIR)/$(ACTUAL_LIBRARY_NAME)
|
||||
|
||||
library:: $(ACTUAL_LIBRARY)
|
||||
|
||||
FILES_o = $(patsubst %.c, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c))))
|
||||
FILES_o += $(patsubst %.s, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_s))))
|
||||
FILES_o += $(patsubst %.cpp, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp))))
|
||||
|
||||
ifeq ($(INCREMENTAL_BUILD),true)
|
||||
FILES_d = $(patsubst %.c, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c))))
|
||||
FILES_d += $(patsubst %.cpp, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp))))
|
||||
endif # INCREMENTAL_BUILD
|
||||
|
||||
ifeq ($(PLATFORM),solaris)
|
||||
# List of all lint files, one for each .c file (only for C)
|
||||
FILES_ln = $(patsubst %.c, %.$(LINT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c))))
|
||||
endif
|
||||
|
||||
#
|
||||
# C++ libraries must be linked with CC.
|
||||
#
|
||||
ifdef CPLUSPLUSLIBRARY
|
||||
LINKER=$(LINK.cc)
|
||||
else
|
||||
LINKER=$(LINK.c)
|
||||
endif
|
||||
|
||||
# We either need to import (copy) libraries in, or build them
|
||||
$(ACTUAL_LIBRARY):: $(INIT) $(TEMPDIR) $(LIBDIR) $(BINDIR) $(EXTDIR) classheaders
|
||||
|
||||
#
|
||||
# COMPILE_APPROACH: Different approaches to compile up the native object
|
||||
# files as quickly as possible.
|
||||
# The setting of parallel works best on Unix, batch on Windows.
|
||||
#
|
||||
|
||||
COMPILE_FILES_o = $(OBJDIR)/.files_compiled
|
||||
$(COMPILE_FILES_o): $(FILES_d) $(FILES_o)
|
||||
@$(ECHO) "$<" >> $@
|
||||
clean::
|
||||
$(RM) $(COMPILE_FILES_o)
|
||||
|
||||
#
|
||||
# COMPILE_APPROACH=parallel: Will trigger compilations (just compilations) to
|
||||
# happen in parallel. Greatly decreases Unix build time, even on single CPU
|
||||
# machines, more so on multiple CPU machines. Default is 2 compiles
|
||||
# at a time, but can be adjusted with ALT_PARALLEL_COMPILE_JOBS.
|
||||
# Note that each .d file will also be dependent on it's .o file, see
|
||||
# Rules.gmk.
|
||||
# Note this does not depend on Rules.gmk to work like batch (below)
|
||||
# and this technique doesn't seem to help Windows build time nor does
|
||||
# it work very well, it's possible the Windows Visual Studio compilers
|
||||
# don't work well in a parallel situation, this needs investigation.
|
||||
#
|
||||
|
||||
ifeq ($(COMPILE_APPROACH),parallel)
|
||||
|
||||
.PHONY: library_parallel_compile
|
||||
|
||||
library_parallel_compile:
|
||||
@$(ECHO) "Begin parallel compiles: $(shell $(PWD))"
|
||||
@$(MAKE) -j $(PARALLEL_COMPILE_JOBS) $(COMPILE_FILES_o)
|
||||
@$(ECHO) "Done with parallel compiles: $(shell $(PWD))"
|
||||
|
||||
$(ACTUAL_LIBRARY):: library_parallel_compile
|
||||
|
||||
endif
|
||||
|
||||
#
|
||||
# COMPILE_APPROACH=batch: Will trigger compilations (just compilations) to
|
||||
# happen in batch mode. Greatly decreases Windows build time.
|
||||
# See logic in Rules.gmk for how compiles happen, the $(MAKE) in
|
||||
# library_batch_compile below triggers the actions in Rules.gmk.
|
||||
# Note that each .d file will also be dependent on it's .o file, see
|
||||
# Rules.gmk.
|
||||
#
|
||||
ifeq ($(COMPILE_APPROACH),batch)
|
||||
|
||||
.PHONY: library_batch_compile
|
||||
|
||||
library_batch_compile:
|
||||
@$(ECHO) "Begin BATCH compiles: $(shell $(PWD))"
|
||||
$(MAKE) $(COMPILE_FILES_o)
|
||||
$(MAKE) batch_compile
|
||||
@$(ECHO) "Done with BATCH compiles: $(shell $(PWD))"
|
||||
$(MAKE) COMPILE_APPROACH=normal $(COMPILE_FILES_o)
|
||||
|
||||
$(ACTUAL_LIBRARY):: library_batch_compile
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM), windows)
|
||||
|
||||
#
|
||||
# Library building rules.
|
||||
#
|
||||
|
||||
$(LIBRARY).lib:: $(OBJDIR)
|
||||
|
||||
# build it into $(OBJDIR) so that the other generated files get put
|
||||
# there, then copy just the DLL (and MAP file) to the requested directory.
|
||||
#
|
||||
$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lcf
|
||||
@$(prep-target)
|
||||
@$(MKDIR) -p $(OBJDIR)
|
||||
$(LINK) -dll -out:$(OBJDIR)/$(@F) \
|
||||
-map:$(OBJDIR)/$(LIBRARY).map \
|
||||
$(LFLAGS) @$(OBJDIR)/$(LIBRARY).lcf \
|
||||
$(OTHER_LCF) $(JAVALIB) $(LDLIBS)
|
||||
$(CP) $(OBJDIR)/$(@F) $@
|
||||
$(CP) $(OBJDIR)/$(LIBRARY).map $(@D)
|
||||
$(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D)
|
||||
|
||||
$(OBJDIR)/$(LIBRARY).lcf: $(OBJDIR)/$(LIBRARY).res $(COMPILE_FILES_o) $(FILES_m)
|
||||
@$(prep-target)
|
||||
@$(MKDIR) -p $(TEMPDIR)
|
||||
@$(ECHO) $(FILES_o) > $@
|
||||
ifndef LOCAL_RESOURCE_FILE
|
||||
@$(ECHO) $(OBJDIR)/$(LIBRARY).res >> $@
|
||||
endif
|
||||
@$(ECHO) Created $@
|
||||
|
||||
RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \
|
||||
/D "JDK_INTERNAL_NAME=$(LIBRARY)" \
|
||||
/D "JDK_FTYPE=0x2L"
|
||||
|
||||
$(OBJDIR)/$(LIBRARY).res: $(VERSIONINFO_RESOURCE)
|
||||
ifndef LOCAL_RESOURCE_FILE
|
||||
@$(prep-target)
|
||||
$(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE)
|
||||
endif
|
||||
|
||||
#
|
||||
# Install a .lib file if required.
|
||||
#
|
||||
ifeq ($(INSTALL_DOT_LIB), true)
|
||||
$(ACTUAL_LIBRARY):: $(LIBDIR)/$(LIBRARY).lib
|
||||
|
||||
clean::
|
||||
-$(RM) $(LIBDIR)/$(LIBRARY).lib
|
||||
|
||||
$(LIBDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lib
|
||||
$(install-file)
|
||||
|
||||
$(LIBDIR)/$(LIBRARY).dll:: $(OBJDIR)/$(LIBRARY).dll
|
||||
$(install-file)
|
||||
|
||||
endif # INSTALL_DOT_LIB
|
||||
|
||||
else # PLATFORM
|
||||
|
||||
#
|
||||
# On Solaris, use mcs to write the version into the comment section of
|
||||
# the shared library. On other platforms set this to false at the
|
||||
# make command line.
|
||||
#
|
||||
$(ACTUAL_LIBRARY):: $(COMPILE_FILES_o) $(FILES_m) $(FILES_reorder)
|
||||
@$(prep-target)
|
||||
@$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), _OPT=$(_OPT)"
|
||||
@$(ECHO) "Rebuilding $@ because of $?"
|
||||
$(LINKER) $(SHARED_LIBRARY_FLAG) -o $@ $(FILES_o) $(LDLIBS)
|
||||
ifeq ($(WRITE_LIBVERSION),true)
|
||||
$(MCS) -d -a "$(FULL_VERSION)" $@
|
||||
endif # WRITE_LIBVERSION
|
||||
|
||||
endif # PLATFORM
|
||||
|
||||
#
|
||||
# Cross check all linted files against each other
|
||||
#
|
||||
ifeq ($(PLATFORM),solaris)
|
||||
lint.errors : $(FILES_ln)
|
||||
$(LINT.c) $(FILES_ln) $(LDLIBS)
|
||||
endif
|
||||
|
||||
#
|
||||
# Class libraries with JNI native methods get a include to the package.
|
||||
#
|
||||
ifdef PACKAGE
|
||||
vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)
|
||||
vpath %.c $(SHARE_SRC)/native/$(PKGDIR)
|
||||
OTHER_INCLUDES += -I$(SHARE_SRC)/native/common -I$(PLATFORM_SRC)/native/common
|
||||
OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR) \
|
||||
-I$(PLATFORM_SRC)/native/$(PKGDIR)
|
||||
endif
|
||||
|
||||
#
|
||||
# Clean/clobber rules
|
||||
#
|
||||
clean::
|
||||
$(RM) -r $(ACTUAL_LIBRARY)
|
||||
|
||||
clobber:: clean
|
||||
|
||||
#
|
||||
# INCREMENTAL_BUILD means that this workspace will be built over and over
|
||||
# possibly incrementally. This means tracking the object file dependencies
|
||||
# on include files so that sources get re-compiled when the include files
|
||||
# change. When building from scratch and doing a one time build (like
|
||||
# release engineering or nightly builds) set INCREMENTAL_BUILD=false.
|
||||
#
|
||||
|
||||
ifeq ($(INCREMENTAL_BUILD),true)
|
||||
|
||||
#
|
||||
# Workaround: gnumake sometimes says files is empty when it shouldn't
|
||||
# was: files := $(foreach file, $(wildcard $(OBJDIR)/*.$(DEPEND_SUFFIX)), $(file))
|
||||
#
|
||||
files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null)
|
||||
|
||||
#
|
||||
# Only include these files if we have any.
|
||||
#
|
||||
ifneq ($(strip $(files)),)
|
||||
|
||||
include $(files)
|
||||
|
||||
endif # files
|
||||
|
||||
endif # INCREMENTAL_BUILD
|
||||
|
||||
#
|
||||
# Default dependencies
|
||||
#
|
||||
|
||||
all: build
|
||||
|
||||
build: library
|
||||
|
||||
debug:
|
||||
$(MAKE) VARIANT=DBG build
|
||||
|
||||
fastdebug:
|
||||
$(MAKE) VARIANT=DBG FASTDEBUG=true build
|
||||
|
||||
.PHONY: all build debug fastdebug
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
#
|
||||
# Makefile for linking with mapfiles.
|
||||
#
|
||||
# NOTE: Not using a mapfile will expose all your extern functions and
|
||||
# extern data symbols as part of your interface, so unless your
|
||||
# extern names are safe from being mistaken as names from other
|
||||
# libraries, you better use a mapfile, or use a unique naming
|
||||
# convention on all your extern symbols.
|
||||
#
|
||||
# The mapfile will establish versioning by defining the exported interface.
|
||||
#
|
||||
# The mapfile can also force certain .o files or elf sections into the
|
||||
# the different segments of the resulting library/program image.
|
||||
#
|
||||
# The macro FILES_m can contain any number of mapfiles.
|
||||
#
|
||||
|
||||
# Always make sure 'all' is the default rule
|
||||
mapfile_default_rule: all
|
||||
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
|
||||
ifeq ($(VARIANT), OPT)
|
||||
# OPT build MUST have a mapfile?
|
||||
ifndef FILES_m
|
||||
FILES_m = mapfile-vers
|
||||
endif
|
||||
|
||||
# If we are re-ordering functions in this solaris library, we need to make
|
||||
# sure that -xF is added to the compile lines. This option is critical and
|
||||
# enables the functions to be reordered.
|
||||
ifdef FILES_reorder
|
||||
CFLAGS_OPT += -xF
|
||||
CXXFLAGS_OPT += -xF
|
||||
endif
|
||||
|
||||
INIT += $(TEMPDIR)/mapfile-vers
|
||||
|
||||
$(TEMPDIR)/mapfile-vers : $(FILES_m) $(FILES_reorder)
|
||||
$(prep-target)
|
||||
$(CAT) $(FILES_m) > $@
|
||||
ifdef FILES_reorder
|
||||
$(SED) -e 's=OUTPUTDIR=$(OUTPUTDIR)=' $(FILES_reorder) >> $@
|
||||
endif
|
||||
endif # VARIANT
|
||||
|
||||
ifndef LDNOMAP
|
||||
LDMAPFLAGS_OPT = -M$(TEMPDIR)/mapfile-vers
|
||||
LDMAPFLAGS_DBG = $(FILES_m:%=-M%)
|
||||
endif
|
||||
|
||||
endif # PLATFORM
|
||||
|
||||
|
||||
ifeq ($(PLATFORM), linux)
|
||||
|
||||
ifeq ($(VARIANT), OPT)
|
||||
# OPT build MUST have a mapfile?
|
||||
ifndef FILES_m
|
||||
FILES_m = mapfile-vers
|
||||
endif
|
||||
endif # VARIANT
|
||||
|
||||
ifndef LDNOMAP
|
||||
LDMAPFLAGS_OPT = $(FILES_m:%=-Xlinker -version-script=%)
|
||||
LDMAPFLAGS_DBG = $(FILES_m:%=-Xlinker -version-script=%)
|
||||
endif
|
||||
|
||||
endif # PLATFORM
|
||||
|
||||
LDFLAGS_OPT += $(LDMAPFLAGS_OPT)
|
||||
LDFLAGS_DBG += $(LDMAPFLAGS_DBG)
|
||||
|
||||
@@ -34,7 +34,7 @@ rules_default_rule: all
|
||||
#
|
||||
# Directory set up. (Needed by deploy workspace)
|
||||
#
|
||||
$(CLASSDESTDIR) $(CLASSHDRDIR) $(OBJDIR) $(OUTPUTDIR) $(BINDIR) $(LIBDIR) $(LIBDIR)/$(LIBARCH) $(TEMPDIR) $(EXTDIR):
|
||||
$(CLASSDESTDIR) $(OUTPUTDIR) $(TEMPDIR) $(EXTDIR):
|
||||
$(MKDIR) -p $@
|
||||
|
||||
#
|
||||
@@ -163,9 +163,6 @@ $(CLASSDESTDIR)/%.class: $(SHARE_SRC)/classes/%.java
|
||||
# List of class files needed
|
||||
FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class)
|
||||
|
||||
# Got to include exported files.
|
||||
FILES_class += $(FILES_export:%.java=$(CLASSDESTDIR)/%.class)
|
||||
|
||||
# Construct list of java sources we need to compile
|
||||
source_list_prime:
|
||||
@$(MKDIR) -p $(TEMPDIR)
|
||||
@@ -214,50 +211,7 @@ endif
|
||||
classes.clean: packages.clean
|
||||
$(RM) $(JAVA_SOURCE_LIST)
|
||||
|
||||
#
|
||||
# C and C++ make dependencies
|
||||
#
|
||||
include $(TOPDIR)/make/common/internal/NativeCompileRules.gmk
|
||||
|
||||
#
|
||||
# Running Javah to generate stuff into CClassHeaders.
|
||||
#
|
||||
|
||||
ifdef FILES_export
|
||||
|
||||
CLASSES.export = $(subst /,.,$(FILES_export:%.java=%))
|
||||
CLASSES.export += $(subst /,.,$(FILES_export2:%.java=%))
|
||||
CLASSES.export += $(subst /,.,$(FILES_export3:%.java=%))
|
||||
CLASSES_export = $(FILES_export:%.java=$(CLASSDESTDIR)/%.class)
|
||||
CLASSES_export += $(FILES_export2:%.java=$(CLASSDESTDIR)/%.class)
|
||||
CLASSES_export += $(FILES_export3:%.java=$(CLASSDESTDIR)/%.class)
|
||||
|
||||
# Fix when deploy workspace makefiles don't depend on this name
|
||||
#CLASSHDR_DOTFILE=$(CLASSHDRDIR)/.classheaders
|
||||
|
||||
CLASSHDR_DOTFILE=$(OBJDIR)/.class.headers.$(ARCH)
|
||||
|
||||
classheaders: classes $(CLASSHDR_DOTFILE)
|
||||
|
||||
$(CLASSHDR_DOTFILE): $(CLASSES_export)
|
||||
$(prep-target)
|
||||
$(JAVAH_CMD) -d $(CLASSHDRDIR)/ \
|
||||
$(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner))
|
||||
@$(java-vm-cleanup)
|
||||
@$(TOUCH) $@
|
||||
|
||||
classheaders.clean:
|
||||
$(RM) -r $(CLASSHDRDIR) $(CLASSHDR_DOTFILE)
|
||||
|
||||
else # FILES_export
|
||||
|
||||
classheaders: classes
|
||||
|
||||
classheaders.clean:
|
||||
|
||||
endif # FILES_export
|
||||
|
||||
clean clobber:: classheaders.clean classes.clean .delete.classlist
|
||||
clean clobber:: classes.clean .delete.classlist
|
||||
|
||||
#
|
||||
# Default dependencies
|
||||
@@ -265,12 +219,11 @@ clean clobber:: classheaders.clean classes.clean .delete.classlist
|
||||
|
||||
all: build
|
||||
|
||||
build: classheaders
|
||||
build: classes
|
||||
|
||||
default: all
|
||||
|
||||
.PHONY: all build clean clobber \
|
||||
.delete.classlist classes .compile.classlist classes.clean \
|
||||
classheaders classheaders.clean \
|
||||
batch_compile
|
||||
|
||||
|
||||
@@ -1,214 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
#
|
||||
# Native C/C++ Compile Rules
|
||||
#
|
||||
|
||||
#
|
||||
# INCREMENTAL_BUILD: Record the #include file dependencies.
|
||||
#
|
||||
# NOTE: We build make include files with the suffix
|
||||
# $(DEPEND_SUFFIX) on every compilation. These are initially
|
||||
# created as temp files just in case a ^C kills it in the middle.
|
||||
# Compiler is smart enough to handle ^C and not create the .o file, or
|
||||
# is supposed to be that smart, but the .$(DEPEND_SUFFIX) file
|
||||
# creation here isn't.
|
||||
# These .$(DEPEND_SUFFIX) files are included by Library.gmk and
|
||||
# Program.gmk, when they exist (Search for 'make dependencies').
|
||||
#
|
||||
|
||||
ifeq ($(INCREMENTAL_BUILD),true)
|
||||
|
||||
$(OBJDIR)/%.$(DEPEND_SUFFIX): %.c
|
||||
@$(prep-target)
|
||||
@$(ECHO) "Creating $@"
|
||||
@$(RM) $@.temp
|
||||
@$(CC) $(CC_DEPEND) $(CPPFLAGS) $< 2> $(DEV_NULL) | \
|
||||
$(CC_DEPEND_FILTER) > $@.temp
|
||||
@$(MV) $@.temp $@
|
||||
|
||||
$(OBJDIR)/%.$(DEPEND_SUFFIX): %.cpp
|
||||
@$(prep-target)
|
||||
@$(ECHO) "Creating $@"
|
||||
@$(RM) $@.temp
|
||||
@$(CXX) $(CC_DEPEND) $(CPPFLAGS) $(CXXFLAGS) $< 2> $(DEV_NULL) | \
|
||||
$(CC_DEPEND_FILTER) > $@.temp
|
||||
@$(MV) $@.temp $@
|
||||
|
||||
endif # INCREMENTAL_BUILD
|
||||
|
||||
#
|
||||
# C, C++, asm files.
|
||||
#
|
||||
# Normal or parallel compile rule is the same, but batch compiles require
|
||||
# we save up the sources files that use the same compile line so that we
|
||||
# can do one compile line.
|
||||
#
|
||||
|
||||
ifneq ($(COMPILE_APPROACH), batch)
|
||||
|
||||
$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c
|
||||
@$(prep-target)
|
||||
$(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $<
|
||||
@$(check-conventions)
|
||||
|
||||
$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp
|
||||
@$(prep-target)
|
||||
$(COMPILE.cc) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $<
|
||||
@$(check-conventions)
|
||||
|
||||
else
|
||||
|
||||
#
|
||||
# Batch compiling might be faster if the compiler was smart about recognizing
|
||||
# optimization opportunities available when all files are being compiled
|
||||
# the same way. Unfortunately this is rare.
|
||||
# Automatic pre-compiled headers (pch) might be a possibility so we
|
||||
# add any auto pch options here.
|
||||
# So we save all the source files that have the same compile line as the
|
||||
# first file. A normal compile pass is made after the batch compile
|
||||
# to catch anything missed.
|
||||
# If the compilers had a -o option that allowed us to direct where to
|
||||
# write the object files to, then we would not need to save the object
|
||||
# file list or move them from the make directory to the build directory.
|
||||
#
|
||||
|
||||
# Source names
|
||||
COMPILE_LIST.c = $(OBJDIR)/.source_names_c
|
||||
COMPILE_LIST.cpp = $(OBJDIR)/.source_names_cpp
|
||||
|
||||
# Object file list
|
||||
COMPILE_OBJ_LIST.c = $(OBJDIR)/.obj_names_c
|
||||
COMPILE_OBJ_LIST.cpp = $(OBJDIR)/.obj_names_cpp
|
||||
|
||||
# The compile line
|
||||
COMPILE_BATCH.c = $(OBJDIR)/.compile_c
|
||||
COMPILE_BATCH.cpp = $(OBJDIR)/.compile_cpp
|
||||
|
||||
# The compile line for the current target
|
||||
THIS_COMPILE_BATCH.c = $(COMPILE_BATCH.c)-$(@F)
|
||||
THIS_COMPILE_BATCH.cpp = $(COMPILE_BATCH.cpp)-$(@F)
|
||||
|
||||
$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c
|
||||
@$(prep-target)
|
||||
@$(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.c)
|
||||
@if [ ! -s $(COMPILE_BATCH.c) ] ; then \
|
||||
$(CP) $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c) ; \
|
||||
$(ECHO) $< > $(COMPILE_LIST.c); \
|
||||
$(ECHO) $(@F) > $(COMPILE_OBJ_LIST.c); \
|
||||
elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c)`" \
|
||||
= "" ] ; then \
|
||||
$(ECHO) $< >> $(COMPILE_LIST.c); \
|
||||
$(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.c); \
|
||||
fi
|
||||
@$(RM) $(THIS_COMPILE_BATCH.c)
|
||||
@$(check-conventions)
|
||||
|
||||
$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp
|
||||
@$(prep-target)
|
||||
@$(ECHO) "$(COMPILE.cpp) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.cpp)
|
||||
@if [ ! -s $(COMPILE_BATCH.cpp) ] ; then \
|
||||
$(CP) $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp) ; \
|
||||
$(ECHO) $< > $(COMPILE_LIST.cpp); \
|
||||
$(ECHO) $(@F) > $(COMPILE_OBJ_LIST.cpp); \
|
||||
elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp)`"\
|
||||
= "" ] ; then \
|
||||
$(ECHO) $< >> $(COMPILE_LIST.cpp); \
|
||||
$(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.cpp); \
|
||||
fi
|
||||
@$(RM) $(THIS_COMPILE_BATCH.cpp)
|
||||
@$(check-conventions)
|
||||
|
||||
batch_compile: $(FILES_o)
|
||||
@$(ECHO) "Doing batch compilations"
|
||||
@if [ -s $(COMPILE_LIST.c) ] ; then \
|
||||
$(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \
|
||||
`$(CAT) $(COMPILE_LIST.c)`" ; \
|
||||
( $(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \
|
||||
`$(CAT) $(COMPILE_LIST.c)` && \
|
||||
$(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR)" && \
|
||||
$(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR) ) || exit 1 ; \
|
||||
fi
|
||||
@if [ -s $(COMPILE_LIST.cpp) ] ; then \
|
||||
$(ECHO) "$(COMPILE.cpp) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \
|
||||
`$(CAT) $(COMPILE_LIST.cpp)`" ; \
|
||||
( $(COMPILE.cpp) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \
|
||||
`$(CAT) $(COMPILE_LIST.cpp)` && \
|
||||
$(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR)" && \
|
||||
$(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR) ) || exit 1 ; \
|
||||
fi
|
||||
@$(RM) $(COMPILE_BATCH.c) $(COMPILE_LIST.c) $(COMPILE_OBJ_LIST.c)
|
||||
@$(RM) $(COMPILE_BATCH.cpp) $(COMPILE_LIST.cpp) $(COMPILE_OBJ_LIST.cpp)
|
||||
|
||||
endif
|
||||
|
||||
# newer as does not handle c++ style comments
|
||||
$(OBJDIR)/%.$(OBJECT_SUFFIX): %.s
|
||||
ifneq ($(CC_VERSION), gcc)
|
||||
@$(prep-target)
|
||||
$(COMPILE.s) $(CC_OBJECT_OUTPUT_FLAG)$@ $<
|
||||
else
|
||||
@$(prep-target)
|
||||
$(CPP) -x assembler-with-cpp $< | $(COMPILE.s) -o $@
|
||||
endif
|
||||
@$(check-conventions)
|
||||
|
||||
#
|
||||
# Quick hack for making the compiler generate just the assembly file.
|
||||
# $ gnumake obj/sparc/myfile.s
|
||||
#
|
||||
$(OBJDIR)/%.s: %.c
|
||||
@$(prep-target)
|
||||
$(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ -S $<
|
||||
@$(check-conventions)
|
||||
|
||||
# remove the intermediate files from the directories.
|
||||
# (If VARIANT=OPT, this removes all debug and fastdebug files too)
|
||||
clobber clean::
|
||||
$(RM) -r $(OBJDIR)
|
||||
$(RM) -r $(OBJDIR)_*
|
||||
|
||||
#
|
||||
# Lint support
|
||||
# (The 'lint' rule below is an older rule not using the .$(LINT_SUFFIX) files)
|
||||
#
|
||||
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
$(OBJDIR)/%.$(LINT_SUFFIX): %.c
|
||||
@$(prep-target)
|
||||
$(LINT.c) -dirout=$(OBJDIR) -c $<
|
||||
lint.clean:
|
||||
$(RM) $(OBJDIR)/*.$(LINT_SUFFIX)
|
||||
# Old rule
|
||||
lint: $(FILES_c)
|
||||
ifneq ($(FILES_c),)
|
||||
$(LINT.c) -Ncheck -Nlevel=3 $? $(LDLIBS) > lint.$(ARCH) 2>&1
|
||||
endif
|
||||
endif
|
||||
|
||||
.PHONY: batch_compile
|
||||
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
#
|
||||
# GCC Compiler settings
|
||||
#
|
||||
|
||||
COMPILER_NAME=GCC
|
||||
|
||||
ifeq ($(PLATFORM), windows)
|
||||
|
||||
# Settings specific to Windows, pretty stale, hasn't been used
|
||||
CC = $(COMPILER_PATH)gcc
|
||||
CPP = $(COMPILER_PATH)gcc -E
|
||||
CXX = $(COMPILER_PATH)g++
|
||||
CCC = $(COMPILER_PATH)g++
|
||||
LIBEXE = $(COMPILER_PATH)lib
|
||||
LINK = $(COMPILER_PATH)link
|
||||
RC = $(MSDEVTOOLS_PATH)link
|
||||
LINK32 = $(LINK)
|
||||
RSC = $(RC)
|
||||
# unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake
|
||||
NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
CC_VER = UNKNOWN
|
||||
CC_TYPE = UNKNOWN
|
||||
else
|
||||
CC_VER = UNKNOWN
|
||||
CC_TYPE = UNKNOWN
|
||||
endif
|
||||
_LINK_VER :=$(shell $(LINK) 2>&1 | $(HEAD) -n 1)
|
||||
LINK_VER :=$(call GetVersion,"$(_LINK_VER)")
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM), linux)
|
||||
|
||||
# Settings specific to Linux
|
||||
CC = $(COMPILER_PATH)gcc
|
||||
CPP = $(COMPILER_PATH)gcc -E
|
||||
# statically link libstdc++ before C++ ABI is stablized on Linux
|
||||
STATIC_CXX = true
|
||||
ifeq ($(STATIC_CXX),true)
|
||||
# g++ always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++"
|
||||
# We need to use gcc to statically link the C++ runtime. gcc and g++ use
|
||||
# the same subprocess to compile C++ files, so it is OK to build using gcc.
|
||||
CXX = $(COMPILER_PATH)gcc
|
||||
else
|
||||
CXX = $(COMPILER_PATH)g++
|
||||
endif
|
||||
ifeq ($(ZERO_BUILD), true)
|
||||
# zero
|
||||
REQUIRED_CC_VER = 3.2
|
||||
REQUIRED_GCC_VER = 3.2.*
|
||||
else
|
||||
ifneq ("$(findstring sparc,$(ARCH))", "")
|
||||
# sparc or sparcv9
|
||||
REQUIRED_CC_VER = 4.0
|
||||
else
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
# i586
|
||||
REQUIRED_CC_VER = 3.2
|
||||
else
|
||||
ifeq ($(ARCH), amd64)
|
||||
# amd64
|
||||
REQUIRED_CC_VER = 3.2
|
||||
endif
|
||||
ifeq ($(ARCH), ia64)
|
||||
# ia64
|
||||
REQUIRED_CC_VER = 3.2
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
# Option used to create a shared library
|
||||
SHARED_LIBRARY_FLAG = -shared -mimpure-text
|
||||
SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 )
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
|
||||
# Settings specific to Solaris
|
||||
CC = $(COMPILER_PATH)gcc
|
||||
CPP = $(COMPILER_PATH)gcc -E
|
||||
CXX = $(COMPILER_PATH)g++
|
||||
REQUIRED_CC_VER = 3.2
|
||||
|
||||
# Option used to create a shared library
|
||||
SHARED_LIBRARY_FLAG = -G
|
||||
|
||||
endif
|
||||
|
||||
# Get gcc version
|
||||
_CC_VER :=$(shell $(CC) -dumpversion 2>&1 )
|
||||
CC_VER :=$(call GetVersion,"$(_CC_VER)")
|
||||
|
||||
@@ -1,186 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
#
|
||||
# MSVC Compiler settings
|
||||
#
|
||||
|
||||
ifeq ($(PLATFORM), windows)
|
||||
CC = $(COMPILER_PATH)cl
|
||||
CPP = $(COMPILER_PATH)cl
|
||||
CXX = $(COMPILER_PATH)cl
|
||||
CCC = $(COMPILER_PATH)cl
|
||||
LIBEXE = $(COMPILER_PATH)lib
|
||||
LINK = $(COMPILER_PATH)link
|
||||
RC = $(MSDEVTOOLS_PATH)rc
|
||||
LINK32 = $(LINK)
|
||||
RSC = $(RC)
|
||||
|
||||
# Fill in unknown values
|
||||
COMPILER_NAME=Unknown MSVC Compiler
|
||||
COMPILER_VERSION=
|
||||
REQUIRED_CC_VER=
|
||||
REQUIRED_LINK_VER=
|
||||
|
||||
# unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake
|
||||
NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo
|
||||
|
||||
# Compiler version and type (Always get word after "Version")
|
||||
ifndef CC_VER
|
||||
CC_VER := $(shell $(CC) 2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/' | $(NAWK) '{print $$2}')
|
||||
export CC_VER
|
||||
endif
|
||||
|
||||
# SDK-64 and MSVC6 put REBASE.EXE in a different places - go figure...
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
ifndef LINK_VER
|
||||
LINK_VER := $(shell $(LINK) | $(HEAD) -n 1 | $(NAWK) '{print $$6}')
|
||||
export LINK_VER
|
||||
endif
|
||||
CC_MAJORVER :=$(call MajorVersion,$(CC_VER))
|
||||
ifeq ($(CC_MAJORVER), 13)
|
||||
# This should be: CC_VER=13.10.3077 LINK_VER=7.10.3077
|
||||
REQUIRED_CC_VER = 13.10.3077
|
||||
REQUIRED_LINK_VER = 7.10.3077
|
||||
COMPILER_NAME=Visual Studio .NET 2003 Professional C++
|
||||
COMPILER_VERSION=VS2003
|
||||
REBASE = $(COMPILER_PATH)../../Common7/Tools/Bin/rebase
|
||||
MTL = $(COMPILER_PATH)../../Common7/Tools/Bin/midl
|
||||
ifndef COMPILER_PATH
|
||||
COMPILER_PATH := $(error COMPILER_PATH cannot be empty here)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(CC_MAJORVER), 14)
|
||||
# This should be: CC_VER=14.00.50727.42 LINK_VER=8.00.50727.42
|
||||
REQUIRED_CC_VER = 14.00.50727.42
|
||||
REQUIRED_LINK_VER = 8.00.50727.42
|
||||
COMPILER_NAME=Visual Studio 8
|
||||
COMPILER_VERSION=VS2005
|
||||
REBASE = $(COMPILER_PATH)../../Common8/Tools/Bin/rebase
|
||||
MTL = $(COMPILER_PATH)../../Common8/Tools/Bin/midl
|
||||
ifndef COMPILER_PATH
|
||||
COMPILER_PATH := $(error COMPILER_PATH cannot be empty here)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(CC_MAJORVER), 15)
|
||||
# This should be: CC_VER=15.00.21022.08 LINK_VER=9.00.21022.08
|
||||
REQUIRED_CC_VER = 15.00.21022.08
|
||||
REQUIRED_LINK_VER = 9.00.21022.08
|
||||
COMPILER_NAME=Visual Studio 9
|
||||
COMPILER_VERSION=VS2008
|
||||
#rebase and midl moved out of Visual Studio into the SDK:
|
||||
REBASE = $(MSDEVTOOLS_PATH)/rebase
|
||||
MTL = $(MSDEVTOOLS_PATH)/midl.exe
|
||||
ifndef COMPILER_PATH
|
||||
COMPILER_PATH := $(error COMPILER_PATH cannot be empty here)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(CC_MAJORVER), 16)
|
||||
# This should be: CC_VER=16.00.30319.01 LINK_VER=10.00.30319.01
|
||||
REQUIRED_CC_VER = 16.00.30319.01
|
||||
REQUIRED_LINK_VER = 10.00.30319.01
|
||||
COMPILER_NAME=Visual Studio 10
|
||||
COMPILER_VERSION=VS2010
|
||||
#rebase and midl moved out of Visual Studio into the SDK:
|
||||
REBASE = $(MSDEVTOOLS_PATH)/rebase
|
||||
MTL = $(MSDEVTOOLS_PATH)/midl.exe
|
||||
ifndef COMPILER_PATH
|
||||
COMPILER_PATH := $(error COMPILER_PATH cannot be empty here)
|
||||
endif
|
||||
endif
|
||||
else
|
||||
# else ARCH_DATA_MODEL is 64
|
||||
ifndef LINK_VER
|
||||
LINK_VER := $(shell $(LINK) | $(HEAD) -n 1 | $(NAWK) '{print $$6}')
|
||||
export LINK_VER
|
||||
endif
|
||||
CC_MAJORVER :=$(call MajorVersion,$(CC_VER))
|
||||
CC_MINORVER :=$(call MinorVersion,$(CC_VER))
|
||||
CC_MICROVER :=$(call MicroVersion,$(CC_VER))
|
||||
ifeq ($(ARCH), ia64)
|
||||
REQUIRED_CC_VER = 13.00.9337.7
|
||||
REQUIRED_LINK_VER = 7.00.9337.7
|
||||
endif
|
||||
ifeq ($(ARCH), amd64)
|
||||
REQUIRED_CC_VER = 14.00.40310.41
|
||||
REQUIRED_LINK_VER = 8.00.40310.39
|
||||
endif
|
||||
ifeq ($(CC_MAJORVER), 13)
|
||||
ifeq ($(ARCH), ia64)
|
||||
# This should be: CC_VER=13.00.9337.7 LINK_VER=7.00.9337.7
|
||||
COMPILER_NAME=Microsoft Platform SDK - November 2001 Edition
|
||||
COMPILER_VERSION=VS2003
|
||||
endif
|
||||
endif
|
||||
ifeq ($(CC_MAJORVER), 14)
|
||||
ifeq ($(ARCH), amd64)
|
||||
ifeq ($(CC_MICROVER), 30701)
|
||||
# This should be: CC_VER=14.00.30701 LINK_VER=8.00.30701
|
||||
# WARNING: it says 14, but it is such an early build it doesn't
|
||||
# have all the VS2005 compiler option changes, so treat
|
||||
# this like a VS2003 compiler.
|
||||
COMPILER_NAME=Microsoft Platform SDK - February 2003 Edition
|
||||
COMPILER_VERSION=VS2003
|
||||
else
|
||||
# This should be: CC_VER=14.00.40310.41 LINK_VER=8.00.40310.39
|
||||
COMPILER_NAME=Microsoft Platform SDK - April 2005 Edition (3790.1830)
|
||||
COMPILER_VERSION=VS2005
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifeq ($(CC_MAJORVER), 15)
|
||||
# This should be: CC_VER=15.00.21022.8 LINK_VER=9.00.21022.8
|
||||
REQUIRED_CC_VER = 15.00.21022.8
|
||||
REQUIRED_LINK_VER = 9.00.21022.8
|
||||
COMPILER_NAME=Windows SDK 6.1 Visual Studio 9
|
||||
COMPILER_VERSION=VS2008
|
||||
RC = $(MSSDK61)/bin/x64/rc
|
||||
REBASE = $(MSSDK61)/bin/x64/rebase
|
||||
else
|
||||
ifeq ($(CC_MAJORVER), 16)
|
||||
# This should be: CC_VER=16.00.30319.01 LINK_VER=9.00.30319.01
|
||||
REQUIRED_CC_VER = 16.00.30319.01
|
||||
REQUIRED_LINK_VER = 10.00.30319.01
|
||||
COMPILER_NAME=Microsoft Visual Studio 10
|
||||
COMPILER_VERSION=VS2010
|
||||
RC = $(MSSDK7)/bin/x64/rc
|
||||
REBASE = $(MSSDK7)/bin/x64/rebase
|
||||
else
|
||||
# This will cause problems if ALT_COMPILER_PATH is defined to ""
|
||||
# which is a directive to use the PATH.
|
||||
REBASE = $(COMPILER_PATH)../REBASE
|
||||
endif
|
||||
endif
|
||||
ifndef COMPILER_PATH
|
||||
COMPILER_PATH := $(error COMPILER_PATH cannot be empty here)
|
||||
endif
|
||||
endif
|
||||
ifndef COMPILER_VERSION
|
||||
COMPILER_VERSION := $(error COMPILER_VERSION cannot be empty here)
|
||||
endif
|
||||
# Shared library generation flag
|
||||
SHARED_LIBRARY_FLAG = -LD
|
||||
endif
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
#
|
||||
# Sun Studio Compiler settings
|
||||
#
|
||||
|
||||
COMPILER_NAME=Sun Studio
|
||||
|
||||
# Sun Studio Compiler settings specific to Solaris
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
COMPILER_VERSION=SS12
|
||||
REQUIRED_CC_VER=5.9
|
||||
CC = $(COMPILER_PATH)cc
|
||||
CPP = $(COMPILER_PATH)cc -E
|
||||
CXX = $(COMPILER_PATH)CC
|
||||
LINT = $(COMPILER_PATH)lint
|
||||
# Option used to create a shared library
|
||||
SHARED_LIBRARY_FLAG = -G
|
||||
endif
|
||||
|
||||
# Sun Studio Compiler settings specific to Linux
|
||||
ifeq ($(PLATFORM), linux)
|
||||
# This has not been tested
|
||||
COMPILER_VERSION=SS12
|
||||
REQUIRED_CC_VER=5.9
|
||||
CC = $(COMPILER_PATH)cc
|
||||
CPP = $(COMPILER_PATH)cc -E
|
||||
CXX = $(COMPILER_PATH)CC
|
||||
LINT = $(COMPILER_PATH)lint
|
||||
# statically link libstdc++ before C++ ABI is stablized on Linux
|
||||
STATIC_CXX = true
|
||||
ifeq ($(STATIC_CXX),true)
|
||||
# CC always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++"
|
||||
# We need to use cc to statically link the C++ runtime.
|
||||
CXX = $(COMPILER_PATH)cc
|
||||
else
|
||||
CXX = $(COMPILER_PATH)CC
|
||||
endif
|
||||
# Option used to create a shared library
|
||||
SHARED_LIBRARY_FLAG = -G
|
||||
endif
|
||||
|
||||
# Get compiler version
|
||||
_CC_VER :=$(shell $(CC) -V 2>&1 | $(HEAD) -n 1)
|
||||
CC_VER :=$(call GetVersion,"$(_CC_VER)")
|
||||
|
||||
@@ -42,7 +42,7 @@ else
|
||||
endif
|
||||
|
||||
#
|
||||
# All java tools (javac, javah, and javadoc) run faster with certain java
|
||||
# All java tools (javac and javadoc) run faster with certain java
|
||||
# options, this macro should be used with all these tools.
|
||||
# In particular, the client VM makes these tools run faster when
|
||||
# it's available.
|
||||
@@ -134,21 +134,14 @@ JAVACFLAGS += -encoding ascii
|
||||
JAVACFLAGS += -classpath $(BOOTDIR)/lib/tools.jar
|
||||
JAVACFLAGS += $(OTHER_JAVACFLAGS)
|
||||
|
||||
# Needed for javah
|
||||
JAVAHFLAGS += -classpath $(CLASSBINDIR)
|
||||
|
||||
# Langtools
|
||||
ifdef LANGTOOLS_DIST
|
||||
JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar
|
||||
JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar
|
||||
JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar
|
||||
DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar
|
||||
JAVAC_CMD = $(BOOT_JAVA_CMD) \
|
||||
"-Xbootclasspath/p:$(JAVAC_JAR)" \
|
||||
-jar $(JAVAC_JAR) $(JAVACFLAGS)
|
||||
JAVAH_CMD = $(BOOT_JAVA_CMD) \
|
||||
"-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \
|
||||
-jar $(JAVAH_JAR) $(JAVAHFLAGS)
|
||||
JAVADOC_CMD = $(BOOT_JAVA_CMD) \
|
||||
"-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \
|
||||
-jar $(JAVADOC_JAR)
|
||||
@@ -156,8 +149,6 @@ else
|
||||
# If no explicit tools, use boot tools (add VM flags in this case)
|
||||
JAVAC_CMD = $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \
|
||||
$(JAVACFLAGS)
|
||||
JAVAH_CMD = $(JAVA_TOOLS_DIR)/javah \
|
||||
$(JAVAHFLAGS)
|
||||
JAVADOC_CMD = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%)
|
||||
endif
|
||||
|
||||
|
||||
@@ -94,14 +94,6 @@ else
|
||||
JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools
|
||||
endif
|
||||
|
||||
# COMPILER_PATH: path to where the compiler and tools are installed.
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifneq "$(origin ALT_COMPILER_PATH)" "undefined"
|
||||
COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH))
|
||||
else
|
||||
COMPILER_PATH =/usr/bin/
|
||||
endif
|
||||
|
||||
# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.)
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined"
|
||||
|
||||
@@ -86,24 +86,6 @@ else
|
||||
JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools
|
||||
endif
|
||||
|
||||
# COMPILER_PATH: path to where the compiler and tools are installed.
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifneq "$(origin ALT_COMPILER_PATH)" "undefined"
|
||||
COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH))
|
||||
else
|
||||
# Careful here, COMPILER_VERSION may not be defined yet (see Compiler.gmk)
|
||||
# If the place where we keep a set of Sun Studio compilers doesn't exist,
|
||||
# try and use /opt/SUNWspro, the default location for the SS compilers.
|
||||
# (DirExists checks for this path twice, an automount double check)
|
||||
_SUNSTUDIO_SET_ROOT=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/SUNWspro
|
||||
SUNSTUDIO_SET_ROOT:=$(call DirExists,$(_SUNSTUDIO_SET_ROOT),$(_SUNSTUDIO_SET_ROOT),)
|
||||
ifneq ($(SUNSTUDIO_SET_ROOT),)
|
||||
COMPILER_PATH =$(SUNSTUDIO_SET_ROOT)/$(COMPILER_VERSION)/bin/
|
||||
else
|
||||
COMPILER_PATH =/opt/SUNWspro/bin/
|
||||
endif
|
||||
endif
|
||||
|
||||
# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.)
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined"
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
# Level: Default is 3, 0 means none, 4 is the most but may be unreliable
|
||||
# Some makefiles may have set this to 0 to turn off warnings completely,
|
||||
# which also effectively creates a COMPILER_WARNINGS_FATAL=false situation.
|
||||
# Program.gmk may turn this down to 2 (building .exe's).
|
||||
# Windows 64bit platforms are less likely to be warning free.
|
||||
# Historically, Windows 32bit builds should be mostly warning free.
|
||||
ifndef COMPILER_WARNING_LEVEL
|
||||
@@ -74,7 +73,7 @@ override INCREMENTAL_BUILD = false
|
||||
# The ALT values should never really have spaces or use \.
|
||||
# Suspect these environment variables to have spaces and/or \ characters:
|
||||
# SYSTEMROOT, SystemRoot, WINDIR, windir, PROGRAMFILES, ProgramFiles,
|
||||
# MSTOOLS, Mstools, MSSDK, MSSdk, VC71COMNTOOLS,
|
||||
# VC71COMNTOOLS,
|
||||
# MSVCDIR, MSVCDir.
|
||||
# So use $(subst \,/,) on them first adding quotes and placing them in
|
||||
# their own variable assigned with :=, then use FullPath.
|
||||
@@ -201,124 +200,6 @@ ifndef SHORTPROGRAMFILES
|
||||
export SHORTPROGRAMFILES
|
||||
endif
|
||||
|
||||
# Compilers, SDK, and Visual Studio (MSDEV) [32bit is different from 64bit]
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
ifndef SHORTMSVCDIR
|
||||
# Try looking in MSVCDIR or MSVCDir area first (set by vcvars32.bat)
|
||||
ifdef MSVCDIR
|
||||
xMSVCDIR :="$(subst \,/,$(MSVCDIR))"
|
||||
SHORTMSVCDIR :=$(call FullPath,$(xMSVCDIR))
|
||||
else
|
||||
ifdef MSVCDir
|
||||
xMSVCDIR :="$(subst \,/,$(MSVCDir))"
|
||||
SHORTMSVCDIR :=$(call FullPath,$(xMSVCDIR))
|
||||
else
|
||||
ifneq ($(SHORTPROGRAMFILES),)
|
||||
xMSVCDIR :="$(SHORTPROGRAMFILES)/Microsoft Visual Studio .NET 2003/Vc7"
|
||||
SHORTMSVCDIR :=$(call FullPath,$(xMSVCDIR))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifneq ($(subst MSDev98,OLDOLDOLD,$(SHORTMSVCDIR)),$(SHORTMSVCDIR))
|
||||
SHORTMSVCDIR :=
|
||||
endif
|
||||
# If we still don't have it, look for VS100COMNTOOLS, setup by installer?
|
||||
ifeq ($(SHORTMSVCDIR),)
|
||||
ifdef VS100COMNTOOLS # /Common/Tools directory, use ../../Vc
|
||||
xVS100COMNTOOLS :="$(subst \,/,$(VS100COMNTOOLS))"
|
||||
_vs100tools :=$(call FullPath,$(xVS100COMNTOOLS))
|
||||
endif
|
||||
ifneq ($(_vs100tools),)
|
||||
SHORTMSVCDIR :=$(_vs100tools)/../../Vc
|
||||
endif
|
||||
endif
|
||||
export SHORTMSVCDIR
|
||||
# If we still don't have it, look for VS71COMNTOOLS, setup by installer?
|
||||
ifeq ($(SHORTMSVCDIR),)
|
||||
ifdef VS71COMNTOOLS # /Common/Tools directory, use ../../Vc7
|
||||
xVS71COMNTOOLS :="$(subst \,/,$(VS71COMNTOOLS))"
|
||||
_vs71tools :=$(call FullPath,$(xVS71COMNTOOLS))
|
||||
endif
|
||||
ifneq ($(_vs71tools),)
|
||||
SHORTMSVCDIR :=$(_vs71tools)/../../Vc7
|
||||
endif
|
||||
endif
|
||||
export SHORTMSVCDIR
|
||||
endif
|
||||
ifneq ($(SHORTMSVCDIR),)
|
||||
SHORTCOMPILERBIN :=$(SHORTMSVCDIR)/Bin
|
||||
SHORTPSDK :=$(SHORTMSVCDIR)/PlatformSDK
|
||||
export SHORTCOMPILERBIN
|
||||
export SHORTPSDK
|
||||
endif
|
||||
endif
|
||||
|
||||
# The Microsoft Platform SDK installed by itself
|
||||
ifneq ($(SHORTPROGRAMFILES),)
|
||||
ifndef SHORTPSDK
|
||||
xPSDK :="$(SHORTPROGRAMFILES)/Microsoft Platform SDK"
|
||||
SHORTPSDK :=$(call FullPath,$(xPSDK))
|
||||
ifeq ($(SHORTPSDK),)
|
||||
xPSDK :="$(SHORTPROGRAMFILES)/Microsoft SDK"
|
||||
SHORTPSDK :=$(call FullPath,$(xMSSDK))
|
||||
endif
|
||||
export SHORTPSDK
|
||||
endif
|
||||
endif
|
||||
|
||||
# If no SDK found yet, look in other places
|
||||
ifndef SHORTPSDK
|
||||
ifdef MSSDK
|
||||
xMSSDK :="$(subst \,/,$(MSSDK))"
|
||||
SHORTPSDK :=$(call FullPath,$(xMSSDK))
|
||||
else
|
||||
ifdef MSSdk
|
||||
xMSSDK :="$(subst \,/,$(MSSdk))"
|
||||
SHORTPSDK :=$(call FullPath,$(xMSSDK))
|
||||
endif
|
||||
endif
|
||||
export SHORTPSDK
|
||||
endif
|
||||
|
||||
# Compilers for 64bit are from SDK
|
||||
ifeq ($(ARCH_DATA_MODEL), 64)
|
||||
ifndef SHORTCOMPILERBIN
|
||||
ifdef VS100COMNTOOLS # /Common7/Tools directory, use ../../Vc
|
||||
xVS100COMNTOOLS :="$(subst \,/,$(VS100COMNTOOLS))"
|
||||
_vs100tools :=$(call FullPath,$(xVS100COMNTOOLS))
|
||||
endif
|
||||
ifneq ($(_vs100tools),)
|
||||
SHORTCOMPILERBIN :=$(_vs100tools)/../../Vc/bin/amd64
|
||||
xMSSDK70 :="C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/"
|
||||
MSSDK7 :=$(call FullPath,$(xMSSDK70))
|
||||
export MSSDK7
|
||||
else
|
||||
xMSSDK61 :="C:/Program Files/Microsoft SDKs/Windows/v6.1/"
|
||||
MSSDK61 :=$(call FullPath,$(xMSSDK61))
|
||||
xVS2008 :="C:/Program Files (x86)/Microsoft Visual Studio 9.0/"
|
||||
_vs2008 :=$(call FullPath,$(xVS2008))
|
||||
ifneq ($(_vs2008),)
|
||||
ifeq ($(ARCH), ia64)
|
||||
SHORTCOMPILERBIN :=$(_vs2008)/VC/Bin/x86_ia64
|
||||
endif
|
||||
ifeq ($(ARCH), amd64)
|
||||
SHORTCOMPILERBIN :=$(_vs2008)/VC/Bin/$(ARCH)
|
||||
endif
|
||||
else
|
||||
ifneq ($(SHORTPSDK),)
|
||||
ifeq ($(ARCH), ia64)
|
||||
SHORTCOMPILERBIN :=$(SHORTPSDK)/Bin/Win64
|
||||
endif
|
||||
ifeq ($(ARCH), amd64)
|
||||
SHORTCOMPILERBIN :=$(SHORTPSDK)/Bin/Win64/x86/$(ARCH)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
export SHORTCOMPILERBIN
|
||||
endif
|
||||
endif
|
||||
|
||||
# Location on system where jdk installs might be
|
||||
ifneq ($(SHORTPROGRAMFILES),)
|
||||
USRJDKINSTANCES_PATH =$(SHORTPROGRAMFILES)/Java
|
||||
@@ -356,55 +237,6 @@ ifndef JDK_DEVTOOLS_DIR
|
||||
export JDK_DEVTOOLS_DIR
|
||||
endif
|
||||
|
||||
# COMPILER_PATH: path to where the compiler and tools are installed.
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifndef COMPILER_PATH
|
||||
ifdef ALT_COMPILER_PATH
|
||||
xALT_COMPILER_PATH :="$(subst \,/,$(ALT_COMPILER_PATH))"
|
||||
fxALT_COMPILER_PATH :=$(call FullPath,$(xALT_COMPILER_PATH))
|
||||
COMPILER_PATH :=$(call PrefixPath,$(fxALT_COMPILER_PATH))
|
||||
else
|
||||
COMPILER_PATH :=$(call PrefixPath,$(SHORTCOMPILERBIN))
|
||||
endif
|
||||
COMPILER_PATH :=$(call AltCheckSpaces,COMPILER_PATH)
|
||||
export COMPILER_PATH
|
||||
endif
|
||||
|
||||
# MSDEVTOOLS_PATH: path to where the additional MS Compiler tools are.
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifndef MSDEVTOOLS_PATH
|
||||
ifdef ALT_MSDEVTOOLS_PATH
|
||||
xALT_MSDEVTOOLS_PATH :="$(subst \,/,$(ALT_MSDEVTOOLS_PATH))"
|
||||
fxALT_MSDEVTOOLS_PATH :=$(call FullPath,$(xALT_MSDEVTOOLS_PATH))
|
||||
MSDEVTOOLS_PATH :=$(call PrefixPath,$(fxALT_MSDEVTOOLS_PATH))
|
||||
else
|
||||
ifeq ($(ARCH_DATA_MODEL), 64)
|
||||
ifdef MSTOOLS
|
||||
xMSTOOLS :="$(subst \,/,$(MSTOOLS))"
|
||||
_ms_tools :=$(call FullPath,$(xMSTOOLS))
|
||||
else
|
||||
ifdef Mstools
|
||||
xMSTOOLS :="$(subst \,/,$(Mstools))"
|
||||
_ms_tools :=$(call FullPath,$(xMSTOOLS))
|
||||
else
|
||||
_ms_tools :=
|
||||
endif
|
||||
endif
|
||||
ifneq ($(_ms_tools),)
|
||||
_ms_tools_bin :=$(_ms_tools)/Bin
|
||||
else
|
||||
# Assumes compiler bin is .../Bin/win64/x86/AMD64, rc.exe is 3 levels up
|
||||
_ms_tools_bin :=$(SHORTCOMPILERBIN)/../../..
|
||||
endif
|
||||
else
|
||||
_ms_tools_bin :=$(SHORTCOMPILERBIN)
|
||||
endif
|
||||
MSDEVTOOLS_PATH :=$(call PrefixPath,$(_ms_tools_bin))
|
||||
endif
|
||||
MSDEVTOOLS_PATH:=$(call AltCheckSpaces,MSDEVTOOLS_PATH)
|
||||
export MSDEVTOOLS_PATH
|
||||
endif
|
||||
|
||||
# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.)
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifndef DEVTOOLS_PATH
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
# Get shared system utilities macros defined
|
||||
include $(BUILDDIR)/common/shared/Defs-utils.gmk
|
||||
|
||||
# Assumes ARCH, PLATFORM, ARCH_VM_SUBDIR, etc. have been defined.
|
||||
# Assumes ARCH, PLATFORM, etc. have been defined.
|
||||
|
||||
# Simple pwd path
|
||||
define PwdPath
|
||||
@@ -157,7 +157,6 @@ endef
|
||||
_check_values:=\
|
||||
$(call CheckValue,ARCH,),\
|
||||
$(call CheckValue,ARCH_DATA_MODEL,),\
|
||||
$(call CheckValue,ARCH_VM_SUBDIR,),\
|
||||
$(call CheckValue,VARIANT,),\
|
||||
$(call CheckValue,PLATFORM,)
|
||||
|
||||
@@ -194,21 +193,15 @@ endif
|
||||
# can be OPT or DBG, default is OPT
|
||||
# Determine the extra pattern to add to the release name for debug/fastdebug.
|
||||
# Determine the JDK_IMPORT_VARIANT, so we get the right VM files copied over.
|
||||
# Determine suffix for obj directory or OBJDIR, for .o files.
|
||||
# (by keeping .o files separate, just .o files, they don't clobber each
|
||||
# other, however, the library files will clobber each other).
|
||||
#
|
||||
ifeq ($(VARIANT), DBG)
|
||||
BUILD_VARIANT_RELEASE=-debug
|
||||
OBJDIRNAME_SUFFIX=_g
|
||||
else
|
||||
BUILD_VARIANT_RELEASE=
|
||||
OBJDIRNAME_SUFFIX=
|
||||
endif
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
VARIANT=DBG
|
||||
BUILD_VARIANT_RELEASE=-fastdebug
|
||||
OBJDIRNAME_SUFFIX=_gO
|
||||
_JDK_IMPORT_VARIANT=/fastdebug
|
||||
endif
|
||||
|
||||
@@ -330,6 +323,4 @@ BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR)
|
||||
# Absolute path to output directory
|
||||
ABS_OUTPUTDIR:=$(call FullPath,$(OUTPUTDIR))
|
||||
|
||||
# Get shared compiler settings
|
||||
include $(BUILDDIR)/common/shared/Compiler.gmk
|
||||
|
||||
|
||||
@@ -58,19 +58,10 @@ PLATFORM_SHARED=done
|
||||
# ARCH sparc, sparcv9, i586, amd64, or ia64
|
||||
# ARCH_FAMILY sparc or i586
|
||||
# ARCHPROP sparc or x86
|
||||
# ARCH_VM_SUBDIR jre/bin, jre/lib/sparc, etc.
|
||||
# LIBARCH sparc, sparcv9, i386, amd64, or ia64
|
||||
# DEV_NULL destination of /dev/null, NUL or /dev/NULL
|
||||
# CLASSPATH_SEPARATOR separator in classpath, ; or :
|
||||
# LIB_PREFIX dynamic or static library prefix, lib or empty
|
||||
# LIB_SUFFIX static library file suffix, .lib or .a?
|
||||
# LIBRARY_SUFFIX dynamic library file suffix, .dll or .so
|
||||
# OBJECT_SUFFIX object file suffix, .o or .obj
|
||||
# EXE_SUFFIX executable file suffix, .exe or empty
|
||||
# BUNDLE_FILE_SUFFIX suffix for bundles: .tar or .tar.gz
|
||||
# ISA_DIR solaris only: /sparcv9 or /amd64
|
||||
# LIBARCH32 solaris only: sparc or i386
|
||||
# LIBARCH64 solaris only: sparcv9 or amd64
|
||||
# REQUIRED_WINDOWS_NAME windows only: basic name of windows
|
||||
# REQUIRED_WINDOWS_VERSION windows only: specific version of windows
|
||||
# USING_CYGWIN windows only: true or false
|
||||
@@ -129,7 +120,6 @@ ifeq ($(SYSTEM_UNAME), SunOS)
|
||||
# Need to maintain the jre/lib/i386 location for 32-bit Intel
|
||||
ifeq ($(ARCH), i586)
|
||||
ARCH_FAMILY = $(ARCH)
|
||||
LIBARCH = i386
|
||||
# Value of Java os.arch property
|
||||
ARCHPROP = x86
|
||||
else
|
||||
@@ -138,17 +128,8 @@ ifeq ($(SYSTEM_UNAME), SunOS)
|
||||
else
|
||||
ARCH_FAMILY = sparc
|
||||
endif
|
||||
LIBARCH = $(ARCH)
|
||||
# Value of Java os.arch property
|
||||
ARCHPROP = $(LIBARCH)
|
||||
endif
|
||||
# The two LIBARCH names
|
||||
ifeq ($(ARCH_FAMILY), sparc)
|
||||
LIBARCH32 = sparc
|
||||
LIBARCH64 = sparcv9
|
||||
else
|
||||
LIBARCH32 = i386
|
||||
LIBARCH64 = amd64
|
||||
ARCHPROP = $(ARCH)
|
||||
endif
|
||||
# Suffix for file bundles used in previous release
|
||||
BUNDLE_FILE_SUFFIX=.tar
|
||||
@@ -218,16 +199,12 @@ ifeq ($(SYSTEM_UNAME), Linux)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Need to maintain the jre/lib/i386 location for 32-bit Intel
|
||||
ifeq ($(ARCH), i586)
|
||||
LIBARCH = i386
|
||||
ARCHPROP = i386
|
||||
else
|
||||
LIBARCH = $(ARCH)
|
||||
ARCHPROP = $(ARCH)
|
||||
endif
|
||||
|
||||
# Value of Java os.arch property
|
||||
ARCHPROP = $(LIBARCH)
|
||||
|
||||
# Suffix for file bundles used in previous release
|
||||
BUNDLE_FILE_SUFFIX=.tar.gz
|
||||
# Minimum disk space needed as determined by running 'du -sk' on
|
||||
@@ -303,9 +280,7 @@ ifeq ($(PLATFORM), windows)
|
||||
endif
|
||||
endif
|
||||
export ARCH_DATA_MODEL
|
||||
# LIBARCH is used to preserve the jre/lib/i386 directory name for 32-bit intel
|
||||
ARCH=i586
|
||||
LIBARCH=i386
|
||||
# Value of Java os.arch property
|
||||
ARCHPROP=x86
|
||||
REQUIRED_WINDOWS_NAME=Windows Professional 2000
|
||||
@@ -323,9 +298,8 @@ ifeq ($(PLATFORM), windows)
|
||||
ARCH=ia64
|
||||
endif
|
||||
endif
|
||||
LIBARCH=$(ARCH)
|
||||
# Value of Java os.arch property
|
||||
ARCHPROP=$(LIBARCH)
|
||||
ARCHPROP=$(ARCH)
|
||||
endif
|
||||
ARCH_FAMILY = $(ARCH)
|
||||
# Where is unwanted output to be delivered?
|
||||
@@ -337,14 +311,6 @@ ifeq ($(PLATFORM), windows)
|
||||
export DEV_NULL
|
||||
# Classpath separator
|
||||
CLASSPATH_SEPARATOR = ;
|
||||
# The suffix used for object file (.o for unix .obj for windows)
|
||||
OBJECT_SUFFIX = obj
|
||||
# The suffix applied to executables (.exe for windows, nothing for solaris)
|
||||
EXE_SUFFIX = .exe
|
||||
# The prefix applied to library files (lib for solaris, nothing for windows)
|
||||
LIB_PREFIX=
|
||||
LIBRARY_SUFFIX = dll
|
||||
LIB_SUFFIX = lib
|
||||
# User name determination (set _USER)
|
||||
ifndef USER
|
||||
ifdef USERNAME
|
||||
@@ -359,8 +325,6 @@ ifeq ($(PLATFORM), windows)
|
||||
else
|
||||
_USER:=$(USER)
|
||||
endif
|
||||
# Location of client/server directories
|
||||
ARCH_VM_SUBDIR=jre/bin
|
||||
# Suffix for file bundles used in previous release
|
||||
BUNDLE_FILE_SUFFIX=.tar
|
||||
# Minimum disk space needed as determined by running 'du -sk' on
|
||||
@@ -430,16 +394,6 @@ ifneq ($(PLATFORM), windows)
|
||||
export DEV_NULL
|
||||
# Character used between entries in classpath
|
||||
CLASSPATH_SEPARATOR = :
|
||||
# suffix used for object file (.o for unix .obj for windows)
|
||||
OBJECT_SUFFIX = o
|
||||
# The suffix applied to runtime libraries
|
||||
LIBRARY_SUFFIX = so
|
||||
# The suffix applied to link libraries
|
||||
LIB_SUFFIX = so
|
||||
# The suffix applied to executables (.exe for windows, nothing for solaris)
|
||||
EXE_SUFFIX =
|
||||
# The prefix applied to library files (lib for solaris, nothing for windows)
|
||||
LIB_PREFIX = lib
|
||||
# User name determination (set _USER)
|
||||
ifndef USER
|
||||
ifdef LOGNAME
|
||||
@@ -450,8 +404,6 @@ ifneq ($(PLATFORM), windows)
|
||||
else
|
||||
_USER:=$(USER)
|
||||
endif
|
||||
# Location of client/server directories
|
||||
ARCH_VM_SUBDIR=jre/lib/$(LIBARCH)
|
||||
endif
|
||||
|
||||
# If blanks in the username, use the first 4 words and pack them together
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2006, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -24,29 +24,13 @@
|
||||
#
|
||||
|
||||
# Properties for jprt
|
||||
jprt.tools.default.release=jdk1.7.0
|
||||
|
||||
# Specific platform list
|
||||
jprt.build.platforms=\
|
||||
solaris_sparc_5.10,\
|
||||
solaris_sparcv9_5.10,\
|
||||
solaris_i586_5.10,\
|
||||
solaris_x64_5.10,\
|
||||
linux_i586_2.6,\
|
||||
linux_x64_2.6,\
|
||||
windows_i586_5.0,\
|
||||
windows_x64_5.2
|
||||
# Use whatever release that the submitted job requests
|
||||
jprt.tools.default.release=${jprt.submit.release}
|
||||
|
||||
# The different build flavors we want
|
||||
# The different build flavors we want, we override here so we just get these 2
|
||||
jprt.build.flavors=product,fastdebug
|
||||
|
||||
# Explicitly designate what the 32bit match is for the 64bit build
|
||||
jprt.solaris_sparcv9.build.platform.match32=solaris_sparc_5.10
|
||||
jprt.solaris_sparcv9_5.10.build.platform.match32=solaris_sparc_5.10
|
||||
jprt.solaris_x64.build.platform.match32=solaris_i586_5.10
|
||||
jprt.solaris_x64_5.10.build.platform.match32=solaris_i586_5.10
|
||||
|
||||
# Directories needed to build
|
||||
jprt.bundle.src.dirs=make src
|
||||
jprt.bundle.exclude.src.dirs=build dist
|
||||
# Directories to be excluded from the source bundles
|
||||
jprt.bundle.exclude.src.dirs=build dist webrev
|
||||
|
||||
|
||||
@@ -32,12 +32,6 @@ PACKAGE = com.sun.tools.corba.se.idl
|
||||
PRODUCT = sun
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
# This program must contain a manifest that defines the execution level
|
||||
# needed to follow standard Vista User Access Control Guidelines
|
||||
# This must be set before Program.gmk is included
|
||||
#
|
||||
BUILD_MANIFEST=true
|
||||
|
||||
#
|
||||
# Files
|
||||
#
|
||||
|
||||
@@ -75,7 +75,7 @@ public class CorbaResourceUtil {
|
||||
args[1] = (arg1 != null ? arg1.toString() : "null");
|
||||
args[2] = (arg2 != null ? arg2.toString() : "null");
|
||||
|
||||
return java.text.MessageFormat.format(format, args);
|
||||
return java.text.MessageFormat.format(format, (Object[]) args);
|
||||
}
|
||||
|
||||
private static boolean resourcesInitialized = false;
|
||||
|
||||
@@ -350,7 +350,7 @@ public final class ObjectUtility {
|
||||
|
||||
if (useToString) {
|
||||
try {
|
||||
cls.getDeclaredMethod( "toString", null ) ;
|
||||
cls.getDeclaredMethod( "toString", (Class[])null ) ;
|
||||
return true ;
|
||||
} catch (Exception exc) {
|
||||
return false ;
|
||||
|
||||
@@ -108,8 +108,8 @@ public class ExceptionHandlerImpl implements ExceptionHandler
|
||||
|
||||
try {
|
||||
helperClass = Class.forName( helperName, true, loader ) ;
|
||||
Method idMethod = helperClass.getDeclaredMethod( "id", null ) ;
|
||||
setId( (String)idMethod.invoke( null, null ) ) ;
|
||||
Method idMethod = helperClass.getDeclaredMethod( "id", (Class[])null ) ;
|
||||
setId( (String)idMethod.invoke( null, (Object[])null ) ) ;
|
||||
} catch (Exception ex) {
|
||||
throw wrapper.badHelperIdMethod( ex, helperName ) ;
|
||||
}
|
||||
|
||||
@@ -589,7 +589,7 @@ abstract public class ORB {
|
||||
this.getClass().getMethod("create_operation_list", argc);
|
||||
|
||||
// OK, the method exists, so invoke it and be happy.
|
||||
Object[] argx = { oper };
|
||||
java.lang.Object[] argx = { oper };
|
||||
return (org.omg.CORBA.NVList)meth.invoke(this, argx);
|
||||
}
|
||||
catch( java.lang.reflect.InvocationTargetException exs ) {
|
||||
|
||||
@@ -187,7 +187,7 @@ public final class Bridge
|
||||
try {
|
||||
// Invoke the ObjectInputStream.latestUserDefinedLoader method
|
||||
return (ClassLoader)latestUserDefinedLoaderMethod.invoke(null,
|
||||
NO_ARGS);
|
||||
(Object[])NO_ARGS);
|
||||
} catch (InvocationTargetException ite) {
|
||||
Error err = new Error(
|
||||
"sun.corba.Bridge.latestUserDefinedLoader: " + ite ) ;
|
||||
|
||||
@@ -101,3 +101,25 @@ d38f45079fe98792a7381dbb4b64f5b589ec8c58 jdk7-b94
|
||||
573e8ea5fd68e8e51eb6308d283ac3b3889d15e0 jdk7-b96
|
||||
573e8ea5fd68e8e51eb6308d283ac3b3889d15e0 hs19-b02
|
||||
5f42499e57adc16380780f40541e1a66cd601891 jdk7-b97
|
||||
8a045b3f5c13eaad92ff4baf15ca671845fcad1a jdk7-b98
|
||||
6a236384a379642b5a2398e2819db9ab4e711e9b jdk7-b99
|
||||
ad1977f08c4d69162a0775fe3f9576b9fd521d10 jdk7-b100
|
||||
6c3a919105b68c15b7db923ec9a00006e9560910 jdk7-b101
|
||||
ad1977f08c4d69162a0775fe3f9576b9fd521d10 hs19-b03
|
||||
c5cadf1a07717955cf60dbaec16e35b529fd2cb0 jdk7-b102
|
||||
cb4250ef73b21de6c487ea14e2b0b99eed67b4b6 jdk7-b103
|
||||
e55900b5c1b865cac17e18abc639c7dc50de7fd8 hs19-b04
|
||||
b4acf10eb134fe930802c97e36db65e7ccb544b5 jdk7-b104
|
||||
6709c14587c2cc6faca208767335afeb01e33de5 jdk7-b105
|
||||
1b81ca701fa5fc30adc4cfdaa4bdd153df5e6c86 jdk7-b106
|
||||
cc3fdfeb54b049f18edcf3463e6ab051d0b7b609 hs19-b05
|
||||
688a538aa65412178286ae2a6b0c00b6711e121b hs19-b06
|
||||
bf496cbe9b74dda5975a1559da7ecfdd313e509e jdk7-b107
|
||||
0000000000000000000000000000000000000000 hs19-b06
|
||||
6c43216df13513a0f96532aa06f213066c49e27b hs19-b06
|
||||
e44a93947ccbfce712b51725f313163606f15486 jdk7-b108
|
||||
cc4bb3022b3144dc5db0805b9ef6c7eff2aa3b81 jdk7-b109
|
||||
2f25f2b8de2700a1822463b1bd3d02b5e218018f jdk7-b110
|
||||
07b042e13dde4f3479ba9ec55120fcd5e8623323 jdk7-b111
|
||||
5511edd5d719f3fc9fdd04879482026a3d2c8652 jdk7-b112
|
||||
beef35b96b81129c375d572357fb9548d9020db1 jdk7-b113
|
||||
|
||||
@@ -253,7 +253,11 @@ static bool read_lib_info(struct ps_prochandle* ph) {
|
||||
if (nwords > 5 && find_lib(ph, word[5]) == false) {
|
||||
intptr_t base;
|
||||
lib_info* lib;
|
||||
#ifdef _LP64
|
||||
sscanf(word[0], "%lx", &base);
|
||||
#else
|
||||
sscanf(word[0], "%x", &base);
|
||||
#endif
|
||||
if ((lib = add_lib_info(ph, word[5], (uintptr_t)base)) == NULL)
|
||||
continue; // ignore, add_lib_info prints error
|
||||
|
||||
|
||||
@@ -1037,7 +1037,7 @@ public class CommandProcessor {
|
||||
public void prologue(Address start, Address end) {
|
||||
}
|
||||
public void visit(CodeBlob blob) {
|
||||
fout.println(gen.genHTML(blob.instructionsBegin()));
|
||||
fout.println(gen.genHTML(blob.contentBegin()));
|
||||
}
|
||||
public void epilogue() {
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -54,7 +54,7 @@ public class Runtime1 {
|
||||
|
||||
/** FIXME: consider making argument "type-safe" in Java port */
|
||||
public Address entryFor(int id) {
|
||||
return blobFor(id).instructionsBegin();
|
||||
return blobFor(id).codeBegin();
|
||||
}
|
||||
|
||||
/** FIXME: consider making argument "type-safe" in Java port */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -39,11 +39,10 @@ public class CodeBlob extends VMObject {
|
||||
private static CIntegerField sizeField;
|
||||
private static CIntegerField headerSizeField;
|
||||
private static CIntegerField relocationSizeField;
|
||||
private static CIntegerField instructionsOffsetField;
|
||||
private static CIntegerField contentOffsetField;
|
||||
private static CIntegerField codeOffsetField;
|
||||
private static CIntegerField frameCompleteOffsetField;
|
||||
private static CIntegerField dataOffsetField;
|
||||
private static CIntegerField oopsOffsetField;
|
||||
private static CIntegerField oopsLengthField;
|
||||
private static CIntegerField frameSizeField;
|
||||
private static AddressField oopMapsField;
|
||||
|
||||
@@ -70,10 +69,9 @@ public class CodeBlob extends VMObject {
|
||||
headerSizeField = type.getCIntegerField("_header_size");
|
||||
relocationSizeField = type.getCIntegerField("_relocation_size");
|
||||
frameCompleteOffsetField = type.getCIntegerField("_frame_complete_offset");
|
||||
instructionsOffsetField = type.getCIntegerField("_instructions_offset");
|
||||
contentOffsetField = type.getCIntegerField("_content_offset");
|
||||
codeOffsetField = type.getCIntegerField("_code_offset");
|
||||
dataOffsetField = type.getCIntegerField("_data_offset");
|
||||
oopsOffsetField = type.getCIntegerField("_oops_offset");
|
||||
oopsLengthField = type.getCIntegerField("_oops_length");
|
||||
frameSizeField = type.getCIntegerField("_frame_size");
|
||||
oopMapsField = type.getAddressField("_oop_maps");
|
||||
|
||||
@@ -115,11 +113,19 @@ public class CodeBlob extends VMObject {
|
||||
// public RelocInfo relocationBegin();
|
||||
// public RelocInfo relocationEnd();
|
||||
|
||||
public Address instructionsBegin() {
|
||||
return headerBegin().addOffsetTo(instructionsOffsetField.getValue(addr));
|
||||
public Address contentBegin() {
|
||||
return headerBegin().addOffsetTo(contentOffsetField.getValue(addr));
|
||||
}
|
||||
|
||||
public Address instructionsEnd() {
|
||||
public Address contentEnd() {
|
||||
return headerBegin().addOffsetTo(dataOffsetField.getValue(addr));
|
||||
}
|
||||
|
||||
public Address codeBegin() {
|
||||
return headerBegin().addOffsetTo(contentOffsetField.getValue(addr));
|
||||
}
|
||||
|
||||
public Address codeEnd() {
|
||||
return headerBegin().addOffsetTo(dataOffsetField.getValue(addr));
|
||||
}
|
||||
|
||||
@@ -131,44 +137,28 @@ public class CodeBlob extends VMObject {
|
||||
return headerBegin().addOffsetTo(sizeField.getValue(addr));
|
||||
}
|
||||
|
||||
public Address oopsBegin() {
|
||||
return headerBegin().addOffsetTo(oopsOffsetField.getValue(addr));
|
||||
}
|
||||
|
||||
public Address oopsEnd() {
|
||||
return oopsBegin().addOffsetTo(getOopsLength());
|
||||
}
|
||||
|
||||
// Offsets
|
||||
public int getRelocationOffset() { return (int) headerSizeField.getValue(addr); }
|
||||
public int getInstructionsOffset() { return (int) instructionsOffsetField.getValue(addr); }
|
||||
public int getDataOffset() { return (int) dataOffsetField.getValue(addr); }
|
||||
public int getOopsOffset() { return (int) oopsOffsetField.getValue(addr); }
|
||||
public int getRelocationOffset() { return (int) headerSizeField .getValue(addr); }
|
||||
public int getContentOffset() { return (int) contentOffsetField.getValue(addr); }
|
||||
public int getCodeOffset() { return (int) codeOffsetField .getValue(addr); }
|
||||
public int getDataOffset() { return (int) dataOffsetField .getValue(addr); }
|
||||
|
||||
// Sizes
|
||||
public int getSize() { return (int) sizeField.getValue(addr); }
|
||||
public int getHeaderSize() { return (int) headerSizeField.getValue(addr); }
|
||||
public int getSize() { return (int) sizeField .getValue(addr); }
|
||||
public int getHeaderSize() { return (int) headerSizeField.getValue(addr); }
|
||||
// FIXME: add getRelocationSize()
|
||||
public int getInstructionsSize() { return (int) instructionsEnd().minus(instructionsBegin()); }
|
||||
public int getDataSize() { return (int) dataEnd().minus(dataBegin()); }
|
||||
public int getContentSize() { return (int) contentEnd().minus(contentBegin()); }
|
||||
public int getCodeSize() { return (int) codeEnd() .minus(codeBegin()); }
|
||||
public int getDataSize() { return (int) dataEnd() .minus(dataBegin()); }
|
||||
|
||||
// Containment
|
||||
public boolean blobContains(Address addr) { return headerBegin().lessThanOrEqual(addr) && dataEnd().greaterThan(addr); }
|
||||
public boolean blobContains(Address addr) { return headerBegin() .lessThanOrEqual(addr) && dataEnd() .greaterThan(addr); }
|
||||
// FIXME: add relocationContains
|
||||
public boolean instructionsContains(Address addr) { return instructionsBegin().lessThanOrEqual(addr) && instructionsEnd().greaterThan(addr); }
|
||||
public boolean dataContains(Address addr) { return dataBegin().lessThanOrEqual(addr) && dataEnd().greaterThan(addr); }
|
||||
public boolean oopsContains(Address addr) { return oopsBegin().lessThanOrEqual(addr) && oopsEnd().greaterThan(addr); }
|
||||
public boolean contains(Address addr) { return instructionsContains(addr); }
|
||||
public boolean isFrameCompleteAt(Address a) { return instructionsContains(a) && a.minus(instructionsBegin()) >= frameCompleteOffsetField.getValue(addr); }
|
||||
|
||||
/** Support for oops in scopes and relocs. Note: index 0 is reserved for null. */
|
||||
public OopHandle getOopAt(int index) {
|
||||
if (index == 0) return null;
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(index > 0 && index <= getOopsLength(), "must be a valid non-zero index");
|
||||
}
|
||||
return oopsBegin().getOopHandleAt((index - 1) * VM.getVM().getOopSize());
|
||||
}
|
||||
public boolean contentContains(Address addr) { return contentBegin().lessThanOrEqual(addr) && contentEnd().greaterThan(addr); }
|
||||
public boolean codeContains(Address addr) { return codeBegin() .lessThanOrEqual(addr) && codeEnd() .greaterThan(addr); }
|
||||
public boolean dataContains(Address addr) { return dataBegin() .lessThanOrEqual(addr) && dataEnd() .greaterThan(addr); }
|
||||
public boolean contains(Address addr) { return contentContains(addr); }
|
||||
public boolean isFrameCompleteAt(Address a) { return codeContains(a) && a.minus(codeBegin()) >= frameCompleteOffsetField.getValue(addr); }
|
||||
|
||||
// Reclamation support (really only used by the nmethods, but in order to get asserts to work
|
||||
// in the CodeCache they are defined virtual here)
|
||||
@@ -191,7 +181,7 @@ public class CodeBlob extends VMObject {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(getOopMaps() != null, "nope");
|
||||
}
|
||||
return getOopMaps().findMapAtOffset(pc.minus(instructionsBegin()), debugging);
|
||||
return getOopMaps().findMapAtOffset(pc.minus(codeBegin()), debugging);
|
||||
}
|
||||
|
||||
// virtual void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, void f(oop*)) { ShouldNotReachHere(); }
|
||||
@@ -223,18 +213,9 @@ public class CodeBlob extends VMObject {
|
||||
}
|
||||
|
||||
protected void printComponentsOn(PrintStream tty) {
|
||||
// FIXME: add relocation information
|
||||
tty.println(" instructions: [" + instructionsBegin() + ", " + instructionsEnd() + "), " +
|
||||
tty.println(" content: [" + contentBegin() + ", " + contentEnd() + "), " +
|
||||
" code: [" + codeBegin() + ", " + codeEnd() + "), " +
|
||||
" data: [" + dataBegin() + ", " + dataEnd() + "), " +
|
||||
" oops: [" + oopsBegin() + ", " + oopsEnd() + "), " +
|
||||
" frame size: " + getFrameSize());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
// Internals only below this point
|
||||
//
|
||||
|
||||
private int getOopsLength() {
|
||||
return (int) oopsLengthField.getValue(addr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -35,7 +35,6 @@ import sun.jvm.hotspot.utilities.*;
|
||||
|
||||
public class NMethod extends CodeBlob {
|
||||
private static long pcDescSize;
|
||||
private static CIntegerField zombieInstructionSizeField;
|
||||
private static sun.jvm.hotspot.types.OopField methodField;
|
||||
/** != InvocationEntryBci if this nmethod is an on-stack replacement method */
|
||||
private static CIntegerField entryBCIField;
|
||||
@@ -49,6 +48,7 @@ public class NMethod extends CodeBlob {
|
||||
private static CIntegerField deoptOffsetField;
|
||||
private static CIntegerField origPCOffsetField;
|
||||
private static CIntegerField stubOffsetField;
|
||||
private static CIntegerField oopsOffsetField;
|
||||
private static CIntegerField scopesDataOffsetField;
|
||||
private static CIntegerField scopesPCsOffsetField;
|
||||
private static CIntegerField dependenciesOffsetField;
|
||||
@@ -87,7 +87,6 @@ public class NMethod extends CodeBlob {
|
||||
private static void initialize(TypeDataBase db) {
|
||||
Type type = db.lookupType("nmethod");
|
||||
|
||||
zombieInstructionSizeField = type.getCIntegerField("_zombie_instruction_size");
|
||||
methodField = type.getOopField("_method");
|
||||
entryBCIField = type.getCIntegerField("_entry_bci");
|
||||
osrLinkField = type.getAddressField("_osr_link");
|
||||
@@ -98,6 +97,7 @@ public class NMethod extends CodeBlob {
|
||||
deoptOffsetField = type.getCIntegerField("_deoptimize_offset");
|
||||
origPCOffsetField = type.getCIntegerField("_orig_pc_offset");
|
||||
stubOffsetField = type.getCIntegerField("_stub_offset");
|
||||
oopsOffsetField = type.getCIntegerField("_oops_offset");
|
||||
scopesDataOffsetField = type.getCIntegerField("_scopes_data_offset");
|
||||
scopesPCsOffsetField = type.getCIntegerField("_scopes_pcs_offset");
|
||||
dependenciesOffsetField = type.getCIntegerField("_dependencies_offset");
|
||||
@@ -134,14 +134,16 @@ public class NMethod extends CodeBlob {
|
||||
public boolean isOSRMethod() { return getEntryBCI() != VM.getVM().getInvocationEntryBCI(); }
|
||||
|
||||
/** Boundaries for different parts */
|
||||
public Address constantsBegin() { return instructionsBegin(); }
|
||||
public Address constantsBegin() { return contentBegin(); }
|
||||
public Address constantsEnd() { return getEntryPoint(); }
|
||||
public Address codeBegin() { return getEntryPoint(); }
|
||||
public Address codeEnd() { return headerBegin().addOffsetTo(getStubOffset()); }
|
||||
public Address instsBegin() { return codeBegin(); }
|
||||
public Address instsEnd() { return headerBegin().addOffsetTo(getStubOffset()); }
|
||||
public Address exceptionBegin() { return headerBegin().addOffsetTo(getExceptionOffset()); }
|
||||
public Address deoptBegin() { return headerBegin().addOffsetTo(getDeoptOffset()); }
|
||||
public Address stubBegin() { return headerBegin().addOffsetTo(getStubOffset()); }
|
||||
public Address stubEnd() { return headerBegin().addOffsetTo(getScopesDataOffset()); }
|
||||
public Address stubEnd() { return headerBegin().addOffsetTo(getOopsOffset()); }
|
||||
public Address oopsBegin() { return headerBegin().addOffsetTo(getOopsOffset()); }
|
||||
public Address oopsEnd() { return headerBegin().addOffsetTo(getScopesDataOffset()); }
|
||||
public Address scopesDataBegin() { return headerBegin().addOffsetTo(getScopesDataOffset()); }
|
||||
public Address scopesDataEnd() { return headerBegin().addOffsetTo(getScopesPCsOffset()); }
|
||||
public Address scopesPCsBegin() { return headerBegin().addOffsetTo(getScopesPCsOffset()); }
|
||||
@@ -154,8 +156,9 @@ public class NMethod extends CodeBlob {
|
||||
public Address nulChkTableEnd() { return headerBegin().addOffsetTo(getNMethodEndOffset()); }
|
||||
|
||||
public int constantsSize() { return (int) constantsEnd() .minus(constantsBegin()); }
|
||||
public int codeSize() { return (int) codeEnd() .minus(codeBegin()); }
|
||||
public int instsSize() { return (int) instsEnd() .minus(instsBegin()); }
|
||||
public int stubSize() { return (int) stubEnd() .minus(stubBegin()); }
|
||||
public int oopsSize() { return (int) oopsEnd() .minus(oopsBegin()); }
|
||||
public int scopesDataSize() { return (int) scopesDataEnd() .minus(scopesDataBegin()); }
|
||||
public int scopesPCsSize() { return (int) scopesPCsEnd() .minus(scopesPCsBegin()); }
|
||||
public int dependenciesSize() { return (int) dependenciesEnd().minus(dependenciesBegin()); }
|
||||
@@ -166,7 +169,7 @@ public class NMethod extends CodeBlob {
|
||||
public int totalSize() {
|
||||
return
|
||||
constantsSize() +
|
||||
codeSize() +
|
||||
instsSize() +
|
||||
stubSize() +
|
||||
scopesDataSize() +
|
||||
scopesPCsSize() +
|
||||
@@ -176,8 +179,9 @@ public class NMethod extends CodeBlob {
|
||||
}
|
||||
|
||||
public boolean constantsContains (Address addr) { return constantsBegin() .lessThanOrEqual(addr) && constantsEnd() .greaterThan(addr); }
|
||||
public boolean codeContains (Address addr) { return codeBegin() .lessThanOrEqual(addr) && codeEnd() .greaterThan(addr); }
|
||||
public boolean instsContains (Address addr) { return instsBegin() .lessThanOrEqual(addr) && instsEnd() .greaterThan(addr); }
|
||||
public boolean stubContains (Address addr) { return stubBegin() .lessThanOrEqual(addr) && stubEnd() .greaterThan(addr); }
|
||||
public boolean oopsContains (Address addr) { return oopsBegin() .lessThanOrEqual(addr) && oopsEnd() .greaterThan(addr); }
|
||||
public boolean scopesDataContains (Address addr) { return scopesDataBegin() .lessThanOrEqual(addr) && scopesDataEnd() .greaterThan(addr); }
|
||||
public boolean scopesPCsContains (Address addr) { return scopesPCsBegin() .lessThanOrEqual(addr) && scopesPCsEnd() .greaterThan(addr); }
|
||||
public boolean handlerTableContains(Address addr) { return handlerTableBegin().lessThanOrEqual(addr) && handlerTableEnd().greaterThan(addr); }
|
||||
@@ -187,6 +191,15 @@ public class NMethod extends CodeBlob {
|
||||
public Address getEntryPoint() { return entryPointField.getValue(addr); }
|
||||
public Address getVerifiedEntryPoint() { return verifiedEntryPointField.getValue(addr); }
|
||||
|
||||
/** Support for oops in scopes and relocs. Note: index 0 is reserved for null. */
|
||||
public OopHandle getOopAt(int index) {
|
||||
if (index == 0) return null;
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(index > 0 && index <= oopsSize(), "must be a valid non-zero index");
|
||||
}
|
||||
return oopsBegin().getOopHandleAt((index - 1) * VM.getVM().getOopSize());
|
||||
}
|
||||
|
||||
// FIXME: add interpreter_entry_point()
|
||||
// FIXME: add lazy_interpreter_entry_point() for C2
|
||||
|
||||
@@ -338,6 +351,15 @@ public class NMethod extends CodeBlob {
|
||||
printOn(System.out);
|
||||
}
|
||||
|
||||
protected void printComponentsOn(PrintStream tty) {
|
||||
// FIXME: add relocation information
|
||||
tty.println(" content: [" + contentBegin() + ", " + contentEnd() + "), " +
|
||||
" code: [" + codeBegin() + ", " + codeEnd() + "), " +
|
||||
" data: [" + dataBegin() + ", " + dataEnd() + "), " +
|
||||
" oops: [" + oopsBegin() + ", " + oopsEnd() + "), " +
|
||||
" frame size: " + getFrameSize());
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
Method method = getMethod();
|
||||
return "NMethod for " +
|
||||
@@ -367,6 +389,7 @@ public class NMethod extends CodeBlob {
|
||||
private int getExceptionOffset() { return (int) exceptionOffsetField .getValue(addr); }
|
||||
private int getDeoptOffset() { return (int) deoptOffsetField .getValue(addr); }
|
||||
private int getStubOffset() { return (int) stubOffsetField .getValue(addr); }
|
||||
private int getOopsOffset() { return (int) oopsOffsetField .getValue(addr); }
|
||||
private int getScopesDataOffset() { return (int) scopesDataOffsetField .getValue(addr); }
|
||||
private int getScopesPCsOffset() { return (int) scopesPCsOffsetField .getValue(addr); }
|
||||
private int getDependenciesOffset() { return (int) dependenciesOffsetField.getValue(addr); }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -75,7 +75,7 @@ public class PCDesc extends VMObject {
|
||||
}
|
||||
|
||||
public Address getRealPC(NMethod code) {
|
||||
return code.instructionsBegin().addOffsetTo(getPCOffset());
|
||||
return code.codeBegin().addOffsetTo(getPCOffset());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ public class BytecodeDisassembler {
|
||||
addBytecodeClass(Bytecodes._invokestatic, BytecodeInvoke.class);
|
||||
addBytecodeClass(Bytecodes._invokespecial, BytecodeInvoke.class);
|
||||
addBytecodeClass(Bytecodes._invokeinterface, BytecodeInvoke.class);
|
||||
addBytecodeClass(Bytecodes._invokedynamic, BytecodeInvoke.class);
|
||||
addBytecodeClass(Bytecodes._jsr, BytecodeJsr.class);
|
||||
addBytecodeClass(Bytecodes._jsr_w, BytecodeJsrW.class);
|
||||
addBytecodeClass(Bytecodes._iload, BytecodeLoad.class);
|
||||
|
||||
@@ -54,15 +54,31 @@ public class BytecodeInvoke extends BytecodeWithCPIndex {
|
||||
// returns the name of the invoked method
|
||||
public Symbol name() {
|
||||
ConstantPool cp = method().getConstants();
|
||||
if (isInvokedynamic()) {
|
||||
int[] nt = cp.getNameAndTypeAt(indexForFieldOrMethod());
|
||||
return cp.getSymbolAt(nt[0]);
|
||||
}
|
||||
return cp.getNameRefAt(index());
|
||||
}
|
||||
|
||||
// returns the signature of the invoked method
|
||||
public Symbol signature() {
|
||||
ConstantPool cp = method().getConstants();
|
||||
if (isInvokedynamic()) {
|
||||
int[] nt = cp.getNameAndTypeAt(indexForFieldOrMethod());
|
||||
return cp.getSymbolAt(nt[1]);
|
||||
}
|
||||
return cp.getSignatureRefAt(index());
|
||||
}
|
||||
|
||||
public int getSecondaryIndex() {
|
||||
if (isInvokedynamic()) {
|
||||
// change byte-ordering of 4-byte integer
|
||||
return VM.getVM().getBytes().swapInt(javaSignedWordAt(1));
|
||||
}
|
||||
return super.getSecondaryIndex(); // throw an error
|
||||
}
|
||||
|
||||
public Method getInvokedMethod() {
|
||||
return method().getConstants().getMethodRefAt(index());
|
||||
}
|
||||
@@ -87,6 +103,7 @@ public class BytecodeInvoke extends BytecodeWithCPIndex {
|
||||
public boolean isInvokevirtual() { return adjustedInvokeCode() == Bytecodes._invokevirtual; }
|
||||
public boolean isInvokestatic() { return adjustedInvokeCode() == Bytecodes._invokestatic; }
|
||||
public boolean isInvokespecial() { return adjustedInvokeCode() == Bytecodes._invokespecial; }
|
||||
public boolean isInvokedynamic() { return adjustedInvokeCode() == Bytecodes._invokedynamic; }
|
||||
|
||||
public boolean isValid() { return isInvokeinterface() ||
|
||||
isInvokevirtual() ||
|
||||
@@ -104,6 +121,11 @@ public class BytecodeInvoke extends BytecodeWithCPIndex {
|
||||
buf.append(spaces);
|
||||
buf.append('#');
|
||||
buf.append(Integer.toString(indexForFieldOrMethod()));
|
||||
if (isInvokedynamic()) {
|
||||
buf.append('(');
|
||||
buf.append(Integer.toString(getSecondaryIndex()));
|
||||
buf.append(')');
|
||||
}
|
||||
buf.append(" [Method ");
|
||||
StringBuffer sigBuf = new StringBuffer();
|
||||
new SignatureConverter(signature(), sigBuf).iterateReturntype();
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
package sun.jvm.hotspot.interpreter;
|
||||
|
||||
import sun.jvm.hotspot.oops.*;
|
||||
import sun.jvm.hotspot.runtime.*;
|
||||
import sun.jvm.hotspot.utilities.*;
|
||||
|
||||
public class BytecodeLoadConstant extends BytecodeWithCPIndex {
|
||||
@@ -32,10 +33,47 @@ public class BytecodeLoadConstant extends BytecodeWithCPIndex {
|
||||
super(method, bci);
|
||||
}
|
||||
|
||||
public boolean hasCacheIndex() {
|
||||
// normal ldc uses CP index, but fast_aldc uses swapped CP cache index
|
||||
return javaCode() != code();
|
||||
}
|
||||
|
||||
public int index() {
|
||||
return javaCode() == Bytecodes._ldc ?
|
||||
int i = javaCode() == Bytecodes._ldc ?
|
||||
(int) (0xFF & javaByteAt(1))
|
||||
: (int) (0xFFFF & javaShortAt(1));
|
||||
if (hasCacheIndex()) {
|
||||
return (0xFFFF & VM.getVM().getBytes().swapShort((short) i));
|
||||
} else {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
public int poolIndex() {
|
||||
int i = index();
|
||||
if (hasCacheIndex()) {
|
||||
ConstantPoolCache cpCache = method().getConstants().getCache();
|
||||
return cpCache.getEntryAt(i).getConstantPoolIndex();
|
||||
} else {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
public int cacheIndex() {
|
||||
if (hasCacheIndex()) {
|
||||
return index();
|
||||
} else {
|
||||
return -1; // no cache index
|
||||
}
|
||||
}
|
||||
|
||||
private Oop getCachedConstant() {
|
||||
int i = cacheIndex();
|
||||
if (i >= 0) {
|
||||
ConstantPoolCache cpCache = method().getConstants().getCache();
|
||||
return cpCache.getEntryAt(i).getF1();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void verify() {
|
||||
@@ -58,6 +96,7 @@ public class BytecodeLoadConstant extends BytecodeWithCPIndex {
|
||||
// has to be int or float or String or Klass
|
||||
return (ctag.isUnresolvedString() || ctag.isString()
|
||||
|| ctag.isUnresolvedKlass() || ctag.isKlass()
|
||||
|| ctag.isMethodHandle() || ctag.isMethodType()
|
||||
|| ctag.isInt() || ctag.isFloat())? true: false;
|
||||
}
|
||||
}
|
||||
@@ -112,7 +151,7 @@ public class BytecodeLoadConstant extends BytecodeWithCPIndex {
|
||||
|
||||
public String getConstantValue() {
|
||||
ConstantPool cpool = method().getConstants();
|
||||
int cpIndex = index();
|
||||
int cpIndex = poolIndex();
|
||||
ConstantTag ctag = cpool.getTagAt(cpIndex);
|
||||
if (ctag.isInt()) {
|
||||
return "<int " + Integer.toString(cpool.getIntAt(cpIndex)) +">";
|
||||
@@ -149,6 +188,18 @@ public class BytecodeLoadConstant extends BytecodeWithCPIndex {
|
||||
} else {
|
||||
throw new RuntimeException("should not reach here");
|
||||
}
|
||||
} else if (ctag.isMethodHandle() || ctag.isMethodType()) {
|
||||
Oop x = getCachedConstant();
|
||||
int refidx = cpool.getMethodHandleIndexAt(cpIndex);
|
||||
int refkind = cpool.getMethodHandleRefKindAt(cpIndex);
|
||||
return "<MethodHandle kind=" + Integer.toString(refkind) +
|
||||
" ref=" + Integer.toString(refidx)
|
||||
+ (x == null ? "" : " @" + x.getHandle()) + ">";
|
||||
} else if (ctag.isMethodType()) {
|
||||
Oop x = getCachedConstant();
|
||||
int refidx = cpool.getMethodTypeIndexAt(cpIndex);
|
||||
return "<MethodType " + cpool.getSymbolAt(refidx).asString()
|
||||
+ (x == null ? "" : " @" + x.getHandle()) + ">";
|
||||
} else {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(false, "invalid load constant type");
|
||||
@@ -162,7 +213,12 @@ public class BytecodeLoadConstant extends BytecodeWithCPIndex {
|
||||
buf.append(getJavaBytecodeName());
|
||||
buf.append(spaces);
|
||||
buf.append('#');
|
||||
buf.append(Integer.toString(index()));
|
||||
buf.append(Integer.toString(poolIndex()));
|
||||
if (hasCacheIndex()) {
|
||||
buf.append('(');
|
||||
buf.append(Integer.toString(cacheIndex()));
|
||||
buf.append(')');
|
||||
}
|
||||
buf.append(spaces);
|
||||
buf.append(getConstantValue());
|
||||
if (code() != javaCode()) {
|
||||
|
||||
@@ -37,12 +37,19 @@ public abstract class BytecodeWithCPIndex extends Bytecode {
|
||||
// the constant pool index for this bytecode
|
||||
public int index() { return 0xFFFF & javaShortAt(1); }
|
||||
|
||||
public int getSecondaryIndex() {
|
||||
throw new IllegalArgumentException("must be invokedynamic");
|
||||
}
|
||||
|
||||
protected int indexForFieldOrMethod() {
|
||||
ConstantPoolCache cpCache = method().getConstants().getCache();
|
||||
// get ConstantPool index from ConstantPoolCacheIndex at given bci
|
||||
int cpCacheIndex = index();
|
||||
if (cpCache == null) {
|
||||
return cpCacheIndex;
|
||||
} else if (code() == Bytecodes._invokedynamic) {
|
||||
int secondaryIndex = getSecondaryIndex();
|
||||
return cpCache.getMainEntryAt(secondaryIndex).getConstantPoolIndex();
|
||||
} else {
|
||||
// change byte-ordering and go via cache
|
||||
return cpCache.getEntryAt((int) (0xFFFF & VM.getVM().getBytes().swapShort((short) cpCacheIndex))).getConstantPoolIndex();
|
||||
|
||||
@@ -222,7 +222,7 @@ public class Bytecodes {
|
||||
public static final int _invokespecial = 183; // 0xb7
|
||||
public static final int _invokestatic = 184; // 0xb8
|
||||
public static final int _invokeinterface = 185; // 0xb9
|
||||
public static final int _xxxunusedxxx = 186; // 0xba
|
||||
public static final int _invokedynamic = 186; // 0xba
|
||||
public static final int _new = 187; // 0xbb
|
||||
public static final int _newarray = 188; // 0xbc
|
||||
public static final int _anewarray = 189; // 0xbd
|
||||
@@ -269,9 +269,12 @@ public class Bytecodes {
|
||||
public static final int _fast_invokevfinal = 226;
|
||||
public static final int _fast_linearswitch = 227;
|
||||
public static final int _fast_binaryswitch = 228;
|
||||
public static final int _shouldnotreachhere = 229; // For debugging
|
||||
public static final int _fast_aldc = 229;
|
||||
public static final int _fast_aldc_w = 230;
|
||||
public static final int _return_register_finalizer = 231;
|
||||
public static final int _shouldnotreachhere = 232; // For debugging
|
||||
|
||||
public static final int number_of_codes = 230;
|
||||
public static final int number_of_codes = 233;
|
||||
|
||||
public static int specialLengthAt(Method method, int bci) {
|
||||
int code = codeAt(method, bci);
|
||||
@@ -458,9 +461,9 @@ public class Bytecodes {
|
||||
def(_dconst_1 , "dconst_1" , "b" , null , BasicType.getTDouble() , 2, false);
|
||||
def(_bipush , "bipush" , "bc" , null , BasicType.getTInt() , 1, false);
|
||||
def(_sipush , "sipush" , "bcc" , null , BasicType.getTInt() , 1, false);
|
||||
def(_ldc , "ldc" , "bi" , null , BasicType.getTIllegal(), 1, true );
|
||||
def(_ldc_w , "ldc_w" , "bii" , null , BasicType.getTIllegal(), 1, true );
|
||||
def(_ldc2_w , "ldc2_w" , "bii" , null , BasicType.getTIllegal(), 2, true );
|
||||
def(_ldc , "ldc" , "bk" , null , BasicType.getTIllegal(), 1, true );
|
||||
def(_ldc_w , "ldc_w" , "bkk" , null , BasicType.getTIllegal(), 1, true );
|
||||
def(_ldc2_w , "ldc2_w" , "bkk" , null , BasicType.getTIllegal(), 2, true );
|
||||
def(_iload , "iload" , "bi" , "wbii" , BasicType.getTInt() , 1, false);
|
||||
def(_lload , "lload" , "bi" , "wbii" , BasicType.getTLong() , 2, false);
|
||||
def(_fload , "fload" , "bi" , "wbii" , BasicType.getTFloat() , 1, false);
|
||||
@@ -618,26 +621,26 @@ public class Bytecodes {
|
||||
def(_dreturn , "dreturn" , "b" , null , BasicType.getTDouble() , -2, true );
|
||||
def(_areturn , "areturn" , "b" , null , BasicType.getTObject() , -1, true );
|
||||
def(_return , "return" , "b" , null , BasicType.getTVoid() , 0, true );
|
||||
def(_getstatic , "getstatic" , "bjj" , null , BasicType.getTIllegal(), 1, true );
|
||||
def(_putstatic , "putstatic" , "bjj" , null , BasicType.getTIllegal(), -1, true );
|
||||
def(_getfield , "getfield" , "bjj" , null , BasicType.getTIllegal(), 0, true );
|
||||
def(_putfield , "putfield" , "bjj" , null , BasicType.getTIllegal(), -2, true );
|
||||
def(_invokevirtual , "invokevirtual" , "bjj" , null , BasicType.getTIllegal(), -1, true );
|
||||
def(_invokespecial , "invokespecial" , "bjj" , null , BasicType.getTIllegal(), -1, true );
|
||||
def(_invokestatic , "invokestatic" , "bjj" , null , BasicType.getTIllegal(), 0, true );
|
||||
def(_invokeinterface , "invokeinterface" , "bjj__", null , BasicType.getTIllegal(), -1, true );
|
||||
def(_xxxunusedxxx , "xxxunusedxxx" , null , null , BasicType.getTVoid() , 0, false);
|
||||
def(_new , "new" , "bii" , null , BasicType.getTObject() , 1, true );
|
||||
def(_getstatic , "getstatic" , "bJJ" , null , BasicType.getTIllegal(), 1, true );
|
||||
def(_putstatic , "putstatic" , "bJJ" , null , BasicType.getTIllegal(), -1, true );
|
||||
def(_getfield , "getfield" , "bJJ" , null , BasicType.getTIllegal(), 0, true );
|
||||
def(_putfield , "putfield" , "bJJ" , null , BasicType.getTIllegal(), -2, true );
|
||||
def(_invokevirtual , "invokevirtual" , "bJJ" , null , BasicType.getTIllegal(), -1, true );
|
||||
def(_invokespecial , "invokespecial" , "bJJ" , null , BasicType.getTIllegal(), -1, true );
|
||||
def(_invokestatic , "invokestatic" , "bJJ" , null , BasicType.getTIllegal(), 0, true );
|
||||
def(_invokeinterface , "invokeinterface" , "bJJ__", null , BasicType.getTIllegal(), -1, true );
|
||||
def(_invokedynamic , "invokedynamic" , "bJJJJ", null , BasicType.getTIllegal(), -1, true );
|
||||
def(_new , "new" , "bkk" , null , BasicType.getTObject() , 1, true );
|
||||
def(_newarray , "newarray" , "bc" , null , BasicType.getTObject() , 0, true );
|
||||
def(_anewarray , "anewarray" , "bii" , null , BasicType.getTObject() , 0, true );
|
||||
def(_anewarray , "anewarray" , "bkk" , null , BasicType.getTObject() , 0, true );
|
||||
def(_arraylength , "arraylength" , "b" , null , BasicType.getTVoid() , 0, true );
|
||||
def(_athrow , "athrow" , "b" , null , BasicType.getTVoid() , -1, true );
|
||||
def(_checkcast , "checkcast" , "bii" , null , BasicType.getTObject() , 0, true );
|
||||
def(_instanceof , "instanceof" , "bii" , null , BasicType.getTInt() , 0, true );
|
||||
def(_checkcast , "checkcast" , "bkk" , null , BasicType.getTObject() , 0, true );
|
||||
def(_instanceof , "instanceof" , "bkk" , null , BasicType.getTInt() , 0, true );
|
||||
def(_monitorenter , "monitorenter" , "b" , null , BasicType.getTVoid() , -1, true );
|
||||
def(_monitorexit , "monitorexit" , "b" , null , BasicType.getTVoid() , -1, true );
|
||||
def(_wide , "wide" , "" , null , BasicType.getTVoid() , 0, false);
|
||||
def(_multianewarray , "multianewarray" , "biic" , null , BasicType.getTObject() , 1, true );
|
||||
def(_multianewarray , "multianewarray" , "bkkc" , null , BasicType.getTObject() , 1, true );
|
||||
def(_ifnull , "ifnull" , "boo" , null , BasicType.getTVoid() , -1, false);
|
||||
def(_ifnonnull , "ifnonnull" , "boo" , null , BasicType.getTVoid() , -1, false);
|
||||
def(_goto_w , "goto_w" , "boooo", null , BasicType.getTVoid() , 0, false);
|
||||
@@ -646,38 +649,44 @@ public class Bytecodes {
|
||||
|
||||
// JVM bytecodes
|
||||
// bytecode bytecode name format wide f. result tp stk traps std code
|
||||
def(_fast_agetfield , "fast_agetfield" , "bjj" , null , BasicType.getTObject() , 0, true , _getfield );
|
||||
def(_fast_bgetfield , "fast_bgetfield" , "bjj" , null , BasicType.getTInt() , 0, true , _getfield );
|
||||
def(_fast_cgetfield , "fast_cgetfield" , "bjj" , null , BasicType.getTChar() , 0, true , _getfield );
|
||||
def(_fast_dgetfield , "fast_dgetfield" , "bjj" , null , BasicType.getTDouble() , 0, true , _getfield );
|
||||
def(_fast_fgetfield , "fast_fgetfield" , "bjj" , null , BasicType.getTFloat() , 0, true , _getfield );
|
||||
def(_fast_igetfield , "fast_igetfield" , "bjj" , null , BasicType.getTInt() , 0, true , _getfield );
|
||||
def(_fast_lgetfield , "fast_lgetfield" , "bjj" , null , BasicType.getTLong() , 0, true , _getfield );
|
||||
def(_fast_sgetfield , "fast_sgetfield" , "bjj" , null , BasicType.getTShort() , 0, true , _getfield );
|
||||
def(_fast_agetfield , "fast_agetfield" , "bJJ" , null , BasicType.getTObject() , 0, true , _getfield );
|
||||
def(_fast_bgetfield , "fast_bgetfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _getfield );
|
||||
def(_fast_cgetfield , "fast_cgetfield" , "bJJ" , null , BasicType.getTChar() , 0, true , _getfield );
|
||||
def(_fast_dgetfield , "fast_dgetfield" , "bJJ" , null , BasicType.getTDouble() , 0, true , _getfield );
|
||||
def(_fast_fgetfield , "fast_fgetfield" , "bJJ" , null , BasicType.getTFloat() , 0, true , _getfield );
|
||||
def(_fast_igetfield , "fast_igetfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _getfield );
|
||||
def(_fast_lgetfield , "fast_lgetfield" , "bJJ" , null , BasicType.getTLong() , 0, true , _getfield );
|
||||
def(_fast_sgetfield , "fast_sgetfield" , "bJJ" , null , BasicType.getTShort() , 0, true , _getfield );
|
||||
|
||||
def(_fast_aputfield , "fast_aputfield" , "bjj" , null , BasicType.getTObject() , 0, true , _putfield );
|
||||
def(_fast_bputfield , "fast_bputfield" , "bjj" , null , BasicType.getTInt() , 0, true , _putfield );
|
||||
def(_fast_cputfield , "fast_cputfield" , "bjj" , null , BasicType.getTChar() , 0, true , _putfield );
|
||||
def(_fast_dputfield , "fast_dputfield" , "bjj" , null , BasicType.getTDouble() , 0, true , _putfield );
|
||||
def(_fast_fputfield , "fast_fputfield" , "bjj" , null , BasicType.getTFloat() , 0, true , _putfield );
|
||||
def(_fast_iputfield , "fast_iputfield" , "bjj" , null , BasicType.getTInt() , 0, true , _putfield );
|
||||
def(_fast_lputfield , "fast_lputfield" , "bjj" , null , BasicType.getTLong() , 0, true , _putfield );
|
||||
def(_fast_sputfield , "fast_sputfield" , "bjj" , null , BasicType.getTShort() , 0, true , _putfield );
|
||||
def(_fast_aputfield , "fast_aputfield" , "bJJ" , null , BasicType.getTObject() , 0, true , _putfield );
|
||||
def(_fast_bputfield , "fast_bputfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _putfield );
|
||||
def(_fast_cputfield , "fast_cputfield" , "bJJ" , null , BasicType.getTChar() , 0, true , _putfield );
|
||||
def(_fast_dputfield , "fast_dputfield" , "bJJ" , null , BasicType.getTDouble() , 0, true , _putfield );
|
||||
def(_fast_fputfield , "fast_fputfield" , "bJJ" , null , BasicType.getTFloat() , 0, true , _putfield );
|
||||
def(_fast_iputfield , "fast_iputfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _putfield );
|
||||
def(_fast_lputfield , "fast_lputfield" , "bJJ" , null , BasicType.getTLong() , 0, true , _putfield );
|
||||
def(_fast_sputfield , "fast_sputfield" , "bJJ" , null , BasicType.getTShort() , 0, true , _putfield );
|
||||
|
||||
def(_fast_aload_0 , "fast_aload_0" , "b" , null , BasicType.getTObject() , 1, true , _aload_0 );
|
||||
def(_fast_iaccess_0 , "fast_iaccess_0" , "b_jj" , null , BasicType.getTInt() , 1, true , _aload_0 );
|
||||
def(_fast_aaccess_0 , "fast_aaccess_0" , "b_jj" , null , BasicType.getTObject() , 1, true , _aload_0 );
|
||||
def(_fast_faccess_0 , "fast_faccess_0" , "b_jj" , null , BasicType.getTObject() , 1, true , _aload_0 );
|
||||
def(_fast_iaccess_0 , "fast_iaccess_0" , "b_JJ" , null , BasicType.getTInt() , 1, true , _aload_0 );
|
||||
def(_fast_aaccess_0 , "fast_aaccess_0" , "b_JJ" , null , BasicType.getTObject() , 1, true , _aload_0 );
|
||||
def(_fast_faccess_0 , "fast_faccess_0" , "b_JJ" , null , BasicType.getTObject() , 1, true , _aload_0 );
|
||||
|
||||
def(_fast_iload , "fast_iload" , "bi" , null , BasicType.getTInt() , 1, false, _iload);
|
||||
def(_fast_iload2 , "fast_iload2" , "bi_i" , null , BasicType.getTInt() , 2, false, _iload);
|
||||
def(_fast_icaload , "fast_icaload" , "bi_" , null , BasicType.getTInt() , 0, false, _iload);
|
||||
|
||||
// Faster method invocation.
|
||||
def(_fast_invokevfinal , "fast_invokevfinal" , "bjj" , null , BasicType.getTIllegal(), -1, true, _invokevirtual);
|
||||
def(_fast_invokevfinal , "fast_invokevfinal" , "bJJ" , null , BasicType.getTIllegal(), -1, true, _invokevirtual);
|
||||
|
||||
def(_fast_linearswitch , "fast_linearswitch" , "" , null , BasicType.getTVoid() , -1, false, _lookupswitch );
|
||||
def(_fast_binaryswitch , "fast_binaryswitch" , "" , null , BasicType.getTVoid() , -1, false, _lookupswitch );
|
||||
|
||||
def(_return_register_finalizer, "return_register_finalizer", "b" , null , BasicType.getTVoid() , 0, true, _return );
|
||||
|
||||
def(_fast_aldc , "fast_aldc" , "bj" , null , BasicType.getTObject(), 1, true, _ldc );
|
||||
def(_fast_aldc_w , "fast_aldc_w" , "bJJ" , null , BasicType.getTObject(), 1, true, _ldc_w );
|
||||
|
||||
def(_shouldnotreachhere , "_shouldnotreachhere" , "b" , null , BasicType.getTVoid() , 0, false);
|
||||
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
|
||||
@@ -73,18 +73,11 @@ public class CompactibleFreeListSpace extends CompactibleSpace {
|
||||
|
||||
public CompactibleFreeListSpace(Address addr) {
|
||||
super(addr);
|
||||
if ( VM.getVM().isLP64() ) {
|
||||
heapWordSize = 8;
|
||||
IndexSetStart = 1;
|
||||
IndexSetStride = 1;
|
||||
}
|
||||
else {
|
||||
heapWordSize = 4;
|
||||
IndexSetStart = 2;
|
||||
IndexSetStride = 2;
|
||||
}
|
||||
|
||||
IndexSetSize = 257;
|
||||
VM vm = VM.getVM();
|
||||
heapWordSize = vm.getHeapWordSize();
|
||||
IndexSetStart = vm.getMinObjAlignmentInBytes() / heapWordSize;
|
||||
IndexSetStride = IndexSetStart;
|
||||
IndexSetSize = 257;
|
||||
}
|
||||
|
||||
// Accessing block offset table
|
||||
|
||||
@@ -152,7 +152,7 @@ public class ConstantPool extends Oop implements ClassConstants {
|
||||
return res;
|
||||
}
|
||||
|
||||
public int getNameAndTypeAt(int which) {
|
||||
public int[] getNameAndTypeAt(int which) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(getTagAt(which).isNameAndType(), "Corrupted constant pool");
|
||||
}
|
||||
@@ -160,18 +160,16 @@ public class ConstantPool extends Oop implements ClassConstants {
|
||||
if (DEBUG) {
|
||||
System.err.println("ConstantPool.getNameAndTypeAt(" + which + "): result = " + i);
|
||||
}
|
||||
return i;
|
||||
return new int[] { extractLowShortFromInt(i), extractHighShortFromInt(i) };
|
||||
}
|
||||
|
||||
public Symbol getNameRefAt(int which) {
|
||||
int refIndex = getNameAndTypeAt(getNameAndTypeRefIndexAt(which));
|
||||
int nameIndex = extractLowShortFromInt(refIndex);
|
||||
int nameIndex = getNameAndTypeAt(getNameAndTypeRefIndexAt(which))[0];
|
||||
return getSymbolAt(nameIndex);
|
||||
}
|
||||
|
||||
public Symbol getSignatureRefAt(int which) {
|
||||
int refIndex = getNameAndTypeAt(getNameAndTypeRefIndexAt(which));
|
||||
int sigIndex = extractHighShortFromInt(refIndex);
|
||||
int sigIndex = getNameAndTypeAt(getNameAndTypeRefIndexAt(which))[1];
|
||||
return getSymbolAt(sigIndex);
|
||||
}
|
||||
|
||||
@@ -220,11 +218,11 @@ public class ConstantPool extends Oop implements ClassConstants {
|
||||
|
||||
/** Lookup for entries consisting of (name_index, signature_index) */
|
||||
public int getNameRefIndexAt(int index) {
|
||||
int refIndex = getNameAndTypeAt(index);
|
||||
int[] refIndex = getNameAndTypeAt(index);
|
||||
if (DEBUG) {
|
||||
System.err.println("ConstantPool.getNameRefIndexAt(" + index + "): refIndex = " + refIndex);
|
||||
System.err.println("ConstantPool.getNameRefIndexAt(" + index + "): refIndex = " + refIndex[0]+"/"+refIndex[1]);
|
||||
}
|
||||
int i = extractLowShortFromInt(refIndex);
|
||||
int i = refIndex[0];
|
||||
if (DEBUG) {
|
||||
System.err.println("ConstantPool.getNameRefIndexAt(" + index + "): result = " + i);
|
||||
}
|
||||
@@ -233,17 +231,53 @@ public class ConstantPool extends Oop implements ClassConstants {
|
||||
|
||||
/** Lookup for entries consisting of (name_index, signature_index) */
|
||||
public int getSignatureRefIndexAt(int index) {
|
||||
int refIndex = getNameAndTypeAt(index);
|
||||
int[] refIndex = getNameAndTypeAt(index);
|
||||
if (DEBUG) {
|
||||
System.err.println("ConstantPool.getSignatureRefIndexAt(" + index + "): refIndex = " + refIndex);
|
||||
System.err.println("ConstantPool.getSignatureRefIndexAt(" + index + "): refIndex = " + refIndex[0]+"/"+refIndex[1]);
|
||||
}
|
||||
int i = extractHighShortFromInt(refIndex);
|
||||
int i = refIndex[1];
|
||||
if (DEBUG) {
|
||||
System.err.println("ConstantPool.getSignatureRefIndexAt(" + index + "): result = " + i);
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
/** Lookup for MethodHandle entries. */
|
||||
public int getMethodHandleIndexAt(int i) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(getTagAt(i).isMethodHandle(), "Corrupted constant pool");
|
||||
}
|
||||
int res = extractHighShortFromInt(getIntAt(i));
|
||||
if (DEBUG) {
|
||||
System.err.println("ConstantPool.getMethodHandleIndexAt(" + i + "): result = " + res);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/** Lookup for MethodHandle entries. */
|
||||
public int getMethodHandleRefKindAt(int i) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(getTagAt(i).isMethodHandle(), "Corrupted constant pool");
|
||||
}
|
||||
int res = extractLowShortFromInt(getIntAt(i));
|
||||
if (DEBUG) {
|
||||
System.err.println("ConstantPool.getMethodHandleRefKindAt(" + i + "): result = " + res);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/** Lookup for MethodType entries. */
|
||||
public int getMethodTypeIndexAt(int i) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(getTagAt(i).isMethodType(), "Corrupted constant pool");
|
||||
}
|
||||
int res = getIntAt(i);
|
||||
if (DEBUG) {
|
||||
System.err.println("ConstantPool.getMethodHandleTypeAt(" + i + "): result = " + res);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
final private static String[] nameForTag = new String[] {
|
||||
};
|
||||
|
||||
@@ -261,6 +295,9 @@ public class ConstantPool extends Oop implements ClassConstants {
|
||||
case JVM_CONSTANT_Methodref: return "JVM_CONSTANT_Methodref";
|
||||
case JVM_CONSTANT_InterfaceMethodref: return "JVM_CONSTANT_InterfaceMethodref";
|
||||
case JVM_CONSTANT_NameAndType: return "JVM_CONSTANT_NameAndType";
|
||||
case JVM_CONSTANT_MethodHandle: return "JVM_CONSTANT_MethodHandle";
|
||||
case JVM_CONSTANT_MethodType: return "JVM_CONSTANT_MethodType";
|
||||
case JVM_CONSTANT_InvokeDynamic: return "JVM_CONSTANT_InvokeDynamic";
|
||||
case JVM_CONSTANT_Invalid: return "JVM_CONSTANT_Invalid";
|
||||
case JVM_CONSTANT_UnresolvedClass: return "JVM_CONSTANT_UnresolvedClass";
|
||||
case JVM_CONSTANT_UnresolvedClassInError: return "JVM_CONSTANT_UnresolvedClassInError";
|
||||
@@ -317,6 +354,9 @@ public class ConstantPool extends Oop implements ClassConstants {
|
||||
case JVM_CONSTANT_Methodref:
|
||||
case JVM_CONSTANT_InterfaceMethodref:
|
||||
case JVM_CONSTANT_NameAndType:
|
||||
case JVM_CONSTANT_MethodHandle:
|
||||
case JVM_CONSTANT_MethodType:
|
||||
case JVM_CONSTANT_InvokeDynamic:
|
||||
visitor.doInt(new IntField(new NamedFieldIdentifier(nameForTag(ctag)), indexOffset(index), true), true);
|
||||
break;
|
||||
}
|
||||
@@ -467,6 +507,30 @@ public class ConstantPool extends Oop implements ClassConstants {
|
||||
+ ", type = " + signatureIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
case JVM_CONSTANT_MethodHandle: {
|
||||
dos.writeByte(cpConstType);
|
||||
int value = getIntAt(ci);
|
||||
short nameIndex = (short) extractLowShortFromInt(value);
|
||||
short signatureIndex = (short) extractHighShortFromInt(value);
|
||||
dos.writeShort(nameIndex);
|
||||
dos.writeShort(signatureIndex);
|
||||
if (DEBUG) debugMessage("CP[" + ci + "] = N&T name = " + nameIndex
|
||||
+ ", type = " + signatureIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
case JVM_CONSTANT_InvokeDynamic: {
|
||||
dos.writeByte(cpConstType);
|
||||
int value = getIntAt(ci);
|
||||
short bootstrapMethodIndex = (short) extractLowShortFromInt(value);
|
||||
short nameAndTypeIndex = (short) extractHighShortFromInt(value);
|
||||
dos.writeShort(bootstrapMethodIndex);
|
||||
dos.writeShort(nameAndTypeIndex);
|
||||
if (DEBUG) debugMessage("CP[" + ci + "] = indy BSM = " + bootstrapMethodIndex
|
||||
+ ", N&T = " + nameAndTypeIndex);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new InternalError("unknown tag: " + cpConstType);
|
||||
} // switch
|
||||
@@ -488,10 +552,12 @@ public class ConstantPool extends Oop implements ClassConstants {
|
||||
//
|
||||
|
||||
private static int extractHighShortFromInt(int val) {
|
||||
// must stay in sync with constantPoolOopDesc::name_and_type_at_put, method_at_put, etc.
|
||||
return (val >> 16) & 0xFFFF;
|
||||
}
|
||||
|
||||
private static int extractLowShortFromInt(int val) {
|
||||
// must stay in sync with constantPoolOopDesc::name_and_type_at_put, method_at_put, etc.
|
||||
return val & 0xFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,6 +78,31 @@ public class ConstantPoolCache extends Oop {
|
||||
return new ConstantPoolCacheEntry(this, i);
|
||||
}
|
||||
|
||||
public static boolean isSecondaryIndex(int i) { return (i < 0); }
|
||||
public static int decodeSecondaryIndex(int i) { return isSecondaryIndex(i) ? ~i : i; }
|
||||
public static int encodeSecondaryIndex(int i) { return !isSecondaryIndex(i) ? ~i : i; }
|
||||
|
||||
// secondary entries hold invokedynamic call site bindings
|
||||
public ConstantPoolCacheEntry getSecondaryEntryAt(int i) {
|
||||
ConstantPoolCacheEntry e = new ConstantPoolCacheEntry(this, decodeSecondaryIndex(i));
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(e.isSecondaryEntry(), "must be a secondary entry");
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
public ConstantPoolCacheEntry getMainEntryAt(int i) {
|
||||
if (isSecondaryIndex(i)) {
|
||||
// run through an extra level of indirection:
|
||||
i = getSecondaryEntryAt(i).getMainEntryIndex();
|
||||
}
|
||||
ConstantPoolCacheEntry e = new ConstantPoolCacheEntry(this, i);
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(!e.isSecondaryEntry(), "must not be a secondary entry");
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
public int getIntAt(int entry, int fld) {
|
||||
//alignObjectSize ?
|
||||
long offset = baseOffset + /*alignObjectSize*/entry * elementSize + fld* getHeap().getIntSize();
|
||||
|
||||
@@ -28,6 +28,7 @@ import java.util.*;
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.runtime.*;
|
||||
import sun.jvm.hotspot.types.*;
|
||||
import sun.jvm.hotspot.utilities.*;
|
||||
|
||||
public class ConstantPoolCacheEntry {
|
||||
private static long size;
|
||||
@@ -67,9 +68,23 @@ public class ConstantPoolCacheEntry {
|
||||
}
|
||||
|
||||
public int getConstantPoolIndex() {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(!isSecondaryEntry(), "must not be a secondary CP entry");
|
||||
}
|
||||
return (int) (getIndices() & 0xFFFF);
|
||||
}
|
||||
|
||||
public boolean isSecondaryEntry() {
|
||||
return (getIndices() & 0xFFFF) == 0;
|
||||
}
|
||||
|
||||
public int getMainEntryIndex() {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(isSecondaryEntry(), "must be a secondary CP entry");
|
||||
}
|
||||
return (int) (getIndices() >>> 16);
|
||||
}
|
||||
|
||||
private long getIndices() {
|
||||
return cp.getHandle().getCIntegerAt(indices.getOffset() + offset, indices.getSize(), indices.isUnsigned());
|
||||
}
|
||||
|
||||
@@ -566,6 +566,7 @@ public class GenerateOopMap {
|
||||
case Bytecodes._invokespecial:
|
||||
case Bytecodes._invokestatic:
|
||||
case Bytecodes._invokeinterface:
|
||||
case Bytecodes._invokedynamic:
|
||||
// FIXME: print signature of referenced method (need more
|
||||
// accessors in ConstantPool and ConstantPoolCache)
|
||||
int idx = currentBC.getIndexBig();
|
||||
@@ -605,6 +606,7 @@ public class GenerateOopMap {
|
||||
case Bytecodes._invokespecial:
|
||||
case Bytecodes._invokestatic:
|
||||
case Bytecodes._invokeinterface:
|
||||
case Bytecodes._invokedynamic:
|
||||
// FIXME: print signature of referenced method (need more
|
||||
// accessors in ConstantPool and ConstantPoolCache)
|
||||
int idx = currentBC.getIndexBig();
|
||||
@@ -1134,6 +1136,7 @@ public class GenerateOopMap {
|
||||
case Bytecodes._invokespecial:
|
||||
case Bytecodes._invokestatic:
|
||||
case Bytecodes._invokeinterface:
|
||||
case Bytecodes._invokedynamic:
|
||||
_itr_send = itr;
|
||||
_report_result_for_send = true;
|
||||
break;
|
||||
@@ -1379,6 +1382,7 @@ public class GenerateOopMap {
|
||||
case Bytecodes._invokevirtual:
|
||||
case Bytecodes._invokespecial: doMethod(false, false, itr.getIndexBig(), itr.bci()); break;
|
||||
case Bytecodes._invokestatic: doMethod(true, false, itr.getIndexBig(), itr.bci()); break;
|
||||
case Bytecodes._invokedynamic: doMethod(false, true, itr.getIndexBig(), itr.bci()); break;
|
||||
case Bytecodes._invokeinterface: doMethod(false, true, itr.getIndexBig(), itr.bci()); break;
|
||||
case Bytecodes._newarray:
|
||||
case Bytecodes._anewarray: ppNewRef(vCTS, itr.bci()); break;
|
||||
@@ -1725,7 +1729,7 @@ public class GenerateOopMap {
|
||||
void doMethod (boolean is_static, boolean is_interface, int idx, int bci) {
|
||||
// Dig up signature for field in constant pool
|
||||
ConstantPool cp = _method.getConstants();
|
||||
int nameAndTypeIdx = cp.getNameAndTypeRefIndexAt(idx);
|
||||
int nameAndTypeIdx = cp.getTagAt(idx).isNameAndType() ? idx : cp.getNameAndTypeRefIndexAt(idx);
|
||||
int signatureIdx = cp.getSignatureRefIndexAt(nameAndTypeIdx);
|
||||
Symbol signature = cp.getSymbolAt(signatureIdx);
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ public class Oop {
|
||||
|
||||
// Align the object size.
|
||||
public static long alignObjectSize(long size) {
|
||||
return VM.getVM().alignUp(size, VM.getVM().getMinObjAlignment());
|
||||
return VM.getVM().alignUp(size, VM.getVM().getMinObjAlignmentInBytes());
|
||||
}
|
||||
|
||||
// All vm's align longs, so pad out certain offsets.
|
||||
|
||||
@@ -40,6 +40,20 @@ public interface ClassConstants
|
||||
public static final int JVM_CONSTANT_Methodref = 10;
|
||||
public static final int JVM_CONSTANT_InterfaceMethodref = 11;
|
||||
public static final int JVM_CONSTANT_NameAndType = 12;
|
||||
public static final int JVM_CONSTANT_MethodHandle = 15;
|
||||
public static final int JVM_CONSTANT_MethodType = 16;
|
||||
public static final int JVM_CONSTANT_InvokeDynamic = 17;
|
||||
|
||||
// JVM_CONSTANT_MethodHandle subtypes
|
||||
public static final int JVM_REF_getField = 1;
|
||||
public static final int JVM_REF_getStatic = 2;
|
||||
public static final int JVM_REF_putField = 3;
|
||||
public static final int JVM_REF_putStatic = 4;
|
||||
public static final int JVM_REF_invokeVirtual = 5;
|
||||
public static final int JVM_REF_invokeStatic = 6;
|
||||
public static final int JVM_REF_invokeSpecial = 7;
|
||||
public static final int JVM_REF_newInvokeSpecial = 8;
|
||||
public static final int JVM_REF_invokeInterface = 9;
|
||||
|
||||
// HotSpot specific constant pool constant types.
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ public class VM {
|
||||
/** alignment constants */
|
||||
private boolean isLP64;
|
||||
private int bytesPerLong;
|
||||
private int objectAlignmentInBytes;
|
||||
private int minObjAlignmentInBytes;
|
||||
private int logMinObjAlignmentInBytes;
|
||||
private int heapWordSize;
|
||||
@@ -313,9 +314,6 @@ public class VM {
|
||||
isLP64 = debugger.getMachineDescription().isLP64();
|
||||
}
|
||||
bytesPerLong = db.lookupIntConstant("BytesPerLong").intValue();
|
||||
minObjAlignmentInBytes = db.lookupIntConstant("MinObjAlignmentInBytes").intValue();
|
||||
// minObjAlignment = db.lookupIntConstant("MinObjAlignment").intValue();
|
||||
logMinObjAlignmentInBytes = db.lookupIntConstant("LogMinObjAlignmentInBytes").intValue();
|
||||
heapWordSize = db.lookupIntConstant("HeapWordSize").intValue();
|
||||
oopSize = db.lookupIntConstant("oopSize").intValue();
|
||||
|
||||
@@ -323,6 +321,15 @@ public class VM {
|
||||
uintxType = db.lookupType("uintx");
|
||||
boolType = (CIntegerType) db.lookupType("bool");
|
||||
|
||||
minObjAlignmentInBytes = getObjectAlignmentInBytes();
|
||||
if (minObjAlignmentInBytes == 8) {
|
||||
logMinObjAlignmentInBytes = 3;
|
||||
} else if (minObjAlignmentInBytes == 16) {
|
||||
logMinObjAlignmentInBytes = 4;
|
||||
} else {
|
||||
throw new RuntimeException("Object alignment " + minObjAlignmentInBytes + " not yet supported");
|
||||
}
|
||||
|
||||
if (isCompressedOopsEnabled()) {
|
||||
// Size info for oops within java objects is fixed
|
||||
heapOopSize = (int)getIntSize();
|
||||
@@ -492,10 +499,6 @@ public class VM {
|
||||
}
|
||||
|
||||
/** Get minimum object alignment in bytes. */
|
||||
public int getMinObjAlignment() {
|
||||
return minObjAlignmentInBytes;
|
||||
}
|
||||
|
||||
public int getMinObjAlignmentInBytes() {
|
||||
return minObjAlignmentInBytes;
|
||||
}
|
||||
@@ -754,6 +757,14 @@ public class VM {
|
||||
return compressedOopsEnabled.booleanValue();
|
||||
}
|
||||
|
||||
public int getObjectAlignmentInBytes() {
|
||||
if (objectAlignmentInBytes == 0) {
|
||||
Flag flag = getCommandLineFlag("ObjectAlignmentInBytes");
|
||||
objectAlignmentInBytes = (flag == null) ? 8 : (int)flag.getIntx();
|
||||
}
|
||||
return objectAlignmentInBytes;
|
||||
}
|
||||
|
||||
// returns null, if not available.
|
||||
public Flag[] getCommandLineFlags() {
|
||||
if (commandLineFlags == null) {
|
||||
|
||||
@@ -54,14 +54,34 @@ public class ByteCodeRewriter
|
||||
|
||||
}
|
||||
|
||||
protected short getConstantPoolIndex(int bci) {
|
||||
protected short getConstantPoolIndex(int rawcode, int bci) {
|
||||
// get ConstantPool index from ConstantPoolCacheIndex at given bci
|
||||
short cpCacheIndex = method.getBytecodeShortArg(bci);
|
||||
String fmt = Bytecodes.format(rawcode);
|
||||
int cpCacheIndex;
|
||||
switch (fmt.length()) {
|
||||
case 2: cpCacheIndex = method.getBytecodeByteArg(bci); break;
|
||||
case 3: cpCacheIndex = method.getBytecodeShortArg(bci); break;
|
||||
case 5:
|
||||
if (fmt.indexOf("__") >= 0)
|
||||
cpCacheIndex = method.getBytecodeShortArg(bci);
|
||||
else
|
||||
cpCacheIndex = method.getBytecodeIntArg(bci);
|
||||
break;
|
||||
default: throw new IllegalArgumentException();
|
||||
}
|
||||
if (cpCache == null) {
|
||||
return cpCacheIndex;
|
||||
} else {
|
||||
return (short) cpCacheIndex;
|
||||
} else if (fmt.indexOf("JJJJ") >= 0) {
|
||||
// change byte-ordering and go via secondary cache entry
|
||||
return (short) cpCache.getMainEntryAt(bytes.swapInt(cpCacheIndex)).getConstantPoolIndex();
|
||||
} else if (fmt.indexOf("JJ") >= 0) {
|
||||
// change byte-ordering and go via cache
|
||||
return (short) cpCache.getEntryAt((int) (0xFFFF & bytes.swapShort(cpCacheIndex))).getConstantPoolIndex();
|
||||
return (short) cpCache.getEntryAt((int) (0xFFFF & bytes.swapShort((short)cpCacheIndex))).getConstantPoolIndex();
|
||||
} else if (fmt.indexOf("j") >= 0) {
|
||||
// go via cache
|
||||
return (short) cpCache.getEntryAt((int) (0xFF & cpCacheIndex)).getConstantPoolIndex();
|
||||
} else {
|
||||
return (short) cpCacheIndex;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,10 +120,31 @@ public class ByteCodeRewriter
|
||||
case Bytecodes._invokespecial:
|
||||
case Bytecodes._invokestatic:
|
||||
case Bytecodes._invokeinterface: {
|
||||
cpoolIndex = getConstantPoolIndex(bci + 1);
|
||||
cpoolIndex = getConstantPoolIndex(hotspotcode, bci + 1);
|
||||
writeShort(code, bci + 1, cpoolIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
case Bytecodes._invokedynamic:
|
||||
cpoolIndex = getConstantPoolIndex(hotspotcode, bci + 1);
|
||||
writeShort(code, bci + 1, cpoolIndex);
|
||||
writeShort(code, bci + 3, (short)0); // clear out trailing bytes
|
||||
break;
|
||||
|
||||
case Bytecodes._ldc_w:
|
||||
if (hotspotcode != bytecode) {
|
||||
// fast_aldc_w puts constant in CP cache
|
||||
cpoolIndex = getConstantPoolIndex(hotspotcode, bci + 1);
|
||||
writeShort(code, bci + 1, cpoolIndex);
|
||||
}
|
||||
break;
|
||||
case Bytecodes._ldc:
|
||||
if (hotspotcode != bytecode) {
|
||||
// fast_aldc puts constant in CP cache
|
||||
cpoolIndex = getConstantPoolIndex(hotspotcode, bci + 1);
|
||||
code[bci + 1] = (byte)(cpoolIndex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
len = Bytecodes.lengthFor(bytecode);
|
||||
|
||||
@@ -61,10 +61,12 @@ public class ClassWriter implements /* imports */ ClassConstants
|
||||
protected short _signatureIndex;
|
||||
|
||||
protected static int extractHighShortFromInt(int val) {
|
||||
// must stay in sync with constantPoolOopDesc::name_and_type_at_put, method_at_put, etc.
|
||||
return (val >> 16) & 0xFFFF;
|
||||
}
|
||||
|
||||
protected static int extractLowShortFromInt(int val) {
|
||||
// must stay in sync with constantPoolOopDesc::name_and_type_at_put, method_at_put, etc.
|
||||
return val & 0xFFFF;
|
||||
}
|
||||
|
||||
@@ -297,6 +299,37 @@ public class ClassWriter implements /* imports */ ClassConstants
|
||||
+ ", type = " + signatureIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
case JVM_CONSTANT_MethodHandle: {
|
||||
dos.writeByte(cpConstType);
|
||||
int value = cpool.getIntAt(ci);
|
||||
short bootstrapMethodIndex = (short) extractLowShortFromInt(value);
|
||||
short nameAndTypeIndex = (short) extractHighShortFromInt(value);
|
||||
dos.writeShort(bootstrapMethodIndex);
|
||||
dos.writeShort(nameAndTypeIndex);
|
||||
if (DEBUG) debugMessage("CP[" + ci + "] = indy BSM = " +
|
||||
bootstrapMethodIndex + ", N&T = " + nameAndTypeIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
case JVM_CONSTANT_MethodType: {
|
||||
dos.writeByte(cpConstType);
|
||||
int value = cpool.getIntAt(ci);
|
||||
short refIndex = (short) value;
|
||||
dos.writeShort(refIndex);
|
||||
if (DEBUG) debugMessage("CP[" + ci + "] = MT index = " + refIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
case JVM_CONSTANT_InvokeDynamic: {
|
||||
dos.writeByte(cpConstType);
|
||||
int value = cpool.getIntAt(ci);
|
||||
short refIndex = (short) value;
|
||||
dos.writeShort(refIndex);
|
||||
if (DEBUG) debugMessage("CP[" + ci + "] = MT index = " + refIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
throw new InternalError("Unknown tag: " + cpConstType);
|
||||
} // switch
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -190,11 +190,11 @@ public class FindInCodeCachePanel extends SAPanel {
|
||||
|
||||
private void reportResult(StringBuffer result, CodeBlob blob) {
|
||||
result.append("<a href='blob:");
|
||||
result.append(blob.instructionsBegin().toString());
|
||||
result.append(blob.contentBegin().toString());
|
||||
result.append("'>");
|
||||
result.append(blob.getName());
|
||||
result.append("@");
|
||||
result.append(blob.instructionsBegin());
|
||||
result.append(blob.contentBegin());
|
||||
result.append("</a><br>");
|
||||
}
|
||||
|
||||
|
||||
@@ -572,6 +572,21 @@ public class HTMLGenerator implements /* imports */ ClassConstants {
|
||||
buf.cell(Integer.toString(cpool.getIntAt(index)));
|
||||
break;
|
||||
|
||||
case JVM_CONSTANT_MethodHandle:
|
||||
buf.cell("JVM_CONSTANT_MethodHandle");
|
||||
buf.cell(genLowHighShort(cpool.getIntAt(index)));
|
||||
break;
|
||||
|
||||
case JVM_CONSTANT_MethodType:
|
||||
buf.cell("JVM_CONSTANT_MethodType");
|
||||
buf.cell(Integer.toString(cpool.getIntAt(index)));
|
||||
break;
|
||||
|
||||
case JVM_CONSTANT_InvokeDynamic:
|
||||
buf.cell("JVM_CONSTANT_InvokeDynamic");
|
||||
buf.cell(genLowHighShort(cpool.getIntAt(index)));
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new InternalError("unknown tag: " + ctag);
|
||||
}
|
||||
@@ -1400,13 +1415,13 @@ public class HTMLGenerator implements /* imports */ ClassConstants {
|
||||
buf.append(genMethodAndKlassLink(nmethod.getMethod()));
|
||||
|
||||
buf.h3("Compiled Code");
|
||||
sun.jvm.hotspot.debugger.Address codeBegin = nmethod.codeBegin();
|
||||
sun.jvm.hotspot.debugger.Address codeEnd = nmethod.codeEnd();
|
||||
final int codeSize = (int)codeEnd.minus(codeBegin);
|
||||
final long startPc = addressToLong(codeBegin);
|
||||
final byte[] code = new byte[codeSize];
|
||||
sun.jvm.hotspot.debugger.Address instsBegin = nmethod.instsBegin();
|
||||
sun.jvm.hotspot.debugger.Address instsEnd = nmethod.instsEnd();
|
||||
final int instsSize = nmethod.instsSize();
|
||||
final long startPc = addressToLong(instsBegin);
|
||||
final byte[] code = new byte[instsSize];
|
||||
for (int i=0; i < code.length; i++)
|
||||
code[i] = codeBegin.getJByteAt(i);
|
||||
code[i] = instsBegin.getJByteAt(i);
|
||||
|
||||
final long verifiedEntryPoint = addressToLong(nmethod.getVerifiedEntryPoint());
|
||||
final long entryPoint = addressToLong(nmethod.getEntryPoint());
|
||||
@@ -1484,8 +1499,8 @@ public class HTMLGenerator implements /* imports */ ClassConstants {
|
||||
buf.h3("CodeBlob");
|
||||
|
||||
buf.h3("Compiled Code");
|
||||
final sun.jvm.hotspot.debugger.Address codeBegin = blob.instructionsBegin();
|
||||
final int codeSize = blob.getInstructionsSize();
|
||||
final sun.jvm.hotspot.debugger.Address codeBegin = blob.codeBegin();
|
||||
final int codeSize = blob.getCodeSize();
|
||||
final long startPc = addressToLong(codeBegin);
|
||||
final byte[] code = new byte[codeSize];
|
||||
for (int i=0; i < code.length; i++)
|
||||
|
||||
@@ -38,12 +38,27 @@ public class ConstantTag {
|
||||
private static int JVM_CONSTANT_Methodref = 10;
|
||||
private static int JVM_CONSTANT_InterfaceMethodref = 11;
|
||||
private static int JVM_CONSTANT_NameAndType = 12;
|
||||
private static int JVM_CONSTANT_MethodHandle = 15; // JSR 292
|
||||
private static int JVM_CONSTANT_MethodType = 16; // JSR 292
|
||||
private static int JVM_CONSTANT_InvokeDynamic = 17; // JSR 292
|
||||
private static int JVM_CONSTANT_Invalid = 0; // For bad value initialization
|
||||
private static int JVM_CONSTANT_UnresolvedClass = 100; // Temporary tag until actual use
|
||||
private static int JVM_CONSTANT_ClassIndex = 101; // Temporary tag while constructing constant pool
|
||||
private static int JVM_CONSTANT_UnresolvedString = 102; // Temporary tag until actual use
|
||||
private static int JVM_CONSTANT_StringIndex = 103; // Temporary tag while constructing constant pool
|
||||
private static int JVM_CONSTANT_UnresolvedClassInError = 104; // Resolution failed
|
||||
private static int JVM_CONSTANT_Object = 105; // Required for BoundMethodHandle arguments.
|
||||
|
||||
// JVM_CONSTANT_MethodHandle subtypes //FIXME: connect these to data structure
|
||||
private static int JVM_REF_getField = 1;
|
||||
private static int JVM_REF_getStatic = 2;
|
||||
private static int JVM_REF_putField = 3;
|
||||
private static int JVM_REF_putStatic = 4;
|
||||
private static int JVM_REF_invokeVirtual = 5;
|
||||
private static int JVM_REF_invokeStatic = 6;
|
||||
private static int JVM_REF_invokeSpecial = 7;
|
||||
private static int JVM_REF_newInvokeSpecial = 8;
|
||||
private static int JVM_REF_invokeInterface = 9;
|
||||
|
||||
private byte tag;
|
||||
|
||||
@@ -62,6 +77,9 @@ public class ConstantTag {
|
||||
public boolean isDouble() { return tag == JVM_CONSTANT_Double; }
|
||||
public boolean isNameAndType() { return tag == JVM_CONSTANT_NameAndType; }
|
||||
public boolean isUtf8() { return tag == JVM_CONSTANT_Utf8; }
|
||||
public boolean isMethodHandle() { return tag == JVM_CONSTANT_MethodHandle; }
|
||||
public boolean isMethodType() { return tag == JVM_CONSTANT_MethodType; }
|
||||
public boolean isInvokeDynamic() { return tag == JVM_CONSTANT_InvokeDynamic; }
|
||||
|
||||
public boolean isInvalid() { return tag == JVM_CONSTANT_Invalid; }
|
||||
|
||||
@@ -73,6 +91,8 @@ public class ConstantTag {
|
||||
public boolean isUnresolvedString() { return tag == JVM_CONSTANT_UnresolvedString; }
|
||||
public boolean isStringIndex() { return tag == JVM_CONSTANT_StringIndex; }
|
||||
|
||||
public boolean isObject() { return tag == JVM_CONSTANT_Object; }
|
||||
|
||||
public boolean isKlassReference() { return isKlassIndex() || isUnresolvedKlass(); }
|
||||
public boolean isFieldOrMethod() { return isField() || isMethod() || isInterfaceMethod(); }
|
||||
public boolean isSymbol() { return isUtf8(); }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -96,10 +96,15 @@ public class PointerFinder {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(loc.blob != null, "Should have found CodeBlob");
|
||||
}
|
||||
loc.inBlobInstructions = loc.blob.instructionsContains(a);
|
||||
loc.inBlobData = loc.blob.dataContains(a);
|
||||
loc.inBlobOops = loc.blob.oopsContains(a);
|
||||
loc.inBlobUnknownLocation = (!(loc.inBlobInstructions ||
|
||||
loc.inBlobCode = loc.blob.codeContains(a);
|
||||
loc.inBlobData = loc.blob.dataContains(a);
|
||||
|
||||
if (loc.blob.isNMethod()) {
|
||||
NMethod nm = (NMethod) loc.blob;
|
||||
loc.inBlobOops = nm.oopsContains(a);
|
||||
}
|
||||
|
||||
loc.inBlobUnknownLocation = (!(loc.inBlobCode ||
|
||||
loc.inBlobData ||
|
||||
loc.inBlobOops));
|
||||
return loc;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -65,7 +65,7 @@ public class PointerLocation {
|
||||
InterpreterCodelet interpreterCodelet;
|
||||
CodeBlob blob;
|
||||
// FIXME: add more detail about CodeBlob
|
||||
boolean inBlobInstructions;
|
||||
boolean inBlobCode;
|
||||
boolean inBlobData;
|
||||
boolean inBlobOops;
|
||||
boolean inBlobUnknownLocation;
|
||||
@@ -142,8 +142,8 @@ public class PointerLocation {
|
||||
return blob;
|
||||
}
|
||||
|
||||
public boolean isInBlobInstructions() {
|
||||
return inBlobInstructions;
|
||||
public boolean isInBlobCode() {
|
||||
return inBlobCode;
|
||||
}
|
||||
|
||||
public boolean isInBlobData() {
|
||||
@@ -233,8 +233,8 @@ public class PointerLocation {
|
||||
} else if (isInCodeCache()) {
|
||||
CodeBlob b = getCodeBlob();
|
||||
tty.print("In ");
|
||||
if (isInBlobInstructions()) {
|
||||
tty.print("instructions");
|
||||
if (isInBlobCode()) {
|
||||
tty.print("code");
|
||||
} else if (isInBlobData()) {
|
||||
tty.print("data");
|
||||
} else if (isInBlobOops()) {
|
||||
|
||||
@@ -825,6 +825,8 @@ function jdis(method) {
|
||||
}
|
||||
writeln("");
|
||||
disAsm.decode(new sapkg.interpreter.BytecodeVisitor() {
|
||||
prologue: function(method) { },
|
||||
epilogue: function() { },
|
||||
visit: function(bytecode) {
|
||||
if (hasLines) {
|
||||
var line = method.getLineNumberFromBCI(bci);
|
||||
|
||||
@@ -85,14 +85,21 @@ C1_VM_TARGETS=product1 fastdebug1 optimized1 jvmg1
|
||||
C2_VM_TARGETS=product fastdebug optimized jvmg
|
||||
KERNEL_VM_TARGETS=productkernel fastdebugkernel optimizedkernel jvmgkernel
|
||||
ZERO_VM_TARGETS=productzero fastdebugzero optimizedzero jvmgzero
|
||||
SHARK_VM_TARGETS=productshark fastdebugshark optimizedshark jvmgshark
|
||||
|
||||
# JDK directory list
|
||||
JDK_DIRS=bin include jre lib demo
|
||||
|
||||
all: all_product all_fastdebug
|
||||
ifndef BUILD_CLIENT_ONLY
|
||||
all_product: product product1 productkernel docs export_product
|
||||
all_fastdebug: fastdebug fastdebug1 fastdebugkernel docs export_fastdebug
|
||||
all_debug: jvmg jvmg1 jvmgkernel docs export_debug
|
||||
else
|
||||
all_product: product1 docs export_product
|
||||
all_fastdebug: fastdebug1 docs export_fastdebug
|
||||
all_debug: jvmg1 docs export_debug
|
||||
endif
|
||||
all_optimized: optimized optimized1 optimizedkernel docs export_optimized
|
||||
|
||||
allzero: all_productzero all_fastdebugzero
|
||||
@@ -101,6 +108,12 @@ all_fastdebugzero: fastdebugzero docs export_fastdebug
|
||||
all_debugzero: jvmgzero docs export_debug
|
||||
all_optimizedzero: optimizedzero docs export_optimized
|
||||
|
||||
allshark: all_productshark all_fastdebugshark
|
||||
all_productshark: productshark docs export_product
|
||||
all_fastdebugshark: fastdebugshark docs export_fastdebug
|
||||
all_debugshark: jvmgshark docs export_debug
|
||||
all_optimizedshark: optimizedshark docs export_optimized
|
||||
|
||||
# Do everything
|
||||
world: all create_jdk
|
||||
|
||||
@@ -131,6 +144,10 @@ $(ZERO_VM_TARGETS):
|
||||
$(CD) $(GAMMADIR)/make; \
|
||||
$(MAKE) VM_TARGET=$@ generic_buildzero $(ALT_OUT)
|
||||
|
||||
$(SHARK_VM_TARGETS):
|
||||
$(CD) $(GAMMADIR)/make; \
|
||||
$(MAKE) VM_TARGET=$@ generic_buildshark $(ALT_OUT)
|
||||
|
||||
# Build compiler1 (client) rule, different for platforms
|
||||
generic_build1:
|
||||
$(MKDIR) -p $(OUTPUTDIR)
|
||||
@@ -197,6 +214,12 @@ generic_buildzero:
|
||||
$(MAKE) -f $(ABS_OS_MAKEFILE) \
|
||||
$(MAKE_ARGS) $(VM_TARGET)
|
||||
|
||||
generic_buildshark:
|
||||
$(MKDIR) -p $(OUTPUTDIR)
|
||||
$(CD) $(OUTPUTDIR); \
|
||||
$(MAKE) -f $(ABS_OS_MAKEFILE) \
|
||||
$(MAKE_ARGS) $(VM_TARGET)
|
||||
|
||||
# Export file rule
|
||||
generic_export: $(EXPORT_LIST)
|
||||
export_product:
|
||||
@@ -228,15 +251,22 @@ C1_BASE_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_compiler1
|
||||
C2_BASE_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_compiler2
|
||||
KERNEL_BASE_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_kernel
|
||||
ZERO_BASE_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_zero
|
||||
SHARK_BASE_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_shark
|
||||
C1_DIR=$(C1_BASE_DIR)/$(VM_SUBDIR)
|
||||
C2_DIR=$(C2_BASE_DIR)/$(VM_SUBDIR)
|
||||
KERNEL_DIR=$(KERNEL_BASE_DIR)/$(VM_SUBDIR)
|
||||
ZERO_DIR=$(ZERO_BASE_DIR)/$(VM_SUBDIR)
|
||||
SHARK_DIR=$(SHARK_BASE_DIR)/$(VM_SUBDIR)
|
||||
|
||||
# Misc files and generated files need to come from C1 or C2 area
|
||||
ifeq ($(ZERO_BUILD), true)
|
||||
ifeq ($(SHARK_BUILD), true)
|
||||
MISC_DIR=$(SHARK_DIR)
|
||||
GEN_DIR=$(SHARK_BASE_DIR)/generated
|
||||
else
|
||||
MISC_DIR=$(ZERO_DIR)
|
||||
GEN_DIR=$(ZERO_BASE_DIR)/generated
|
||||
endif
|
||||
else
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
MISC_DIR=$(C1_DIR)
|
||||
@@ -290,11 +320,20 @@ endif
|
||||
# Shared Library
|
||||
ifneq ($(OSNAME),windows)
|
||||
ifeq ($(ZERO_BUILD), true)
|
||||
ifeq ($(SHARK_BUILD), true)
|
||||
$(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(SHARK_DIR)/%.so
|
||||
$(install-file)
|
||||
$(EXPORT_SERVER_DIR)/%.so: $(SHARK_DIR)/%.so
|
||||
$(install-file)
|
||||
else
|
||||
$(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(ZERO_DIR)/%.so
|
||||
$(install-file)
|
||||
$(EXPORT_SERVER_DIR)/%.so: $(ZERO_DIR)/%.so
|
||||
$(install-file)
|
||||
endif
|
||||
else
|
||||
$(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(C1_DIR)/%.so
|
||||
$(install-file)
|
||||
$(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(C2_DIR)/%.so
|
||||
$(install-file)
|
||||
$(EXPORT_CLIENT_DIR)/%.so: $(C1_DIR)/%.so
|
||||
@@ -348,6 +387,7 @@ clean_build:
|
||||
$(RM) -r $(C2_DIR)
|
||||
$(RM) -r $(KERNEL_DIR)
|
||||
$(RM) -r $(ZERO_DIR)
|
||||
$(RM) -r $(SHARK_DIR)
|
||||
clean_export:
|
||||
$(RM) -r $(EXPORT_PATH)
|
||||
clean_jdk:
|
||||
|
||||
@@ -192,13 +192,16 @@ ifneq ($(OSNAME),windows)
|
||||
|
||||
# Use uname output for SRCARCH, but deal with platform differences. If ARCH
|
||||
# is not explicitly listed below, it is treated as x86.
|
||||
SRCARCH = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 zero,$(ARCH)))
|
||||
SRCARCH = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc zero,$(ARCH)))
|
||||
ARCH/ = x86
|
||||
ARCH/sparc = sparc
|
||||
ARCH/sparc64= sparc
|
||||
ARCH/ia64 = ia64
|
||||
ARCH/amd64 = x86
|
||||
ARCH/x86_64 = x86
|
||||
ARCH/ppc64 = ppc
|
||||
ARCH/ppc = ppc
|
||||
ARCH/arm = arm
|
||||
ARCH/zero = zero
|
||||
|
||||
# BUILDARCH is usually the same as SRCARCH, except for sparcv9
|
||||
@@ -223,6 +226,9 @@ ifneq ($(OSNAME),windows)
|
||||
LIBARCH/sparc = sparc
|
||||
LIBARCH/sparcv9 = sparcv9
|
||||
LIBARCH/ia64 = ia64
|
||||
LIBARCH/ppc64 = ppc
|
||||
LIBARCH/ppc = ppc
|
||||
LIBARCH/arm = arm
|
||||
LIBARCH/zero = $(ZERO_LIBARCH)
|
||||
|
||||
LP64_ARCH = sparcv9 amd64 ia64 zero
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
# Don't put quotes (fail windows build).
|
||||
HOTSPOT_VM_COPYRIGHT=Copyright 2010
|
||||
|
||||
HS_MAJOR_VER=19
|
||||
HS_MAJOR_VER=20
|
||||
HS_MINOR_VER=0
|
||||
HS_BUILD_NUMBER=02
|
||||
HS_BUILD_NUMBER=01
|
||||
|
||||
JDK_MAJOR_VER=1
|
||||
JDK_MINOR_VER=7
|
||||
|
||||
@@ -47,6 +47,8 @@ jprt.sync.push=false
|
||||
# Define the Solaris platforms we want for the various releases
|
||||
|
||||
jprt.my.solaris.sparc.jdk7=solaris_sparc_5.10
|
||||
jprt.my.solaris.sparc.jdk7b107=solaris_sparc_5.10
|
||||
jprt.my.solaris.sparc.jdk7temp=solaris_sparc_5.10
|
||||
jprt.my.solaris.sparc.jdk6=solaris_sparc_5.8
|
||||
jprt.my.solaris.sparc.jdk6perf=solaris_sparc_5.8
|
||||
jprt.my.solaris.sparc.jdk6u10=solaris_sparc_5.8
|
||||
@@ -56,6 +58,8 @@ jprt.my.solaris.sparc.jdk6u20=solaris_sparc_5.8
|
||||
jprt.my.solaris.sparc=${jprt.my.solaris.sparc.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.solaris.sparcv9.jdk7=solaris_sparcv9_5.10
|
||||
jprt.my.solaris.sparcv9.jdk7b107=solaris_sparcv9_5.10
|
||||
jprt.my.solaris.sparcv9.jdk7temp=solaris_sparcv9_5.10
|
||||
jprt.my.solaris.sparcv9.jdk6=solaris_sparcv9_5.8
|
||||
jprt.my.solaris.sparcv9.jdk6perf=solaris_sparcv9_5.8
|
||||
jprt.my.solaris.sparcv9.jdk6u10=solaris_sparcv9_5.8
|
||||
@@ -65,6 +69,8 @@ jprt.my.solaris.sparcv9.jdk6u20=solaris_sparcv9_5.8
|
||||
jprt.my.solaris.sparcv9=${jprt.my.solaris.sparcv9.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.solaris.i586.jdk7=solaris_i586_5.10
|
||||
jprt.my.solaris.i586.jdk7b107=solaris_i586_5.10
|
||||
jprt.my.solaris.i586.jdk7temp=solaris_i586_5.10
|
||||
jprt.my.solaris.i586.jdk6=solaris_i586_5.8
|
||||
jprt.my.solaris.i586.jdk6perf=solaris_i586_5.8
|
||||
jprt.my.solaris.i586.jdk6u10=solaris_i586_5.8
|
||||
@@ -74,6 +80,8 @@ jprt.my.solaris.i586.jdk6u20=solaris_i586_5.8
|
||||
jprt.my.solaris.i586=${jprt.my.solaris.i586.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.solaris.x64.jdk7=solaris_x64_5.10
|
||||
jprt.my.solaris.x64.jdk7b107=solaris_x64_5.10
|
||||
jprt.my.solaris.x64.jdk7temp=solaris_x64_5.10
|
||||
jprt.my.solaris.x64.jdk6=solaris_x64_5.10
|
||||
jprt.my.solaris.x64.jdk6perf=solaris_x64_5.10
|
||||
jprt.my.solaris.x64.jdk6u10=solaris_x64_5.10
|
||||
@@ -83,6 +91,8 @@ jprt.my.solaris.x64.jdk6u20=solaris_x64_5.10
|
||||
jprt.my.solaris.x64=${jprt.my.solaris.x64.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.i586.jdk7=linux_i586_2.6
|
||||
jprt.my.linux.i586.jdk7b107=linux_i586_2.6
|
||||
jprt.my.linux.i586.jdk7temp=linux_i586_2.6
|
||||
jprt.my.linux.i586.jdk6=linux_i586_2.4
|
||||
jprt.my.linux.i586.jdk6perf=linux_i586_2.4
|
||||
jprt.my.linux.i586.jdk6u10=linux_i586_2.4
|
||||
@@ -92,6 +102,8 @@ jprt.my.linux.i586.jdk6u20=linux_i586_2.4
|
||||
jprt.my.linux.i586=${jprt.my.linux.i586.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.x64.jdk7=linux_x64_2.6
|
||||
jprt.my.linux.x64.jdk7b107=linux_x64_2.6
|
||||
jprt.my.linux.x64.jdk7temp=linux_x64_2.6
|
||||
jprt.my.linux.x64.jdk6=linux_x64_2.4
|
||||
jprt.my.linux.x64.jdk6perf=linux_x64_2.4
|
||||
jprt.my.linux.x64.jdk6u10=linux_x64_2.4
|
||||
@@ -100,7 +112,9 @@ jprt.my.linux.x64.jdk6u18=linux_x64_2.4
|
||||
jprt.my.linux.x64.jdk6u20=linux_x64_2.4
|
||||
jprt.my.linux.x64=${jprt.my.linux.x64.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.windows.i586.jdk7=windows_i586_5.0
|
||||
jprt.my.windows.i586.jdk7=windows_i586_5.1
|
||||
jprt.my.windows.i586.jdk7b107=windows_i586_5.0
|
||||
jprt.my.windows.i586.jdk7temp=windows_i586_5.0
|
||||
jprt.my.windows.i586.jdk6=windows_i586_5.0
|
||||
jprt.my.windows.i586.jdk6perf=windows_i586_5.0
|
||||
jprt.my.windows.i586.jdk6u10=windows_i586_5.0
|
||||
@@ -110,6 +124,8 @@ jprt.my.windows.i586.jdk6u20=windows_i586_5.0
|
||||
jprt.my.windows.i586=${jprt.my.windows.i586.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.windows.x64.jdk7=windows_x64_5.2
|
||||
jprt.my.windows.x64.jdk7b107=windows_x64_5.2
|
||||
jprt.my.windows.x64.jdk7temp=windows_x64_5.2
|
||||
jprt.my.windows.x64.jdk6=windows_x64_5.2
|
||||
jprt.my.windows.x64.jdk6perf=windows_x64_5.2
|
||||
jprt.my.windows.x64.jdk6u10=windows_x64_5.2
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -19,7 +19,7 @@
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
# This makefile creates a build tree and lights off a build.
|
||||
@@ -45,13 +45,13 @@
|
||||
#
|
||||
# make REMOTE="rsh -l me myotherlinuxbox"
|
||||
|
||||
# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
|
||||
# JDI binding on SA produces two binaries:
|
||||
# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
|
||||
# JDI binding on SA produces two binaries:
|
||||
# 1. sa-jdi.jar - This is build before building libjvm[_g].so
|
||||
# Please refer to ./makefiles/sa.make
|
||||
# 2. libsa[_g].so - Native library for SA - This is built after
|
||||
# libjsig[_g].so (signal interposition library)
|
||||
# Please refer to ./makefiles/vm.make
|
||||
# Please refer to ./makefiles/vm.make
|
||||
# If $(GAMMADIR)/agent dir is not present, SA components are not built.
|
||||
|
||||
ifeq ($(GAMMADIR),)
|
||||
@@ -61,11 +61,9 @@ include $(GAMMADIR)/make/defs.make
|
||||
endif
|
||||
include $(GAMMADIR)/make/$(OSNAME)/makefiles/rules.make
|
||||
|
||||
ifndef LP64
|
||||
ifndef CC_INTERP
|
||||
FORCE_TIERED=1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef LP64
|
||||
ifeq ("$(filter $(LP64_ARCH),$(BUILDARCH))","")
|
||||
@@ -168,6 +166,13 @@ VARIANTARCH = $(subst i386,i486,$(ZERO_LIBARCH))
|
||||
# profiledzero zero <os>_<arch>_zero/profiled
|
||||
# productzero zero <os>_<arch>_zero/product
|
||||
#
|
||||
# debugshark shark <os>_<arch>_shark/debug
|
||||
# fastdebugshark shark <os>_<arch>_shark/fastdebug
|
||||
# jvmgshark shark <os>_<arch>_shark/jvmg
|
||||
# optimizedshark shark <os>_<arch>_shark/optimized
|
||||
# profiledshark shark <os>_<arch>_shark/profiled
|
||||
# productshark shark <os>_<arch>_shark/product
|
||||
#
|
||||
# What you get with each target:
|
||||
#
|
||||
# debug* - "thin" libjvm_g - debug info linked into the gamma_g launcher
|
||||
@@ -191,12 +196,14 @@ SUBDIRS_C2 = $(addprefix $(OSNAME)_$(BUILDARCH)_compiler2/,$(TARGETS))
|
||||
SUBDIRS_TIERED = $(addprefix $(OSNAME)_$(BUILDARCH)_tiered/,$(TARGETS))
|
||||
SUBDIRS_CORE = $(addprefix $(OSNAME)_$(BUILDARCH)_core/,$(TARGETS))
|
||||
SUBDIRS_ZERO = $(addprefix $(OSNAME)_$(VARIANTARCH)_zero/,$(TARGETS))
|
||||
SUBDIRS_SHARK = $(addprefix $(OSNAME)_$(VARIANTARCH)_shark/,$(TARGETS))
|
||||
|
||||
TARGETS_C2 = $(TARGETS)
|
||||
TARGETS_C1 = $(addsuffix 1,$(TARGETS))
|
||||
TARGETS_TIERED = $(addsuffix tiered,$(TARGETS))
|
||||
TARGETS_CORE = $(addsuffix core,$(TARGETS))
|
||||
TARGETS_ZERO = $(addsuffix zero,$(TARGETS))
|
||||
TARGETS_SHARK = $(addsuffix shark,$(TARGETS))
|
||||
|
||||
BUILDTREE_MAKE = $(GAMMADIR)/make/$(OSNAME)/makefiles/buildtree.make
|
||||
BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OSNAME) ARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH)
|
||||
@@ -213,6 +220,7 @@ all:
|
||||
@echo " $(TARGETS_C1)"
|
||||
@echo " $(TARGETS_CORE)"
|
||||
@echo " $(TARGETS_ZERO)"
|
||||
@echo " $(TARGETS_SHARK)"
|
||||
|
||||
checks: check_os_version check_j2se_version
|
||||
|
||||
@@ -266,6 +274,10 @@ $(SUBDIRS_ZERO): $(BUILDTREE_MAKE) platform_zero
|
||||
$(QUIETLY) $(MAKE) -f $(GAMMADIR)/make/$(OSNAME)/Makefile checks
|
||||
$(BUILDTREE) VARIANT=zero VARIANTARCH=$(VARIANTARCH)
|
||||
|
||||
$(SUBDIRS_SHARK): $(BUILDTREE_MAKE) platform_zero
|
||||
$(QUIETLY) $(MAKE) -f $(GAMMADIR)/make/$(OSNAME)/Makefile checks
|
||||
$(BUILDTREE) VARIANT=shark VARIANTARCH=$(VARIANTARCH)
|
||||
|
||||
platform_zero: $(GAMMADIR)/make/$(OSNAME)/platform_zero.in
|
||||
$(SED) 's/@ZERO_ARCHDEF@/$(ZERO_ARCHDEF)/g;s/@ZERO_LIBARCH@/$(ZERO_LIBARCH)/g;' < $< > $@
|
||||
|
||||
@@ -306,11 +318,19 @@ ifdef INSTALL
|
||||
cd $(OSNAME)_$(VARIANTARCH)_zero/$(patsubst %zero,%,$@) && $(MAKE) $(MFLAGS) install
|
||||
endif
|
||||
|
||||
$(TARGETS_SHARK): $(SUBDIRS_SHARK)
|
||||
cd $(OSNAME)_$(VARIANTARCH)_shark/$(patsubst %shark,%,$@) && $(MAKE) $(MFLAGS)
|
||||
cd $(OSNAME)_$(VARIANTARCH)_shark/$(patsubst %shark,%,$@) && ./test_gamma
|
||||
ifdef INSTALL
|
||||
cd $(OSNAME)_$(VARIANTARCH)_shark/$(patsubst %shark,%,$@) && $(MAKE) $(MFLAGS) install
|
||||
endif
|
||||
|
||||
# Just build the tree, and nothing else:
|
||||
tree: $(SUBDIRS_C2)
|
||||
tree1: $(SUBDIRS_C1)
|
||||
treecore: $(SUBDIRS_CORE)
|
||||
treezero: $(SUBDIRS_ZERO)
|
||||
treeshark: $(SUBDIRS_SHARK)
|
||||
|
||||
# Doc target. This is the same for all build options.
|
||||
# Hence create a docs directory beside ...$(ARCH)_[...]
|
||||
@@ -327,20 +347,22 @@ core: jvmgcore productcore
|
||||
|
||||
zero: jvmgzero productzero
|
||||
|
||||
shark: jvmgshark productshark
|
||||
|
||||
clean_docs:
|
||||
rm -rf $(SUBDIR_DOCS)
|
||||
|
||||
clean_compiler1 clean_compiler2 clean_core clean_zero:
|
||||
clean_compiler1 clean_compiler2 clean_core clean_zero clean_shark:
|
||||
rm -rf $(OSNAME)_$(BUILDARCH)_$(subst clean_,,$@)
|
||||
|
||||
clean: clean_compiler2 clean_compiler1 clean_core clean_zero clean_docs
|
||||
clean: clean_compiler2 clean_compiler1 clean_core clean_zero clean_shark clean_docs
|
||||
|
||||
include $(GAMMADIR)/make/$(OSNAME)/makefiles/cscope.make
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
.PHONY: $(TARGETS_C2) $(TARGETS_C1) $(TARGETS_CORE) $(TARGETS_ZERO)
|
||||
.PHONY: tree tree1 treecore treezero
|
||||
.PHONY: all compiler1 compiler2 core zero
|
||||
.PHONY: clean clean_compiler1 clean_compiler2 clean_core clean_zero docs clean_docs
|
||||
.PHONY: $(TARGETS_C2) $(TARGETS_C1) $(TARGETS_CORE) $(TARGETS_ZERO) $(TARGETS_SHARK)
|
||||
.PHONY: tree tree1 treecore treezero treeshark
|
||||
.PHONY: all compiler1 compiler2 core zero shark
|
||||
.PHONY: clean clean_compiler1 clean_compiler2 clean_core clean_zero clean_shark docs clean_docs
|
||||
.PHONY: checks check_os_version check_j2se_version
|
||||
|
||||
@@ -138,7 +138,11 @@ ADLCFLAGS += -q -T
|
||||
|
||||
# Normally, debugging is done directly on the ad_<arch>*.cpp files.
|
||||
# But -g will put #line directives in those files pointing back to <arch>.ad.
|
||||
# Some builds of gcc 3.2 have a bug that gets tickled by the extra #line directives
|
||||
# so skip it for 3.2 and ealier.
|
||||
ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 3 \) \| \( \( $(CC_VER_MAJOR) = 3 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
|
||||
ADLCFLAGS += -g
|
||||
endif
|
||||
|
||||
ifdef LP64
|
||||
ADLCFLAGS += -D_LP64
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
nm --defined-only $* | awk '
|
||||
# If we're cross compiling use that path for nm
|
||||
if [ "$ALT_COMPILER_PATH" != "" ]; then
|
||||
NM=$ALT_COMPILER_PATH/nm
|
||||
else
|
||||
NM=nm
|
||||
fi
|
||||
|
||||
$NM --defined-only $* | awk '
|
||||
{ if ($3 ~ /^_ZTV/ || $3 ~ /^gHotSpotVM/) print "\t" $3 ";" }
|
||||
'
|
||||
|
||||
@@ -339,12 +339,16 @@ JAVA_FLAG/64 = -d64
|
||||
WRONG_DATA_MODE_MSG = \
|
||||
echo "JAVA_HOME must point to $(DATA_MODE)bit JDK."
|
||||
|
||||
CROSS_COMPILING_MSG = \
|
||||
echo "Cross compiling for ARCH $(CROSS_COMPILE_ARCH), skipping gamma run."
|
||||
|
||||
test_gamma: $(BUILDTREE_MAKE) $(GAMMADIR)/make/test/Queens.java
|
||||
@echo Creating $@ ...
|
||||
$(QUIETLY) ( \
|
||||
echo '#!/bin/sh'; \
|
||||
$(BUILDTREE_COMMENT); \
|
||||
echo '. ./env.sh'; \
|
||||
echo "if [ \"$(CROSS_COMPILE_ARCH)\" != \"\" ]; then { $(CROSS_COMPILING_MSG); exit 0; }; fi"; \
|
||||
echo "if [ -z \$$JAVA_HOME ]; then { $(NO_JAVA_HOME_MSG); exit 0; }; fi"; \
|
||||
echo "if ! \$${JAVA_HOME}/bin/java $(JAVA_FLAG) -fullversion 2>&1 > /dev/null"; \
|
||||
echo "then"; \
|
||||
|
||||
@@ -98,6 +98,22 @@ ifeq ($(ARCH), i686)
|
||||
HS_ARCH = x86
|
||||
endif
|
||||
|
||||
# ARM
|
||||
ifeq ($(ARCH), arm)
|
||||
ARCH_DATA_MODEL = 32
|
||||
PLATFORM = linux-arm
|
||||
VM_PLATFORM = linux_arm
|
||||
HS_ARCH = arm
|
||||
endif
|
||||
|
||||
# PPC
|
||||
ifeq ($(ARCH), ppc)
|
||||
ARCH_DATA_MODEL = 32
|
||||
PLATFORM = linux-ppc
|
||||
VM_PLATFORM = linux_ppc
|
||||
HS_ARCH = ppc
|
||||
endif
|
||||
|
||||
JDK_INCLUDE_SUBDIR=linux
|
||||
|
||||
# FIXUP: The subdirectory for a debug build is NOT the same on all platforms
|
||||
@@ -107,22 +123,32 @@ EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
|
||||
|
||||
# client and server subdirectories have symbolic links to ../libjsig.so
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.so
|
||||
|
||||
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
|
||||
|
||||
ifndef BUILD_CLIENT_ONLY
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.so
|
||||
endif
|
||||
|
||||
ifneq ($(ZERO_BUILD), true)
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.so
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so
|
||||
EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar
|
||||
else
|
||||
ifeq ($(ARCH),ia64)
|
||||
else
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so
|
||||
EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Serviceability Binaries
|
||||
# No SA Support for PPC, IA64, ARM or zero
|
||||
ADD_SA_BINARIES/x86 = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so \
|
||||
$(EXPORT_LIB_DIR)/sa-jdi.jar
|
||||
ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so \
|
||||
$(EXPORT_LIB_DIR)/sa-jdi.jar
|
||||
ADD_SA_BINARIES/ppc =
|
||||
ADD_SA_BINARIES/ia64 =
|
||||
ADD_SA_BINARIES/arm =
|
||||
ADD_SA_BINARIES/zero =
|
||||
|
||||
EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH))
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -25,8 +25,14 @@
|
||||
#------------------------------------------------------------------------
|
||||
# CC, CPP & AS
|
||||
|
||||
ifdef ALT_COMPILER_PATH
|
||||
CPP = $(ALT_COMPILER_PATH)/g++
|
||||
CC = $(ALT_COMPILER_PATH)/gcc
|
||||
else
|
||||
CPP = g++
|
||||
CC = gcc
|
||||
endif
|
||||
|
||||
AS = $(CC) -c
|
||||
|
||||
# -dumpversion in gcc-2.91 shows "egcs-2.91.66". In later version, it only
|
||||
@@ -55,6 +61,9 @@ VM_PICFLAG = $(VM_PICFLAG/$(LINK_INTO))
|
||||
ifeq ($(ZERO_BUILD), true)
|
||||
CFLAGS += $(LIBFFI_CFLAGS)
|
||||
endif
|
||||
ifeq ($(SHARK_BUILD), true)
|
||||
CFLAGS += $(LLVM_CFLAGS)
|
||||
endif
|
||||
CFLAGS += $(VM_PICFLAG)
|
||||
CFLAGS += -fno-rtti
|
||||
CFLAGS += -fno-exceptions
|
||||
@@ -67,18 +76,31 @@ ARCHFLAG/amd64 = -m64
|
||||
ARCHFLAG/ia64 =
|
||||
ARCHFLAG/sparc = -m32 -mcpu=v9
|
||||
ARCHFLAG/sparcv9 = -m64 -mcpu=v9
|
||||
ARCHFLAG/arm = -fsigned-char
|
||||
ARCHFLAG/zero = $(ZERO_ARCHFLAG)
|
||||
ifndef E500V2
|
||||
ARCHFLAG/ppc = -mcpu=powerpc
|
||||
endif
|
||||
|
||||
CFLAGS += $(ARCHFLAG)
|
||||
AOUT_FLAGS += $(ARCHFLAG)
|
||||
LFLAGS += $(ARCHFLAG)
|
||||
ASFLAGS += $(ARCHFLAG)
|
||||
|
||||
ifdef E500V2
|
||||
CFLAGS += -DE500V2
|
||||
endif
|
||||
|
||||
# Use C++ Interpreter
|
||||
ifdef CC_INTERP
|
||||
CFLAGS += -DCC_INTERP
|
||||
endif
|
||||
|
||||
# Build for embedded targets
|
||||
ifdef JAVASE_EMBEDDED
|
||||
CFLAGS += -DJAVASE_EMBEDDED
|
||||
endif
|
||||
|
||||
# Keep temporary files (.ii, .s)
|
||||
ifdef NEED_ASM
|
||||
CFLAGS += -save-temps
|
||||
@@ -171,6 +193,8 @@ AOUT_FLAGS += -export-dynamic
|
||||
# Note: The Itanium gcc compiler crashes when using -gstabs.
|
||||
DEBUG_CFLAGS/ia64 = -g
|
||||
DEBUG_CFLAGS/amd64 = -g
|
||||
DEBUG_CFLAGS/arm = -g
|
||||
DEBUG_CFLAGS/ppc = -g
|
||||
DEBUG_CFLAGS += $(DEBUG_CFLAGS/$(BUILDARCH))
|
||||
ifeq ($(DEBUG_CFLAGS/$(BUILDARCH)),)
|
||||
DEBUG_CFLAGS += -gstabs
|
||||
@@ -181,3 +205,15 @@ ifeq ($(DEBUG_BINARIES), true)
|
||||
DEBUG_CFLAGS = -g
|
||||
CFLAGS += $(DEBUG_CFLAGS)
|
||||
endif
|
||||
|
||||
# If we are building HEADLESS, pass on to VM
|
||||
# so it can set the java.awt.headless property
|
||||
ifdef HEADLESS
|
||||
CFLAGS += -DHEADLESS
|
||||
endif
|
||||
|
||||
# We are building Embedded for a small device
|
||||
# favor code space over speed
|
||||
ifdef MINIMIZE_RAM_USAGE
|
||||
CFLAGS += -DMINIMIZE_RAM_USAGE
|
||||
endif
|
||||
|
||||
@@ -46,7 +46,11 @@ VERSION = optimized
|
||||
|
||||
# use -g to strip library as -x will discard its symbol table; -x is fine for
|
||||
# executables.
|
||||
STRIP = strip
|
||||
ifdef CROSS_COMPILE_ARCH
|
||||
STRIP = $(ALT_COMPILER_PATH)/strip
|
||||
else
|
||||
STRIP = strip
|
||||
endif
|
||||
STRIP_LIBJVM = $(STRIP) -g $@ || exit 1;
|
||||
STRIP_AOUT = $(STRIP) -x $@ || exit 1;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -40,11 +40,17 @@ GENERATED = $(TOPDIR)/../generated
|
||||
# tools.jar is needed by the JDI - SA binding
|
||||
SA_CLASSPATH = $(BOOT_JAVA_HOME)/lib/tools.jar
|
||||
|
||||
# TODO: if it's a modules image, check if SA module is installed.
|
||||
MODULELIB_PATH= $(BOOT_JAVA_HOME)/lib/modules
|
||||
|
||||
# gnumake 3.78.1 does not accept the *s that
|
||||
# are in AGENT_FILES1 and AGENT_FILES2, so use the shell to expand them
|
||||
AGENT_FILES1 := $(shell /usr/bin/test -d $(AGENT_DIR) && /bin/ls $(AGENT_FILES1))
|
||||
AGENT_FILES2 := $(shell /usr/bin/test -d $(AGENT_DIR) && /bin/ls $(AGENT_FILES2))
|
||||
|
||||
AGENT_FILES1_LIST := $(GENERATED)/agent1.classes.list
|
||||
AGENT_FILES2_LIST := $(GENERATED)/agent2.classes.list
|
||||
|
||||
SA_CLASSDIR = $(GENERATED)/saclasses
|
||||
|
||||
SA_BUILD_VERSION_PROP = "sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION)"
|
||||
@@ -52,10 +58,13 @@ SA_BUILD_VERSION_PROP = "sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VE
|
||||
SA_PROPERTIES = $(SA_CLASSDIR)/sa.properties
|
||||
|
||||
# if $(AGENT_DIR) does not exist, we don't build SA
|
||||
# also, we don't build SA on Itanium or zero.
|
||||
# also, we don't build SA on Itanium, PowerPC, ARM or zero.
|
||||
|
||||
all:
|
||||
if [ -d $(AGENT_DIR) -a "$(SRCARCH)" != "ia64" -a "$(SRCARCH)" != "zero" ] ; then \
|
||||
if [ -d $(AGENT_DIR) -a "$(SRCARCH)" != "ia64" \
|
||||
-a "$(SRCARCH)" != "arm" \
|
||||
-a "$(SRCARCH)" != "ppc" \
|
||||
-a "$(SRCARCH)" != "zero" ] ; then \
|
||||
$(MAKE) -f sa.make $(GENERATED)/sa-jdi.jar; \
|
||||
fi
|
||||
|
||||
@@ -65,7 +74,7 @@ $(GENERATED)/sa-jdi.jar: $(AGENT_FILES1) $(AGENT_FILES2)
|
||||
echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \
|
||||
exit 1; \
|
||||
fi
|
||||
$(QUIETLY) if [ ! -f $(SA_CLASSPATH) ] ; then \
|
||||
$(QUIETLY) if [ ! -f $(SA_CLASSPATH) -a ! -d $(MODULELIB_PATH) ] ; then \
|
||||
echo "Missing $(SA_CLASSPATH) file. Use 1.6.0 or later version of JDK";\
|
||||
echo ""; \
|
||||
exit 1; \
|
||||
@@ -73,10 +82,24 @@ $(GENERATED)/sa-jdi.jar: $(AGENT_FILES1) $(AGENT_FILES2)
|
||||
$(QUIETLY) if [ ! -d $(SA_CLASSDIR) ] ; then \
|
||||
mkdir -p $(SA_CLASSDIR); \
|
||||
fi
|
||||
|
||||
$(QUIETLY) $(REMOTE) $(COMPILE.JAVAC) -source 1.4 -target 1.4 -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) $(AGENT_FILES1)
|
||||
$(QUIETLY) $(REMOTE) $(COMPILE.JAVAC) -source 1.4 -target 1.4 -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) $(AGENT_FILES2)
|
||||
|
||||
|
||||
# Note: When indented, make tries to execute the '$(shell' comment.
|
||||
# In some environments, cmd processors have limited line length.
|
||||
# To prevent the javac invocation in the next block from using
|
||||
# a very long cmd line, we use javac's @file-list option. We
|
||||
# generate the file lists using make's built-in 'foreach' control
|
||||
# flow which also avoids cmd processor line length issues. Since
|
||||
# the 'foreach' is done as part of make's macro expansion phase,
|
||||
# the initialization of the lists is also done in the same phase
|
||||
# using '$(shell rm ...' instead of using the more traditional
|
||||
# 'rm ...' rule.
|
||||
$(shell rm -rf $(AGENT_FILES1_LIST) $(AGENT_FILES2_LIST))
|
||||
$(foreach file,$(AGENT_FILES1),$(shell echo $(file) >> $(AGENT_FILES1_LIST)))
|
||||
$(foreach file,$(AGENT_FILES2),$(shell echo $(file) >> $(AGENT_FILES2_LIST)))
|
||||
|
||||
$(QUIETLY) $(REMOTE) $(COMPILE.JAVAC) -source 1.4 -target 1.4 -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) @$(AGENT_FILES1_LIST)
|
||||
$(QUIETLY) $(REMOTE) $(COMPILE.JAVAC) -source 1.4 -target 1.4 -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) @$(AGENT_FILES2_LIST)
|
||||
|
||||
$(QUIETLY) $(REMOTE) $(COMPILE.RMIC) -classpath $(SA_CLASSDIR) -d $(SA_CLASSDIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer
|
||||
$(QUIETLY) echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES)
|
||||
$(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql/sa.js
|
||||
@@ -95,3 +118,4 @@ $(GENERATED)/sa-jdi.jar: $(AGENT_FILES1) $(AGENT_FILES2)
|
||||
clean:
|
||||
rm -rf $(SA_CLASSDIR)
|
||||
rm -rf $(GENERATED)/sa-jdi.jar
|
||||
rm -rf $(AGENT_FILES1_LIST) $(AGENT_FILES2_LIST)
|
||||
|
||||
@@ -53,10 +53,10 @@ ifeq ($(DEBUG_BINARIES), true)
|
||||
endif
|
||||
|
||||
# if $(AGENT_DIR) does not exist, we don't build SA
|
||||
# also, we don't build SA on Itanium or zero.
|
||||
# also, we don't build SA on Itanium, PPC, ARM or zero.
|
||||
|
||||
checkAndBuildSA:
|
||||
$(QUIETLY) if [ -d $(AGENT_DIR) -a "$(SRCARCH)" != "ia64" -a "$(SRCARCH)" != "zero" ] ; then \
|
||||
$(QUIETLY) if [ -d $(AGENT_DIR) -a "$(SRCARCH)" != "ia64" -a "$(SRCARCH)" != "arm" -a "$(SRCARCH)" != "ppc" -a "$(SRCARCH)" != "zero" ] ; then \
|
||||
$(MAKE) -f vm.make $(LIBSAPROC); \
|
||||
fi
|
||||
|
||||
|
||||
32
hotspot/make/linux/makefiles/shark.make
Normal file
32
hotspot/make/linux/makefiles/shark.make
Normal file
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright 2008, 2010 Red Hat, Inc.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
# Sets make macros for making Shark version of VM
|
||||
|
||||
TYPE = SHARK
|
||||
|
||||
VM_SUBDIR = server
|
||||
|
||||
CFLAGS += -DSHARK
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -75,6 +75,7 @@ Include_DBs/COMPILER1 = $(Include_DBs/CORE) $(VM)/includeDB_compiler1
|
||||
Include_DBs/COMPILER2 = $(Include_DBs/CORE) $(VM)/includeDB_compiler2
|
||||
Include_DBs/TIERED = $(Include_DBs/CORE) $(VM)/includeDB_compiler1 $(VM)/includeDB_compiler2
|
||||
Include_DBs/ZERO = $(Include_DBs/CORE) $(VM)/includeDB_zero
|
||||
Include_DBs/SHARK = $(Include_DBs/ZERO) $(VM)/includeDB_shark
|
||||
Include_DBs = $(Include_DBs/$(TYPE))
|
||||
|
||||
Cached_plat = $(GENERATED)/platform.current
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -98,6 +98,7 @@ CFLAGS += $(CFLAGS/NOEX)
|
||||
|
||||
# Extra flags from gnumake's invocation or environment
|
||||
CFLAGS += $(EXTRA_CFLAGS)
|
||||
LFLAGS += $(EXTRA_CFLAGS)
|
||||
|
||||
LIBS += -lm -ldl -lpthread
|
||||
|
||||
@@ -136,10 +137,14 @@ mapfile_reorder : mapfile $(REORDERFILE)
|
||||
vm.def: $(Res_Files) $(Obj_Files)
|
||||
sh $(GAMMADIR)/make/linux/makefiles/build_vm_def.sh *.o > $@
|
||||
|
||||
ifeq ($(ZERO_LIBARCH), ppc64)
|
||||
ifeq ($(SHARK_BUILD), true)
|
||||
STATIC_CXX = false
|
||||
else
|
||||
STATIC_CXX = true
|
||||
ifeq ($(ZERO_LIBARCH), ppc64)
|
||||
STATIC_CXX = false
|
||||
else
|
||||
STATIC_CXX = true
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(LINK_INTO),AOUT)
|
||||
@@ -167,6 +172,10 @@ endif
|
||||
ifeq ($(ZERO_BUILD), true)
|
||||
LIBS_VM += $(LIBFFI_LIBS)
|
||||
endif
|
||||
ifeq ($(SHARK_BUILD), true)
|
||||
LFLAGS_VM += $(LLVM_LDFLAGS)
|
||||
LIBS_VM += $(LLVM_LIBS)
|
||||
endif
|
||||
|
||||
LINK_VM = $(LINK_LIB.c)
|
||||
|
||||
@@ -210,15 +219,17 @@ $(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) $(LD_SCRIPT)
|
||||
$(LINK_LIB.CC/POST_HOOK) \
|
||||
rm -f $@.1; ln -s $@ $@.1; \
|
||||
[ -f $(LIBJVM_G) ] || { ln -s $@ $(LIBJVM_G); ln -s $@.1 $(LIBJVM_G).1; }; \
|
||||
if [ -x /usr/sbin/selinuxenabled ] ; then \
|
||||
/usr/sbin/selinuxenabled; \
|
||||
if [ $$? = 0 ] ; then \
|
||||
/usr/bin/chcon -t textrel_shlib_t $@; \
|
||||
if [ $$? != 0 ]; then \
|
||||
echo "ERROR: Cannot chcon $@"; \
|
||||
fi \
|
||||
fi \
|
||||
fi \
|
||||
if [ \"$(CROSS_COMPILE_ARCH)\" = \"\" ] ; then \
|
||||
if [ -x /usr/sbin/selinuxenabled ] ; then \
|
||||
/usr/sbin/selinuxenabled; \
|
||||
if [ $$? = 0 ] ; then \
|
||||
/usr/bin/chcon -t textrel_shlib_t $@; \
|
||||
if [ $$? != 0 ]; then \
|
||||
echo "ERROR: Cannot chcon $@"; \
|
||||
fi \
|
||||
fi \
|
||||
fi \
|
||||
fi \
|
||||
}
|
||||
|
||||
DEST_JVM = $(JDK_LIBDIR)/$(VM_SUBDIR)/$(LIBJVM)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -19,7 +19,7 @@
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
# This makefile creates a build tree and lights off a build.
|
||||
@@ -36,13 +36,13 @@
|
||||
# or BOOTDIR has to be set. We do *not* search javac, javah, rmic etc.
|
||||
# from the PATH.
|
||||
|
||||
# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
|
||||
# JDI binding on SA produces two binaries:
|
||||
# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
|
||||
# JDI binding on SA produces two binaries:
|
||||
# 1. sa-jdi.jar - This is build before building libjvm[_g].so
|
||||
# Please refer to ./makefiles/sa.make
|
||||
# 2. libsaproc[_g].so - Native library for SA - This is built after
|
||||
# libjsig[_g].so (signal interposition library)
|
||||
# Please refer to ./makefiles/vm.make
|
||||
# Please refer to ./makefiles/vm.make
|
||||
# If $(GAMMADIR)/agent dir is not present, SA components are not built.
|
||||
|
||||
ifeq ($(GAMMADIR),)
|
||||
@@ -52,11 +52,9 @@ include $(GAMMADIR)/make/defs.make
|
||||
endif
|
||||
include $(GAMMADIR)/make/$(OSNAME)/makefiles/rules.make
|
||||
|
||||
ifndef LP64
|
||||
ifndef CC_INTERP
|
||||
FORCE_TIERED=1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef LP64
|
||||
ifeq ("$(filter $(LP64_ARCH),$(BUILDARCH))","")
|
||||
|
||||
@@ -70,21 +70,23 @@ EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.so
|
||||
|
||||
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
|
||||
ifneq ($(BUILD_CLIENT_ONLY),true)
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.so
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.so
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.so
|
||||
endif
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.so
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.so
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.so
|
||||
ifeq ($(ARCH),sparc)
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.so
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.so
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.so
|
||||
ifneq ($(BUILD_CLIENT_ONLY), true)
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.so
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.so
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.so
|
||||
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.so
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ $(DTRACE).d: $(DTRACE_SRCDIR)/hotspot.d $(DTRACE_SRCDIR)/hotspot_jni.d \
|
||||
$(DTRACE.o): $(DTRACE).d $(JVMOFFS).h $(JVMOFFS)Index.h $(DTraced_Files)
|
||||
@echo Compiling $(DTRACE).d
|
||||
|
||||
$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -G -o $@ -s $(DTRACE).d \
|
||||
$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -G -xlazyload -o $@ -s $(DTRACE).d \
|
||||
$(DTraced_Files) ||\
|
||||
STATUS=$$?;\
|
||||
if [ x"$$STATUS" = x"1" -a \
|
||||
|
||||
4477
hotspot/make/solaris/makefiles/reorder_TIERED_sparcv9
Normal file
4477
hotspot/make/solaris/makefiles/reorder_TIERED_sparcv9
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -36,11 +36,17 @@ GENERATED = ../generated
|
||||
# tools.jar is needed by the JDI - SA binding
|
||||
SA_CLASSPATH = $(BOOT_JAVA_HOME)/lib/tools.jar
|
||||
|
||||
# TODO: if it's a modules image, check if SA module is installed.
|
||||
MODULELIB_PATH= $(BOOT_JAVA_HOME)/lib/modules
|
||||
|
||||
# gnumake 3.78.1 does not accept the *s that
|
||||
# are in AGENT_FILES1 and AGENT_FILES2, so use the shell to expand them
|
||||
AGENT_FILES1 := $(shell /usr/bin/test -d $(AGENT_DIR) && /bin/ls $(AGENT_FILES1))
|
||||
AGENT_FILES2 := $(shell /usr/bin/test -d $(AGENT_DIR) && /bin/ls $(AGENT_FILES2))
|
||||
|
||||
AGENT_FILES1_LIST := $(GENERATED)/agent1.classes.list
|
||||
AGENT_FILES2_LIST := $(GENERATED)/agent2.classes.list
|
||||
|
||||
SA_CLASSDIR = $(GENERATED)/saclasses
|
||||
|
||||
SA_BUILD_VERSION_PROP = "sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION)"
|
||||
@@ -59,7 +65,7 @@ $(GENERATED)/sa-jdi.jar: $(AGENT_FILES1) $(AGENT_FILES2)
|
||||
echo "ALT_BOOTDIR, BOOTDIR or JAVA_HOME needs to be defined to build SA"; \
|
||||
exit 1; \
|
||||
fi
|
||||
$(QUIETLY) if [ ! -f $(SA_CLASSPATH) ] ; then \
|
||||
$(QUIETLY) if [ ! -f $(SA_CLASSPATH) -a ! -d $(MODULELIB_PATH) ] ; then \
|
||||
echo "Missing $(SA_CLASSPATH) file. Use 1.6.0 or later version of JDK";\
|
||||
echo ""; \
|
||||
exit 1; \
|
||||
@@ -67,8 +73,23 @@ $(GENERATED)/sa-jdi.jar: $(AGENT_FILES1) $(AGENT_FILES2)
|
||||
$(QUIETLY) if [ ! -d $(SA_CLASSDIR) ] ; then \
|
||||
mkdir -p $(SA_CLASSDIR); \
|
||||
fi
|
||||
$(QUIETLY) $(COMPILE.JAVAC) -source 1.4 -target 1.4 -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) $(AGENT_FILES1)
|
||||
$(QUIETLY) $(COMPILE.JAVAC) -source 1.4 -target 1.4 -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) $(AGENT_FILES2)
|
||||
|
||||
# Note: When indented, make tries to execute the '$(shell' comment.
|
||||
# In some environments, cmd processors have limited line length.
|
||||
# To prevent the javac invocation in the next block from using
|
||||
# a very long cmd line, we use javac's @file-list option. We
|
||||
# generate the file lists using make's built-in 'foreach' control
|
||||
# flow which also avoids cmd processor line length issues. Since
|
||||
# the 'foreach' is done as part of make's macro expansion phase,
|
||||
# the initialization of the lists is also done in the same phase
|
||||
# using '$(shell rm ...' instead of using the more traditional
|
||||
# 'rm ...' rule.
|
||||
$(shell rm -rf $(AGENT_FILES1_LIST) $(AGENT_FILES2_LIST))
|
||||
$(foreach file,$(AGENT_FILES1),$(shell echo $(file) >> $(AGENT_FILES1_LIST)))
|
||||
$(foreach file,$(AGENT_FILES2),$(shell echo $(file) >> $(AGENT_FILES2_LIST)))
|
||||
|
||||
$(QUIETLY) $(COMPILE.JAVAC) -source 1.4 -target 1.4 -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) @$(AGENT_FILES1_LIST)
|
||||
$(QUIETLY) $(COMPILE.JAVAC) -source 1.4 -target 1.4 -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) @$(AGENT_FILES2_LIST)
|
||||
|
||||
$(QUIETLY) $(COMPILE.RMIC) -classpath $(SA_CLASSDIR) -d $(SA_CLASSDIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer
|
||||
$(QUIETLY) echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES)
|
||||
@@ -85,3 +106,4 @@ $(GENERATED)/sa-jdi.jar: $(AGENT_FILES1) $(AGENT_FILES2)
|
||||
clean:
|
||||
rm -rf $(SA_CLASSDIR)
|
||||
rm -rf $(GENERATED)/sa-jdi.jar
|
||||
rm -rf $(AGENT_FILES1_LIST) $(AGENT_FILES2_LIST)
|
||||
|
||||
@@ -145,11 +145,20 @@ OPT_CFLAGS/SLOWER=-xO3
|
||||
OPT_CFLAGS/O2=-xO2
|
||||
OPT_CFLAGS/NOOPT=-xO1
|
||||
|
||||
#################################################
|
||||
# Begin current (>=5.9) Forte compiler options #
|
||||
#################################################
|
||||
|
||||
ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
|
||||
ifeq ($(Platform_arch), x86)
|
||||
OPT_CFLAGS/NO_TAIL_CALL_OPT = -Wu,-O~yz
|
||||
OPT_CCFLAGS/NO_TAIL_CALL_OPT = -Qoption ube -O~yz
|
||||
OPT_CFLAGS/stubGenerator_x86_32.o = $(OPT_CFLAGS) -xspace
|
||||
OPT_CFLAGS/stubGenerator_x86_64.o = $(OPT_CFLAGS) -xspace
|
||||
endif # Platform_arch == x86
|
||||
ifeq ("${Platform_arch}", "sparc")
|
||||
OPT_CFLAGS/stubGenerator_sparc.o = $(OPT_CFLAGS) -xspace
|
||||
endif
|
||||
endif # COMPILER_REV_NUMERIC >= 509
|
||||
|
||||
#################################################
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright %YEARS% Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright %YEARS% Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This code is free software; you can redistribute it and/or modify it
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright %YEARS% Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) %YEARS%, Oracle and/or its affiliates. All rights reserved.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
|
||||
This code is free software; you can redistribute it and/or modify it
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -19,7 +19,7 @@
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
# Note: this makefile is invoked both from build.bat and from the J2SE
|
||||
@@ -72,13 +72,11 @@ BUILDARCH=ia64
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!if "$(BUILDARCH)" != "amd64"
|
||||
!if "$(BUILDARCH)" != "ia64"
|
||||
!ifndef CC_INTERP
|
||||
FORCE_TIERED=1
|
||||
!endif
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!if "$(BUILDARCH)" == "amd64"
|
||||
Platform_arch=x86
|
||||
@@ -135,7 +133,7 @@ VARIANT_TEXT=Kernel
|
||||
# We can have update versions like "01a", but Windows requires
|
||||
# we use only integers in the file version field. So:
|
||||
# JDK_UPDATE_VER = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION
|
||||
#
|
||||
#
|
||||
JDK_UPDATE_VER=0
|
||||
JDK_BUILD_NUMBER=0
|
||||
|
||||
@@ -148,7 +146,7 @@ HS_FILEDESC=$(HOTSPOT_VM_DISTRO) $(ARCH_TEXT) $(VARIANT_TEXT) VM
|
||||
# 1.6.0_01a-b02 will be 6.0.11.2
|
||||
#
|
||||
# JDK_* variables are defined in make/hotspot_version or on command line
|
||||
#
|
||||
#
|
||||
JDK_VER=$(JDK_MINOR_VER),$(JDK_MICRO_VER),$(JDK_UPDATE_VER),$(JDK_BUILD_NUMBER)
|
||||
JDK_DOTVER=$(JDK_MINOR_VER).$(JDK_MICRO_VER).$(JDK_UPDATE_VER).$(JDK_BUILD_NUMBER)
|
||||
!if "$(JRE_RELEASE_VERSION)" == ""
|
||||
@@ -162,7 +160,7 @@ JDK_MKTG_VERSION=$(JDK_MINOR_VER).$(JDK_MICRO_VER)
|
||||
|
||||
# Hotspot Express VM FileVersion:
|
||||
# 10.0-b<yz> will have DLL version 10.0.0.yz (need 4 numbers).
|
||||
#
|
||||
#
|
||||
# HS_* variables are defined in make/hotspot_version
|
||||
#
|
||||
HS_VER=$(HS_MAJOR_VER),$(HS_MINOR_VER),0,$(HS_BUILD_NUMBER)
|
||||
@@ -182,7 +180,7 @@ HS_BUILD_VER=$(HOTSPOT_RELEASE_VERSION)-$(HOTSPOT_BUILD_VERSION)
|
||||
|
||||
|
||||
# We don't support SA on ia64, and we can't
|
||||
# build it if we are using a version of Vis Studio
|
||||
# build it if we are using a version of Vis Studio
|
||||
# older than .Net 2003.
|
||||
# SA_INCLUDE and SA_LIB are hold-overs from a previous
|
||||
# implementation in which we could build SA using
|
||||
|
||||
@@ -32,6 +32,17 @@ SLASH_JAVA ?= J:
|
||||
PATH_SEP = ;
|
||||
|
||||
# Need PLATFORM (os-arch combo names) for jdk and hotspot, plus libarch name
|
||||
ifeq ($(ARCH_DATA_MODEL),32)
|
||||
ARCH_DATA_MODEL=32
|
||||
PLATFORM=windows-i586
|
||||
VM_PLATFORM=windows_i486
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=i486
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_32
|
||||
endif
|
||||
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) x86),)
|
||||
ARCH_DATA_MODEL=32
|
||||
PLATFORM=windows-i586
|
||||
@@ -43,55 +54,57 @@ ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) x86),)
|
||||
MAKE_ARGS += Platform_arch_model=x86_32
|
||||
endif
|
||||
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) ia64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-ia64
|
||||
VM_PLATFORM=windows_ia64
|
||||
HS_ARCH=ia64
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=ia64
|
||||
MAKE_ARGS += BUILDARCH=ia64
|
||||
MAKE_ARGS += Platform_arch=ia64
|
||||
MAKE_ARGS += Platform_arch_model=ia64
|
||||
endif
|
||||
ifneq ($(ARCH_DATA_MODEL),32)
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) ia64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-ia64
|
||||
VM_PLATFORM=windows_ia64
|
||||
HS_ARCH=ia64
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=ia64
|
||||
MAKE_ARGS += BUILDARCH=ia64
|
||||
MAKE_ARGS += Platform_arch=ia64
|
||||
MAKE_ARGS += Platform_arch_model=ia64
|
||||
endif
|
||||
|
||||
# http://support.microsoft.com/kb/888731 : this can be either
|
||||
# AMD64 for AMD, or EM64T for Intel chips.
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) AMD64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) AMD64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) EM64T),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
|
||||
# NB later OS versions than 2003 may report "Intel64"
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) Intel64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) Intel64),)
|
||||
ARCH_DATA_MODEL=64
|
||||
PLATFORM=windows-amd64
|
||||
VM_PLATFORM=windows_amd64
|
||||
HS_ARCH=x86
|
||||
MAKE_ARGS += LP64=1
|
||||
MAKE_ARGS += ARCH=x86
|
||||
MAKE_ARGS += BUILDARCH=amd64
|
||||
MAKE_ARGS += Platform_arch=x86
|
||||
MAKE_ARGS += Platform_arch_model=x86_64
|
||||
endif
|
||||
endif
|
||||
|
||||
JDK_INCLUDE_SUBDIR=win32
|
||||
|
||||
@@ -626,7 +626,7 @@ void MacroAssembler::jmp(Register r1, int offset, const char* file, int line ) {
|
||||
}
|
||||
|
||||
// This code sequence is relocatable to any address, even on LP64.
|
||||
void MacroAssembler::jumpl(AddressLiteral& addrlit, Register temp, Register d, int offset, const char* file, int line) {
|
||||
void MacroAssembler::jumpl(const AddressLiteral& addrlit, Register temp, Register d, int offset, const char* file, int line) {
|
||||
assert_not_delayed();
|
||||
// Force fixed length sethi because NativeJump and NativeFarCall don't handle
|
||||
// variable length instruction streams.
|
||||
@@ -672,7 +672,7 @@ void MacroAssembler::jumpl(AddressLiteral& addrlit, Register temp, Register d, i
|
||||
}
|
||||
}
|
||||
|
||||
void MacroAssembler::jump(AddressLiteral& addrlit, Register temp, int offset, const char* file, int line) {
|
||||
void MacroAssembler::jump(const AddressLiteral& addrlit, Register temp, int offset, const char* file, int line) {
|
||||
jumpl(addrlit, temp, G0, offset, file, line);
|
||||
}
|
||||
|
||||
@@ -4192,7 +4192,7 @@ static void check_index(int ind) {
|
||||
|
||||
static void generate_satb_log_enqueue(bool with_frame) {
|
||||
BufferBlob* bb = BufferBlob::create("enqueue_with_frame", EnqueueCodeSize);
|
||||
CodeBuffer buf(bb->instructions_begin(), bb->instructions_size());
|
||||
CodeBuffer buf(bb);
|
||||
MacroAssembler masm(&buf);
|
||||
address start = masm.pc();
|
||||
Register pre_val;
|
||||
@@ -4421,7 +4421,7 @@ static u_char* dirty_card_log_enqueue_end = 0;
|
||||
// This gets to assume that o0 contains the object address.
|
||||
static void generate_dirty_card_log_enqueue(jbyte* byte_map_base) {
|
||||
BufferBlob* bb = BufferBlob::create("dirty_card_enqueue", EnqueueCodeSize*2);
|
||||
CodeBuffer buf(bb->instructions_begin(), bb->instructions_size());
|
||||
CodeBuffer buf(bb);
|
||||
MacroAssembler masm(&buf);
|
||||
address start = masm.pc();
|
||||
|
||||
|
||||
@@ -87,6 +87,7 @@ REGISTER_DECLARATION(Register, Gtemp , G5);
|
||||
// JSR 292 fixed register usages:
|
||||
REGISTER_DECLARATION(Register, G5_method_type , G5);
|
||||
REGISTER_DECLARATION(Register, G3_method_handle , G3);
|
||||
REGISTER_DECLARATION(Register, L7_mh_SP_save , L7);
|
||||
|
||||
// The compiler requires that G5_megamorphic_method is G5_inline_cache_klass,
|
||||
// because a single patchable "set" instruction (NativeMovConstReg,
|
||||
@@ -1973,12 +1974,12 @@ public:
|
||||
|
||||
// address pseudos: make these names unlike instruction names to avoid confusion
|
||||
inline intptr_t load_pc_address( Register reg, int bytes_to_skip );
|
||||
inline void load_contents(AddressLiteral& addrlit, Register d, int offset = 0);
|
||||
inline void load_ptr_contents(AddressLiteral& addrlit, Register d, int offset = 0);
|
||||
inline void store_contents(Register s, AddressLiteral& addrlit, Register temp, int offset = 0);
|
||||
inline void store_ptr_contents(Register s, AddressLiteral& addrlit, Register temp, int offset = 0);
|
||||
inline void jumpl_to(AddressLiteral& addrlit, Register temp, Register d, int offset = 0);
|
||||
inline void jump_to(AddressLiteral& addrlit, Register temp, int offset = 0);
|
||||
inline void load_contents(const AddressLiteral& addrlit, Register d, int offset = 0);
|
||||
inline void load_ptr_contents(const AddressLiteral& addrlit, Register d, int offset = 0);
|
||||
inline void store_contents(Register s, const AddressLiteral& addrlit, Register temp, int offset = 0);
|
||||
inline void store_ptr_contents(Register s, const AddressLiteral& addrlit, Register temp, int offset = 0);
|
||||
inline void jumpl_to(const AddressLiteral& addrlit, Register temp, Register d, int offset = 0);
|
||||
inline void jump_to(const AddressLiteral& addrlit, Register temp, int offset = 0);
|
||||
inline void jump_indirect_to(Address& a, Register temp, int ld_offset = 0, int jmp_offset = 0);
|
||||
|
||||
// ring buffer traceable jumps
|
||||
@@ -1986,8 +1987,8 @@ public:
|
||||
void jmp2( Register r1, Register r2, const char* file, int line );
|
||||
void jmp ( Register r1, int offset, const char* file, int line );
|
||||
|
||||
void jumpl(AddressLiteral& addrlit, Register temp, Register d, int offset, const char* file, int line);
|
||||
void jump (AddressLiteral& addrlit, Register temp, int offset, const char* file, int line);
|
||||
void jumpl(const AddressLiteral& addrlit, Register temp, Register d, int offset, const char* file, int line);
|
||||
void jump (const AddressLiteral& addrlit, Register temp, int offset, const char* file, int line);
|
||||
|
||||
|
||||
// argument pseudos:
|
||||
|
||||
@@ -650,28 +650,28 @@ inline intptr_t MacroAssembler::load_pc_address( Register reg, int bytes_to_skip
|
||||
}
|
||||
|
||||
|
||||
inline void MacroAssembler::load_contents(AddressLiteral& addrlit, Register d, int offset) {
|
||||
inline void MacroAssembler::load_contents(const AddressLiteral& addrlit, Register d, int offset) {
|
||||
assert_not_delayed();
|
||||
sethi(addrlit, d);
|
||||
ld(d, addrlit.low10() + offset, d);
|
||||
}
|
||||
|
||||
|
||||
inline void MacroAssembler::load_ptr_contents(AddressLiteral& addrlit, Register d, int offset) {
|
||||
inline void MacroAssembler::load_ptr_contents(const AddressLiteral& addrlit, Register d, int offset) {
|
||||
assert_not_delayed();
|
||||
sethi(addrlit, d);
|
||||
ld_ptr(d, addrlit.low10() + offset, d);
|
||||
}
|
||||
|
||||
|
||||
inline void MacroAssembler::store_contents(Register s, AddressLiteral& addrlit, Register temp, int offset) {
|
||||
inline void MacroAssembler::store_contents(Register s, const AddressLiteral& addrlit, Register temp, int offset) {
|
||||
assert_not_delayed();
|
||||
sethi(addrlit, temp);
|
||||
st(s, temp, addrlit.low10() + offset);
|
||||
}
|
||||
|
||||
|
||||
inline void MacroAssembler::store_ptr_contents(Register s, AddressLiteral& addrlit, Register temp, int offset) {
|
||||
inline void MacroAssembler::store_ptr_contents(Register s, const AddressLiteral& addrlit, Register temp, int offset) {
|
||||
assert_not_delayed();
|
||||
sethi(addrlit, temp);
|
||||
st_ptr(s, temp, addrlit.low10() + offset);
|
||||
@@ -679,7 +679,7 @@ inline void MacroAssembler::store_ptr_contents(Register s, AddressLiteral& addrl
|
||||
|
||||
|
||||
// This code sequence is relocatable to any address, even on LP64.
|
||||
inline void MacroAssembler::jumpl_to(AddressLiteral& addrlit, Register temp, Register d, int offset) {
|
||||
inline void MacroAssembler::jumpl_to(const AddressLiteral& addrlit, Register temp, Register d, int offset) {
|
||||
assert_not_delayed();
|
||||
// Force fixed length sethi because NativeJump and NativeFarCall don't handle
|
||||
// variable length instruction streams.
|
||||
@@ -688,7 +688,7 @@ inline void MacroAssembler::jumpl_to(AddressLiteral& addrlit, Register temp, Reg
|
||||
}
|
||||
|
||||
|
||||
inline void MacroAssembler::jump_to(AddressLiteral& addrlit, Register temp, int offset) {
|
||||
inline void MacroAssembler::jump_to(const AddressLiteral& addrlit, Register temp, int offset) {
|
||||
jumpl_to(addrlit, temp, G0, offset);
|
||||
}
|
||||
|
||||
|
||||
@@ -236,19 +236,19 @@ inline jint BytecodeInterpreter::VMintRem(jint op1, jint op2) {
|
||||
}
|
||||
|
||||
inline jint BytecodeInterpreter::VMintShl(jint op1, jint op2) {
|
||||
return op1 << op2;
|
||||
return op1 << (op2 & 0x1f);
|
||||
}
|
||||
|
||||
inline jint BytecodeInterpreter::VMintShr(jint op1, jint op2) {
|
||||
return op1 >> op2; // QQ op2 & 0x1f??
|
||||
return op1 >> (op2 & 0x1f);
|
||||
}
|
||||
|
||||
inline jint BytecodeInterpreter::VMintSub(jint op1, jint op2) {
|
||||
return op1 - op2;
|
||||
}
|
||||
|
||||
inline jint BytecodeInterpreter::VMintUshr(jint op1, jint op2) {
|
||||
return ((juint) op1) >> op2; // QQ op2 & 0x1f??
|
||||
inline juint BytecodeInterpreter::VMintUshr(jint op1, jint op2) {
|
||||
return ((juint) op1) >> (op2 & 0x1f);
|
||||
}
|
||||
|
||||
inline jint BytecodeInterpreter::VMintXor(jint op1, jint op2) {
|
||||
|
||||
@@ -57,13 +57,12 @@ void RangeCheckStub::emit_code(LIR_Assembler* ce) {
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef TIERED
|
||||
|
||||
void CounterOverflowStub::emit_code(LIR_Assembler* ce) {
|
||||
__ bind(_entry);
|
||||
__ set(_bci, G4);
|
||||
__ call(Runtime1::entry_for(Runtime1::counter_overflow_id), relocInfo::runtime_call_type);
|
||||
__ delayed()->nop();
|
||||
__ delayed()->mov_or_nop(_method->as_register(), G5);
|
||||
ce->add_call_info_here(_info);
|
||||
ce->verify_oop_map(_info);
|
||||
|
||||
@@ -71,7 +70,6 @@ void CounterOverflowStub::emit_code(LIR_Assembler* ce) {
|
||||
__ delayed()->nop();
|
||||
}
|
||||
|
||||
#endif // TIERED
|
||||
|
||||
void DivByZeroStub::emit_code(LIR_Assembler* ce) {
|
||||
if (_offset != -1) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -73,6 +73,7 @@ FloatRegister FrameMap::_fpu_regs [FrameMap::nof_fpu_regs];
|
||||
// some useful constant RInfo's:
|
||||
LIR_Opr FrameMap::in_long_opr;
|
||||
LIR_Opr FrameMap::out_long_opr;
|
||||
LIR_Opr FrameMap::g1_long_single_opr;
|
||||
|
||||
LIR_Opr FrameMap::F0_opr;
|
||||
LIR_Opr FrameMap::F0_double_opr;
|
||||
@@ -181,8 +182,8 @@ bool FrameMap::is_caller_save_register (Register r) {
|
||||
}
|
||||
|
||||
|
||||
void FrameMap::init () {
|
||||
if (_init_done) return;
|
||||
void FrameMap::initialize() {
|
||||
assert(!_init_done, "once");
|
||||
|
||||
int i=0;
|
||||
// Register usage:
|
||||
@@ -238,6 +239,7 @@ void FrameMap::init () {
|
||||
|
||||
in_long_opr = as_long_opr(I0);
|
||||
out_long_opr = as_long_opr(O0);
|
||||
g1_long_single_opr = as_long_single_opr(G1);
|
||||
|
||||
G0_opr = as_opr(G0);
|
||||
G1_opr = as_opr(G1);
|
||||
@@ -345,6 +347,13 @@ LIR_Opr FrameMap::stack_pointer() {
|
||||
}
|
||||
|
||||
|
||||
// JSR 292
|
||||
LIR_Opr FrameMap::method_handle_invoke_SP_save_opr() {
|
||||
assert(L7 == L7_mh_SP_save, "must be same register");
|
||||
return L7_opr;
|
||||
}
|
||||
|
||||
|
||||
bool FrameMap::validate_frame() {
|
||||
int max_offset = in_bytes(framesize_in_bytes());
|
||||
int java_index = 0;
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
|
||||
static LIR_Opr in_long_opr;
|
||||
static LIR_Opr out_long_opr;
|
||||
static LIR_Opr g1_long_single_opr;
|
||||
|
||||
static LIR_Opr F0_opr;
|
||||
static LIR_Opr F0_double_opr;
|
||||
@@ -113,18 +114,25 @@
|
||||
private:
|
||||
static FloatRegister _fpu_regs [nof_fpu_regs];
|
||||
|
||||
static LIR_Opr as_long_single_opr(Register r) {
|
||||
return LIR_OprFact::double_cpu(cpu_reg2rnr(r), cpu_reg2rnr(r));
|
||||
}
|
||||
static LIR_Opr as_long_pair_opr(Register r) {
|
||||
return LIR_OprFact::double_cpu(cpu_reg2rnr(r->successor()), cpu_reg2rnr(r));
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
#ifdef _LP64
|
||||
static LIR_Opr as_long_opr(Register r) {
|
||||
return LIR_OprFact::double_cpu(cpu_reg2rnr(r), cpu_reg2rnr(r));
|
||||
return as_long_single_opr(r);
|
||||
}
|
||||
static LIR_Opr as_pointer_opr(Register r) {
|
||||
return LIR_OprFact::double_cpu(cpu_reg2rnr(r), cpu_reg2rnr(r));
|
||||
return as_long_single_opr(r);
|
||||
}
|
||||
#else
|
||||
static LIR_Opr as_long_opr(Register r) {
|
||||
return LIR_OprFact::double_cpu(cpu_reg2rnr(r->successor()), cpu_reg2rnr(r));
|
||||
return as_long_pair_opr(r);
|
||||
}
|
||||
static LIR_Opr as_pointer_opr(Register r) {
|
||||
return as_opr(r);
|
||||
@@ -143,6 +151,3 @@
|
||||
|
||||
static bool is_caller_save_register (LIR_Opr reg);
|
||||
static bool is_caller_save_register (Register r);
|
||||
|
||||
// JSR 292
|
||||
static LIR_Opr& method_handle_invoke_SP_save_opr() { return L7_opr; }
|
||||
|
||||
@@ -736,7 +736,8 @@ void LIR_Assembler::align_call(LIR_Code) {
|
||||
|
||||
void LIR_Assembler::call(LIR_OpJavaCall* op, relocInfo::relocType rtype) {
|
||||
__ call(op->addr(), rtype);
|
||||
// the peephole pass fills the delay slot
|
||||
// The peephole pass fills the delay slot, add_call_info is done in
|
||||
// LIR_Assembler::emit_delay.
|
||||
}
|
||||
|
||||
|
||||
@@ -745,7 +746,8 @@ void LIR_Assembler::ic_call(LIR_OpJavaCall* op) {
|
||||
__ set_oop((jobject)Universe::non_oop_word(), G5_inline_cache_reg);
|
||||
__ relocate(rspec);
|
||||
__ call(op->addr(), relocInfo::none);
|
||||
// the peephole pass fills the delay slot
|
||||
// The peephole pass fills the delay slot, add_call_info is done in
|
||||
// LIR_Assembler::emit_delay.
|
||||
}
|
||||
|
||||
|
||||
@@ -766,16 +768,6 @@ void LIR_Assembler::vtable_call(LIR_OpJavaCall* op) {
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::preserve_SP(LIR_OpJavaCall* op) {
|
||||
Unimplemented();
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::restore_SP(LIR_OpJavaCall* op) {
|
||||
Unimplemented();
|
||||
}
|
||||
|
||||
|
||||
// load with 32-bit displacement
|
||||
int LIR_Assembler::load(Register s, int disp, Register d, BasicType ld_type, CodeEmitInfo *info) {
|
||||
int load_offset = code_offset();
|
||||
@@ -1633,13 +1625,18 @@ void LIR_Assembler::reg2mem(LIR_Opr from_reg, LIR_Opr dest, BasicType type,
|
||||
|
||||
void LIR_Assembler::return_op(LIR_Opr result) {
|
||||
// the poll may need a register so just pick one that isn't the return register
|
||||
#ifdef TIERED
|
||||
#if defined(TIERED) && !defined(_LP64)
|
||||
if (result->type_field() == LIR_OprDesc::long_type) {
|
||||
// Must move the result to G1
|
||||
// Must leave proper result in O0,O1 and G1 (TIERED only)
|
||||
__ sllx(I0, 32, G1); // Shift bits into high G1
|
||||
__ srl (I1, 0, I1); // Zero extend O1 (harmless?)
|
||||
__ or3 (I1, G1, G1); // OR 64 bits into G1
|
||||
#ifdef ASSERT
|
||||
// mangle it so any problems will show up
|
||||
__ set(0xdeadbeef, I0);
|
||||
__ set(0xdeadbeef, I1);
|
||||
#endif
|
||||
}
|
||||
#endif // TIERED
|
||||
__ set((intptr_t)os::get_polling_page(), L0);
|
||||
@@ -2432,6 +2429,192 @@ void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) {
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::type_profile_helper(Register mdo, int mdo_offset_bias,
|
||||
ciMethodData *md, ciProfileData *data,
|
||||
Register recv, Register tmp1, Label* update_done) {
|
||||
uint i;
|
||||
for (i = 0; i < VirtualCallData::row_limit(); i++) {
|
||||
Label next_test;
|
||||
// See if the receiver is receiver[n].
|
||||
Address receiver_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
__ ld_ptr(receiver_addr, tmp1);
|
||||
__ verify_oop(tmp1);
|
||||
__ cmp(recv, tmp1);
|
||||
__ brx(Assembler::notEqual, false, Assembler::pt, next_test);
|
||||
__ delayed()->nop();
|
||||
Address data_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
__ ld_ptr(data_addr, tmp1);
|
||||
__ add(tmp1, DataLayout::counter_increment, tmp1);
|
||||
__ st_ptr(tmp1, data_addr);
|
||||
__ ba(false, *update_done);
|
||||
__ delayed()->nop();
|
||||
__ bind(next_test);
|
||||
}
|
||||
|
||||
// Didn't find receiver; find next empty slot and fill it in
|
||||
for (i = 0; i < VirtualCallData::row_limit(); i++) {
|
||||
Label next_test;
|
||||
Address recv_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
load(recv_addr, tmp1, T_OBJECT);
|
||||
__ br_notnull(tmp1, false, Assembler::pt, next_test);
|
||||
__ delayed()->nop();
|
||||
__ st_ptr(recv, recv_addr);
|
||||
__ set(DataLayout::counter_increment, tmp1);
|
||||
__ st_ptr(tmp1, mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_count_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
__ ba(false, *update_done);
|
||||
__ delayed()->nop();
|
||||
__ bind(next_test);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::setup_md_access(ciMethod* method, int bci,
|
||||
ciMethodData*& md, ciProfileData*& data, int& mdo_offset_bias) {
|
||||
md = method->method_data();
|
||||
if (md == NULL) {
|
||||
bailout("out of memory building methodDataOop");
|
||||
return;
|
||||
}
|
||||
data = md->bci_to_data(bci);
|
||||
assert(data != NULL, "need data for checkcast");
|
||||
assert(data->is_ReceiverTypeData(), "need ReceiverTypeData for type check");
|
||||
if (!Assembler::is_simm13(md->byte_offset_of_slot(data, DataLayout::header_offset()) + data->size_in_bytes())) {
|
||||
// The offset is large so bias the mdo by the base of the slot so
|
||||
// that the ld can use simm13s to reference the slots of the data
|
||||
mdo_offset_bias = md->byte_offset_of_slot(data, DataLayout::header_offset());
|
||||
}
|
||||
}
|
||||
|
||||
void LIR_Assembler::emit_typecheck_helper(LIR_OpTypeCheck *op, Label* success, Label* failure, Label* obj_is_null) {
|
||||
// we always need a stub for the failure case.
|
||||
CodeStub* stub = op->stub();
|
||||
Register obj = op->object()->as_register();
|
||||
Register k_RInfo = op->tmp1()->as_register();
|
||||
Register klass_RInfo = op->tmp2()->as_register();
|
||||
Register dst = op->result_opr()->as_register();
|
||||
Register Rtmp1 = op->tmp3()->as_register();
|
||||
ciKlass* k = op->klass();
|
||||
|
||||
|
||||
if (obj == k_RInfo) {
|
||||
k_RInfo = klass_RInfo;
|
||||
klass_RInfo = obj;
|
||||
}
|
||||
|
||||
ciMethodData* md;
|
||||
ciProfileData* data;
|
||||
int mdo_offset_bias = 0;
|
||||
if (op->should_profile()) {
|
||||
ciMethod* method = op->profiled_method();
|
||||
assert(method != NULL, "Should have method");
|
||||
setup_md_access(method, op->profiled_bci(), md, data, mdo_offset_bias);
|
||||
|
||||
Label not_null;
|
||||
__ br_notnull(obj, false, Assembler::pn, not_null);
|
||||
__ delayed()->nop();
|
||||
Register mdo = k_RInfo;
|
||||
Register data_val = Rtmp1;
|
||||
jobject2reg(md->constant_encoding(), mdo);
|
||||
if (mdo_offset_bias > 0) {
|
||||
__ set(mdo_offset_bias, data_val);
|
||||
__ add(mdo, data_val, mdo);
|
||||
}
|
||||
Address flags_addr(mdo, md->byte_offset_of_slot(data, DataLayout::flags_offset()) - mdo_offset_bias);
|
||||
__ ldub(flags_addr, data_val);
|
||||
__ or3(data_val, BitData::null_seen_byte_constant(), data_val);
|
||||
__ stb(data_val, flags_addr);
|
||||
__ ba(false, *obj_is_null);
|
||||
__ delayed()->nop();
|
||||
__ bind(not_null);
|
||||
} else {
|
||||
__ br_null(obj, false, Assembler::pn, *obj_is_null);
|
||||
__ delayed()->nop();
|
||||
}
|
||||
|
||||
Label profile_cast_failure, profile_cast_success;
|
||||
Label *failure_target = op->should_profile() ? &profile_cast_failure : failure;
|
||||
Label *success_target = op->should_profile() ? &profile_cast_success : success;
|
||||
|
||||
// patching may screw with our temporaries on sparc,
|
||||
// so let's do it before loading the class
|
||||
if (k->is_loaded()) {
|
||||
jobject2reg(k->constant_encoding(), k_RInfo);
|
||||
} else {
|
||||
jobject2reg_with_patching(k_RInfo, op->info_for_patch());
|
||||
}
|
||||
assert(obj != k_RInfo, "must be different");
|
||||
|
||||
// get object class
|
||||
// not a safepoint as obj null check happens earlier
|
||||
load(obj, oopDesc::klass_offset_in_bytes(), klass_RInfo, T_OBJECT, NULL);
|
||||
if (op->fast_check()) {
|
||||
assert_different_registers(klass_RInfo, k_RInfo);
|
||||
__ cmp(k_RInfo, klass_RInfo);
|
||||
__ brx(Assembler::notEqual, false, Assembler::pt, *failure_target);
|
||||
__ delayed()->nop();
|
||||
} else {
|
||||
bool need_slow_path = true;
|
||||
if (k->is_loaded()) {
|
||||
if (k->super_check_offset() != sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes())
|
||||
need_slow_path = false;
|
||||
// perform the fast part of the checking logic
|
||||
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, noreg,
|
||||
(need_slow_path ? success_target : NULL),
|
||||
failure_target, NULL,
|
||||
RegisterOrConstant(k->super_check_offset()));
|
||||
} else {
|
||||
// perform the fast part of the checking logic
|
||||
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, O7, success_target,
|
||||
failure_target, NULL);
|
||||
}
|
||||
if (need_slow_path) {
|
||||
// call out-of-line instance of __ check_klass_subtype_slow_path(...):
|
||||
assert(klass_RInfo == G3 && k_RInfo == G1, "incorrect call setup");
|
||||
__ call(Runtime1::entry_for(Runtime1::slow_subtype_check_id), relocInfo::runtime_call_type);
|
||||
__ delayed()->nop();
|
||||
__ cmp(G3, 0);
|
||||
__ br(Assembler::equal, false, Assembler::pn, *failure_target);
|
||||
__ delayed()->nop();
|
||||
// Fall through to success case
|
||||
}
|
||||
}
|
||||
|
||||
if (op->should_profile()) {
|
||||
Register mdo = klass_RInfo, recv = k_RInfo, tmp1 = Rtmp1;
|
||||
assert_different_registers(obj, mdo, recv, tmp1);
|
||||
__ bind(profile_cast_success);
|
||||
jobject2reg(md->constant_encoding(), mdo);
|
||||
if (mdo_offset_bias > 0) {
|
||||
__ set(mdo_offset_bias, tmp1);
|
||||
__ add(mdo, tmp1, mdo);
|
||||
}
|
||||
load(Address(obj, oopDesc::klass_offset_in_bytes()), recv, T_OBJECT);
|
||||
type_profile_helper(mdo, mdo_offset_bias, md, data, recv, tmp1, success);
|
||||
// Jump over the failure case
|
||||
__ ba(false, *success);
|
||||
__ delayed()->nop();
|
||||
// Cast failure case
|
||||
__ bind(profile_cast_failure);
|
||||
jobject2reg(md->constant_encoding(), mdo);
|
||||
if (mdo_offset_bias > 0) {
|
||||
__ set(mdo_offset_bias, tmp1);
|
||||
__ add(mdo, tmp1, mdo);
|
||||
}
|
||||
Address data_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()) - mdo_offset_bias);
|
||||
__ ld_ptr(data_addr, tmp1);
|
||||
__ sub(tmp1, DataLayout::counter_increment, tmp1);
|
||||
__ st_ptr(tmp1, data_addr);
|
||||
__ ba(false, *failure);
|
||||
__ delayed()->nop();
|
||||
}
|
||||
__ ba(false, *success);
|
||||
__ delayed()->nop();
|
||||
}
|
||||
|
||||
void LIR_Assembler::emit_opTypeCheck(LIR_OpTypeCheck* op) {
|
||||
LIR_Code code = op->code();
|
||||
if (code == lir_store_check) {
|
||||
@@ -2442,193 +2625,106 @@ void LIR_Assembler::emit_opTypeCheck(LIR_OpTypeCheck* op) {
|
||||
Register Rtmp1 = op->tmp3()->as_register();
|
||||
|
||||
__ verify_oop(value);
|
||||
|
||||
CodeStub* stub = op->stub();
|
||||
Label done;
|
||||
__ cmp(value, 0);
|
||||
__ br(Assembler::equal, false, Assembler::pn, done);
|
||||
__ delayed()->nop();
|
||||
// check if it needs to be profiled
|
||||
ciMethodData* md;
|
||||
ciProfileData* data;
|
||||
int mdo_offset_bias = 0;
|
||||
if (op->should_profile()) {
|
||||
ciMethod* method = op->profiled_method();
|
||||
assert(method != NULL, "Should have method");
|
||||
setup_md_access(method, op->profiled_bci(), md, data, mdo_offset_bias);
|
||||
}
|
||||
Label profile_cast_success, profile_cast_failure, done;
|
||||
Label *success_target = op->should_profile() ? &profile_cast_success : &done;
|
||||
Label *failure_target = op->should_profile() ? &profile_cast_failure : stub->entry();
|
||||
|
||||
if (op->should_profile()) {
|
||||
Label not_null;
|
||||
__ br_notnull(value, false, Assembler::pn, not_null);
|
||||
__ delayed()->nop();
|
||||
Register mdo = k_RInfo;
|
||||
Register data_val = Rtmp1;
|
||||
jobject2reg(md->constant_encoding(), mdo);
|
||||
if (mdo_offset_bias > 0) {
|
||||
__ set(mdo_offset_bias, data_val);
|
||||
__ add(mdo, data_val, mdo);
|
||||
}
|
||||
Address flags_addr(mdo, md->byte_offset_of_slot(data, DataLayout::flags_offset()) - mdo_offset_bias);
|
||||
__ ldub(flags_addr, data_val);
|
||||
__ or3(data_val, BitData::null_seen_byte_constant(), data_val);
|
||||
__ stb(data_val, flags_addr);
|
||||
__ ba(false, done);
|
||||
__ delayed()->nop();
|
||||
__ bind(not_null);
|
||||
} else {
|
||||
__ br_null(value, false, Assembler::pn, done);
|
||||
__ delayed()->nop();
|
||||
}
|
||||
load(array, oopDesc::klass_offset_in_bytes(), k_RInfo, T_OBJECT, op->info_for_exception());
|
||||
load(value, oopDesc::klass_offset_in_bytes(), klass_RInfo, T_OBJECT, NULL);
|
||||
|
||||
// get instance klass
|
||||
load(k_RInfo, objArrayKlass::element_klass_offset_in_bytes() + sizeof(oopDesc), k_RInfo, T_OBJECT, NULL);
|
||||
// perform the fast part of the checking logic
|
||||
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, O7, &done, stub->entry(), NULL);
|
||||
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, O7, success_target, failure_target, NULL);
|
||||
|
||||
// call out-of-line instance of __ check_klass_subtype_slow_path(...):
|
||||
assert(klass_RInfo == G3 && k_RInfo == G1, "incorrect call setup");
|
||||
__ call(Runtime1::entry_for(Runtime1::slow_subtype_check_id), relocInfo::runtime_call_type);
|
||||
__ delayed()->nop();
|
||||
__ cmp(G3, 0);
|
||||
__ br(Assembler::equal, false, Assembler::pn, *stub->entry());
|
||||
__ br(Assembler::equal, false, Assembler::pn, *failure_target);
|
||||
__ delayed()->nop();
|
||||
__ bind(done);
|
||||
} else if (op->code() == lir_checkcast) {
|
||||
// we always need a stub for the failure case.
|
||||
CodeStub* stub = op->stub();
|
||||
Register obj = op->object()->as_register();
|
||||
Register k_RInfo = op->tmp1()->as_register();
|
||||
Register klass_RInfo = op->tmp2()->as_register();
|
||||
Register dst = op->result_opr()->as_register();
|
||||
Register Rtmp1 = op->tmp3()->as_register();
|
||||
ciKlass* k = op->klass();
|
||||
// fall through to the success case
|
||||
|
||||
if (obj == k_RInfo) {
|
||||
k_RInfo = klass_RInfo;
|
||||
klass_RInfo = obj;
|
||||
}
|
||||
if (op->profiled_method() != NULL) {
|
||||
ciMethod* method = op->profiled_method();
|
||||
int bci = op->profiled_bci();
|
||||
|
||||
// We need two temporaries to perform this operation on SPARC,
|
||||
// so to keep things simple we perform a redundant test here
|
||||
Label profile_done;
|
||||
__ cmp(obj, 0);
|
||||
__ br(Assembler::notEqual, false, Assembler::pn, profile_done);
|
||||
__ delayed()->nop();
|
||||
// Object is null; update methodDataOop
|
||||
ciMethodData* md = method->method_data();
|
||||
if (md == NULL) {
|
||||
bailout("out of memory building methodDataOop");
|
||||
return;
|
||||
}
|
||||
ciProfileData* data = md->bci_to_data(bci);
|
||||
assert(data != NULL, "need data for checkcast");
|
||||
assert(data->is_BitData(), "need BitData for checkcast");
|
||||
Register mdo = k_RInfo;
|
||||
Register data_val = Rtmp1;
|
||||
if (op->should_profile()) {
|
||||
Register mdo = klass_RInfo, recv = k_RInfo, tmp1 = Rtmp1;
|
||||
assert_different_registers(value, mdo, recv, tmp1);
|
||||
__ bind(profile_cast_success);
|
||||
jobject2reg(md->constant_encoding(), mdo);
|
||||
|
||||
int mdo_offset_bias = 0;
|
||||
if (!Assembler::is_simm13(md->byte_offset_of_slot(data, DataLayout::header_offset()) + data->size_in_bytes())) {
|
||||
// The offset is large so bias the mdo by the base of the slot so
|
||||
// that the ld can use simm13s to reference the slots of the data
|
||||
mdo_offset_bias = md->byte_offset_of_slot(data, DataLayout::header_offset());
|
||||
__ set(mdo_offset_bias, data_val);
|
||||
__ add(mdo, data_val, mdo);
|
||||
if (mdo_offset_bias > 0) {
|
||||
__ set(mdo_offset_bias, tmp1);
|
||||
__ add(mdo, tmp1, mdo);
|
||||
}
|
||||
|
||||
|
||||
Address flags_addr(mdo, md->byte_offset_of_slot(data, DataLayout::flags_offset()) - mdo_offset_bias);
|
||||
__ ldub(flags_addr, data_val);
|
||||
__ or3(data_val, BitData::null_seen_byte_constant(), data_val);
|
||||
__ stb(data_val, flags_addr);
|
||||
__ bind(profile_done);
|
||||
}
|
||||
|
||||
Label done;
|
||||
// patching may screw with our temporaries on sparc,
|
||||
// so let's do it before loading the class
|
||||
if (k->is_loaded()) {
|
||||
jobject2reg(k->constant_encoding(), k_RInfo);
|
||||
} else {
|
||||
jobject2reg_with_patching(k_RInfo, op->info_for_patch());
|
||||
}
|
||||
assert(obj != k_RInfo, "must be different");
|
||||
__ cmp(obj, 0);
|
||||
__ br(Assembler::equal, false, Assembler::pn, done);
|
||||
__ delayed()->nop();
|
||||
|
||||
// get object class
|
||||
// not a safepoint as obj null check happens earlier
|
||||
load(obj, oopDesc::klass_offset_in_bytes(), klass_RInfo, T_OBJECT, NULL);
|
||||
if (op->fast_check()) {
|
||||
assert_different_registers(klass_RInfo, k_RInfo);
|
||||
__ cmp(k_RInfo, klass_RInfo);
|
||||
__ br(Assembler::notEqual, false, Assembler::pt, *stub->entry());
|
||||
load(Address(value, oopDesc::klass_offset_in_bytes()), recv, T_OBJECT);
|
||||
type_profile_helper(mdo, mdo_offset_bias, md, data, recv, tmp1, &done);
|
||||
__ ba(false, done);
|
||||
__ delayed()->nop();
|
||||
__ bind(done);
|
||||
} else {
|
||||
bool need_slow_path = true;
|
||||
if (k->is_loaded()) {
|
||||
if (k->super_check_offset() != sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes())
|
||||
need_slow_path = false;
|
||||
// perform the fast part of the checking logic
|
||||
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, noreg,
|
||||
(need_slow_path ? &done : NULL),
|
||||
stub->entry(), NULL,
|
||||
RegisterOrConstant(k->super_check_offset()));
|
||||
} else {
|
||||
// perform the fast part of the checking logic
|
||||
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, O7,
|
||||
&done, stub->entry(), NULL);
|
||||
// Cast failure case
|
||||
__ bind(profile_cast_failure);
|
||||
jobject2reg(md->constant_encoding(), mdo);
|
||||
if (mdo_offset_bias > 0) {
|
||||
__ set(mdo_offset_bias, tmp1);
|
||||
__ add(mdo, tmp1, mdo);
|
||||
}
|
||||
if (need_slow_path) {
|
||||
// call out-of-line instance of __ check_klass_subtype_slow_path(...):
|
||||
assert(klass_RInfo == G3 && k_RInfo == G1, "incorrect call setup");
|
||||
__ call(Runtime1::entry_for(Runtime1::slow_subtype_check_id), relocInfo::runtime_call_type);
|
||||
__ delayed()->nop();
|
||||
__ cmp(G3, 0);
|
||||
__ br(Assembler::equal, false, Assembler::pn, *stub->entry());
|
||||
__ delayed()->nop();
|
||||
}
|
||||
__ bind(done);
|
||||
Address data_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()) - mdo_offset_bias);
|
||||
__ ld_ptr(data_addr, tmp1);
|
||||
__ sub(tmp1, DataLayout::counter_increment, tmp1);
|
||||
__ st_ptr(tmp1, data_addr);
|
||||
__ ba(false, *stub->entry());
|
||||
__ delayed()->nop();
|
||||
}
|
||||
__ bind(done);
|
||||
} else if (code == lir_checkcast) {
|
||||
Register obj = op->object()->as_register();
|
||||
Register dst = op->result_opr()->as_register();
|
||||
Label success;
|
||||
emit_typecheck_helper(op, &success, op->stub()->entry(), &success);
|
||||
__ bind(success);
|
||||
__ mov(obj, dst);
|
||||
} else if (code == lir_instanceof) {
|
||||
Register obj = op->object()->as_register();
|
||||
Register k_RInfo = op->tmp1()->as_register();
|
||||
Register klass_RInfo = op->tmp2()->as_register();
|
||||
Register dst = op->result_opr()->as_register();
|
||||
Register Rtmp1 = op->tmp3()->as_register();
|
||||
ciKlass* k = op->klass();
|
||||
|
||||
Label done;
|
||||
if (obj == k_RInfo) {
|
||||
k_RInfo = klass_RInfo;
|
||||
klass_RInfo = obj;
|
||||
}
|
||||
// patching may screw with our temporaries on sparc,
|
||||
// so let's do it before loading the class
|
||||
if (k->is_loaded()) {
|
||||
jobject2reg(k->constant_encoding(), k_RInfo);
|
||||
} else {
|
||||
jobject2reg_with_patching(k_RInfo, op->info_for_patch());
|
||||
}
|
||||
assert(obj != k_RInfo, "must be different");
|
||||
__ cmp(obj, 0);
|
||||
__ br(Assembler::equal, true, Assembler::pn, done);
|
||||
__ delayed()->set(0, dst);
|
||||
|
||||
// get object class
|
||||
// not a safepoint as obj null check happens earlier
|
||||
load(obj, oopDesc::klass_offset_in_bytes(), klass_RInfo, T_OBJECT, NULL);
|
||||
if (op->fast_check()) {
|
||||
__ cmp(k_RInfo, klass_RInfo);
|
||||
__ br(Assembler::equal, true, Assembler::pt, done);
|
||||
__ delayed()->set(1, dst);
|
||||
__ set(0, dst);
|
||||
__ bind(done);
|
||||
} else {
|
||||
bool need_slow_path = true;
|
||||
if (k->is_loaded()) {
|
||||
if (k->super_check_offset() != sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes())
|
||||
need_slow_path = false;
|
||||
// perform the fast part of the checking logic
|
||||
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, O7, noreg,
|
||||
(need_slow_path ? &done : NULL),
|
||||
(need_slow_path ? &done : NULL), NULL,
|
||||
RegisterOrConstant(k->super_check_offset()),
|
||||
dst);
|
||||
} else {
|
||||
assert(dst != klass_RInfo && dst != k_RInfo, "need 3 registers");
|
||||
// perform the fast part of the checking logic
|
||||
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, O7, dst,
|
||||
&done, &done, NULL,
|
||||
RegisterOrConstant(-1),
|
||||
dst);
|
||||
}
|
||||
if (need_slow_path) {
|
||||
// call out-of-line instance of __ check_klass_subtype_slow_path(...):
|
||||
assert(klass_RInfo == G3 && k_RInfo == G1, "incorrect call setup");
|
||||
__ call(Runtime1::entry_for(Runtime1::slow_subtype_check_id), relocInfo::runtime_call_type);
|
||||
__ delayed()->nop();
|
||||
__ mov(G3, dst);
|
||||
}
|
||||
__ bind(done);
|
||||
}
|
||||
Label success, failure, done;
|
||||
emit_typecheck_helper(op, &success, &failure, &failure);
|
||||
__ bind(failure);
|
||||
__ set(0, dst);
|
||||
__ ba(false, done);
|
||||
__ delayed()->nop();
|
||||
__ bind(success);
|
||||
__ set(1, dst);
|
||||
__ bind(done);
|
||||
} else {
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
@@ -2784,9 +2880,14 @@ void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
|
||||
ciProfileData* data = md->bci_to_data(bci);
|
||||
assert(data->is_CounterData(), "need CounterData for calls");
|
||||
assert(op->mdo()->is_single_cpu(), "mdo must be allocated");
|
||||
assert(op->tmp1()->is_single_cpu(), "tmp1 must be allocated");
|
||||
Register mdo = op->mdo()->as_register();
|
||||
#ifdef _LP64
|
||||
assert(op->tmp1()->is_double_cpu(), "tmp1 must be allocated");
|
||||
Register tmp1 = op->tmp1()->as_register_lo();
|
||||
#else
|
||||
assert(op->tmp1()->is_single_cpu(), "tmp1 must be allocated");
|
||||
Register tmp1 = op->tmp1()->as_register();
|
||||
#endif
|
||||
jobject2reg(md->constant_encoding(), mdo);
|
||||
int mdo_offset_bias = 0;
|
||||
if (!Assembler::is_simm13(md->byte_offset_of_slot(data, CounterData::count_offset()) +
|
||||
@@ -2803,13 +2904,13 @@ void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
|
||||
// Perform additional virtual call profiling for invokevirtual and
|
||||
// invokeinterface bytecodes
|
||||
if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) &&
|
||||
Tier1ProfileVirtualCalls) {
|
||||
C1ProfileVirtualCalls) {
|
||||
assert(op->recv()->is_single_cpu(), "recv must be allocated");
|
||||
Register recv = op->recv()->as_register();
|
||||
assert_different_registers(mdo, tmp1, recv);
|
||||
assert(data->is_VirtualCallData(), "need VirtualCallData for virtual calls");
|
||||
ciKlass* known_klass = op->known_holder();
|
||||
if (Tier1OptimizeVirtualCallProfiling && known_klass != NULL) {
|
||||
if (C1OptimizeVirtualCallProfiling && known_klass != NULL) {
|
||||
// We know the type that will be seen at this call site; we can
|
||||
// statically update the methodDataOop rather than needing to do
|
||||
// dynamic tests on the receiver type
|
||||
@@ -2824,9 +2925,9 @@ void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
|
||||
Address data_addr(mdo, md->byte_offset_of_slot(data,
|
||||
VirtualCallData::receiver_count_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
__ lduw(data_addr, tmp1);
|
||||
__ ld_ptr(data_addr, tmp1);
|
||||
__ add(tmp1, DataLayout::counter_increment, tmp1);
|
||||
__ stw(tmp1, data_addr);
|
||||
__ st_ptr(tmp1, data_addr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2845,70 +2946,32 @@ void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
|
||||
__ st_ptr(tmp1, recv_addr);
|
||||
Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
__ lduw(data_addr, tmp1);
|
||||
__ ld_ptr(data_addr, tmp1);
|
||||
__ add(tmp1, DataLayout::counter_increment, tmp1);
|
||||
__ stw(tmp1, data_addr);
|
||||
__ st_ptr(tmp1, data_addr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
load(Address(recv, oopDesc::klass_offset_in_bytes()), recv, T_OBJECT);
|
||||
Label update_done;
|
||||
uint i;
|
||||
for (i = 0; i < VirtualCallData::row_limit(); i++) {
|
||||
Label next_test;
|
||||
// See if the receiver is receiver[n].
|
||||
Address receiver_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
__ ld_ptr(receiver_addr, tmp1);
|
||||
__ verify_oop(tmp1);
|
||||
__ cmp(recv, tmp1);
|
||||
__ brx(Assembler::notEqual, false, Assembler::pt, next_test);
|
||||
__ delayed()->nop();
|
||||
Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
__ lduw(data_addr, tmp1);
|
||||
__ add(tmp1, DataLayout::counter_increment, tmp1);
|
||||
__ stw(tmp1, data_addr);
|
||||
__ br(Assembler::always, false, Assembler::pt, update_done);
|
||||
__ delayed()->nop();
|
||||
__ bind(next_test);
|
||||
}
|
||||
|
||||
// Didn't find receiver; find next empty slot and fill it in
|
||||
for (i = 0; i < VirtualCallData::row_limit(); i++) {
|
||||
Label next_test;
|
||||
Address recv_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
load(recv_addr, tmp1, T_OBJECT);
|
||||
__ tst(tmp1);
|
||||
__ brx(Assembler::notEqual, false, Assembler::pt, next_test);
|
||||
__ delayed()->nop();
|
||||
__ st_ptr(recv, recv_addr);
|
||||
__ set(DataLayout::counter_increment, tmp1);
|
||||
__ st_ptr(tmp1, mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) -
|
||||
mdo_offset_bias);
|
||||
__ br(Assembler::always, false, Assembler::pt, update_done);
|
||||
__ delayed()->nop();
|
||||
__ bind(next_test);
|
||||
}
|
||||
type_profile_helper(mdo, mdo_offset_bias, md, data, recv, tmp1, &update_done);
|
||||
// Receiver did not match any saved receiver and there is no empty row for it.
|
||||
// Increment total counter to indicate polymorphic case.
|
||||
__ lduw(counter_addr, tmp1);
|
||||
__ ld_ptr(counter_addr, tmp1);
|
||||
__ add(tmp1, DataLayout::counter_increment, tmp1);
|
||||
__ stw(tmp1, counter_addr);
|
||||
__ st_ptr(tmp1, counter_addr);
|
||||
|
||||
__ bind(update_done);
|
||||
}
|
||||
} else {
|
||||
// Static call
|
||||
__ lduw(counter_addr, tmp1);
|
||||
__ ld_ptr(counter_addr, tmp1);
|
||||
__ add(tmp1, DataLayout::counter_increment, tmp1);
|
||||
__ stw(tmp1, counter_addr);
|
||||
__ st_ptr(tmp1, counter_addr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::align_backward_branch_target() {
|
||||
__ align(OptoLoopAlignment);
|
||||
}
|
||||
@@ -2934,7 +2997,7 @@ void LIR_Assembler::emit_delay(LIR_OpDelay* op) {
|
||||
|
||||
// we may also be emitting the call info for the instruction
|
||||
// which we are the delay slot of.
|
||||
CodeEmitInfo * call_info = op->call_info();
|
||||
CodeEmitInfo* call_info = op->call_info();
|
||||
if (call_info) {
|
||||
add_call_info(code_offset(), call_info);
|
||||
}
|
||||
@@ -3101,31 +3164,36 @@ void LIR_Assembler::membar_release() {
|
||||
// no-op on TSO
|
||||
}
|
||||
|
||||
// Macro to Pack two sequential registers containing 32 bit values
|
||||
// Pack two sequential registers containing 32 bit values
|
||||
// into a single 64 bit register.
|
||||
// rs and rs->successor() are packed into rd
|
||||
// rd and rs may be the same register.
|
||||
// Note: rs and rs->successor() are destroyed.
|
||||
void LIR_Assembler::pack64( Register rs, Register rd ) {
|
||||
// src and src->successor() are packed into dst
|
||||
// src and dst may be the same register.
|
||||
// Note: src is destroyed
|
||||
void LIR_Assembler::pack64(LIR_Opr src, LIR_Opr dst) {
|
||||
Register rs = src->as_register();
|
||||
Register rd = dst->as_register_lo();
|
||||
__ sllx(rs, 32, rs);
|
||||
__ srl(rs->successor(), 0, rs->successor());
|
||||
__ or3(rs, rs->successor(), rd);
|
||||
}
|
||||
|
||||
// Macro to unpack a 64 bit value in a register into
|
||||
// Unpack a 64 bit value in a register into
|
||||
// two sequential registers.
|
||||
// rd is unpacked into rd and rd->successor()
|
||||
void LIR_Assembler::unpack64( Register rd ) {
|
||||
__ mov(rd, rd->successor());
|
||||
__ srax(rd, 32, rd);
|
||||
__ sra(rd->successor(), 0, rd->successor());
|
||||
// src is unpacked into dst and dst->successor()
|
||||
void LIR_Assembler::unpack64(LIR_Opr src, LIR_Opr dst) {
|
||||
Register rs = src->as_register_lo();
|
||||
Register rd = dst->as_register_hi();
|
||||
assert_different_registers(rs, rd, rd->successor());
|
||||
__ srlx(rs, 32, rd);
|
||||
__ srl (rs, 0, rd->successor());
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::leal(LIR_Opr addr_opr, LIR_Opr dest) {
|
||||
LIR_Address* addr = addr_opr->as_address_ptr();
|
||||
assert(addr->index()->is_illegal() && addr->scale() == LIR_Address::times_1 && Assembler::is_simm13(addr->disp()), "can't handle complex addresses yet");
|
||||
__ add(addr->base()->as_register(), addr->disp(), dest->as_register());
|
||||
|
||||
__ add(addr->base()->as_pointer_register(), addr->disp(), dest->as_pointer_register());
|
||||
}
|
||||
|
||||
|
||||
@@ -3159,6 +3227,7 @@ void LIR_Assembler::peephole(LIR_List* lir) {
|
||||
tty->print_cr("delayed");
|
||||
inst->at(i - 1)->print();
|
||||
inst->at(i)->print();
|
||||
tty->cr();
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
@@ -3174,8 +3243,8 @@ void LIR_Assembler::peephole(LIR_List* lir) {
|
||||
case lir_static_call:
|
||||
case lir_virtual_call:
|
||||
case lir_icvirtual_call:
|
||||
case lir_optvirtual_call: {
|
||||
LIR_Op* delay_op = NULL;
|
||||
case lir_optvirtual_call:
|
||||
case lir_dynamic_call: {
|
||||
LIR_Op* prev = inst->at(i - 1);
|
||||
if (LIRFillDelaySlots && prev && prev->code() == lir_move && prev->info() == NULL &&
|
||||
(op->code() != lir_virtual_call ||
|
||||
@@ -3192,15 +3261,39 @@ void LIR_Assembler::peephole(LIR_List* lir) {
|
||||
tty->print_cr("delayed");
|
||||
inst->at(i - 1)->print();
|
||||
inst->at(i)->print();
|
||||
tty->cr();
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
} else {
|
||||
LIR_Op* delay_op = new LIR_OpDelay(new LIR_Op0(lir_nop), op->as_OpJavaCall()->info());
|
||||
inst->insert_before(i + 1, delay_op);
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!delay_op) {
|
||||
delay_op = new LIR_OpDelay(new LIR_Op0(lir_nop), op->as_OpJavaCall()->info());
|
||||
inst->insert_before(i + 1, delay_op);
|
||||
#if defined(TIERED) && !defined(_LP64)
|
||||
// fixup the return value from G1 to O0/O1 for long returns.
|
||||
// It's done here instead of in LIRGenerator because there's
|
||||
// such a mismatch between the single reg and double reg
|
||||
// calling convention.
|
||||
LIR_OpJavaCall* callop = op->as_OpJavaCall();
|
||||
if (callop->result_opr() == FrameMap::out_long_opr) {
|
||||
LIR_OpJavaCall* call;
|
||||
LIR_OprList* arguments = new LIR_OprList(callop->arguments()->length());
|
||||
for (int a = 0; a < arguments->length(); a++) {
|
||||
arguments[a] = callop->arguments()[a];
|
||||
}
|
||||
if (op->code() == lir_virtual_call) {
|
||||
call = new LIR_OpJavaCall(op->code(), callop->method(), callop->receiver(), FrameMap::g1_long_single_opr,
|
||||
callop->vtable_offset(), arguments, callop->info());
|
||||
} else {
|
||||
call = new LIR_OpJavaCall(op->code(), callop->method(), callop->receiver(), FrameMap::g1_long_single_opr,
|
||||
callop->addr(), arguments, callop->info());
|
||||
}
|
||||
inst->at_put(i - 1, call);
|
||||
inst->insert_before(i + 1, new LIR_Op1(lir_unpack64, FrameMap::g1_long_single_opr, callop->result_opr(),
|
||||
T_LONG, lir_patch_none, NULL));
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -71,9 +71,16 @@
|
||||
|
||||
static bool is_single_instruction(LIR_Op* op);
|
||||
|
||||
// Record the type of the receiver in ReceiverTypeData
|
||||
void type_profile_helper(Register mdo, int mdo_offset_bias,
|
||||
ciMethodData *md, ciProfileData *data,
|
||||
Register recv, Register tmp1, Label* update_done);
|
||||
// Setup pointers to MDO, MDO slot, also compute offset bias to access the slot.
|
||||
void setup_md_access(ciMethod* method, int bci,
|
||||
ciMethodData*& md, ciProfileData*& data, int& mdo_offset_bias);
|
||||
public:
|
||||
void pack64( Register rs, Register rd );
|
||||
void unpack64( Register rd );
|
||||
void pack64(LIR_Opr src, LIR_Opr dst);
|
||||
void unpack64(LIR_Opr src, LIR_Opr dst);
|
||||
|
||||
enum {
|
||||
#ifdef _LP64
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -221,35 +221,43 @@ LIR_Address* LIRGenerator::emit_array_address(LIR_Opr array_opr, LIR_Opr index_o
|
||||
if (needs_card_mark) {
|
||||
LIR_Opr ptr = new_pointer_register();
|
||||
__ add(base_opr, LIR_OprFact::intptrConst(offset), ptr);
|
||||
return new LIR_Address(ptr, 0, type);
|
||||
return new LIR_Address(ptr, type);
|
||||
} else {
|
||||
return new LIR_Address(base_opr, offset, type);
|
||||
}
|
||||
}
|
||||
|
||||
LIR_Opr LIRGenerator::load_immediate(int x, BasicType type) {
|
||||
LIR_Opr r;
|
||||
if (type == T_LONG) {
|
||||
r = LIR_OprFact::longConst(x);
|
||||
} else if (type == T_INT) {
|
||||
r = LIR_OprFact::intConst(x);
|
||||
} else {
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
if (!Assembler::is_simm13(x)) {
|
||||
LIR_Opr tmp = new_register(type);
|
||||
__ move(r, tmp);
|
||||
return tmp;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
void LIRGenerator::increment_counter(address counter, int step) {
|
||||
void LIRGenerator::increment_counter(address counter, BasicType type, int step) {
|
||||
LIR_Opr pointer = new_pointer_register();
|
||||
__ move(LIR_OprFact::intptrConst(counter), pointer);
|
||||
LIR_Address* addr = new LIR_Address(pointer, 0, T_INT);
|
||||
LIR_Address* addr = new LIR_Address(pointer, type);
|
||||
increment_counter(addr, step);
|
||||
}
|
||||
|
||||
void LIRGenerator::increment_counter(LIR_Address* addr, int step) {
|
||||
LIR_Opr temp = new_register(T_INT);
|
||||
LIR_Opr temp = new_register(addr->type());
|
||||
__ move(addr, temp);
|
||||
LIR_Opr c = LIR_OprFact::intConst(step);
|
||||
if (Assembler::is_simm13(step)) {
|
||||
__ add(temp, c, temp);
|
||||
} else {
|
||||
LIR_Opr temp2 = new_register(T_INT);
|
||||
__ move(c, temp2);
|
||||
__ add(temp, temp2, temp);
|
||||
}
|
||||
__ add(temp, load_immediate(step, addr->type()), temp);
|
||||
__ move(temp, addr);
|
||||
}
|
||||
|
||||
|
||||
void LIRGenerator::cmp_mem_int(LIR_Condition condition, LIR_Opr base, int disp, int c, CodeEmitInfo* info) {
|
||||
LIR_Opr o7opr = FrameMap::O7_opr;
|
||||
__ load(new LIR_Address(base, disp, T_INT), o7opr, info);
|
||||
@@ -409,7 +417,7 @@ void LIRGenerator::do_MonitorExit(MonitorExit* x) {
|
||||
LIR_Opr lock = FrameMap::G1_opr;
|
||||
LIR_Opr hdr = FrameMap::G3_opr;
|
||||
LIR_Opr obj_temp = FrameMap::G4_opr;
|
||||
monitor_exit(obj_temp, lock, hdr, x->monitor_no());
|
||||
monitor_exit(obj_temp, lock, hdr, LIR_OprFact::illegalOpr, x->monitor_no());
|
||||
}
|
||||
|
||||
|
||||
@@ -611,7 +619,6 @@ void LIRGenerator::do_CompareOp(CompareOp* x) {
|
||||
left.load_item();
|
||||
right.load_item();
|
||||
LIR_Opr reg = rlock_result(x);
|
||||
|
||||
if (x->x()->type()->is_float_kind()) {
|
||||
Bytecodes::Code code = x->op();
|
||||
__ fcmp2int(left.result(), right.result(), reg, (code == Bytecodes::_fcmpl || code == Bytecodes::_dcmpl));
|
||||
@@ -1040,7 +1047,9 @@ void LIRGenerator::do_InstanceOf(InstanceOf* x) {
|
||||
LIR_Opr tmp1 = FrameMap::G1_oop_opr;
|
||||
LIR_Opr tmp2 = FrameMap::G3_oop_opr;
|
||||
LIR_Opr tmp3 = FrameMap::G4_oop_opr;
|
||||
__ instanceof(out_reg, obj.result(), x->klass(), tmp1, tmp2, tmp3, x->direct_compare(), patching_info);
|
||||
__ instanceof(out_reg, obj.result(), x->klass(), tmp1, tmp2, tmp3,
|
||||
x->direct_compare(), patching_info,
|
||||
x->profiled_method(), x->profiled_bci());
|
||||
}
|
||||
|
||||
|
||||
@@ -1089,12 +1098,12 @@ void LIRGenerator::do_If(If* x) {
|
||||
// add safepoint before generating condition code so it can be recomputed
|
||||
if (x->is_safepoint()) {
|
||||
// increment backedge counter if needed
|
||||
increment_backedge_counter(state_for(x, x->state_before()));
|
||||
|
||||
increment_backedge_counter(state_for(x, x->state_before()), x->profiled_bci());
|
||||
__ safepoint(new_register(T_INT), state_for(x, x->state_before()));
|
||||
}
|
||||
|
||||
__ cmp(lir_cond(cond), left, right);
|
||||
// Generate branch profiling. Profiling code doesn't kill flags.
|
||||
profile_branch(x, cond);
|
||||
move_to_phi(x->state());
|
||||
if (x->x()->type()->is_float_kind()) {
|
||||
@@ -1159,7 +1168,7 @@ void LIRGenerator::put_Object_unsafe(LIR_Opr src, LIR_Opr offset, LIR_Opr data,
|
||||
if (type == T_ARRAY || type == T_OBJECT) {
|
||||
LIR_Opr tmp = new_pointer_register();
|
||||
__ add(base_op, index_op, tmp);
|
||||
addr = new LIR_Address(tmp, 0, type);
|
||||
addr = new LIR_Address(tmp, type);
|
||||
} else {
|
||||
addr = new LIR_Address(base_op, index_op, type);
|
||||
}
|
||||
|
||||
@@ -465,12 +465,10 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
|
||||
break;
|
||||
|
||||
#ifdef TIERED
|
||||
case counter_overflow_id:
|
||||
// G4 contains bci
|
||||
oop_maps = generate_stub_call(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), G4);
|
||||
// G4 contains bci, G5 contains method
|
||||
oop_maps = generate_stub_call(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), G4, G5);
|
||||
break;
|
||||
#endif // TIERED
|
||||
|
||||
case new_type_array_id:
|
||||
case new_object_array_id:
|
||||
@@ -679,8 +677,15 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
__ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address),
|
||||
G2_thread, Oissuing_pc->after_save());
|
||||
__ verify_not_null_oop(Oexception->after_save());
|
||||
__ jmp(O0, 0);
|
||||
__ delayed()->restore();
|
||||
|
||||
// Restore SP from L7 if the exception PC is a MethodHandle call site.
|
||||
__ mov(O0, G5); // Save the target address.
|
||||
__ lduw(Address(G2_thread, JavaThread::is_method_handle_return_offset()), L0);
|
||||
__ tst(L0); // Condition codes are preserved over the restore.
|
||||
__ restore();
|
||||
|
||||
__ jmp(G5, 0);
|
||||
__ delayed()->movcc(Assembler::notZero, false, Assembler::icc, L7_mh_SP_save, SP); // Restore SP if required.
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1024,3 +1029,7 @@ void Runtime1::generate_handle_exception(StubAssembler* sasm, OopMapSet* oop_map
|
||||
#undef __
|
||||
|
||||
#define __ masm->
|
||||
|
||||
const char *Runtime1::pd_name_for_address(address entry) {
|
||||
return "<unknown function>";
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -34,14 +34,7 @@ define_pd_global(bool, ProfileTraps, false);
|
||||
define_pd_global(bool, UseOnStackReplacement, true );
|
||||
define_pd_global(bool, TieredCompilation, false);
|
||||
define_pd_global(intx, CompileThreshold, 1000 ); // Design center runs on 1.3.1
|
||||
define_pd_global(intx, Tier2CompileThreshold, 1500 );
|
||||
define_pd_global(intx, Tier3CompileThreshold, 2000 );
|
||||
define_pd_global(intx, Tier4CompileThreshold, 2500 );
|
||||
|
||||
define_pd_global(intx, BackEdgeThreshold, 100000);
|
||||
define_pd_global(intx, Tier2BackEdgeThreshold, 100000);
|
||||
define_pd_global(intx, Tier3BackEdgeThreshold, 100000);
|
||||
define_pd_global(intx, Tier4BackEdgeThreshold, 100000);
|
||||
|
||||
define_pd_global(intx, OnStackReplacePercentage, 1400 );
|
||||
define_pd_global(bool, UseTLAB, true );
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -37,21 +37,8 @@ define_pd_global(bool, ProfileInterpreter, false);
|
||||
define_pd_global(bool, ProfileInterpreter, true);
|
||||
#endif // CC_INTERP
|
||||
define_pd_global(bool, TieredCompilation, false);
|
||||
#ifdef TIERED
|
||||
define_pd_global(intx, CompileThreshold, 1000);
|
||||
define_pd_global(intx, BackEdgeThreshold, 14000);
|
||||
#else
|
||||
define_pd_global(intx, CompileThreshold, 10000);
|
||||
define_pd_global(intx, BackEdgeThreshold, 140000);
|
||||
#endif // TIERED
|
||||
|
||||
define_pd_global(intx, Tier2CompileThreshold, 10000); // unused level
|
||||
define_pd_global(intx, Tier3CompileThreshold, 10000);
|
||||
define_pd_global(intx, Tier4CompileThreshold, 40000);
|
||||
|
||||
define_pd_global(intx, Tier2BackEdgeThreshold, 100000);
|
||||
define_pd_global(intx, Tier3BackEdgeThreshold, 100000);
|
||||
define_pd_global(intx, Tier4BackEdgeThreshold, 100000);
|
||||
|
||||
define_pd_global(intx, OnStackReplacePercentage, 140);
|
||||
define_pd_global(intx, ConditionalMoveLimit, 4);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -30,5 +30,5 @@ public:
|
||||
|
||||
// Heuristic for pre-packing the pt/pn bit of a predicted branch.
|
||||
bool is_backward_branch(Label& L) {
|
||||
return L.is_bound() && code_end() <= locator_address(L.loc());
|
||||
return L.is_bound() && insts_end() <= locator_address(L.loc());
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ static void pd_fill_to_words(HeapWord* tohw, size_t count, juint value) {
|
||||
}
|
||||
|
||||
static void pd_fill_to_aligned_words(HeapWord* tohw, size_t count, juint value) {
|
||||
assert(MinObjAlignmentInBytes == BytesPerLong, "need alternate implementation");
|
||||
assert(MinObjAlignmentInBytes >= BytesPerLong, "need alternate implementation");
|
||||
|
||||
julong* to = (julong*)tohw;
|
||||
julong v = ((julong)value << 32) | value;
|
||||
@@ -162,7 +162,7 @@ static void pd_fill_to_aligned_words(HeapWord* tohw, size_t count, juint value)
|
||||
// and be equal to 0 on 64-bit platform.
|
||||
size_t odd = count % (BytesPerLong / HeapWordSize) ;
|
||||
|
||||
size_t aligned_count = align_object_size(count - odd) / HeapWordsPerLong;
|
||||
size_t aligned_count = align_object_offset(count - odd) / HeapWordsPerLong;
|
||||
julong* end = ((julong*)tohw) + aligned_count - 1;
|
||||
while (to <= end) {
|
||||
DEBUG_ONLY(count -= BytesPerLong / HeapWordSize ;)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user