mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2026-01-03 07:01:40 +01:00
Compare commits
1062 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e19387f29 | ||
|
|
9fc518ff8c | ||
|
|
05faa7321b | ||
|
|
4c985e527a | ||
|
|
6af17c1b7d | ||
|
|
c1e77e0564 | ||
|
|
8b86e1ee11 | ||
|
|
4c5d9cfc64 | ||
|
|
2451c5a462 | ||
|
|
539a4951ee | ||
|
|
6b07243f56 | ||
|
|
3aeefbf1de | ||
|
|
1fdaf252b6 | ||
|
|
65da2c5d2d | ||
|
|
7e47d51e10 | ||
|
|
881517586d | ||
|
|
a10d5ac61b | ||
|
|
50dc041ee6 | ||
|
|
61e8867591 | ||
|
|
6423065b7d | ||
|
|
dc5ea6aeb5 | ||
|
|
4a415ad584 | ||
|
|
30302d185a | ||
|
|
e144783eb2 | ||
|
|
5feb13b55d | ||
|
|
1e3c9fd67e | ||
|
|
14a014d430 | ||
|
|
bca60f4767 | ||
|
|
f7f10367b2 | ||
|
|
784f7b1462 | ||
|
|
54603aa1b7 | ||
|
|
4c169d2d7c | ||
|
|
b527edd338 | ||
|
|
42330d28da | ||
|
|
a253b46021 | ||
|
|
55e6bb6b85 | ||
|
|
f5a12768fb | ||
|
|
2fe4e5f8d7 | ||
|
|
f2b03f9a2c | ||
|
|
fbc036e745 | ||
|
|
dbb5581eba | ||
|
|
306134dcf9 | ||
|
|
a2c5a4ac9e | ||
|
|
db217c9ad6 | ||
|
|
2613b94f28 | ||
|
|
d2660a6915 | ||
|
|
1794f49751 | ||
|
|
a43931b79c | ||
|
|
2fb1e3b7e7 | ||
|
|
3a9f491caa | ||
|
|
1dbd18ac63 | ||
|
|
2e78d838a5 | ||
|
|
17e3769ed7 | ||
|
|
b4ea80731c | ||
|
|
ccf3340e82 | ||
|
|
83d77b1cbb | ||
|
|
7d8b8ba9c4 | ||
|
|
8f7c4969c2 | ||
|
|
1a07871454 | ||
|
|
796cdd52f5 | ||
|
|
6b24b4a70f | ||
|
|
4d33fbd582 | ||
|
|
f612dcfebe | ||
|
|
6397cb611a | ||
|
|
71dd7eaf7f | ||
|
|
4b6acad0bd | ||
|
|
a2471b37e3 | ||
|
|
58ca711a97 | ||
|
|
2cf8b8607d | ||
|
|
f113b04ab9 | ||
|
|
1bab93b2d0 | ||
|
|
221f34634d | ||
|
|
23e9d9d3ee | ||
|
|
fcaf871408 | ||
|
|
07e976ac26 | ||
|
|
8de841dd19 | ||
|
|
f893d2315d | ||
|
|
d7ada66129 | ||
|
|
5d7e7e28b1 | ||
|
|
b0e0f37d73 | ||
|
|
1a62a1229a | ||
|
|
ee37af47cd | ||
|
|
83bea26df4 | ||
|
|
25bfed3b12 | ||
|
|
0d5f7439a4 | ||
|
|
adc29c36e1 | ||
|
|
575484806c | ||
|
|
63ef214328 | ||
|
|
30b2ac4a28 | ||
|
|
861eea9bd4 | ||
|
|
60a358172a | ||
|
|
3f3a1f534b | ||
|
|
5e1d1b7940 | ||
|
|
7f35389533 | ||
|
|
b6ecca1268 | ||
|
|
f54e1080c5 | ||
|
|
cba817ae59 | ||
|
|
2c52cf0746 | ||
|
|
180b94c73e | ||
|
|
f319c92bd0 | ||
|
|
e950b95486 | ||
|
|
dcd773ac5c | ||
|
|
46f25250bd | ||
|
|
ce6de37172 | ||
|
|
729c26f70e | ||
|
|
ef1f7bd3b8 | ||
|
|
1ea5f9f7cd | ||
|
|
dfce4e1943 | ||
|
|
5489c821dc | ||
|
|
10b4cc9eb4 | ||
|
|
db483a38a8 | ||
|
|
02eb240c71 | ||
|
|
92dfa1175e | ||
|
|
8b20aa919b | ||
|
|
644fe0a994 | ||
|
|
60e6378925 | ||
|
|
fef1910277 | ||
|
|
622f5604c1 | ||
|
|
9fd77c7b9b | ||
|
|
f35cf79b51 | ||
|
|
63a3501273 | ||
|
|
9145670354 | ||
|
|
aa10f0d3ee | ||
|
|
16a4f02f2d | ||
|
|
17274c72a9 | ||
|
|
29f392e434 | ||
|
|
43c71ddf92 | ||
|
|
91a2b5ec6f | ||
|
|
bb3dfd6adb | ||
|
|
36a0822633 | ||
|
|
0bf3a53e01 | ||
|
|
c7517b3dec | ||
|
|
9a797228f3 | ||
|
|
e47e9ec05b | ||
|
|
7cf7e0a20b | ||
|
|
e731695217 | ||
|
|
b5a7426996 | ||
|
|
6ac5e05c58 | ||
|
|
71cf7c4409 | ||
|
|
98716e2b25 | ||
|
|
303c61f3ca | ||
|
|
7c40c8af69 | ||
|
|
593bec685e | ||
|
|
e971f90a0b | ||
|
|
eaae0baeba | ||
|
|
7e08275cc1 | ||
|
|
5c0f50bc01 | ||
|
|
743a85db06 | ||
|
|
432cf68c4d | ||
|
|
2009dc2b73 | ||
|
|
7abe26935a | ||
|
|
d6716d2e54 | ||
|
|
53be5dc486 | ||
|
|
78f71b4d41 | ||
|
|
f82385e587 | ||
|
|
43cf8b3d80 | ||
|
|
6b082fb3c6 | ||
|
|
7c60b9c98f | ||
|
|
86b9fce980 | ||
|
|
03d613bbab | ||
|
|
a263f28368 | ||
|
|
a917fb3fcf | ||
|
|
6120319afd | ||
|
|
fef3eab9bd | ||
|
|
ea5bfea333 | ||
|
|
edf238b65e | ||
|
|
cd77fcfb5f | ||
|
|
57c9bc39cd | ||
|
|
57fde75b2a | ||
|
|
b8c9d6cdf6 | ||
|
|
dc55a7fc87 | ||
|
|
c4ffe4bf63 | ||
|
|
4f1cffd52c | ||
|
|
c91cd2814b | ||
|
|
47ca5773a5 | ||
|
|
49eb68ba95 | ||
|
|
655a71277d | ||
|
|
b242eef93e | ||
|
|
4ce493f09e | ||
|
|
a39cf2e3b2 | ||
|
|
de80dd9c15 | ||
|
|
e5042dd483 | ||
|
|
574b48c692 | ||
|
|
90e092280f | ||
|
|
f558a6c599 | ||
|
|
a58fa6e73e | ||
|
|
3cc459b6c2 | ||
|
|
2e3cea01da | ||
|
|
9b911b492f | ||
|
|
c29a136787 | ||
|
|
687a461276 | ||
|
|
84c058bb63 | ||
|
|
e045af4c92 | ||
|
|
53ae4c07fd | ||
|
|
c77f64420a | ||
|
|
519229db3c | ||
|
|
6e2d3c6c45 | ||
|
|
1480d418e3 | ||
|
|
573c316c57 | ||
|
|
3ba156082b | ||
|
|
861e302011 | ||
|
|
50dcc2aec5 | ||
|
|
28f5250fa5 | ||
|
|
0c9658446d | ||
|
|
26b111d714 | ||
|
|
52388179e6 | ||
|
|
11194e8b82 | ||
|
|
33bec20710 | ||
|
|
46bcc4901e | ||
|
|
a9a53f417d | ||
|
|
98a392c4fc | ||
|
|
9ccf8ad91f | ||
|
|
bdcbafb219 | ||
|
|
f1d76fa925 | ||
|
|
9c202a5a8f | ||
|
|
ca73f7e80f | ||
|
|
5b2d430131 | ||
|
|
f7dee77d73 | ||
|
|
ec901f28c3 | ||
|
|
8933c2d06a | ||
|
|
77519e5f4f | ||
|
|
2ef001e097 | ||
|
|
8c2c8b3f7f | ||
|
|
6d4b02b6c9 | ||
|
|
7dfe75cf55 | ||
|
|
66742c83d4 | ||
|
|
7c50ab1612 | ||
|
|
92474f13f0 | ||
|
|
ee5f6e156d | ||
|
|
7f71a1040d | ||
|
|
d782125c8f | ||
|
|
94e7cc8587 | ||
|
|
13b1ebba27 | ||
|
|
abbeb7e4d2 | ||
|
|
d503c66400 | ||
|
|
c37e9d1c8d | ||
|
|
101db262e1 | ||
|
|
f4d4fa500c | ||
|
|
99b6c0eb48 | ||
|
|
57aef85734 | ||
|
|
df93880efd | ||
|
|
0025764ec0 | ||
|
|
1f9c110c1f | ||
|
|
cb8107303e | ||
|
|
bbd8ae7820 | ||
|
|
4e327db1d1 | ||
|
|
0458d3825c | ||
|
|
f4b140b420 | ||
|
|
5d39d14522 | ||
|
|
d1c87a03ad | ||
|
|
1fec6b5953 | ||
|
|
7c233bc1c8 | ||
|
|
8049e59a5c | ||
|
|
6a44120a16 | ||
|
|
6f9f2b5d37 | ||
|
|
1ef9f6507b | ||
|
|
74b167b23d | ||
|
|
919a6da2a7 | ||
|
|
98e98e9049 | ||
|
|
84e47996e8 | ||
|
|
57798dd439 | ||
|
|
880f52fda0 | ||
|
|
db1b48ef3b | ||
|
|
582b943439 | ||
|
|
4539899c55 | ||
|
|
1428db798c | ||
|
|
c25b4f4619 | ||
|
|
5830c03e53 | ||
|
|
c8ace482ed | ||
|
|
1c7b09bc23 | ||
|
|
837d4644a7 | ||
|
|
723433dbeb | ||
|
|
e245620f6f | ||
|
|
b814cfc39d | ||
|
|
8c87a67419 | ||
|
|
97d0c8720d | ||
|
|
0aeebee284 | ||
|
|
48155662af | ||
|
|
5147969253 | ||
|
|
77ead449e4 | ||
|
|
f4b72df428 | ||
|
|
7fd440d97c | ||
|
|
7901f459dc | ||
|
|
597a9a4852 | ||
|
|
3b05a94c36 | ||
|
|
e4d1cff659 | ||
|
|
af8973dc50 | ||
|
|
2caa56a66b | ||
|
|
d401982087 | ||
|
|
916374d766 | ||
|
|
a4039e30e8 | ||
|
|
04f30185e9 | ||
|
|
83e2db6ba3 | ||
|
|
c72f951529 | ||
|
|
36478ee13f | ||
|
|
70f3150166 | ||
|
|
5561c397c5 | ||
|
|
c8cc7b67db | ||
|
|
dc6d52cea5 | ||
|
|
e81f20b504 | ||
|
|
6f460e4885 | ||
|
|
873558ee80 | ||
|
|
8a9e383dba | ||
|
|
631a2790e5 | ||
|
|
638d612c6b | ||
|
|
10dd98d0dd | ||
|
|
8d4c76ddce | ||
|
|
ecf21a9a24 | ||
|
|
9af2ea203d | ||
|
|
3db352d003 | ||
|
|
c92a7deba5 | ||
|
|
0f08785c01 | ||
|
|
4de2d3c3b6 | ||
|
|
e628fd5c39 | ||
|
|
ac7119f0d5 | ||
|
|
2a579ab839 | ||
|
|
53f72edcf6 | ||
|
|
74485a3f23 | ||
|
|
27126157d9 | ||
|
|
2e2e71e1fa | ||
|
|
a73d012c72 | ||
|
|
4fe99da74f | ||
|
|
09b8a19597 | ||
|
|
c61a38212e | ||
|
|
f5f38a82cc | ||
|
|
77dbcd8569 | ||
|
|
1aaf394b33 | ||
|
|
9dad874ff9 | ||
|
|
98433a2f6e | ||
|
|
c04a982eb4 | ||
|
|
787e16bb44 | ||
|
|
07fb4f9a0b | ||
|
|
3ac2beddba | ||
|
|
d53ade12a8 | ||
|
|
8c01b6e66b | ||
|
|
c129ce4660 | ||
|
|
b56974209b | ||
|
|
05ea083b05 | ||
|
|
ecf8842cd2 | ||
|
|
7ae447f4eb | ||
|
|
9c80b8ad99 | ||
|
|
8e9b72670b | ||
|
|
773050647e | ||
|
|
522fa13274 | ||
|
|
7ac2079ba7 | ||
|
|
371a0c4f88 | ||
|
|
716f1df609 | ||
|
|
ab528ce3cd | ||
|
|
8f195ff236 | ||
|
|
e88fd8c2a9 | ||
|
|
96c50a3486 | ||
|
|
3646c4e944 | ||
|
|
3f3356bcbd | ||
|
|
b4cb6c8e8b | ||
|
|
4dd6e8f9dc | ||
|
|
8507db1567 | ||
|
|
d67bfe21a2 | ||
|
|
34493248c0 | ||
|
|
3be5317b59 | ||
|
|
e7247b10cc | ||
|
|
20579e48cf | ||
|
|
5962226cc3 | ||
|
|
8b70256d30 | ||
|
|
bccd55bfdf | ||
|
|
7435b27d68 | ||
|
|
6f9106e0d0 | ||
|
|
ac9e046748 | ||
|
|
cf68d9fb8e | ||
|
|
11804b246e | ||
|
|
b504c9411e | ||
|
|
406021ad58 | ||
|
|
7f313b0cef | ||
|
|
3ad6aef149 | ||
|
|
4c9de876bf | ||
|
|
04278e6bf2 | ||
|
|
b00b70c240 | ||
|
|
ee0f5b5ed0 | ||
|
|
f696785fd3 | ||
|
|
cf6b9eb8c8 | ||
|
|
c647ae6c32 | ||
|
|
de5773325d | ||
|
|
930ec008e0 | ||
|
|
725d57b2e2 | ||
|
|
2d50c7d477 | ||
|
|
59b7fb1a91 | ||
|
|
5b1584b92c | ||
|
|
21c1afbc32 | ||
|
|
03b23a1e1b | ||
|
|
7b6ac41ab1 | ||
|
|
d097b5e628 | ||
|
|
c8307e37fd | ||
|
|
218223e4a3 | ||
|
|
b81f0ff43a | ||
|
|
42a286a158 | ||
|
|
ad79e49141 | ||
|
|
8cc399b672 | ||
|
|
c109dae48c | ||
|
|
182d1b2fb7 | ||
|
|
5d1f71daf0 | ||
|
|
6daff6b269 | ||
|
|
13fcd602d3 | ||
|
|
b1e96989b6 | ||
|
|
af474ce359 | ||
|
|
8d6e8a47c9 | ||
|
|
d6832121b7 | ||
|
|
960c393133 | ||
|
|
6c927c92f7 | ||
|
|
51ac8783b9 | ||
|
|
9952108734 | ||
|
|
24ff3da054 | ||
|
|
3361a26df4 | ||
|
|
bc750f70f2 | ||
|
|
1330d4eaa5 | ||
|
|
7c6a8db328 | ||
|
|
cae577a710 | ||
|
|
969f6a37e4 | ||
|
|
2a8ae2ff1c | ||
|
|
ef0d0a7092 | ||
|
|
4f6f3cc642 | ||
|
|
a0aed9bd89 | ||
|
|
225f80532c | ||
|
|
d269ebbad2 | ||
|
|
8164cfbc03 | ||
|
|
09bfbf8063 | ||
|
|
6beadbbe9f | ||
|
|
4bef233a4a | ||
|
|
e1bf471312 | ||
|
|
5744c91bf5 | ||
|
|
e193a0b72a | ||
|
|
60c535de49 | ||
|
|
b76a52f210 | ||
|
|
90ec19efed | ||
|
|
419409bcf6 | ||
|
|
d583767bf1 | ||
|
|
810c8a271b | ||
|
|
33e653e284 | ||
|
|
cdb4ba9657 | ||
|
|
9cc0171ed5 | ||
|
|
633e291cfc | ||
|
|
4b0e259d16 | ||
|
|
7b3919d3f5 | ||
|
|
a6867a7ec2 | ||
|
|
aa3492442b | ||
|
|
622b6594d1 | ||
|
|
2d7690b2e5 | ||
|
|
561a25e025 | ||
|
|
63bb2ce8de | ||
|
|
b84f4c40fd | ||
|
|
a128a5d07c | ||
|
|
a91143cc93 | ||
|
|
323813985b | ||
|
|
f4592b1471 | ||
|
|
a74ebd048a | ||
|
|
041a12e655 | ||
|
|
476f58adc1 | ||
|
|
ebb84ad70d | ||
|
|
61a5f114ee | ||
|
|
82df4a2aee | ||
|
|
c672ed16f3 | ||
|
|
cee4bd3ee6 | ||
|
|
7fae3a1d8d | ||
|
|
f50cda7d45 | ||
|
|
08b24ac7aa | ||
|
|
3db558b67b | ||
|
|
cbefe1fd35 | ||
|
|
c2ebd17938 | ||
|
|
4bd3f0a0d5 | ||
|
|
64b25ea0b4 | ||
|
|
1ff4646ed5 | ||
|
|
d4e9f5e5f2 | ||
|
|
6475501a01 | ||
|
|
af564e46b0 | ||
|
|
ef6200c727 | ||
|
|
5dfc4ec7d9 | ||
|
|
5c59de52a3 | ||
|
|
ae0e76d3dd | ||
|
|
b8e5abc1e8 | ||
|
|
9c4bc2c395 | ||
|
|
7f05d57a87 | ||
|
|
22c976a9b0 | ||
|
|
e5860ef60a | ||
|
|
7aaf76c529 | ||
|
|
49ff52087b | ||
|
|
f52d35c84b | ||
|
|
5c1ec82656 | ||
|
|
dff41316a2 | ||
|
|
b22e5216c4 | ||
|
|
e2a3b20ca8 | ||
|
|
fccf818972 | ||
|
|
e4252bb914 | ||
|
|
db8fa1be05 | ||
|
|
3758487fda | ||
|
|
d7aa87fdbd | ||
|
|
107e184d59 | ||
|
|
b77abc6a0d | ||
|
|
f7da09c349 | ||
|
|
6e4710bc83 | ||
|
|
c6b3f2dd10 | ||
|
|
938b409608 | ||
|
|
0eb1f66fd8 | ||
|
|
c3ff151457 | ||
|
|
a67b1e77d3 | ||
|
|
7eff578768 | ||
|
|
d6007a356f | ||
|
|
c4278144be | ||
|
|
7ddafd75b0 | ||
|
|
fc26d3e577 | ||
|
|
a2a7703370 | ||
|
|
d98a323a8b | ||
|
|
315398c245 | ||
|
|
14114c2515 | ||
|
|
973f741993 | ||
|
|
64ddf9536f | ||
|
|
28545dcf2b | ||
|
|
3f6338146e | ||
|
|
da80e7a489 | ||
|
|
7725fe845b | ||
|
|
a9b8acb643 | ||
|
|
15a1488401 | ||
|
|
b0376a5f44 | ||
|
|
7328182b68 | ||
|
|
30cb305dc1 | ||
|
|
3589b80838 | ||
|
|
48152ef66f | ||
|
|
4b0e656bb6 | ||
|
|
252621d4e0 | ||
|
|
b5a4744f90 | ||
|
|
7e951f4b4c | ||
|
|
adcfd25735 | ||
|
|
9f0887e205 | ||
|
|
ccf2f5837b | ||
|
|
edf1e1ab4a | ||
|
|
e80b5ea448 | ||
|
|
f279c751a5 | ||
|
|
a23ff63af1 | ||
|
|
61775c85b0 | ||
|
|
8a47429dc0 | ||
|
|
c8ad600064 | ||
|
|
74e1a8bfa8 | ||
|
|
a5d8e12872 | ||
|
|
71107f4648 | ||
|
|
3c61d5aa48 | ||
|
|
b2071f79d8 | ||
|
|
95fafd094f | ||
|
|
5a478ef775 | ||
|
|
7465de453a | ||
|
|
fbe5ab0066 | ||
|
|
133946159c | ||
|
|
81d523d382 | ||
|
|
cf46004f27 | ||
|
|
b678e70003 | ||
|
|
3be5758bb4 | ||
|
|
859ca75b4c | ||
|
|
60b8a98501 | ||
|
|
048705c049 | ||
|
|
544c16e0bd | ||
|
|
57f2d48e1e | ||
|
|
a3ed7e94a2 | ||
|
|
2292ce137c | ||
|
|
6dd8723f66 | ||
|
|
b3822f50c8 | ||
|
|
afd5921f1c | ||
|
|
937ba1cadb | ||
|
|
2da2e5a0e8 | ||
|
|
0323609f44 | ||
|
|
b5ee3d1f2a | ||
|
|
77a50105f0 | ||
|
|
f79e587181 | ||
|
|
56dc3b08a6 | ||
|
|
0ea2dd1f77 | ||
|
|
dcf1523bf2 | ||
|
|
d117350875 | ||
|
|
1a3cb8c501 | ||
|
|
86fed79670 | ||
|
|
4525aa318a | ||
|
|
a7f035db76 | ||
|
|
079255e312 | ||
|
|
a56598f5a5 | ||
|
|
542bfe61e6 | ||
|
|
03a9a88efb | ||
|
|
5a4945c0d9 | ||
|
|
f307e8c667 | ||
|
|
11aadc9d98 | ||
|
|
836198a400 | ||
|
|
fd752178e3 | ||
|
|
45e4e00981 | ||
|
|
030b071db1 | ||
|
|
7ced08d4ec | ||
|
|
3ea4eac145 | ||
|
|
cbfc069f6a | ||
|
|
67b1c890b3 | ||
|
|
c8dd7583a9 | ||
|
|
a6c2a2ae79 | ||
|
|
bb42e61a61 | ||
|
|
06394ee8b1 | ||
|
|
5331a3ef73 | ||
|
|
e1ee6727f7 | ||
|
|
7c2f77a422 | ||
|
|
5784eb7b68 | ||
|
|
9d44dd0cca | ||
|
|
facd41511b | ||
|
|
e803855708 | ||
|
|
92d8326e40 | ||
|
|
c6d5600396 | ||
|
|
b2d3622115 | ||
|
|
623ba5b6dc | ||
|
|
97c611d029 | ||
|
|
4562b402fb | ||
|
|
26410c180b | ||
|
|
eca64795be | ||
|
|
49d60fee49 | ||
|
|
e1893976d5 | ||
|
|
77f2d20e96 | ||
|
|
93a933d4ef | ||
|
|
9b97699be5 | ||
|
|
fbbb27e770 | ||
|
|
dfcd65c271 | ||
|
|
f2a1eb9804 | ||
|
|
558d610beb | ||
|
|
80ab50b338 | ||
|
|
b317658d69 | ||
|
|
d85243f02b | ||
|
|
1c84050610 | ||
|
|
453dbd12ee | ||
|
|
1084fd24eb | ||
|
|
dea58efb62 | ||
|
|
2e4a3c47e2 | ||
|
|
e326b86d37 | ||
|
|
11df6eb28a | ||
|
|
8f7faa631b | ||
|
|
eba87a0ee0 | ||
|
|
08e621829b | ||
|
|
cfe57466dd | ||
|
|
5f66024e95 | ||
|
|
5b0af1a80b | ||
|
|
62a2f2327a | ||
|
|
2e9cb4b1f6 | ||
|
|
7348b9ec93 | ||
|
|
24cdcd4c70 | ||
|
|
8e3036cf74 | ||
|
|
715b509f3d | ||
|
|
910dffea86 | ||
|
|
fc9f8baf56 | ||
|
|
31a2e02afc | ||
|
|
dfe94b89f8 | ||
|
|
601e0ae7da | ||
|
|
8b70c432d3 | ||
|
|
ba899b42ce | ||
|
|
5473e8a1c6 | ||
|
|
7bf0d1465e | ||
|
|
2a46e07f7d | ||
|
|
3ea0b8bc25 | ||
|
|
fcbf9d052e | ||
|
|
c205caead5 | ||
|
|
c3242ee452 | ||
|
|
b3684f4bac | ||
|
|
754f6e6116 | ||
|
|
85d8bacb0f | ||
|
|
c464ef1d61 | ||
|
|
1aded82e54 | ||
|
|
bd5ca95305 | ||
|
|
b9275a8ed1 | ||
|
|
c1b4212a53 | ||
|
|
15a9186db2 | ||
|
|
d9180423b8 | ||
|
|
7c8b99eedb | ||
|
|
c7056737e3 | ||
|
|
66f7387b5f | ||
|
|
1f438a8a70 | ||
|
|
f1194dc07e | ||
|
|
89a032dc05 | ||
|
|
7071397ed9 | ||
|
|
1d8b87dda4 | ||
|
|
f9883fc45b | ||
|
|
00b6c551ec | ||
|
|
e37078f5bb | ||
|
|
0f925fefdf | ||
|
|
bd324cee9c | ||
|
|
93161e46e7 | ||
|
|
6c5aefe60c | ||
|
|
2e8073e4f9 | ||
|
|
d6b1513233 | ||
|
|
3364c460a4 | ||
|
|
b7cfb6817b | ||
|
|
51e52c4eb8 | ||
|
|
5aae8226fc | ||
|
|
ba86c23eaf | ||
|
|
ade08e190c | ||
|
|
d7c05d1870 | ||
|
|
8c12ae8673 | ||
|
|
e7e3712121 | ||
|
|
0b9ff06f3a | ||
|
|
75b122feea | ||
|
|
e139ec3db2 | ||
|
|
fb147aaea1 | ||
|
|
4cd166ff27 | ||
|
|
ae0e02766a | ||
|
|
85d70acc6e | ||
|
|
b7fb8ef89e | ||
|
|
07d5753172 | ||
|
|
e82dc6935b | ||
|
|
9a36f8aadb | ||
|
|
3462438ae1 | ||
|
|
f829a67935 | ||
|
|
6a81d528e8 | ||
|
|
8365c6775c | ||
|
|
382fe51b6d | ||
|
|
06f9374e0c | ||
|
|
859ccd1a15 | ||
|
|
240830df7e | ||
|
|
f52f6e65fb | ||
|
|
4c1e66e0ab | ||
|
|
4073b68565 | ||
|
|
506c818689 | ||
|
|
319de6a6d3 | ||
|
|
289aed465e | ||
|
|
a2f67660f0 | ||
|
|
a734285314 | ||
|
|
98d75f1879 | ||
|
|
cac72a6018 | ||
|
|
6fea233e22 | ||
|
|
7c1ebcc4ce | ||
|
|
abfd7e89f6 | ||
|
|
83f2c9a2b2 | ||
|
|
50e7df91c7 | ||
|
|
fe7fca0128 | ||
|
|
12edd6f922 | ||
|
|
7bcd5f418c | ||
|
|
e15bdc58ab | ||
|
|
4be94e4350 | ||
|
|
f4e119d5fc | ||
|
|
87865e0eb8 | ||
|
|
dc5cc61621 | ||
|
|
98eae6dade | ||
|
|
628266af60 | ||
|
|
ab7f43f080 | ||
|
|
bc498f87f7 | ||
|
|
8cb25d3de4 | ||
|
|
500b45e12d | ||
|
|
4ec3659845 | ||
|
|
d117979503 | ||
|
|
e0081462f4 | ||
|
|
ce1193a1ed | ||
|
|
3ffc955783 | ||
|
|
e7fa150bc1 | ||
|
|
c250222880 | ||
|
|
ac63f5f8dd | ||
|
|
be8e6d05db | ||
|
|
640eff64d2 | ||
|
|
19628e3e0c | ||
|
|
9887047228 | ||
|
|
33412c102c | ||
|
|
4b92fb0c6b | ||
|
|
7a85d95e82 | ||
|
|
26890d1909 | ||
|
|
6a4a874356 | ||
|
|
cf00d09c8c | ||
|
|
48c8fb39a7 | ||
|
|
89d3f3d96b | ||
|
|
4b573343a6 | ||
|
|
036c80844e | ||
|
|
0ee8cac7c7 | ||
|
|
752a37016f | ||
|
|
d716ec5d30 | ||
|
|
3918f9f523 | ||
|
|
af8d3fb21a | ||
|
|
78b1686c15 | ||
|
|
33f3bd8fad | ||
|
|
8db73f7743 | ||
|
|
43847c43ad | ||
|
|
a17b563f54 | ||
|
|
9c1e98dac5 | ||
|
|
d663b5da10 | ||
|
|
437d69a220 | ||
|
|
c7716a0101 | ||
|
|
4cd87f1bda | ||
|
|
7d3400b1cf | ||
|
|
d15285f948 | ||
|
|
945ef07564 | ||
|
|
5a9490a40e | ||
|
|
f857f8a092 | ||
|
|
257f667afb | ||
|
|
030e88d638 | ||
|
|
ef32fdb8cc | ||
|
|
636976ada8 | ||
|
|
0abb87a488 | ||
|
|
95b102c9b1 | ||
|
|
f312c99977 | ||
|
|
10a747c70b | ||
|
|
ddca2b9b46 | ||
|
|
de79162fdf | ||
|
|
c595f965ab | ||
|
|
3c99e786ab | ||
|
|
151450ea9b | ||
|
|
5a51ef22ad | ||
|
|
a86b6f6fde | ||
|
|
8b0133f276 | ||
|
|
d68de02bef | ||
|
|
21d468e575 | ||
|
|
debe5879aa | ||
|
|
eab1e6260d | ||
|
|
c8a8388aba | ||
|
|
5f37cbec94 | ||
|
|
f95346e870 | ||
|
|
195f31371f | ||
|
|
5826a077f9 | ||
|
|
3a66737001 | ||
|
|
b7eb4e2ffd | ||
|
|
a63866341e | ||
|
|
4395578b6f | ||
|
|
f79b3d42f0 | ||
|
|
f36f1354c6 | ||
|
|
b8852f65a0 | ||
|
|
679e485838 | ||
|
|
d49851a8b8 | ||
|
|
cd10c7278d | ||
|
|
bfd5971429 | ||
|
|
17a3f0e257 | ||
|
|
4ba8122197 | ||
|
|
66db0bb6a1 | ||
|
|
7068457436 | ||
|
|
500c3c1737 | ||
|
|
4072412c1f | ||
|
|
a503ec2cc7 | ||
|
|
d2827ec8f7 | ||
|
|
05a0a71031 | ||
|
|
9b1ade8e2b | ||
|
|
8d17d1ee6f | ||
|
|
d03a5d9580 | ||
|
|
c4449224bb | ||
|
|
7607c07e00 | ||
|
|
d53cac3794 | ||
|
|
834e50e9ef | ||
|
|
e209693a37 | ||
|
|
d5b80abcbf | ||
|
|
63cf4aa0c8 | ||
|
|
5393dc9a48 | ||
|
|
7310131409 | ||
|
|
d086e82b3c | ||
|
|
4a95c74b76 | ||
|
|
d6d6eb4cba | ||
|
|
8c70bf3fff | ||
|
|
1f141bd7a9 | ||
|
|
d6e9f01584 | ||
|
|
ba03f42a50 | ||
|
|
3dcf700161 | ||
|
|
5eee2a07f5 | ||
|
|
1e9972922a | ||
|
|
8cc1669ffd | ||
|
|
5598acc345 | ||
|
|
88f0ea7887 | ||
|
|
136f5db03d | ||
|
|
0234f813e6 | ||
|
|
cc4936a79e | ||
|
|
b5b7948d9b | ||
|
|
99be74088e | ||
|
|
775da84a84 | ||
|
|
7845b0d7b4 | ||
|
|
284c94e20d | ||
|
|
4b6809b94a | ||
|
|
dfdbd0fe7f | ||
|
|
3e2314d082 | ||
|
|
a49ccb959b | ||
|
|
b908388e81 | ||
|
|
be64bf8cf0 | ||
|
|
9c4ed16be2 | ||
|
|
872384707e | ||
|
|
1ca31d34fc | ||
|
|
e7361cb746 | ||
|
|
c929d8be5d | ||
|
|
2ccdefc81c | ||
|
|
578c287a68 | ||
|
|
5ae6de859d | ||
|
|
3b374c0153 | ||
|
|
7dcc689932 | ||
|
|
44be5edf5a | ||
|
|
b9758d2201 | ||
|
|
df1caf9081 | ||
|
|
6a07fd0ec1 | ||
|
|
4c0f24ef71 | ||
|
|
c6588d5bb3 | ||
|
|
c32a34c2e5 | ||
|
|
ccbcea830d | ||
|
|
e3035bad60 | ||
|
|
41900b57af | ||
|
|
a17f505d73 | ||
|
|
82deb5ca61 | ||
|
|
b743519ba9 | ||
|
|
77ff197746 | ||
|
|
38cfc59172 | ||
|
|
8254cbb21d | ||
|
|
031829d885 | ||
|
|
3eb85d19ec | ||
|
|
ea25a561c5 | ||
|
|
92dfc735f2 | ||
|
|
3d0db02c76 | ||
|
|
245f0cf4ac | ||
|
|
a9ce7726a7 | ||
|
|
8afd665bf9 | ||
|
|
a6a903d4b6 | ||
|
|
375743336d | ||
|
|
417d01ea63 | ||
|
|
5b5552ff2a | ||
|
|
67086ebf80 | ||
|
|
ce6395a135 | ||
|
|
71a64a1b7a | ||
|
|
532ccdb61a | ||
|
|
9d3d03997e | ||
|
|
c252a85fb0 | ||
|
|
8a10eef408 | ||
|
|
e09e243116 | ||
|
|
0532045edb | ||
|
|
d812022890 | ||
|
|
95d4db3a92 | ||
|
|
18ff1f5a05 | ||
|
|
2ee34f1488 | ||
|
|
c2e3d72848 | ||
|
|
684e50690c | ||
|
|
37f8b059c1 | ||
|
|
6f85a9c9a8 | ||
|
|
d490f15e3b | ||
|
|
11fd651ab1 | ||
|
|
0459159537 | ||
|
|
19373b2ff0 | ||
|
|
26868c1ac4 | ||
|
|
5e861e3965 | ||
|
|
fd746a2fe0 | ||
|
|
188911c925 | ||
|
|
da75de3184 | ||
|
|
19ce23c645 | ||
|
|
2f4098e1dc | ||
|
|
33042a49d7 | ||
|
|
2294f225c0 | ||
|
|
5e2de89628 | ||
|
|
6ccee83958 | ||
|
|
b378381a9c | ||
|
|
62a033ecd7 | ||
|
|
a3693ccc61 | ||
|
|
a80c91d036 | ||
|
|
9863f59e1d | ||
|
|
5e001d6ff3 | ||
|
|
a0a09d56ba | ||
|
|
50120396b6 | ||
|
|
fef70d78ba | ||
|
|
34cdda5b83 | ||
|
|
f80faced6e | ||
|
|
22007a1e38 | ||
|
|
9adc349cbb | ||
|
|
7e59a0ecb6 | ||
|
|
10d62fa218 | ||
|
|
65442a2e26 | ||
|
|
88bfe4d3bf | ||
|
|
a7d6de71bb | ||
|
|
81933b7a92 | ||
|
|
92fe304f08 | ||
|
|
b005013a00 | ||
|
|
85f9b37d71 | ||
|
|
f36e144923 | ||
|
|
f56285c361 | ||
|
|
396a9bff68 | ||
|
|
f7be5b530d | ||
|
|
3d4d9fd6e6 | ||
|
|
e85d00f6c3 | ||
|
|
386db07143 | ||
|
|
8dfb6d76e8 | ||
|
|
f4d7f43394 | ||
|
|
03afec16f8 | ||
|
|
03d992728e | ||
|
|
de8153cab7 | ||
|
|
65fc05884b | ||
|
|
318526b01e | ||
|
|
c5a4a7a679 | ||
|
|
e5edb10dc5 | ||
|
|
5df00d34fe | ||
|
|
3dd2cfabdc | ||
|
|
36de61c460 | ||
|
|
dd15d306a6 | ||
|
|
ea40f29939 | ||
|
|
05f9e7676e | ||
|
|
abc1297643 | ||
|
|
d0a7679d2e | ||
|
|
f07acfc166 | ||
|
|
3e17e3c1c1 | ||
|
|
5d330f5285 | ||
|
|
40cb431fee | ||
|
|
188aaef385 | ||
|
|
2c69c41d48 | ||
|
|
9194e91549 | ||
|
|
4c927df712 | ||
|
|
756a06d4c2 | ||
|
|
de0ce792c1 | ||
|
|
da38d43fcc | ||
|
|
8e49fcdde4 | ||
|
|
86d588b035 | ||
|
|
ec95991470 | ||
|
|
16225630ec | ||
|
|
3637660521 | ||
|
|
5e678f7500 | ||
|
|
ba942c24e8 | ||
|
|
7938f8c32a | ||
|
|
34105556d1 | ||
|
|
d1026720d3 | ||
|
|
41cc04430a | ||
|
|
3b7970cab3 | ||
|
|
0ecad28daa | ||
|
|
c997b5bffd | ||
|
|
bfa921ae6c | ||
|
|
bf9a8ce0bb | ||
|
|
0eeaeb8e7b | ||
|
|
81e23ab340 | ||
|
|
3696711efa | ||
|
|
9e10f00edb | ||
|
|
b14794db00 | ||
|
|
f4caaca100 | ||
|
|
ac2fcf3f75 | ||
|
|
909d0cb4d9 | ||
|
|
f771c56e16 | ||
|
|
0ba4734891 | ||
|
|
226e579c30 | ||
|
|
c47e64e4f3 | ||
|
|
fa322e40b6 | ||
|
|
03a694afda | ||
|
|
e41686b405 | ||
|
|
a3364612f7 | ||
|
|
2bb727c4ea | ||
|
|
c7d7e7e3be | ||
|
|
5412439445 | ||
|
|
3cdbd878e6 | ||
|
|
10737e168c | ||
|
|
4b313b51b1 | ||
|
|
ae8988e834 | ||
|
|
0ef353925e | ||
|
|
831b35fad3 | ||
|
|
ca39eb9066 | ||
|
|
0288210f25 | ||
|
|
2c42499266 | ||
|
|
48f6127325 | ||
|
|
22a6b59102 | ||
|
|
323e574a50 | ||
|
|
b17c52422c | ||
|
|
98fa48c330 | ||
|
|
5f63f7a742 | ||
|
|
3ae718725a | ||
|
|
b9074fa1ed | ||
|
|
10bc86cc26 | ||
|
|
d1085d1be7 | ||
|
|
3ef382416f | ||
|
|
0ed6d0b456 | ||
|
|
80cadd4010 | ||
|
|
a130c8a668 | ||
|
|
ebc471040e | ||
|
|
ccb94acc44 | ||
|
|
581f9f2306 | ||
|
|
0eeaf6b219 | ||
|
|
279170147a | ||
|
|
0bbc4181cd | ||
|
|
9bcdfc4285 | ||
|
|
27d4971182 | ||
|
|
51f0a1ce4b | ||
|
|
61ab16f79a | ||
|
|
c6f22b4160 | ||
|
|
bf78f716bd |
4
.github/actions/get-gtest/action.yml
vendored
4
.github/actions/get-gtest/action.yml
vendored
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2022, 2023, 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
|
||||
@@ -43,7 +43,7 @@ runs:
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: google/googletest
|
||||
ref: 'release-${{ steps.version.outputs.value }}'
|
||||
ref: 'v${{ steps.version.outputs.value }}'
|
||||
path: gtest
|
||||
|
||||
- name: 'Export path to where GTest is installed'
|
||||
|
||||
4
.github/actions/get-msys2/action.yml
vendored
4
.github/actions/get-msys2/action.yml
vendored
@@ -34,11 +34,11 @@ runs:
|
||||
with:
|
||||
install: 'autoconf tar unzip zip make'
|
||||
path-type: minimal
|
||||
location: msys2
|
||||
location: ${{ runner.tool_cache }}/msys2
|
||||
|
||||
# We can't run bash until this is completed, so stick with pwsh
|
||||
- name: 'Set MSYS2 path'
|
||||
run: |
|
||||
# Prepend msys2/msys64/usr/bin to the PATH
|
||||
echo "$env:GITHUB_WORKSPACE/msys2/msys64/usr/bin" >> $env:GITHUB_PATH
|
||||
echo "$env:RUNNER_TOOL_CACHE/msys2/msys64/usr/bin" >> $env:GITHUB_PATH
|
||||
shell: pwsh
|
||||
|
||||
3
.github/workflows/build-linux.yml
vendored
3
.github/workflows/build-linux.yml
vendored
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2022, 2023, 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
|
||||
@@ -126,7 +126,6 @@ jobs:
|
||||
--with-boot-jdk=${{ steps.bootjdk.outputs.path }}
|
||||
--with-jtreg=${{ steps.jtreg.outputs.path }}
|
||||
--with-gtest=${{ steps.gtest.outputs.path }}
|
||||
--enable-jtreg-failure-handler
|
||||
--with-zlib=system
|
||||
--with-jmod-compress=zip-1
|
||||
${{ inputs.extra-conf-options }} ${{ inputs.configure-arguments }} || (
|
||||
|
||||
3
.github/workflows/build-macos.yml
vendored
3
.github/workflows/build-macos.yml
vendored
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2022, 2023, 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
|
||||
@@ -101,7 +101,6 @@ jobs:
|
||||
--with-boot-jdk=${{ steps.bootjdk.outputs.path }}
|
||||
--with-jtreg=${{ steps.jtreg.outputs.path }}
|
||||
--with-gtest=${{ steps.gtest.outputs.path }}
|
||||
--enable-jtreg-failure-handler
|
||||
--with-zlib=system
|
||||
--with-jmod-compress=zip-1
|
||||
${{ inputs.extra-conf-options }} ${{ inputs.configure-arguments }} || (
|
||||
|
||||
4
.github/workflows/build-windows.yml
vendored
4
.github/workflows/build-windows.yml
vendored
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2022, 2023, 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
|
||||
@@ -114,7 +114,6 @@ jobs:
|
||||
--with-boot-jdk=${{ steps.bootjdk.outputs.path }}
|
||||
--with-jtreg=${{ steps.jtreg.outputs.path }}
|
||||
--with-gtest=${{ steps.gtest.outputs.path }}
|
||||
--enable-jtreg-failure-handler
|
||||
--with-msvc-toolset-version=${{ inputs.msvc-toolset-version }}
|
||||
--with-jmod-compress=zip-1
|
||||
${{ inputs.extra-conf-options }} ${{ inputs.configure-arguments }} || (
|
||||
@@ -125,6 +124,7 @@ jobs:
|
||||
# We need a minimal PATH on Windows
|
||||
# Set PATH to "", so just GITHUB_PATH is included
|
||||
PATH: ''
|
||||
shell: env /usr/bin/bash --login -eo pipefail {0}
|
||||
|
||||
- name: 'Build'
|
||||
id: build
|
||||
|
||||
4
.github/workflows/main.yml
vendored
4
.github/workflows/main.yml
vendored
@@ -235,7 +235,7 @@ jobs:
|
||||
uses: ./.github/workflows/build-macos.yml
|
||||
with:
|
||||
platform: macos-x64
|
||||
xcode-toolset-version: '11.7'
|
||||
xcode-toolset-version: '12.5.1'
|
||||
configure-arguments: ${{ github.event.inputs.configure-arguments }}
|
||||
make-arguments: ${{ github.event.inputs.make-arguments }}
|
||||
if: needs.select.outputs.macos-x64 == 'true'
|
||||
@@ -246,7 +246,7 @@ jobs:
|
||||
uses: ./.github/workflows/build-macos.yml
|
||||
with:
|
||||
platform: macos-aarch64
|
||||
xcode-toolset-version: '12.4'
|
||||
xcode-toolset-version: '12.5.1'
|
||||
extra-conf-options: '--openjdk-target=aarch64-apple-darwin'
|
||||
configure-arguments: ${{ github.event.inputs.configure-arguments }}
|
||||
make-arguments: ${{ github.event.inputs.make-arguments }}
|
||||
|
||||
@@ -1087,21 +1087,21 @@ home, i.e. the top directory, containing <code>lib/jtreg.jar</code>
|
||||
etc.</p>
|
||||
<p>The <a href="https://wiki.openjdk.org/display/Adoption">Adoption
|
||||
Group</a> provides recent builds of jtreg <a
|
||||
href="https://ci.adoptopenjdk.net/view/Dependencies/job/dependency_pipeline/lastSuccessfulBuild/artifact/jtreg/">here</a>.
|
||||
href="https://ci.adoptium.net/view/Dependencies/job/dependency_pipeline/lastSuccessfulBuild/artifact/jtreg/">here</a>.
|
||||
Download the latest <code>.tar.gz</code> file, unpack it, and point
|
||||
<code>--with-jtreg</code> to the <code>jtreg</code> directory that you
|
||||
just unpacked.</p>
|
||||
<p>Building of Hotspot Gtest suite requires the source code of Google
|
||||
Test framework. The top directory, which contains both
|
||||
<code>googletest</code> and <code>googlemock</code> directories, should
|
||||
be specified via <code>--with-gtest</code>. The supported version of
|
||||
Google Test is 1.8.1, whose source code can be obtained:</p>
|
||||
be specified via <code>--with-gtest</code>. The minimum supported
|
||||
version of Google Test is 1.13.0, whose source code can be obtained:</p>
|
||||
<ul>
|
||||
<li>by downloading and unpacking the source bundle from <a
|
||||
href="https://github.com/google/googletest/releases/tag/release-1.8.1">here</a></li>
|
||||
<li>or by checking out <code>release-1.8.1</code> tag of
|
||||
href="https://github.com/google/googletest/releases/tag/v1.13.0">here</a></li>
|
||||
<li>or by checking out <code>v1.13.0</code> tag of
|
||||
<code>googletest</code> project:
|
||||
<code>git clone -b release-1.8.1 https://github.com/google/googletest</code></li>
|
||||
<code>git clone -b v1.13.0 https://github.com/google/googletest</code></li>
|
||||
</ul>
|
||||
<p>To execute the most basic tests (tier 1), use:</p>
|
||||
<pre><code>make run-test-tier1</code></pre>
|
||||
|
||||
@@ -860,17 +860,18 @@ containing `lib/jtreg.jar` etc.
|
||||
|
||||
The [Adoption Group](https://wiki.openjdk.org/display/Adoption) provides
|
||||
recent builds of jtreg [here](
|
||||
https://ci.adoptopenjdk.net/view/Dependencies/job/dependency_pipeline/lastSuccessfulBuild/artifact/jtreg/).
|
||||
https://ci.adoptium.net/view/Dependencies/job/dependency_pipeline/lastSuccessfulBuild/artifact/jtreg/).
|
||||
Download the latest `.tar.gz` file, unpack it, and point `--with-jtreg` to the
|
||||
`jtreg` directory that you just unpacked.
|
||||
|
||||
Building of Hotspot Gtest suite requires the source code of Google Test framework.
|
||||
The top directory, which contains both `googletest` and `googlemock`
|
||||
directories, should be specified via `--with-gtest`.
|
||||
The supported version of Google Test is 1.8.1, whose source code can be obtained:
|
||||
Building of Hotspot Gtest suite requires the source code of Google
|
||||
Test framework. The top directory, which contains both `googletest`
|
||||
and `googlemock` directories, should be specified via `--with-gtest`.
|
||||
The minimum supported version of Google Test is 1.13.0, whose source
|
||||
code can be obtained:
|
||||
|
||||
* by downloading and unpacking the source bundle from [here](https://github.com/google/googletest/releases/tag/release-1.8.1)
|
||||
* or by checking out `release-1.8.1` tag of `googletest` project: `git clone -b release-1.8.1 https://github.com/google/googletest`
|
||||
* by downloading and unpacking the source bundle from [here](https://github.com/google/googletest/releases/tag/v1.13.0)
|
||||
* or by checking out `v1.13.0` tag of `googletest` project: `git clone -b v1.13.0 https://github.com/google/googletest`
|
||||
|
||||
To execute the most basic tests (tier 1), use:
|
||||
```
|
||||
|
||||
@@ -72,6 +72,7 @@ Deduction</a></li>
|
||||
<li><a href="#expression-sfinae" id="toc-expression-sfinae">Expression
|
||||
SFINAE</a></li>
|
||||
<li><a href="#enum" id="toc-enum">enum</a></li>
|
||||
<li><a href="#alignas" id="toc-alignas">alignas</a></li>
|
||||
<li><a href="#thread_local" id="toc-thread_local">thread_local</a></li>
|
||||
<li><a href="#nullptr" id="toc-nullptr">nullptr</a></li>
|
||||
<li><a href="#atomic" id="toc-atomic"><atomic></a></li>
|
||||
@@ -81,6 +82,7 @@ id="toc-uniform-initialization">Uniform Initialization</a></li>
|
||||
id="toc-local-function-objects">Local Function Objects</a></li>
|
||||
<li><a href="#inheriting-constructors"
|
||||
id="toc-inheriting-constructors">Inheriting constructors</a></li>
|
||||
<li><a href="#attributes" id="toc-attributes">Attributes</a></li>
|
||||
<li><a href="#additional-permitted-features"
|
||||
id="toc-additional-permitted-features">Additional Permitted
|
||||
Features</a></li>
|
||||
@@ -598,7 +600,7 @@ conventions might appear jarring and reduce readability.</p></li>
|
||||
<code>std::numeric_limits</code>.</li>
|
||||
<li><code>#include <type_traits></code>.</li>
|
||||
<li><code>#include <cstddef></code> to use
|
||||
<code>std::nullptr_t</code>.</li>
|
||||
<code>std::nullptr_t</code> and <code>std::max_align_t</code>.</li>
|
||||
</ul>
|
||||
<p>TODO: Rather than directly #including (permitted) Standard Library
|
||||
headers, use a convention of #including wrapper headers (in some
|
||||
@@ -670,6 +672,53 @@ of enums and avoidance of in-class initialization of static integral
|
||||
constant members. Compilers having such bugs are no longer supported.
|
||||
Except where an enum is semantically appropriate, new code should use
|
||||
integral constants.</p>
|
||||
<h3 id="alignas">alignas</h3>
|
||||
<p><em>Alignment-specifiers</em> (<code>alignas</code> <a
|
||||
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf">n2341</a>)
|
||||
are permitted, with restrictions.</p>
|
||||
<p><em>Alignment-specifiers</em> are permitted when the requested
|
||||
alignment is a <em>fundamental alignment</em> (not greater than
|
||||
<code>alignof(std::max_align_t)</code> <a
|
||||
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
|
||||
3.11/2</a>).</p>
|
||||
<p><em>Alignment-specifiers</em> with an <em>extended alignment</em>
|
||||
(greater than <code>alignof(std::max_align_t)</code> <a
|
||||
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
|
||||
3.11/3</a>) may only be used to align variables with static or automatic
|
||||
storage duration (<a
|
||||
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
|
||||
3.7.1, 3.7.3</a>). As a consequence, <em>over-aligned types</em> are
|
||||
forbidden; this may change if HotSpot updates to using C++17 or later
|
||||
(<a
|
||||
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0035r4.html">p0035r4</a>).</p>
|
||||
<p>Large <em>extended alignments</em> should be avoided, particularly
|
||||
for stack allocated objects. What is a large value may depend on the
|
||||
platform and configuration. There may also be hard limits for some
|
||||
platforms.</p>
|
||||
<p>An <em>alignment-specifier</em> must always be applied to a
|
||||
definition (<a
|
||||
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
|
||||
10.6.2/6</a>). (C++ allows an <em>alignment-specifier</em> to optionally
|
||||
also be applied to a declaration, so long as the definition has
|
||||
equivalent alignment. There isn't any known benefit from duplicating the
|
||||
alignment in a non-definition declaration, so such duplication should be
|
||||
avoided in HotSpot code.)</p>
|
||||
<p>Enumerations are forbidden from having <em>alignment-specifiers</em>.
|
||||
Aligned enumerations were originally permitted but insufficiently
|
||||
specified, and were later (C++20) removed (<a
|
||||
href="https://cplusplus.github.io/CWG/issues/2354.html">CWG 2354</a>).
|
||||
Permitting such usage in HotSpot now would just cause problems in the
|
||||
future.</p>
|
||||
<p><em>Alignment-specifiers</em> are forbidden in <code>typedef</code>
|
||||
and <em>alias-declarations</em>. This may work or may have worked in
|
||||
some versions of some compilers, but was later (C++14) explicitly
|
||||
disallowed (<a
|
||||
href="https://cplusplus.github.io/CWG/issues/1437.html">CWG
|
||||
1437</a>).</p>
|
||||
<p>The HotSpot macro <code>ATTRIBUTE_ALIGNED</code> provides similar
|
||||
capabilities for platforms that define it. This macro predates the use
|
||||
by HotSpot of C++ versions providing <code>alignas</code>. New code
|
||||
should use <code>alignas</code>.</p>
|
||||
<h3 id="thread_local">thread_local</h3>
|
||||
<p>Avoid use of <code>thread_local</code> (<a
|
||||
href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm">n2659</a>);
|
||||
@@ -1009,6 +1058,31 @@ using C++17 or later. It is also enabled by default for
|
||||
C++11/14, as the change is considered a Defect Report that applies to
|
||||
those versions. Earlier versions of gcc don't have that option, and
|
||||
other supported compilers may not have anything similar.</p>
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
<p>The use of some attributes (<a
|
||||
href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf">n2761</a>)
|
||||
(listed below) is permitted. (Note that some of the attributes defined
|
||||
in that paper didn't make it into the final specification.)</p>
|
||||
<p>Attributes are syntactically permitted in a broad set of locations,
|
||||
but specific attributes are only permitted in a subset of those
|
||||
locations. In some cases an attribute that appertains to a given element
|
||||
may be placed in any of several locations with the same meaning. In
|
||||
those cases HotSpot has a preferred location.</p>
|
||||
<ul>
|
||||
<li>An attribute that appertains to a function is placed at the
|
||||
beginning of the function's declaration, rather than between the
|
||||
function name and the parameter list.</li>
|
||||
</ul>
|
||||
<p>Only the following attributes are permitted:</p>
|
||||
<ul>
|
||||
<li><code>[[noreturn]]</code></li>
|
||||
</ul>
|
||||
<p>The following attributes are expressly forbidden:</p>
|
||||
<ul>
|
||||
<li><code>[[carries_dependency]]</code> - Related to
|
||||
<code>memory_order_consume</code>.</li>
|
||||
<li><code>[[deprecated]]</code> - Not relevant in HotSpot code.</li>
|
||||
</ul>
|
||||
<h3 id="additional-permitted-features">Additional Permitted
|
||||
Features</h3>
|
||||
<ul>
|
||||
@@ -1101,9 +1175,6 @@ initialization or destruction. Initialization order problems can be
|
||||
difficult to deal with and lead to surprises, as can destruction
|
||||
ordering. HotSpot doesn't generally try to cleanup on exit, and running
|
||||
destructors at exit can also lead to problems.</p></li>
|
||||
<li><p><code>[[deprecated]]</code> attribute (<a
|
||||
href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html">n3760</a>)
|
||||
— Not relevant in HotSpot code.</p></li>
|
||||
<li><p>Avoid most operator overloading, preferring named functions. When
|
||||
operator overloading is used, ensure the semantics conform to the normal
|
||||
expected behavior of the operation.</p></li>
|
||||
@@ -1123,8 +1194,6 @@ href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm">n2541</
|
||||
href="https://isocpp.org/files/papers/N3651.pdf">n3651</a>)</p></li>
|
||||
<li><p>Member initializers and aggregates (<a
|
||||
href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html">n3653</a>)</p></li>
|
||||
<li><p><code>[[noreturn]]</code> attribute (<a
|
||||
href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf">n2761</a>)</p></li>
|
||||
<li><p>Rvalue references and move semantics</p></li>
|
||||
</ul>
|
||||
</body>
|
||||
|
||||
@@ -573,7 +573,7 @@ There are a few exceptions to this rule.
|
||||
* `#include <new>` to use placement `new`, `std::nothrow`, and `std::nothrow_t`.
|
||||
* `#include <limits>` to use `std::numeric_limits`.
|
||||
* `#include <type_traits>`.
|
||||
* `#include <cstddef>` to use `std::nullptr_t`.
|
||||
* `#include <cstddef>` to use `std::nullptr_t` and `std::max_align_t`.
|
||||
|
||||
TODO: Rather than directly \#including (permitted) Standard Library
|
||||
headers, use a convention of \#including wrapper headers (in some
|
||||
@@ -651,6 +651,51 @@ constant members. Compilers having such bugs are no longer supported.
|
||||
Except where an enum is semantically appropriate, new code should use
|
||||
integral constants.
|
||||
|
||||
### alignas
|
||||
|
||||
_Alignment-specifiers_ (`alignas`
|
||||
[n2341](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf))
|
||||
are permitted, with restrictions.
|
||||
|
||||
_Alignment-specifiers_ are permitted when the requested alignment is a
|
||||
_fundamental alignment_ (not greater than `alignof(std::max_align_t)`
|
||||
[C++14 3.11/2](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf)).
|
||||
|
||||
_Alignment-specifiers_ with an _extended alignment_ (greater than
|
||||
`alignof(std::max_align_t)`
|
||||
[C++14 3.11/3](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf))
|
||||
may only be used to align variables with static or automatic storage duration
|
||||
([C++14 3.7.1, 3.7.3](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf)).
|
||||
As a consequence, _over-aligned types_ are forbidden; this may change if
|
||||
HotSpot updates to using C++17 or later
|
||||
([p0035r4](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0035r4.html)).
|
||||
|
||||
Large _extended alignments_ should be avoided, particularly for stack
|
||||
allocated objects. What is a large value may depend on the platform and
|
||||
configuration. There may also be hard limits for some platforms.
|
||||
|
||||
An _alignment-specifier_ must always be applied to a definition
|
||||
([C++14 10.6.2/6](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf)).
|
||||
(C++ allows an _alignment-specifier_ to optionally also be applied to a
|
||||
declaration, so long as the definition has equivalent alignment. There isn't
|
||||
any known benefit from duplicating the alignment in a non-definition
|
||||
declaration, so such duplication should be avoided in HotSpot code.)
|
||||
|
||||
Enumerations are forbidden from having _alignment-specifiers_. Aligned
|
||||
enumerations were originally permitted but insufficiently specified, and were
|
||||
later (C++20) removed
|
||||
([CWG 2354](https://cplusplus.github.io/CWG/issues/2354.html)).
|
||||
Permitting such usage in HotSpot now would just cause problems in the future.
|
||||
|
||||
_Alignment-specifiers_ are forbidden in `typedef` and _alias-declarations_.
|
||||
This may work or may have worked in some versions of some compilers, but was
|
||||
later (C++14) explicitly disallowed
|
||||
([CWG 1437](https://cplusplus.github.io/CWG/issues/1437.html)).
|
||||
|
||||
The HotSpot macro `ATTRIBUTE_ALIGNED` provides similar capabilities for
|
||||
platforms that define it. This macro predates the use by HotSpot of C++
|
||||
versions providing `alignas`. New code should use `alignas`.
|
||||
|
||||
### thread_local
|
||||
|
||||
Avoid use of `thread_local`
|
||||
@@ -1009,6 +1054,32 @@ and other supported compilers may not have anything similar.
|
||||
[p0136r1]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0136r1.html
|
||||
"p0136r1"
|
||||
|
||||
### Attributes
|
||||
|
||||
The use of some attributes
|
||||
([n2761](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf))
|
||||
(listed below) is permitted. (Note that some of the attributes defined in
|
||||
that paper didn't make it into the final specification.)
|
||||
|
||||
Attributes are syntactically permitted in a broad set of locations, but
|
||||
specific attributes are only permitted in a subset of those locations. In
|
||||
some cases an attribute that appertains to a given element may be placed in
|
||||
any of several locations with the same meaning. In those cases HotSpot has a
|
||||
preferred location.
|
||||
|
||||
* An attribute that appertains to a function is placed at the beginning of the
|
||||
function's declaration, rather than between the function name and the parameter
|
||||
list.
|
||||
|
||||
Only the following attributes are permitted:
|
||||
|
||||
* `[[noreturn]]`
|
||||
|
||||
The following attributes are expressly forbidden:
|
||||
|
||||
* `[[carries_dependency]]` - Related to `memory_order_consume`.
|
||||
* `[[deprecated]]` - Not relevant in HotSpot code.
|
||||
|
||||
### Additional Permitted Features
|
||||
|
||||
* `constexpr`
|
||||
@@ -1108,10 +1179,6 @@ difficult to deal with and lead to surprises, as can destruction
|
||||
ordering. HotSpot doesn't generally try to cleanup on exit, and
|
||||
running destructors at exit can also lead to problems.
|
||||
|
||||
* `[[deprecated]]` attribute
|
||||
([n3760](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html)) —
|
||||
Not relevant in HotSpot code.
|
||||
|
||||
* Avoid most operator overloading, preferring named functions. When
|
||||
operator overloading is used, ensure the semantics conform to the
|
||||
normal expected behavior of the operation.
|
||||
@@ -1136,9 +1203,6 @@ features that have not yet been discussed.
|
||||
* Member initializers and aggregates
|
||||
([n3653](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html))
|
||||
|
||||
* `[[noreturn]]` attribute
|
||||
([n2761](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf))
|
||||
|
||||
* Rvalue references and move semantics
|
||||
|
||||
[ADL]: https://en.cppreference.com/w/cpp/language/adl
|
||||
|
||||
@@ -494,6 +494,9 @@ allows to pass the tests with intermittent failures. Defaults to 0.</p>
|
||||
<p>Repeat the tests up to a set number of times, stopping at first
|
||||
failure. This helps to reproduce intermittent test failures. Defaults to
|
||||
0.</p>
|
||||
<h4 id="report">REPORT</h4>
|
||||
<p>Use this report style when reporting test results (sent to JTReg as
|
||||
<code>-report</code>). Defaults to <code>files</code>.</p>
|
||||
<h3 id="gtest-keywords">Gtest keywords</h3>
|
||||
<h4 id="repeat">REPEAT</h4>
|
||||
<p>The number of times to repeat the tests
|
||||
@@ -575,12 +578,13 @@ directories.</p>
|
||||
<p>For more notes about the PKCS11 tests, please refer to
|
||||
test/jdk/sun/security/pkcs11/README.</p>
|
||||
<h3 id="client-ui-tests">Client UI Tests</h3>
|
||||
<h4 id="system-key-shortcuts">System key shortcuts</h4>
|
||||
<p>Some Client UI tests use key sequences which may be reserved by the
|
||||
operating system. Usually that causes the test failure. So it is highly
|
||||
recommended to disable system key shortcuts prior testing. The steps to
|
||||
access and disable system key shortcuts for various platforms are
|
||||
provided below.</p>
|
||||
<h4 id="macos">MacOS</h4>
|
||||
<h5 id="macos">macOS</h5>
|
||||
<p>Choose Apple menu; System Preferences, click Keyboard, then click
|
||||
Shortcuts; select or deselect desired shortcut.</p>
|
||||
<p>For example,
|
||||
@@ -591,17 +595,41 @@ operating system. To run the test correctly the default global key
|
||||
shortcut should be disabled using the steps described above, and then
|
||||
deselect "Turn keyboard access on or off" option which is responsible
|
||||
for <code>CTRL + F1</code> combination.</p>
|
||||
<h4 id="linux">Linux</h4>
|
||||
<h5 id="linux">Linux</h5>
|
||||
<p>Open the Activities overview and start typing Settings; Choose
|
||||
Settings, click Devices, then click Keyboard; set or override desired
|
||||
shortcut.</p>
|
||||
<h4 id="windows">Windows</h4>
|
||||
<h5 id="windows">Windows</h5>
|
||||
<p>Type <code>gpedit</code> in the Search and then click Edit group
|
||||
policy; navigate to User Configuration -> Administrative Templates
|
||||
-> Windows Components -> File Explorer; in the right-side pane
|
||||
look for "Turn off Windows key hotkeys" and double click on it; enable
|
||||
or disable hotkeys.</p>
|
||||
<p>Note: restart is required to make the settings take effect.</p>
|
||||
<h4 id="robot-api">Robot API</h4>
|
||||
<p>Most automated Client UI tests use <code>Robot</code> API to control
|
||||
the UI. Usually, the default operating system settings need to be
|
||||
adjusted for Robot to work correctly. The detailed steps how to access
|
||||
and update these settings for different platforms are provided
|
||||
below.</p>
|
||||
<h5 id="macos-1">macOS</h5>
|
||||
<p><code>Robot</code> is not permitted to control your Mac by default
|
||||
since macOS 10.15. To allow it, choose Apple menu -> System Settings,
|
||||
click Privacy & Security; then click Accessibility and ensure the
|
||||
following apps are allowed to control your computer: <em>Java</em> and
|
||||
<em>Terminal</em>. If the tests are run from an IDE, the IDE should be
|
||||
granted this permission too.</p>
|
||||
<h5 id="windows-1">Windows</h5>
|
||||
<p>On Windows if Cygwin terminal is used to run the tests, there is a
|
||||
delay in focus transfer. Usually it causes automated UI test failure. To
|
||||
disable the delay, type <code>regedit</code> in the Search and then
|
||||
select Registry Editor; navigate to the following key:
|
||||
<code>HKEY_CURRENT_USER\Control Panel\Desktop</code>; make sure the
|
||||
<code>ForegroundLockTimeout</code> value is set to 0.</p>
|
||||
<p>Additional information about Client UI tests configuration for
|
||||
various operating systems can be obtained at <a
|
||||
href="https://wiki.openjdk.org/display/ClientLibs/Automated+client+GUI+testing+system+set+up+requirements">Automated
|
||||
client GUI testing system set up requirements</a></p>
|
||||
<h2 id="editing-this-document">Editing this document</h2>
|
||||
<p>If you want to contribute changes to this document, edit
|
||||
<code>doc/testing.md</code> and then run
|
||||
|
||||
@@ -484,6 +484,11 @@ Repeat the tests up to a set number of times, stopping at first failure.
|
||||
This helps to reproduce intermittent test failures.
|
||||
Defaults to 0.
|
||||
|
||||
#### REPORT
|
||||
|
||||
Use this report style when reporting test results (sent to JTReg as `-report`).
|
||||
Defaults to `files`.
|
||||
|
||||
### Gtest keywords
|
||||
|
||||
#### REPEAT
|
||||
@@ -601,12 +606,14 @@ test/jdk/sun/security/pkcs11/README.
|
||||
|
||||
### Client UI Tests
|
||||
|
||||
#### System key shortcuts
|
||||
|
||||
Some Client UI tests use key sequences which may be reserved by the operating
|
||||
system. Usually that causes the test failure. So it is highly recommended to
|
||||
disable system key shortcuts prior testing. The steps to access and disable
|
||||
system key shortcuts for various platforms are provided below.
|
||||
|
||||
#### MacOS
|
||||
##### macOS
|
||||
|
||||
Choose Apple menu; System Preferences, click Keyboard, then click Shortcuts;
|
||||
select or deselect desired shortcut.
|
||||
@@ -619,12 +626,12 @@ test correctly the default global key shortcut should be disabled using the
|
||||
steps described above, and then deselect "Turn keyboard access on or off"
|
||||
option which is responsible for `CTRL + F1` combination.
|
||||
|
||||
#### Linux
|
||||
##### Linux
|
||||
|
||||
Open the Activities overview and start typing Settings; Choose Settings, click
|
||||
Devices, then click Keyboard; set or override desired shortcut.
|
||||
|
||||
#### Windows
|
||||
##### Windows
|
||||
|
||||
Type `gpedit` in the Search and then click Edit group policy; navigate to User
|
||||
Configuration -> Administrative Templates -> Windows Components -> File
|
||||
@@ -633,6 +640,33 @@ double click on it; enable or disable hotkeys.
|
||||
|
||||
Note: restart is required to make the settings take effect.
|
||||
|
||||
#### Robot API
|
||||
|
||||
Most automated Client UI tests use `Robot` API to control the UI. Usually,
|
||||
the default operating system settings need to be adjusted for Robot
|
||||
to work correctly. The detailed steps how to access and update these settings
|
||||
for different platforms are provided below.
|
||||
|
||||
##### macOS
|
||||
|
||||
`Robot` is not permitted to control your Mac by default since
|
||||
macOS 10.15. To allow it, choose Apple menu -> System Settings, click
|
||||
Privacy & Security; then click Accessibility and ensure the following apps are
|
||||
allowed to control your computer: *Java* and *Terminal*. If the tests are run
|
||||
from an IDE, the IDE should be granted this permission too.
|
||||
|
||||
##### Windows
|
||||
|
||||
On Windows if Cygwin terminal is used to run the tests, there is a delay in
|
||||
focus transfer. Usually it causes automated UI test failure. To disable the
|
||||
delay, type `regedit` in the Search and then select Registry Editor; navigate
|
||||
to the following key: `HKEY_CURRENT_USER\Control Panel\Desktop`; make sure
|
||||
the `ForegroundLockTimeout` value is set to 0.
|
||||
|
||||
Additional information about Client UI tests configuration for various operating
|
||||
systems can be obtained at [Automated client GUI testing system set up
|
||||
requirements](https://wiki.openjdk.org/display/ClientLibs/Automated+client+GUI+testing+system+set+up+requirements)
|
||||
|
||||
## Editing this document
|
||||
|
||||
If you want to contribute changes to this document, edit `doc/testing.md` and
|
||||
|
||||
@@ -619,7 +619,7 @@ $(foreach n, 0 1 2, \
|
||||
$(eval specs_bottom_rel_path := $(specs_bottom_rel_path)../) \
|
||||
)
|
||||
|
||||
SPECS_TOP := $(if $(filter true, $(IS_DRAFT)), <header class="draft-header">$(DRAFT_TEXT)</header>)
|
||||
SPECS_TOP := $(if $(filter true, $(IS_DRAFT)), <header class="draft-header" role="banner">$(DRAFT_TEXT)</header>)
|
||||
|
||||
# For all html files in $module/share/specs directories, copy and add the
|
||||
# copyright footer.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2016, 2023, 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
|
||||
@@ -196,11 +196,12 @@ $(eval $(call SetTestOpt,JAVA_OPTIONS,JTREG))
|
||||
$(eval $(call SetTestOpt,JOBS,JTREG))
|
||||
$(eval $(call SetTestOpt,TIMEOUT_FACTOR,JTREG))
|
||||
$(eval $(call SetTestOpt,FAILURE_HANDLER_TIMEOUT,JTREG))
|
||||
$(eval $(call SetTestOpt,REPORT,JTREG))
|
||||
|
||||
$(eval $(call ParseKeywordVariable, JTREG, \
|
||||
SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR FAILURE_HANDLER_TIMEOUT \
|
||||
TEST_MODE ASSERT VERBOSE RETAIN MAX_MEM RUN_PROBLEM_LISTS \
|
||||
RETRY_COUNT REPEAT_COUNT MAX_OUTPUT $(CUSTOM_JTREG_SINGLE_KEYWORDS), \
|
||||
RETRY_COUNT REPEAT_COUNT MAX_OUTPUT REPORT $(CUSTOM_JTREG_SINGLE_KEYWORDS), \
|
||||
STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS KEYWORDS \
|
||||
EXTRA_PROBLEM_LISTS LAUNCHER_OPTIONS \
|
||||
$(CUSTOM_JTREG_STRING_KEYWORDS), \
|
||||
@@ -352,7 +353,7 @@ ExpandJtregPath = \
|
||||
# with test id: dir/Test.java#selection -> Test.java#selection -> .java#selection -> #selection
|
||||
# without: dir/Test.java -> Test.java -> .java -> <<empty string>>
|
||||
TestID = \
|
||||
$(subst .java,,$(suffix $(notdir $1)))
|
||||
$(subst .sh,,$(subst .html,,$(subst .java,,$(suffix $(notdir $1)))))
|
||||
|
||||
# The test id starting with a hash (#testid) will be stripped by all
|
||||
# evals in ParseJtregTestSelectionInner and will be reinserted by calling
|
||||
@@ -745,6 +746,7 @@ define SetupRunJtregTestBody
|
||||
JTREG_RUN_PROBLEM_LISTS ?= false
|
||||
JTREG_RETRY_COUNT ?= 0
|
||||
JTREG_REPEAT_COUNT ?= 0
|
||||
JTREG_REPORT ?= files
|
||||
|
||||
ifneq ($$(JTREG_RETRY_COUNT), 0)
|
||||
ifneq ($$(JTREG_REPEAT_COUNT), 0)
|
||||
@@ -857,6 +859,7 @@ define SetupRunJtregTestBody
|
||||
-dir:$$(JTREG_TOPDIR) \
|
||||
-reportDir:$$($1_TEST_RESULTS_DIR) \
|
||||
-workDir:$$($1_TEST_SUPPORT_DIR) \
|
||||
-report:$${JTREG_REPORT} \
|
||||
$$$${JTREG_STATUS} \
|
||||
$$(JTREG_OPTIONS) \
|
||||
$$(JTREG_FAILURE_HANDLER_OPTIONS) \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -101,6 +101,29 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
|
||||
AUTOCONF_DIR=$TOPDIR/make/autoconf
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
# Setup what kind of build environment type we have (CI or local developer)
|
||||
AC_DEFUN_ONCE([BASIC_SETUP_BUILD_ENV],
|
||||
[
|
||||
if test "x$CI" = "xtrue"; then
|
||||
DEFAULT_BUILD_ENV="ci"
|
||||
AC_MSG_NOTICE([CI environment variable set to $CI])
|
||||
else
|
||||
DEFAULT_BUILD_ENV="dev"
|
||||
fi
|
||||
|
||||
UTIL_ARG_WITH(NAME: build-env, TYPE: literal,
|
||||
RESULT: BUILD_ENV,
|
||||
VALID_VALUES: [auto dev ci], DEFAULT: auto,
|
||||
CHECKING_MSG: [for build environment type],
|
||||
DESC: [select build environment type (affects certain default values)],
|
||||
IF_AUTO: [
|
||||
RESULT=$DEFAULT_BUILD_ENV
|
||||
]
|
||||
)
|
||||
AC_SUBST(BUILD_ENV)
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
# Evaluates platform specific overrides for devkit variables.
|
||||
# $1: Name of variable
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -88,6 +88,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
|
||||
UTIL_LOOKUP_PROGS(GIT, git)
|
||||
UTIL_LOOKUP_PROGS(NICE, nice)
|
||||
UTIL_LOOKUP_PROGS(READLINK, greadlink readlink)
|
||||
UTIL_LOOKUP_PROGS(WHOAMI, whoami)
|
||||
|
||||
# These are only needed on some platforms
|
||||
UTIL_LOOKUP_PROGS(PATHTOOL, cygpath wslpath)
|
||||
@@ -285,7 +286,7 @@ AC_DEFUN([BASIC_CHECK_TAR],
|
||||
if test "x$TAR_TYPE" = "xgnu"; then
|
||||
TAR_INCLUDE_PARAM="T"
|
||||
TAR_SUPPORTS_TRANSFORM="true"
|
||||
elif test "x$TAR_TYPE" = "aix"; then
|
||||
elif test "x$TAR_TYPE" = "xaix"; then
|
||||
# -L InputList of aix tar: name of file listing the files and directories
|
||||
# that need to be archived or extracted
|
||||
TAR_INCLUDE_PARAM="L"
|
||||
@@ -433,7 +434,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_PANDOC],
|
||||
|
||||
if test "x$PANDOC" != x; then
|
||||
AC_MSG_CHECKING([for pandoc version])
|
||||
PANDOC_VERSION=`$PANDOC --version 2>&1 | $HEAD -1 | $CUT -d " " -f 2`
|
||||
PANDOC_VERSION=`$PANDOC --version 2>&1 | $TR -d '\r' | $HEAD -1 | $CUT -d " " -f 2`
|
||||
AC_MSG_RESULT([$PANDOC_VERSION])
|
||||
|
||||
if test "x$PANDOC_VERSION" != x$RECOMMENDED_PANDOC_VERSION; then
|
||||
@@ -442,7 +443,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_PANDOC],
|
||||
|
||||
PANDOC_MARKDOWN_FLAG="markdown"
|
||||
AC_MSG_CHECKING([if the pandoc smart extension needs to be disabled for markdown])
|
||||
if $PANDOC --list-extensions | $GREP -q '\+smart'; then
|
||||
if $PANDOC --list-extensions | $GREP -q '+smart'; then
|
||||
AC_MSG_RESULT([yes])
|
||||
PANDOC_MARKDOWN_FLAG="markdown-smart"
|
||||
else
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -382,7 +382,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
|
||||
# Finally, set some other options...
|
||||
|
||||
# Determine if the boot jdk jar supports the --date option
|
||||
if $JAR --help 2>&1 | $GREP -q "\-\-date=TIMESTAMP"; then
|
||||
if $JAR --help 2>&1 | $GREP -q -e "--date=TIMESTAMP"; then
|
||||
BOOT_JDK_JAR_SUPPORTS_DATE=true
|
||||
else
|
||||
BOOT_JDK_JAR_SUPPORTS_DATE=false
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
86
make/autoconf/build-aux/config.guess
vendored
86
make/autoconf/build-aux/config.guess
vendored
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2021, Azul Systems, Inc. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
@@ -29,16 +29,27 @@
|
||||
# and fix the broken property, if needed.
|
||||
|
||||
DIR=`dirname $0`
|
||||
OUT=`. $DIR/autoconf-config.guess`
|
||||
OUT=`. $DIR/autoconf-config.guess 2> /dev/null`
|
||||
|
||||
# Detect C library.
|
||||
# Use '-gnu' suffix on systems that use glibc.
|
||||
# Use '-musl' suffix on systems that use the musl libc.
|
||||
echo $OUT | grep -- -linux- > /dev/null 2> /dev/null
|
||||
if test $? = 0; then
|
||||
libc_vendor=`ldd --version 2>&1 | sed -n '1s/.*\(musl\).*/\1/p'`
|
||||
if [ x"${libc_vendor}" = x"musl" ]; then
|
||||
OUT=`echo $OUT | sed 's/-gnu/-musl/'`
|
||||
# Handle some cases that autoconf-config.guess is not capable of
|
||||
if [ "x$OUT" = x ]; then
|
||||
if [ `uname -s` = Linux ]; then
|
||||
# Test and fix little endian MIPS.
|
||||
if [ `uname -m` = mipsel ]; then
|
||||
OUT=mipsel-unknown-linux-gnu
|
||||
fi
|
||||
# Test and fix cygwin machine arch .x86_64
|
||||
elif [[ `uname -s` = CYGWIN* ]]; then
|
||||
if [ `uname -m` = ".x86_64" ]; then
|
||||
OUT=x86_64-unknown-cygwin
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "x$OUT" = x ]; then
|
||||
# Run autoconf-config.guess again to get the error message.
|
||||
. $DIR/autoconf-config.guess > /dev/null
|
||||
else
|
||||
printf "guessed by custom config.guess... " >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -57,11 +68,11 @@ if test $? = 0; then
|
||||
fi
|
||||
|
||||
# Test and fix wsl
|
||||
echo $OUT | grep unknown-linux-gnu > /dev/null 2> /dev/null
|
||||
echo $OUT | grep '\(unknown\|pc\)-linux-gnu' > /dev/null 2> /dev/null
|
||||
if test $? = 0; then
|
||||
uname -r | grep -i microsoft > /dev/null 2> /dev/null
|
||||
if test $? = 0; then
|
||||
OUT=`echo $OUT | sed -e 's/unknown-linux-gnu/pc-wsl/'`
|
||||
OUT=`echo $OUT | sed -e 's/\(unknown\|pc\)-linux-gnu/pc-wsl/'`
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -81,57 +92,6 @@ if test $? = 0; then
|
||||
OUT=powerpc$KERNEL_BITMODE`echo $OUT | sed -e 's/[^-]*//'`
|
||||
fi
|
||||
|
||||
# Test and fix little endian PowerPC64.
|
||||
# TODO: should be handled by autoconf-config.guess.
|
||||
if [ "x$OUT" = x ]; then
|
||||
if [ `uname -m` = ppc64le ]; then
|
||||
if [ `uname -s` = Linux ]; then
|
||||
OUT=powerpc64le-unknown-linux-gnu
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Test and fix little endian MIPS.
|
||||
if [ "x$OUT" = x ]; then
|
||||
if [ `uname -s` = Linux ]; then
|
||||
if [ `uname -m` = mipsel ]; then
|
||||
OUT=mipsel-unknown-linux-gnu
|
||||
elif [ `uname -m` = mips64el ]; then
|
||||
OUT=mips64el-unknown-linux-gnu
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Test and fix LoongArch64.
|
||||
if [ "x$OUT" = x ]; then
|
||||
if [ `uname -s` = Linux ]; then
|
||||
if [ `uname -m` = loongarch64 ]; then
|
||||
OUT=loongarch64-unknown-linux-gnu
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Test and fix RISC-V.
|
||||
if [ "x$OUT" = x ]; then
|
||||
if [ `uname -s` = Linux ]; then
|
||||
if [ `uname -m` = riscv64 ]; then
|
||||
OUT=riscv64-unknown-linux-gnu
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Test and fix cpu on macos-aarch64, uname -p reports arm, buildsys expects aarch64
|
||||
echo $OUT | grep arm-apple-darwin > /dev/null 2> /dev/null
|
||||
if test $? != 0; then
|
||||
# The GNU version of uname may be on the PATH which reports arm64 instead
|
||||
echo $OUT | grep arm64-apple-darwin > /dev/null 2> /dev/null
|
||||
fi
|
||||
if test $? = 0; then
|
||||
if [ `uname -m` = arm64 ]; then
|
||||
OUT=aarch64`echo $OUT | sed -e 's/[^-]*//'`
|
||||
fi
|
||||
fi
|
||||
|
||||
# Test and fix cpu on Macosx when C preprocessor is not on the path
|
||||
echo $OUT | grep i386-apple-darwin > /dev/null 2> /dev/null
|
||||
if test $? = 0; then
|
||||
|
||||
34
make/autoconf/build-aux/config.sub
vendored
34
make/autoconf/build-aux/config.sub
vendored
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2023, 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,46 +29,16 @@
|
||||
|
||||
DIR=`dirname $0`
|
||||
|
||||
if echo $* | grep linux-musl >/dev/null ; then
|
||||
echo $*
|
||||
exit
|
||||
fi
|
||||
|
||||
# Allow wsl
|
||||
if echo $* | grep pc-wsl >/dev/null ; then
|
||||
echo $*
|
||||
exit
|
||||
fi
|
||||
|
||||
# Allow msys2
|
||||
if echo $* | grep pc-msys >/dev/null ; then
|
||||
echo $*
|
||||
exit
|
||||
fi
|
||||
|
||||
# Canonicalize for riscv which autoconf-config.sub doesn't handle
|
||||
if echo $* | grep '^riscv\(32\|64\)-linux' >/dev/null ; then
|
||||
result=`echo $@ | sed 's/linux/unknown-linux/'`
|
||||
echo $result
|
||||
exit
|
||||
fi
|
||||
|
||||
# Filter out everything that doesn't begin with "aarch64-"
|
||||
if ! echo $* | grep '^aarch64-' >/dev/null ; then
|
||||
. $DIR/autoconf-config.sub "$@"
|
||||
# autoconf-config.sub exits, so we never reach here, but just in
|
||||
# case we do:
|
||||
exit
|
||||
fi
|
||||
|
||||
while test $# -gt 0 ; do
|
||||
case $1 in
|
||||
-- ) # Stop option processing
|
||||
shift; break ;;
|
||||
aarch64-* )
|
||||
config=`echo $1 | sed 's/^aarch64-/arm-/'`
|
||||
sub_args="$sub_args $config"
|
||||
shift; ;;
|
||||
- ) # Use stdin as input.
|
||||
sub_args="$sub_args $1"
|
||||
shift; break ;;
|
||||
@@ -81,7 +51,5 @@ done
|
||||
result=`. $DIR/autoconf-config.sub $sub_args "$@"`
|
||||
exitcode=$?
|
||||
|
||||
result=`echo $result | sed "s/^arm-/aarch64-/"`
|
||||
|
||||
echo $result
|
||||
exit $exitcode
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -26,39 +26,29 @@
|
||||
AC_DEFUN([BPERF_CHECK_CORES],
|
||||
[
|
||||
AC_MSG_CHECKING([for number of cores])
|
||||
NUM_CORES=1
|
||||
FOUND_CORES=no
|
||||
|
||||
if test -f /proc/cpuinfo; then
|
||||
# Looks like a Linux (or cygwin) system
|
||||
NUM_CORES=`cat /proc/cpuinfo | grep -c processor`
|
||||
NUM_CORES=`cat /proc/cpuinfo | grep -cw processor`
|
||||
if test "$NUM_CORES" -eq "0"; then
|
||||
NUM_CORES=`cat /proc/cpuinfo | grep -c ^CPU`
|
||||
fi
|
||||
if test "$NUM_CORES" -ne "0"; then
|
||||
FOUND_CORES=yes
|
||||
fi
|
||||
elif test -x /usr/sbin/sysctl; then
|
||||
# Looks like a MacOSX system
|
||||
NUM_CORES=`/usr/sbin/sysctl -n hw.ncpu`
|
||||
FOUND_CORES=yes
|
||||
elif test "x$OPENJDK_BUILD_OS" = xaix ; then
|
||||
NUM_LCPU=`lparstat -m 2> /dev/null | $GREP -o "lcpu=[[0-9]]*" | $CUT -d "=" -f 2`
|
||||
if test -n "$NUM_LCPU"; then
|
||||
NUM_CORES=$NUM_LCPU
|
||||
FOUND_CORES=yes
|
||||
fi
|
||||
NUM_CORES=`lparstat -m 2> /dev/null | $GREP -o "lcpu=[[0-9]]*" | $CUT -d "=" -f 2`
|
||||
elif test -n "$NUMBER_OF_PROCESSORS"; then
|
||||
# On windows, look in the env
|
||||
NUM_CORES=$NUMBER_OF_PROCESSORS
|
||||
FOUND_CORES=yes
|
||||
fi
|
||||
|
||||
if test "x$FOUND_CORES" = xyes; then
|
||||
AC_MSG_RESULT([$NUM_CORES])
|
||||
else
|
||||
if test "$NUM_CORES" -eq "0"; then
|
||||
NUM_CORES=1
|
||||
AC_MSG_RESULT([could not detect number of cores, defaulting to 1])
|
||||
AC_MSG_WARN([This will disable all parallelism from build!])
|
||||
else
|
||||
AC_MSG_RESULT([$NUM_CORES])
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -86,6 +86,7 @@ PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET
|
||||
|
||||
# Continue setting up basic stuff. Most remaining code require fundamental tools.
|
||||
BASIC_SETUP_PATHS
|
||||
BASIC_SETUP_BUILD_ENV
|
||||
|
||||
# Check if it's a pure open build or if custom sources are to be used.
|
||||
JDKOPT_SETUP_OPEN_OR_CUSTOM
|
||||
@@ -215,6 +216,12 @@ JDKOPT_SETUP_CODE_COVERAGE
|
||||
# AddressSanitizer
|
||||
JDKOPT_SETUP_ADDRESS_SANITIZER
|
||||
|
||||
# UndefinedBehaviorSanitizer
|
||||
JDKOPT_SETUP_UNDEFINED_BEHAVIOR_SANITIZER
|
||||
|
||||
# LeakSanitizer
|
||||
JDKOPT_SETUP_LEAK_SANITIZER
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Check dependencies for external and internal libraries.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -410,10 +410,56 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
|
||||
#
|
||||
AC_DEFUN_ONCE([JDKOPT_SETUP_ADDRESS_SANITIZER],
|
||||
[
|
||||
UTIL_ARG_ENABLE(NAME: asan, DEFAULT: false,
|
||||
UTIL_ARG_ENABLE(NAME: asan, DEFAULT: false, RESULT: ASAN_ENABLED,
|
||||
DESC: [enable AddressSanitizer],
|
||||
CHECK_AVAILABLE: [
|
||||
AC_MSG_CHECKING([if AddressSanitizer (asan) is available])
|
||||
if test "x$TOOLCHAIN_TYPE" = "xgcc" ||
|
||||
test "x$TOOLCHAIN_TYPE" = "xclang" ||
|
||||
test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
AVAILABLE=false
|
||||
fi
|
||||
],
|
||||
IF_ENABLED: [
|
||||
if test "x$TOOLCHAIN_TYPE" = "xgcc" ||
|
||||
test "x$TOOLCHAIN_TYPE" = "xclang"; then
|
||||
# ASan is simply incompatible with gcc -Wstringop-truncation. See
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85650
|
||||
# It's harmless to be suppressed in clang as well.
|
||||
ASAN_CFLAGS="-fsanitize=address -Wno-stringop-truncation -fno-omit-frame-pointer -fno-common -DADDRESS_SANITIZER"
|
||||
ASAN_LDFLAGS="-fsanitize=address"
|
||||
elif test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
|
||||
# -Oy- is equivalent to -fno-omit-frame-pointer in GCC/Clang.
|
||||
ASAN_CFLAGS="-fsanitize=address -Oy- -DADDRESS_SANITIZER"
|
||||
# MSVC produces a warning if you pass -fsanitize=address to the linker. It also complains
|
||||
$ if -DEBUG is not passed to the linker when building with ASan.
|
||||
ASAN_LDFLAGS="-debug"
|
||||
fi
|
||||
JVM_CFLAGS="$JVM_CFLAGS $ASAN_CFLAGS"
|
||||
JVM_LDFLAGS="$JVM_LDFLAGS $ASAN_LDFLAGS"
|
||||
CFLAGS_JDKLIB="$CFLAGS_JDKLIB $ASAN_CFLAGS"
|
||||
CFLAGS_JDKEXE="$CFLAGS_JDKEXE $ASAN_CFLAGS"
|
||||
CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $ASAN_CFLAGS"
|
||||
CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $ASAN_CFLAGS"
|
||||
LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $ASAN_LDFLAGS"
|
||||
LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $ASAN_LDFLAGS"
|
||||
])
|
||||
AC_SUBST(ASAN_ENABLED)
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# LeakSanitizer
|
||||
#
|
||||
AC_DEFUN_ONCE([JDKOPT_SETUP_LEAK_SANITIZER],
|
||||
[
|
||||
UTIL_ARG_ENABLE(NAME: lsan, DEFAULT: false, RESULT: LSAN_ENABLED,
|
||||
DESC: [enable LeakSanitizer],
|
||||
CHECK_AVAILABLE: [
|
||||
AC_MSG_CHECKING([if LeakSanitizer (lsan) is available])
|
||||
if test "x$TOOLCHAIN_TYPE" = "xgcc" ||
|
||||
test "x$TOOLCHAIN_TYPE" = "xclang"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
@@ -423,26 +469,60 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_ADDRESS_SANITIZER],
|
||||
fi
|
||||
],
|
||||
IF_ENABLED: [
|
||||
# ASan is simply incompatible with gcc -Wstringop-truncation. See
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85650
|
||||
# It's harmless to be suppressed in clang as well.
|
||||
ASAN_CFLAGS="-fsanitize=address -Wno-stringop-truncation -fno-omit-frame-pointer"
|
||||
ASAN_LDFLAGS="-fsanitize=address"
|
||||
JVM_CFLAGS="$JVM_CFLAGS $ASAN_CFLAGS"
|
||||
JVM_LDFLAGS="$JVM_LDFLAGS $ASAN_LDFLAGS"
|
||||
CFLAGS_JDKLIB="$CFLAGS_JDKLIB $ASAN_CFLAGS"
|
||||
CFLAGS_JDKEXE="$CFLAGS_JDKEXE $ASAN_CFLAGS"
|
||||
CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $ASAN_CFLAGS"
|
||||
CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $ASAN_CFLAGS"
|
||||
LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $ASAN_LDFLAGS"
|
||||
LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $ASAN_LDFLAGS"
|
||||
ASAN_ENABLED="yes"
|
||||
],
|
||||
IF_DISABLED: [
|
||||
ASAN_ENABLED="no"
|
||||
LSAN_CFLAGS="-fsanitize=leak -fno-omit-frame-pointer -DLEAK_SANITIZER"
|
||||
LSAN_LDFLAGS="-fsanitize=leak"
|
||||
JVM_CFLAGS="$JVM_CFLAGS $LSAN_CFLAGS"
|
||||
JVM_LDFLAGS="$JVM_LDFLAGS $LSAN_LDFLAGS"
|
||||
CFLAGS_JDKLIB="$CFLAGS_JDKLIB $LSAN_CFLAGS"
|
||||
CFLAGS_JDKEXE="$CFLAGS_JDKEXE $LSAN_CFLAGS"
|
||||
CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $LSAN_CFLAGS"
|
||||
CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $LSAN_CFLAGS"
|
||||
LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $LSAN_LDFLAGS"
|
||||
LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $LSAN_LDFLAGS"
|
||||
])
|
||||
AC_SUBST(LSAN_ENABLED)
|
||||
])
|
||||
|
||||
AC_SUBST(ASAN_ENABLED)
|
||||
###############################################################################
|
||||
#
|
||||
# UndefinedBehaviorSanitizer
|
||||
#
|
||||
AC_DEFUN_ONCE([JDKOPT_SETUP_UNDEFINED_BEHAVIOR_SANITIZER],
|
||||
[
|
||||
# GCC reports lots of likely false positives for stringop-truncation and format-overflow.
|
||||
# Silence them for now.
|
||||
UBSAN_CHECKS="-fsanitize=undefined -fsanitize=float-divide-by-zero -fno-sanitize=shift-base"
|
||||
UBSAN_CFLAGS="$UBSAN_CHECKS -Wno-stringop-truncation -Wno-format-overflow -fno-omit-frame-pointer -DUNDEFINED_BEHAVIOR_SANITIZER"
|
||||
UBSAN_LDFLAGS="$UBSAN_CHECKS"
|
||||
UTIL_ARG_ENABLE(NAME: ubsan, DEFAULT: false, RESULT: UBSAN_ENABLED,
|
||||
DESC: [enable UndefinedBehaviorSanitizer],
|
||||
CHECK_AVAILABLE: [
|
||||
AC_MSG_CHECKING([if UndefinedBehaviorSanitizer (ubsan) is available])
|
||||
if test "x$TOOLCHAIN_TYPE" = "xgcc" ||
|
||||
test "x$TOOLCHAIN_TYPE" = "xclang"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
AVAILABLE=false
|
||||
fi
|
||||
],
|
||||
IF_ENABLED: [
|
||||
JVM_CFLAGS="$JVM_CFLAGS $UBSAN_CFLAGS"
|
||||
JVM_LDFLAGS="$JVM_LDFLAGS $UBSAN_LDFLAGS"
|
||||
CFLAGS_JDKLIB="$CFLAGS_JDKLIB $UBSAN_CFLAGS"
|
||||
CFLAGS_JDKEXE="$CFLAGS_JDKEXE $UBSAN_CFLAGS"
|
||||
CXXFLAGS_JDKLIB="$CXXFLAGS_JDKLIB $UBSAN_CFLAGS"
|
||||
CXXFLAGS_JDKEXE="$CXXFLAGS_JDKEXE $UBSAN_CFLAGS"
|
||||
LDFLAGS_JDKLIB="$LDFLAGS_JDKLIB $UBSAN_LDFLAGS"
|
||||
LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE $UBSAN_LDFLAGS"
|
||||
])
|
||||
if test "x$UBSAN_ENABLED" = xfalse; then
|
||||
UBSAN_CFLAGS=""
|
||||
UBSAN_LDFLAGS=""
|
||||
fi
|
||||
AC_SUBST(UBSAN_CFLAGS)
|
||||
AC_SUBST(UBSAN_LDFLAGS)
|
||||
AC_SUBST(UBSAN_ENABLED)
|
||||
])
|
||||
|
||||
################################################################################
|
||||
@@ -742,7 +822,7 @@ AC_DEFUN([JDKOPT_CHECK_CODESIGN_PARAMS],
|
||||
$RM "$CODESIGN_TESTFILE"
|
||||
$TOUCH "$CODESIGN_TESTFILE"
|
||||
CODESIGN_SUCCESS=false
|
||||
$CODESIGN $PARAMS "$CODESIGN_TESTFILE" 2>&AS_MESSAGE_LOG_FD \
|
||||
eval \"$CODESIGN\" $PARAMS \"$CODESIGN_TESTFILE\" 2>&AS_MESSAGE_LOG_FD \
|
||||
>&AS_MESSAGE_LOG_FD && CODESIGN_SUCCESS=true
|
||||
$RM "$CODESIGN_TESTFILE"
|
||||
AC_MSG_CHECKING([$MESSAGE])
|
||||
@@ -755,7 +835,7 @@ AC_DEFUN([JDKOPT_CHECK_CODESIGN_PARAMS],
|
||||
|
||||
AC_DEFUN([JDKOPT_CHECK_CODESIGN_HARDENED],
|
||||
[
|
||||
JDKOPT_CHECK_CODESIGN_PARAMS([-s "$MACOSX_CODESIGN_IDENTITY" --option runtime],
|
||||
JDKOPT_CHECK_CODESIGN_PARAMS([-s \"$MACOSX_CODESIGN_IDENTITY\" --option runtime],
|
||||
[if codesign with hardened runtime is possible])
|
||||
])
|
||||
|
||||
@@ -781,7 +861,7 @@ AC_DEFUN([JDKOPT_SETUP_MACOSX_SIGNING],
|
||||
|
||||
# Check for user provided code signing identity.
|
||||
UTIL_ARG_WITH(NAME: macosx-codesign-identity, TYPE: string,
|
||||
DEFAULT: openjdk_codesign, CHECK_VALUE: UTIL_CHECK_STRING_NON_EMPTY,
|
||||
DEFAULT: openjdk_codesign, CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY],
|
||||
DESC: [specify the macosx code signing identity],
|
||||
CHECKING_MSG: [for macosx code signing identity]
|
||||
)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2023, 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
|
||||
@@ -69,149 +69,137 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
||||
AC_SUBST(JDK_RC_PLATFORM_NAME)
|
||||
AC_SUBST(HOTSPOT_VM_DISTRO)
|
||||
|
||||
# Setup username (for use in adhoc version strings etc)
|
||||
AC_ARG_WITH([build-user], [AS_HELP_STRING([--with-build-user],
|
||||
[build username to use in version strings])])
|
||||
if test "x$with_build_user" = xyes || test "x$with_build_user" = xno; then
|
||||
AC_MSG_ERROR([--with-build-user must have a value])
|
||||
elif test "x$with_build_user" != x; then
|
||||
USERNAME="$with_build_user"
|
||||
else
|
||||
# Outer [ ] to quote m4.
|
||||
[ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ]
|
||||
# Note: UTIL_ARG_WITH treats empty strings as valid values when OPTIONAL is false!
|
||||
|
||||
# Outer [ ] to quote m4.
|
||||
[ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ]
|
||||
|
||||
# $USER may be not defined in dockers, so try to check with $WHOAMI
|
||||
if test "x$USERNAME" = x && test "x$WHOAMI" != x; then
|
||||
[ USERNAME=`$WHOAMI | $TR -d -c '[a-z][A-Z][0-9]'` ]
|
||||
fi
|
||||
|
||||
# Setup username (for use in adhoc version strings etc)
|
||||
UTIL_ARG_WITH(NAME: build-user, TYPE: string,
|
||||
RESULT: USERNAME,
|
||||
DEFAULT: $USERNAME,
|
||||
DESC: [build username to use in version strings],
|
||||
DEFAULT_DESC: [current username, sanitized],
|
||||
CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY])
|
||||
AC_SUBST(USERNAME)
|
||||
|
||||
# Set the JDK RC name
|
||||
AC_ARG_WITH(jdk-rc-name, [AS_HELP_STRING([--with-jdk-rc-name],
|
||||
[Set JDK RC name. This is used for FileDescription and ProductName properties
|
||||
of MS Windows binaries. @<:@not specified@:>@])])
|
||||
if test "x$with_jdk_rc_name" = xyes || test "x$with_jdk_rc_name" = xno; then
|
||||
AC_MSG_ERROR([--with-jdk-rc-name must have a value])
|
||||
elif [ ! [[ $with_jdk_rc_name =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-jdk-rc-name contains non-printing characters: $with_jdk_rc_name])
|
||||
elif test "x$with_jdk_rc_name" != x; then
|
||||
# Set JDK_RC_NAME to a custom value if '--with-jdk-rc-name' was used and is not empty.
|
||||
JDK_RC_NAME="$with_jdk_rc_name"
|
||||
else
|
||||
# Otherwise calculate from "branding.conf" included above.
|
||||
JDK_RC_NAME="$PRODUCT_NAME $JDK_RC_PLATFORM_NAME"
|
||||
fi
|
||||
# Otherwise calculate from "branding.conf" included above.
|
||||
UTIL_ARG_WITH(NAME: jdk-rc-name, TYPE: string,
|
||||
DEFAULT: $PRODUCT_NAME $JDK_RC_PLATFORM_NAME,
|
||||
DESC: [Set JDK RC name. This is used for FileDescription and ProductName
|
||||
properties of MS Windows binaries.],
|
||||
DEFAULT_DESC: [from branding.conf],
|
||||
CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY_PRINTABLE])
|
||||
AC_SUBST(JDK_RC_NAME)
|
||||
|
||||
# The vendor name, if any
|
||||
AC_ARG_WITH(vendor-name, [AS_HELP_STRING([--with-vendor-name],
|
||||
[Set vendor name. Among others, used to set the 'java.vendor'
|
||||
and 'java.vm.vendor' system properties. @<:@not specified@:>@])])
|
||||
if test "x$with_vendor_name" = xyes || test "x$with_vendor_name" = xno; then
|
||||
AC_MSG_ERROR([--with-vendor-name must have a value])
|
||||
elif [ ! [[ $with_vendor_name =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-vendor-name contains non-printing characters: $with_vendor_name])
|
||||
elif test "x$with_vendor_name" != x; then
|
||||
# Only set COMPANY_NAME if '--with-vendor-name' was used and is not empty.
|
||||
# Otherwise we will use the value from "branding.conf" included above.
|
||||
COMPANY_NAME="$with_vendor_name"
|
||||
fi
|
||||
# Only set COMPANY_NAME if '--with-vendor-name' was used and is not empty.
|
||||
# Otherwise we will use the value from "branding.conf" included above.
|
||||
UTIL_ARG_WITH(NAME: vendor-name, TYPE: string,
|
||||
RESULT: COMPANY_NAME,
|
||||
DEFAULT: $COMPANY_NAME,
|
||||
DESC: [Set vendor name. Among others, used to set the 'java.vendor'
|
||||
and 'java.vm.vendor' system properties.],
|
||||
DEFAULT_DESC: [from branding.conf],
|
||||
CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY_PRINTABLE])
|
||||
AC_SUBST(COMPANY_NAME)
|
||||
|
||||
# The vendor URL, if any
|
||||
AC_ARG_WITH(vendor-url, [AS_HELP_STRING([--with-vendor-url],
|
||||
[Set the 'java.vendor.url' system property @<:@not specified@:>@])])
|
||||
if test "x$with_vendor_url" = xyes || test "x$with_vendor_url" = xno; then
|
||||
AC_MSG_ERROR([--with-vendor-url must have a value])
|
||||
elif [ ! [[ $with_vendor_url =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-vendor-url contains non-printing characters: $with_vendor_url])
|
||||
elif test "x$with_vendor_url" != x; then
|
||||
# Only set VENDOR_URL if '--with-vendor-url' was used and is not empty.
|
||||
# Otherwise we will use the value from "branding.conf" included above.
|
||||
VENDOR_URL="$with_vendor_url"
|
||||
fi
|
||||
# Only set VENDOR_URL if '--with-vendor-url' was used and is not empty.
|
||||
# Otherwise we will use the value from "branding.conf" included above.
|
||||
UTIL_ARG_WITH(NAME: vendor-url, TYPE: string,
|
||||
DEFAULT: $VENDOR_URL,
|
||||
DESC: [Set the 'java.vendor.url' system property],
|
||||
DEFAULT_DESC: [from branding.conf],
|
||||
CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY_PRINTABLE])
|
||||
AC_SUBST(VENDOR_URL)
|
||||
|
||||
# The vendor bug URL, if any
|
||||
AC_ARG_WITH(vendor-bug-url, [AS_HELP_STRING([--with-vendor-bug-url],
|
||||
[Set the 'java.vendor.url.bug' system property @<:@not specified@:>@])])
|
||||
if test "x$with_vendor_bug_url" = xyes || test "x$with_vendor_bug_url" = xno; then
|
||||
AC_MSG_ERROR([--with-vendor-bug-url must have a value])
|
||||
elif [ ! [[ $with_vendor_bug_url =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-vendor-bug-url contains non-printing characters: $with_vendor_bug_url])
|
||||
elif test "x$with_vendor_bug_url" != x; then
|
||||
# Only set VENDOR_URL_BUG if '--with-vendor-bug-url' was used and is not empty.
|
||||
# Otherwise we will use the value from "branding.conf" included above.
|
||||
VENDOR_URL_BUG="$with_vendor_bug_url"
|
||||
fi
|
||||
# Only set VENDOR_URL_BUG if '--with-vendor-bug-url' was used and is not empty.
|
||||
# Otherwise we will use the value from "branding.conf" included above.
|
||||
UTIL_ARG_WITH(NAME: vendor-bug-url, TYPE: string,
|
||||
RESULT: VENDOR_URL_BUG,
|
||||
DEFAULT: $VENDOR_URL_BUG,
|
||||
DESC: [Set the 'java.vendor.url.bug' system property],
|
||||
DEFAULT_DESC: [from branding.conf],
|
||||
CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY_PRINTABLE])
|
||||
AC_SUBST(VENDOR_URL_BUG)
|
||||
|
||||
# The vendor VM bug URL, if any
|
||||
AC_ARG_WITH(vendor-vm-bug-url, [AS_HELP_STRING([--with-vendor-vm-bug-url],
|
||||
[Sets the bug URL which will be displayed when the VM crashes @<:@not specified@:>@])])
|
||||
if test "x$with_vendor_vm_bug_url" = xyes || test "x$with_vendor_vm_bug_url" = xno; then
|
||||
AC_MSG_ERROR([--with-vendor-vm-bug-url must have a value])
|
||||
elif [ ! [[ $with_vendor_vm_bug_url =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-vendor-vm-bug-url contains non-printing characters: $with_vendor_vm_bug_url])
|
||||
elif test "x$with_vendor_vm_bug_url" != x; then
|
||||
# Only set VENDOR_URL_VM_BUG if '--with-vendor-vm-bug-url' was used and is not empty.
|
||||
# Otherwise we will use the value from "branding.conf" included above.
|
||||
VENDOR_URL_VM_BUG="$with_vendor_vm_bug_url"
|
||||
fi
|
||||
# Only set VENDOR_URL_VM_BUG if '--with-vendor-vm-bug-url' was used and is not empty.
|
||||
# Otherwise we will use the value from "branding.conf" included above.
|
||||
UTIL_ARG_WITH(NAME: vendor-vm-bug-url, TYPE: string,
|
||||
RESULT: VENDOR_URL_VM_BUG,
|
||||
DEFAULT: $VENDOR_URL_VM_BUG,
|
||||
DESC: [Sets the bug URL which will be displayed when the VM crashes],
|
||||
DEFAULT_DESC: [from branding.conf],
|
||||
CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY_PRINTABLE])
|
||||
AC_SUBST(VENDOR_URL_VM_BUG)
|
||||
|
||||
# Override version from arguments
|
||||
|
||||
# If --with-version-string is set, process it first. It is possible to
|
||||
# override parts with more specific flags, since these are processed later.
|
||||
AC_ARG_WITH(version-string, [AS_HELP_STRING([--with-version-string],
|
||||
[Set version string @<:@calculated@:>@])])
|
||||
if test "x$with_version_string" = xyes || test "x$with_version_string" = xno; then
|
||||
AC_MSG_ERROR([--with-version-string must have a value])
|
||||
elif test "x$with_version_string" != x; then
|
||||
# Additional [] needed to keep m4 from mangling shell constructs.
|
||||
if [ [[ $with_version_string =~ ^([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(-([a-zA-Z0-9]+))?(((\+)([0-9]*))?(-([-a-zA-Z0-9.]+))?)?$ ]] ]; then
|
||||
VERSION_FEATURE=${BASH_REMATCH[[1]]}
|
||||
VERSION_INTERIM=${BASH_REMATCH[[3]]}
|
||||
VERSION_UPDATE=${BASH_REMATCH[[5]]}
|
||||
VERSION_PATCH=${BASH_REMATCH[[7]]}
|
||||
VERSION_EXTRA1=${BASH_REMATCH[[9]]}
|
||||
VERSION_EXTRA2=${BASH_REMATCH[[11]]}
|
||||
VERSION_EXTRA3=${BASH_REMATCH[[13]]}
|
||||
VERSION_PRE=${BASH_REMATCH[[15]]}
|
||||
version_plus_separator=${BASH_REMATCH[[18]]}
|
||||
VERSION_BUILD=${BASH_REMATCH[[19]]}
|
||||
VERSION_OPT=${BASH_REMATCH[[21]]}
|
||||
# Unspecified numerical fields are interpreted as 0.
|
||||
if test "x$VERSION_INTERIM" = x; then
|
||||
VERSION_INTERIM=0
|
||||
UTIL_ARG_WITH(NAME: version-string, TYPE: string,
|
||||
DEFAULT: [],
|
||||
DESC: [Set version string],
|
||||
DEFAULT_DESC: [calculated],
|
||||
CHECK_VALUE: [
|
||||
if test "x$RESULT" != x; then
|
||||
# Additional [] needed to keep m4 from mangling shell constructs.
|
||||
if [ [[ $RESULT =~ ^([0-9]+)(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(\.([0-9]+))?(-([a-zA-Z0-9]+))?(((\+)([0-9]*))?(-([-a-zA-Z0-9.]+))?)?$ ]] ]; then
|
||||
VERSION_FEATURE=${BASH_REMATCH[[1]]}
|
||||
VERSION_INTERIM=${BASH_REMATCH[[3]]}
|
||||
VERSION_UPDATE=${BASH_REMATCH[[5]]}
|
||||
VERSION_PATCH=${BASH_REMATCH[[7]]}
|
||||
VERSION_EXTRA1=${BASH_REMATCH[[9]]}
|
||||
VERSION_EXTRA2=${BASH_REMATCH[[11]]}
|
||||
VERSION_EXTRA3=${BASH_REMATCH[[13]]}
|
||||
VERSION_PRE=${BASH_REMATCH[[15]]}
|
||||
version_plus_separator=${BASH_REMATCH[[18]]}
|
||||
VERSION_BUILD=${BASH_REMATCH[[19]]}
|
||||
VERSION_OPT=${BASH_REMATCH[[21]]}
|
||||
# Unspecified numerical fields are interpreted as 0.
|
||||
if test "x$VERSION_INTERIM" = x; then
|
||||
VERSION_INTERIM=0
|
||||
fi
|
||||
if test "x$VERSION_UPDATE" = x; then
|
||||
VERSION_UPDATE=0
|
||||
fi
|
||||
if test "x$VERSION_PATCH" = x; then
|
||||
VERSION_PATCH=0
|
||||
fi
|
||||
if test "x$VERSION_EXTRA1" = x; then
|
||||
VERSION_EXTRA1=0
|
||||
fi
|
||||
if test "x$VERSION_EXTRA2" = x; then
|
||||
VERSION_EXTRA2=0
|
||||
fi
|
||||
if test "x$VERSION_EXTRA3" = x; then
|
||||
VERSION_EXTRA3=0
|
||||
fi
|
||||
if test "x$version_plus_separator" != x \
|
||||
&& test "x$VERSION_BUILD$VERSION_OPT" = x; then
|
||||
AC_MSG_ERROR([Version string contains + but both 'BUILD' and 'OPT' are missing])
|
||||
fi
|
||||
if test "x$VERSION_BUILD" = x0; then
|
||||
AC_MSG_WARN([Version build 0 is interpreted as no build number])
|
||||
VERSION_BUILD=
|
||||
fi
|
||||
# Stop the version part process from setting default values.
|
||||
# We still allow them to explicitly override though.
|
||||
NO_DEFAULT_VERSION_PARTS=true
|
||||
else
|
||||
FAILURE="--with-version-string fails to parse as a valid version string: $RESULT"
|
||||
fi
|
||||
fi
|
||||
if test "x$VERSION_UPDATE" = x; then
|
||||
VERSION_UPDATE=0
|
||||
fi
|
||||
if test "x$VERSION_PATCH" = x; then
|
||||
VERSION_PATCH=0
|
||||
fi
|
||||
if test "x$VERSION_EXTRA1" = x; then
|
||||
VERSION_EXTRA1=0
|
||||
fi
|
||||
if test "x$VERSION_EXTRA2" = x; then
|
||||
VERSION_EXTRA2=0
|
||||
fi
|
||||
if test "x$VERSION_EXTRA3" = x; then
|
||||
VERSION_EXTRA3=0
|
||||
fi
|
||||
if test "x$version_plus_separator" != x \
|
||||
&& test "x$VERSION_BUILD$VERSION_OPT" = x; then
|
||||
AC_MSG_ERROR([Version string contains + but both 'BUILD' and 'OPT' are missing])
|
||||
fi
|
||||
if test "x$VERSION_BUILD" = x0; then
|
||||
AC_MSG_WARN([Version build 0 is interpreted as no build number])
|
||||
VERSION_BUILD=
|
||||
fi
|
||||
# Stop the version part process from setting default values.
|
||||
# We still allow them to explicitly override though.
|
||||
NO_DEFAULT_VERSION_PARTS=true
|
||||
else
|
||||
AC_MSG_ERROR([--with-version-string fails to parse as a valid version string: $with_version_string])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_ARG_WITH(version-pre, [AS_HELP_STRING([--with-version-pre],
|
||||
[Set the base part of the version 'PRE' field (pre-release identifier) @<:@'internal'@:>@])],
|
||||
@@ -290,23 +278,19 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(version-feature, [AS_HELP_STRING([--with-version-feature],
|
||||
[Set version 'FEATURE' field (first number) @<:@current source value@:>@])],
|
||||
[with_version_feature_present=true], [with_version_feature_present=false])
|
||||
|
||||
if test "x$with_version_feature_present" = xtrue; then
|
||||
if test "x$with_version_feature" = xyes || test "x$with_version_feature" = xno; then
|
||||
AC_MSG_ERROR([--with-version-feature must have a value])
|
||||
else
|
||||
JDKVER_CHECK_AND_SET_NUMBER(VERSION_FEATURE, $with_version_feature)
|
||||
fi
|
||||
else
|
||||
if test "x$NO_DEFAULT_VERSION_PARTS" != xtrue; then
|
||||
# Default is to get value from version-numbers.conf
|
||||
VERSION_FEATURE="$DEFAULT_VERSION_FEATURE"
|
||||
fi
|
||||
# Default is to get value from version-numbers.conf
|
||||
if test "x$NO_DEFAULT_VERSION_PARTS" = xtrue; then
|
||||
DEFAULT_VERSION_FEATURE="$VERSION_FEATURE"
|
||||
fi
|
||||
|
||||
UTIL_ARG_WITH(NAME: version-feature, TYPE: string,
|
||||
DEFAULT: $DEFAULT_VERSION_FEATURE,
|
||||
DESC: [Set version 'FEATURE' field (first number)],
|
||||
DEFAULT_DESC: [current source value],
|
||||
CHECK_VALUE: [
|
||||
JDKVER_CHECK_AND_SET_NUMBER(VERSION_FEATURE, $RESULT)
|
||||
])
|
||||
|
||||
AC_ARG_WITH(version-interim, [AS_HELP_STRING([--with-version-interim],
|
||||
[Set version 'INTERIM' field (second number) @<:@current source value@:>@])],
|
||||
[with_version_interim_present=true], [with_version_interim_present=false])
|
||||
@@ -480,91 +464,81 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
|
||||
VERSION_SHORT=$VERSION_NUMBER${VERSION_PRE:+-$VERSION_PRE}
|
||||
|
||||
# The version date
|
||||
AC_ARG_WITH(version-date, [AS_HELP_STRING([--with-version-date],
|
||||
[Set version date @<:@current source value@:>@])])
|
||||
if test "x$with_version_date" = xyes || test "x$with_version_date" = xno; then
|
||||
AC_MSG_ERROR([--with-version-date must have a value])
|
||||
elif test "x$with_version_date" != x; then
|
||||
if [ ! [[ $with_version_date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] ]; then
|
||||
AC_MSG_ERROR(["$with_version_date" is not a valid version date])
|
||||
else
|
||||
VERSION_DATE="$with_version_date"
|
||||
fi
|
||||
else
|
||||
VERSION_DATE="$DEFAULT_VERSION_DATE"
|
||||
fi
|
||||
UTIL_ARG_WITH(NAME: version-date, TYPE: string,
|
||||
DEFAULT: $DEFAULT_VERSION_DATE,
|
||||
DESC: [Set version date],
|
||||
DEFAULT_DESC: [current source value],
|
||||
CHECK_VALUE: [
|
||||
if test "x$RESULT" = x; then
|
||||
FAILURE="--with-version-date cannot be empty"
|
||||
elif [ ! [[ $RESULT =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] ]; then
|
||||
FAILURE="\"$RESULT\" is not a valid version date"
|
||||
fi
|
||||
])
|
||||
|
||||
# The vendor version string, if any
|
||||
AC_ARG_WITH(vendor-version-string, [AS_HELP_STRING([--with-vendor-version-string],
|
||||
[Set vendor version string @<:@not specified@:>@])])
|
||||
if test "x$with_vendor_version_string" = xyes; then
|
||||
AC_MSG_ERROR([--with-vendor-version-string must have a value])
|
||||
elif [ ! [[ $with_vendor_version_string =~ ^[[:graph:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with--vendor-version-string contains non-graphical characters: $with_vendor_version_string])
|
||||
elif test "x$with_vendor_version_string" != xno; then
|
||||
# Set vendor version string if --without is not passed
|
||||
# Check not required if an empty value is passed, since VENDOR_VERSION_STRING
|
||||
# would then be set to ""
|
||||
VENDOR_VERSION_STRING="$with_vendor_version_string"
|
||||
# DEFAULT is set to an empty string in the case of --with-vendor-version-string without
|
||||
# any value, which would set VENDOR_VERSION_STRING_ENABLED to true and ultimately also
|
||||
# cause VENDOR_VERSION_STRING to fall back to the value in DEFAULT
|
||||
UTIL_ARG_WITH(NAME: vendor-version-string, TYPE: string,
|
||||
DEFAULT: [],
|
||||
OPTIONAL: true,
|
||||
DESC: [Set vendor version string],
|
||||
DEFAULT_DESC: [not specified])
|
||||
|
||||
if test "x$VENDOR_VERSION_STRING_ENABLED" = xtrue; then
|
||||
if [ ! [[ $VENDOR_VERSION_STRING =~ ^[[:graph:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with--vendor-version-string contains non-graphical characters: $VENDOR_VERSION_STRING])
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set the MACOSX Bundle Name base
|
||||
AC_ARG_WITH(macosx-bundle-name-base, [AS_HELP_STRING([--with-macosx-bundle-name-base],
|
||||
[Set the MacOSX Bundle Name base. This is the base name for calculating MacOSX Bundle Names.
|
||||
@<:@not specified@:>@])])
|
||||
if test "x$with_macosx_bundle_name_base" = xyes || test "x$with_macosx_bundle_name_base" = xno; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-name-base must have a value])
|
||||
elif [ ! [[ $with_macosx_bundle_name_base =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-name-base contains non-printing characters: $with_macosx_bundle_name_base])
|
||||
elif test "x$with_macosx_bundle_name_base" != x; then
|
||||
# Set MACOSX_BUNDLE_NAME_BASE to the configured value.
|
||||
MACOSX_BUNDLE_NAME_BASE="$with_macosx_bundle_name_base"
|
||||
fi
|
||||
UTIL_ARG_WITH(NAME: macosx-bundle-name-base, TYPE: string,
|
||||
DEFAULT: $MACOSX_BUNDLE_NAME_BASE,
|
||||
DESC: [Set the MacOSX Bundle Name base. This is the base name for calculating MacOSX Bundle Names.],
|
||||
DEFAULT_DESC: [from branding.conf],
|
||||
CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY_PRINTABLE])
|
||||
AC_SUBST(MACOSX_BUNDLE_NAME_BASE)
|
||||
|
||||
# Set the MACOSX Bundle ID base
|
||||
AC_ARG_WITH(macosx-bundle-id-base, [AS_HELP_STRING([--with-macosx-bundle-id-base],
|
||||
[Set the MacOSX Bundle ID base. This is the base ID for calculating MacOSX Bundle IDs.
|
||||
@<:@not specified@:>@])])
|
||||
if test "x$with_macosx_bundle_id_base" = xyes || test "x$with_macosx_bundle_id_base" = xno; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-id-base must have a value])
|
||||
elif [ ! [[ $with_macosx_bundle_id_base =~ ^[[:print:]]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-id-base contains non-printing characters: $with_macosx_bundle_id_base])
|
||||
elif test "x$with_macosx_bundle_id_base" != x; then
|
||||
# Set MACOSX_BUNDLE_ID_BASE to the configured value.
|
||||
MACOSX_BUNDLE_ID_BASE="$with_macosx_bundle_id_base"
|
||||
else
|
||||
# If using the default value, append the VERSION_PRE if there is one
|
||||
# to make it possible to tell official builds apart from developer builds
|
||||
if test "x$VERSION_PRE" != x; then
|
||||
MACOSX_BUNDLE_ID_BASE="$MACOSX_BUNDLE_ID_BASE-$VERSION_PRE"
|
||||
fi
|
||||
# If using the default value, append the VERSION_PRE if there is one
|
||||
# to make it possible to tell official builds apart from developer builds
|
||||
if test "x$VERSION_PRE" != x; then
|
||||
MACOSX_BUNDLE_ID_BASE="$MACOSX_BUNDLE_ID_BASE-$VERSION_PRE"
|
||||
fi
|
||||
|
||||
# Set the MACOSX Bundle ID base
|
||||
UTIL_ARG_WITH(NAME: macosx-bundle-id-base, TYPE: string,
|
||||
DEFAULT: $MACOSX_BUNDLE_ID_BASE,
|
||||
DESC: [Set the MacOSX Bundle ID base. This is the base ID for calculating MacOSX Bundle IDs.],
|
||||
DEFAULT_DESC: [based on branding.conf and VERSION_PRE],
|
||||
CHECK_VALUE: [UTIL_CHECK_STRING_NON_EMPTY_PRINTABLE])
|
||||
AC_SUBST(MACOSX_BUNDLE_ID_BASE)
|
||||
|
||||
# Set the MACOSX CFBundleVersion field
|
||||
AC_ARG_WITH(macosx-bundle-build-version, [AS_HELP_STRING([--with-macosx-bundle-build-version],
|
||||
[Set the MacOSX Bundle CFBundleVersion field. This key is a machine-readable
|
||||
string composed of one to three period-separated integers and should represent the
|
||||
build version. Defaults to the build number.])])
|
||||
if test "x$with_macosx_bundle_build_version" = xyes || test "x$with_macosx_bundle_build_version" = xno; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-build-version must have a value])
|
||||
elif [ ! [[ $with_macosx_bundle_build_version =~ ^[0-9\.]*$ ]] ]; then
|
||||
AC_MSG_ERROR([--with-macosx-bundle-build-version contains non numbers and periods: $with_macosx_bundle_build_version])
|
||||
elif test "x$with_macosx_bundle_build_version" != x; then
|
||||
MACOSX_BUNDLE_BUILD_VERSION="$with_macosx_bundle_build_version"
|
||||
if test "x$VERSION_BUILD" != x; then
|
||||
MACOSX_BUNDLE_BUILD_VERSION="$VERSION_BUILD"
|
||||
else
|
||||
if test "x$VERSION_BUILD" != x; then
|
||||
MACOSX_BUNDLE_BUILD_VERSION="$VERSION_BUILD"
|
||||
else
|
||||
MACOSX_BUNDLE_BUILD_VERSION=0
|
||||
fi
|
||||
|
||||
# If VERSION_OPT consists of only numbers and periods, add it.
|
||||
if [ [[ $VERSION_OPT =~ ^[0-9\.]+$ ]] ]; then
|
||||
MACOSX_BUNDLE_BUILD_VERSION="$MACOSX_BUNDLE_BUILD_VERSION.$VERSION_OPT"
|
||||
fi
|
||||
MACOSX_BUNDLE_BUILD_VERSION=0
|
||||
fi
|
||||
|
||||
# If VERSION_OPT consists of only numbers and periods, add it.
|
||||
if [ [[ $VERSION_OPT =~ ^[0-9\.]+$ ]] ]; then
|
||||
MACOSX_BUNDLE_BUILD_VERSION="$MACOSX_BUNDLE_BUILD_VERSION.$VERSION_OPT"
|
||||
fi
|
||||
|
||||
# Set the MACOSX CFBundleVersion field
|
||||
UTIL_ARG_WITH(NAME: macosx-bundle-build-version, TYPE: string,
|
||||
DEFAULT: $MACOSX_BUNDLE_BUILD_VERSION,
|
||||
DESC: [Set the MacOSX Bundle CFBundleVersion field. This key is a machine-readable
|
||||
string composed of one to three period-separated integers and should represent the
|
||||
build version.],
|
||||
DEFAULT_DESC: [the build number],
|
||||
CHECK_VALUE: [
|
||||
if test "x$RESULT" = x; then
|
||||
FAILURE="--with-macosx-bundle-build-version must have a value"
|
||||
elif [ ! [[ $RESULT =~ ^[0-9\.]*$ ]] ]; then
|
||||
FAILURE="--with-macosx-bundle-build-version contains non numbers and periods: $RESULT"
|
||||
fi
|
||||
])
|
||||
AC_SUBST(MACOSX_BUNDLE_BUILD_VERSION)
|
||||
|
||||
# We could define --with flags for these, if really needed
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2018, 2023, 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
|
||||
@@ -27,8 +27,9 @@
|
||||
# Setup libraries and functionalities needed to test the JDK.
|
||||
################################################################################
|
||||
|
||||
# Minimum supported version
|
||||
# Minimum supported versions
|
||||
JTREG_MINIMUM_VERSION=7.1.1
|
||||
GTEST_MINIMUM_VERSION=1.13.0
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@@ -58,20 +59,13 @@ AC_DEFUN_ONCE([LIB_TESTS_SETUP_GTEST],
|
||||
AC_MSG_RESULT([$GTEST_FRAMEWORK_SRC])
|
||||
UTIL_FIXUP_PATH([GTEST_FRAMEWORK_SRC])
|
||||
|
||||
# Try to verify version. We require 1.8.1, but this can not be directly
|
||||
# determined. :-( Instead, there are different, incorrect version
|
||||
# numbers we can look for.
|
||||
GTEST_VERSION_1="`$GREP GOOGLETEST_VERSION $GTEST_FRAMEWORK_SRC/CMakeLists.txt | $SED -E -e 's/set\(GOOGLETEST_VERSION (.*)\)/\1/'`"
|
||||
if test "x$GTEST_VERSION_1" != "x1.9.0"; then
|
||||
AC_MSG_ERROR([gtest at $GTEST_FRAMEWORK_SRC does not seem to be version 1.8.1])
|
||||
fi
|
||||
|
||||
# We cannot grep for "AC_IN*T" as a literal since then m4 will treat it as a macro
|
||||
# and expand it.
|
||||
# Additional [] needed to keep m4 from mangling shell constructs.
|
||||
[ GTEST_VERSION_2="`$GREP -A1 ^.C_INIT $GTEST_FRAMEWORK_SRC/configure.ac | $TAIL -n 1 | $SED -E -e 's/ +\[(.*)],/\1/'`" ]
|
||||
if test "x$GTEST_VERSION_2" != "x1.8.0"; then
|
||||
AC_MSG_ERROR([gtest at $GTEST_FRAMEWORK_SRC does not seem to be version 1.8.1 B])
|
||||
# Verify that the version is the required one.
|
||||
# This is a simplified version of TOOLCHAIN_CHECK_COMPILER_VERSION
|
||||
gtest_version="`$GREP GOOGLETEST_VERSION $GTEST_FRAMEWORK_SRC/CMakeLists.txt | $SED -E -e 's/set\(GOOGLETEST_VERSION (.*)\)/\1/'`"
|
||||
comparable_actual_version=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", [$]1, [$]2, [$]3, [$]4) }' <<< "$gtest_version"`
|
||||
comparable_minimum_version=`$AWK -F. '{ printf("%05d%05d%05d%05d\n", [$]1, [$]2, [$]3, [$]4) }' <<< "$GTEST_MINIMUM_VERSION"`
|
||||
if test $comparable_actual_version -lt $comparable_minimum_version ; then
|
||||
AC_MSG_ERROR([gtest version is too old, at least version $GTEST_MINIMUM_VERSION is required])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -285,10 +279,16 @@ AC_DEFUN_ONCE([LIB_TESTS_SETUP_JIB],
|
||||
#
|
||||
AC_DEFUN_ONCE([LIB_TESTS_ENABLE_DISABLE_FAILURE_HANDLER],
|
||||
[
|
||||
UTIL_ARG_ENABLE(NAME: jtreg-failure-handler, DEFAULT: auto,
|
||||
if test "x$BUILD_ENV" = "xci"; then
|
||||
BUILD_FAILURE_HANDLER_DEFAULT=auto
|
||||
else
|
||||
BUILD_FAILURE_HANDLER_DEFAULT=false
|
||||
fi
|
||||
|
||||
UTIL_ARG_ENABLE(NAME: jtreg-failure-handler, DEFAULT: $BUILD_FAILURE_HANDLER_DEFAULT,
|
||||
RESULT: BUILD_FAILURE_HANDLER,
|
||||
DESC: [enable building of the jtreg failure handler],
|
||||
DEFAULT_DESC: [enabled if jtreg is present],
|
||||
DEFAULT_DESC: [enabled if jtreg is present and build env is CI],
|
||||
CHECKING_MSG: [if the jtreg failure handler should be built],
|
||||
CHECK_AVAILABLE: [
|
||||
AC_MSG_CHECKING([if the jtreg failure handler is available])
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -89,6 +89,33 @@ AC_DEFUN_ONCE([LIB_DETERMINE_DEPENDENCIES],
|
||||
fi
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Setup BASIC_JVM_LIBS that can be different depending on build/target platform
|
||||
################################################################################
|
||||
AC_DEFUN([LIB_SETUP_JVM_LIBS],
|
||||
[
|
||||
# Atomic library
|
||||
# 32-bit platforms needs fallback library for 8-byte atomic ops on Zero
|
||||
if HOTSPOT_CHECK_JVM_VARIANT(zero); then
|
||||
if test "x$OPENJDK_$1_OS" = xlinux &&
|
||||
(test "x$OPENJDK_$1_CPU" = xarm ||
|
||||
test "x$OPENJDK_$1_CPU" = xm68k ||
|
||||
test "x$OPENJDK_$1_CPU" = xmips ||
|
||||
test "x$OPENJDK_$1_CPU" = xmipsel ||
|
||||
test "x$OPENJDK_$1_CPU" = xppc ||
|
||||
test "x$OPENJDK_$1_CPU" = xsh ||
|
||||
test "x$OPENJDK_$1_CPU" = xriscv32); then
|
||||
BASIC_JVM_LIBS_$1="$BASIC_JVM_LIBS_$1 -latomic"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Because RISC-V only has word-sized atomics, it requires libatomic where
|
||||
# other common architectures do not, so link libatomic by default.
|
||||
if test "x$OPENJDK_$1_OS" = xlinux && test "x$OPENJDK_$1_CPU" = xriscv64; then
|
||||
BASIC_JVM_LIBS_$1="$BASIC_JVM_LIBS_$1 -latomic"
|
||||
fi
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Parse library options, and setup needed libraries
|
||||
################################################################################
|
||||
@@ -109,6 +136,7 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES],
|
||||
LIB_TESTS_SETUP_GTEST
|
||||
|
||||
BASIC_JDKLIB_LIBS=""
|
||||
BASIC_JDKLIB_LIBS_TARGET=""
|
||||
if test "x$TOOLCHAIN_TYPE" != xmicrosoft; then
|
||||
BASIC_JDKLIB_LIBS="-ljava -ljvm"
|
||||
fi
|
||||
@@ -135,27 +163,6 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES],
|
||||
BASIC_JVM_LIBS="$BASIC_JVM_LIBS -lrt"
|
||||
fi
|
||||
|
||||
# Atomic library
|
||||
# 32-bit platforms needs fallback library for 8-byte atomic ops on Zero
|
||||
if HOTSPOT_CHECK_JVM_VARIANT(zero); then
|
||||
if test "x$OPENJDK_TARGET_OS" = xlinux &&
|
||||
(test "x$OPENJDK_TARGET_CPU" = xarm ||
|
||||
test "x$OPENJDK_TARGET_CPU" = xm68k ||
|
||||
test "x$OPENJDK_TARGET_CPU" = xmips ||
|
||||
test "x$OPENJDK_TARGET_CPU" = xmipsel ||
|
||||
test "x$OPENJDK_TARGET_CPU" = xppc ||
|
||||
test "x$OPENJDK_TARGET_CPU" = xsh ||
|
||||
test "x$OPENJDK_TARGET_CPU" = xriscv32); then
|
||||
BASIC_JVM_LIBS="$BASIC_JVM_LIBS -latomic"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Because RISC-V only has word-sized atomics, it requires libatomic where
|
||||
# other common architectures do not. So link libatomic by default.
|
||||
if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$OPENJDK_TARGET_CPU" = xriscv64; then
|
||||
BASIC_JVM_LIBS="$BASIC_JVM_LIBS -latomic"
|
||||
fi
|
||||
|
||||
# perfstat lib
|
||||
if test "x$OPENJDK_TARGET_OS" = xaix; then
|
||||
BASIC_JVM_LIBS="$BASIC_JVM_LIBS -lperfstat"
|
||||
@@ -163,15 +170,17 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES],
|
||||
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
BASIC_JVM_LIBS="$BASIC_JVM_LIBS kernel32.lib user32.lib gdi32.lib winspool.lib \
|
||||
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib \
|
||||
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib powrprof.lib uuid.lib \
|
||||
wsock32.lib winmm.lib version.lib psapi.lib"
|
||||
fi
|
||||
LIB_SETUP_JVM_LIBS(BUILD)
|
||||
LIB_SETUP_JVM_LIBS(TARGET)
|
||||
|
||||
JDKLIB_LIBS="$BASIC_JDKLIB_LIBS"
|
||||
JDKEXE_LIBS=""
|
||||
JVM_LIBS="$BASIC_JVM_LIBS"
|
||||
JVM_LIBS="$BASIC_JVM_LIBS $BASIC_JVM_LIBS_TARGET"
|
||||
OPENJDK_BUILD_JDKLIB_LIBS="$BASIC_JDKLIB_LIBS"
|
||||
OPENJDK_BUILD_JVM_LIBS="$BASIC_JVM_LIBS"
|
||||
OPENJDK_BUILD_JVM_LIBS="$BASIC_JVM_LIBS $BASIC_JVM_LIBS_BUILD"
|
||||
|
||||
AC_SUBST(JDKLIB_LIBS)
|
||||
AC_SUBST(JDKEXE_LIBS)
|
||||
|
||||
@@ -446,14 +446,15 @@ JCOV_INPUT_JDK=@JCOV_INPUT_JDK@
|
||||
JCOV_FILTERS=@JCOV_FILTERS@
|
||||
|
||||
# AddressSanitizer
|
||||
export ASAN_ENABLED:=@ASAN_ENABLED@
|
||||
export DEVKIT_LIB_DIR:=@DEVKIT_LIB_DIR@
|
||||
ifeq ($(ASAN_ENABLED), yes)
|
||||
export ASAN_OPTIONS=handle_segv=0 detect_leaks=0
|
||||
ifneq ($(DEVKIT_LIB_DIR),)
|
||||
export LD_LIBRARY_PATH:=$(LD_LIBRARY_PATH):$(DEVKIT_LIB_DIR)
|
||||
endif
|
||||
endif
|
||||
ASAN_ENABLED:=@ASAN_ENABLED@
|
||||
|
||||
# LeakSanitizer
|
||||
LSAN_ENABLED:=@LSAN_ENABLED@
|
||||
|
||||
# UndefinedBehaviorSanitizer
|
||||
UBSAN_ENABLED:=@UBSAN_ENABLED@
|
||||
UBSAN_CFLAGS:=@UBSAN_CFLAGS@
|
||||
UBSAN_LDFLAGS:=@UBSAN_LDFLAGS@
|
||||
|
||||
# Necessary additional compiler flags to compile X11
|
||||
X_CFLAGS:=@X_CFLAGS@
|
||||
|
||||
@@ -818,3 +818,12 @@ AC_DEFUN([UTIL_CHECK_STRING_NON_EMPTY],
|
||||
FAILURE="Value cannot be empty"
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([UTIL_CHECK_STRING_NON_EMPTY_PRINTABLE],
|
||||
[
|
||||
if test "x$RESULT" = x; then
|
||||
FAILURE="Value cannot be empty"
|
||||
elif [ ! [[ $RESULT =~ ^[[:print:]]*$ ]] ]; then
|
||||
FAILURE="Value contains non-printing characters: $RESULT"
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -521,7 +521,7 @@ AC_DEFUN([UTIL_REMOVE_SYMBOLIC_LINKS],
|
||||
sym_link_dir=`pwd -P`
|
||||
# Resolve file symlinks
|
||||
while test $COUNTER -lt 20; do
|
||||
ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'`
|
||||
ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP -e '->' | $SED -e 's/.*-> \(.*\)/\1/'`
|
||||
if test "x$ISLINK" == x; then
|
||||
# This is not a symbolic link! We are done!
|
||||
break
|
||||
|
||||
@@ -257,7 +257,7 @@ ifeq ($(HAS_FILE_FUNCTION), true)
|
||||
else
|
||||
# Use printf to get consistent behavior on all platforms.
|
||||
WriteFile = \
|
||||
$(shell $(PRINTF) "%s" $(call ShellQuote, $1) > $2)
|
||||
$(shell $(PRINTF) "%s\n" $(strip $(call ShellQuote, $1)) > $2)
|
||||
endif
|
||||
|
||||
# Param 1 - Text to write
|
||||
@@ -268,5 +268,5 @@ ifeq ($(HAS_FILE_FUNCTION), true)
|
||||
else
|
||||
# Use printf to get consistent behavior on all platforms.
|
||||
AppendFile = \
|
||||
$(shell $(PRINTF) "%s" $(call ShellQuote, $1) >> $2)
|
||||
$(shell $(PRINTF) "%s\n" $(strip $(call ShellQuote, $1)) >> $2)
|
||||
endif
|
||||
|
||||
@@ -547,6 +547,7 @@ endef
|
||||
# STRIPFLAGS Optionally change the flags given to the strip command
|
||||
# PRECOMPILED_HEADER Header file to use as precompiled header
|
||||
# PRECOMPILED_HEADER_EXCLUDE List of source files that should not use PCH
|
||||
# BUILD_INFO_LOG_MACRO Overrides log level of the build info log message, default LogWarn
|
||||
#
|
||||
# After being called, some variables are exported from this macro, all prefixed
|
||||
# with parameter 1 followed by a '_':
|
||||
@@ -701,6 +702,19 @@ define SetupNativeCompilationBody
|
||||
$$(error No sources found for $1 when looking inside the dirs $$($1_SRC))
|
||||
endif
|
||||
|
||||
ifeq ($$($1_TYPE), EXECUTABLE)
|
||||
ifeq ($(UBSAN_ENABLED), true)
|
||||
# We need to set the default options for UBSan. This needs to be included in every executable.
|
||||
# Rather than copy and paste code to everything with a main function, we add an additional
|
||||
# source file to every executable that exports __ubsan_default_options.
|
||||
ifneq ($$(filter %.cpp %.cc, $$($1_SRCS)), )
|
||||
$1_SRCS += $(TOPDIR)/make/data/ubsan/ubsan_default_options.cpp
|
||||
else
|
||||
$1_SRCS += $(TOPDIR)/make/data/ubsan/ubsan_default_options.c
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# Calculate the expected output from compiling the sources
|
||||
$1_EXPECTED_OBJS_FILENAMES := $$(call replace_with_obj_extension, $$(notdir $$($1_SRCS)))
|
||||
$1_EXPECTED_OBJS := $$(addprefix $$($1_OBJECT_DIR)/, $$($1_EXPECTED_OBJS_FILENAMES))
|
||||
@@ -918,12 +932,18 @@ define SetupNativeCompilationBody
|
||||
|
||||
# Setup rule for printing progress info when compiling source files.
|
||||
# This is a rough heuristic and may not always print accurate information.
|
||||
$$($1_BUILD_INFO): $$($1_SRCS) $$($1_COMPILE_VARDEPS_FILE)
|
||||
# The $1_BUILD_INFO and $1_BUILD_INFO_DEPS variables are used in
|
||||
# TestFilesCompilation.gmk.
|
||||
$$(call SetIfEmpty, $1_BUILD_INFO_LOG_MACRO, LogWarn)
|
||||
$1_BUILD_INFO_DEPS := $$($1_SRCS) $$($1_COMPILE_VARDEPS_FILE)
|
||||
$$($1_BUILD_INFO): $$($1_BUILD_INFO_DEPS)
|
||||
ifeq ($$(wildcard $$($1_TARGET)), )
|
||||
$$(call LogWarn, Creating $$(subst $$(OUTPUTDIR)/,,$$($1_TARGET)) from $$(words \
|
||||
$$(call $$($1_BUILD_INFO_LOG_MACRO), \
|
||||
Creating $$(subst $$(OUTPUTDIR)/,,$$($1_TARGET)) from $$(words \
|
||||
$$(filter-out %.vardeps, $$?)) file(s))
|
||||
else
|
||||
$$(call LogWarn, $$(strip Updating $$(subst $$(OUTPUTDIR)/,,$$($1_TARGET)) \
|
||||
$$(call $$($1_BUILD_INFO_LOG_MACRO), \
|
||||
$$(strip Updating $$(subst $$(OUTPUTDIR)/,,$$($1_TARGET)) \
|
||||
$$(if $$(filter-out %.vardeps, $$?), \
|
||||
due to $$(words $$(filter-out %.vardeps, $$?)) file(s), \
|
||||
$$(if $$(filter %.vardeps, $$?), due to makefile changes))))
|
||||
@@ -1042,10 +1062,13 @@ define SetupNativeCompilationBody
|
||||
$1_DEBUGINFO_FILES := $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).debuginfo
|
||||
# Setup the command line creating debuginfo files, to be run after linking.
|
||||
# It cannot be run separately since it updates the original target file
|
||||
# Creating the debuglink is done in another command rather than all at once
|
||||
# so we can run it after strip is called, since strip can sometimes mangle the
|
||||
# embedded debuglink, which we want to avoid.
|
||||
$1_CREATE_DEBUGINFO_CMDS := \
|
||||
$$($1_OBJCOPY) --only-keep-debug $$($1_TARGET) $$($1_DEBUGINFO_FILES) $$(NEWLINE) \
|
||||
$(CD) $$($1_SYMBOLS_DIR) && \
|
||||
$$($1_OBJCOPY) --add-gnu-debuglink=$$($1_DEBUGINFO_FILES) $$($1_TARGET)
|
||||
$$($1_OBJCOPY) --only-keep-debug $$($1_TARGET) $$($1_DEBUGINFO_FILES) $$(NEWLINE)
|
||||
$1_CREATE_DEBUGLINK_CMDS := $(CD) $$($1_SYMBOLS_DIR) && \
|
||||
$$($1_OBJCOPY) --add-gnu-debuglink=$$($1_DEBUGINFO_FILES) $$($1_TARGET)
|
||||
|
||||
else ifeq ($(call isTargetOs, aix), true)
|
||||
# AIX does not provide the equivalent of OBJCOPY to extract debug symbols,
|
||||
@@ -1174,7 +1197,7 @@ define SetupNativeCompilationBody
|
||||
$1_VARDEPS := $$($1_LD) $$($1_SYSROOT_LDFLAGS) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) \
|
||||
$$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_MT) \
|
||||
$$($1_CREATE_DEBUGINFO_CMDS) $$($1_MANIFEST_VERSION) \
|
||||
$$($1_STRIP_CMD)
|
||||
$$($1_STRIP_CMD) $$($1_CREATE_DEBUGLINK_CMDS)
|
||||
$1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \
|
||||
$$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps)
|
||||
|
||||
@@ -1237,6 +1260,7 @@ define SetupNativeCompilationBody
|
||||
test "$$$$?" = "1" ; \
|
||||
$$($1_CREATE_DEBUGINFO_CMDS)
|
||||
$$($1_STRIP_CMD)
|
||||
$$($1_CREATE_DEBUGLINK_CMDS)
|
||||
ifeq ($(call isBuildOsEnv, windows.wsl2), true)
|
||||
$$(CHMOD) +x $$($1_TARGET)
|
||||
endif
|
||||
@@ -1248,6 +1272,7 @@ define SetupNativeCompilationBody
|
||||
$$($1_LIBS) $$($1_EXTRA_LIBS)) ; \
|
||||
$$($1_CREATE_DEBUGINFO_CMDS)
|
||||
$$($1_STRIP_CMD)
|
||||
$$($1_CREATE_DEBUGLINK_CMDS)
|
||||
endif
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
ifneq ($$($1_MANIFEST), )
|
||||
|
||||
@@ -84,7 +84,7 @@ define ProcessMarkdown
|
||||
$$(call MakeDir, $$(SUPPORT_OUTPUTDIR)/markdown $$(dir $$($1_$2_PANDOC_OUTPUT)))
|
||||
$$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER), \
|
||||
$$(PANDOC) $$($1_OPTIONS) -f $$(PANDOC_MARKDOWN_FLAG) \
|
||||
-t $$($1_FORMAT) --standalone \
|
||||
-t $$($1_FORMAT) --eol=lf --standalone \
|
||||
$$($1_$2_CSS_OPTION) $$($1_$2_OPTIONS_FROM_SRC) $$($1_$2_OPTIONS) \
|
||||
'$$($1_$2_PANDOC_INPUT)' -o '$$($1_$2_PANDOC_OUTPUT)')
|
||||
ifneq ($$(findstring $$(LOG_LEVEL), debug trace),)
|
||||
|
||||
@@ -45,6 +45,7 @@ include NativeCompilation.gmk
|
||||
# SOURCE_DIRS A list of source directories to search
|
||||
# OUTPUT_DIR Where to put the resulting files
|
||||
# EXCLUDE A list of filenames to exclude from compilation
|
||||
# EXTRA_FILES List of extra files not in SOURCE_DIRS
|
||||
SetupTestFilesCompilation = $(NamedParamsMacroTemplate)
|
||||
define SetupTestFilesCompilationBody
|
||||
|
||||
@@ -64,6 +65,7 @@ define SetupTestFilesCompilationBody
|
||||
$1_BASE_CXXFLAGS := $(CXXFLAGS_JDKLIB)
|
||||
$1_LDFLAGS := $(LDFLAGS_JDKLIB) $$(call SET_SHARED_LIBRARY_ORIGIN)
|
||||
$1_COMPILATION_TYPE := LIBRARY
|
||||
$1_LOG_TYPE := library
|
||||
else ifeq ($$($1_TYPE), PROGRAM)
|
||||
$1_PREFIX = exe
|
||||
$1_OUTPUT_SUBDIR := bin
|
||||
@@ -71,6 +73,7 @@ define SetupTestFilesCompilationBody
|
||||
$1_BASE_CXXFLAGS := $(CXXFLAGS_JDKEXE)
|
||||
$1_LDFLAGS := $(LDFLAGS_JDKEXE) $(LDFLAGS_TESTEXE)
|
||||
$1_COMPILATION_TYPE := EXECUTABLE
|
||||
$1_LOG_TYPE := executable
|
||||
else
|
||||
$$(error Unknown type: $$($1_TYPE))
|
||||
endif
|
||||
@@ -82,6 +85,8 @@ define SetupTestFilesCompilationBody
|
||||
$1_EXCLUDE_PATTERN := $$(addprefix %/, $$($1_EXCLUDE))
|
||||
$1_FILTERED_FILE_LIST := $$(filter-out $$($1_EXCLUDE_PATTERN), $$($1_FILE_LIST))
|
||||
|
||||
$1_BUILD_INFO := $$($1_OUTPUT_DIR)/_$1-build-info.marker
|
||||
|
||||
# Setup a compilation for each and every one of them
|
||||
$$(foreach file, $$($1_FILTERED_FILE_LIST),\
|
||||
$$(eval name := $$(strip $$(basename $$(notdir $$(file))))) \
|
||||
@@ -89,7 +94,7 @@ define SetupTestFilesCompilationBody
|
||||
$$(eval $$(call SetupNativeCompilation, BUILD_TEST_$$(name), \
|
||||
NAME := $$(unprefixed_name), \
|
||||
TYPE := $$($1_COMPILATION_TYPE), \
|
||||
EXTRA_FILES := $$(file), \
|
||||
EXTRA_FILES := $$(file) $$($1_EXTRA_FILES), \
|
||||
OBJECT_DIR := $$($1_OUTPUT_DIR)/support/$$(name), \
|
||||
OUTPUT_DIR := $$($1_OUTPUT_DIR)/$$($1_OUTPUT_SUBDIR), \
|
||||
CFLAGS := $$($1_BASE_CFLAGS) $$($1_CFLAGS) $$($1_CFLAGS_$$(name)), \
|
||||
@@ -103,10 +108,21 @@ define SetupTestFilesCompilationBody
|
||||
OPTIMIZATION := $$(if $$($1_OPTIMIZATION_$$(name)),$$($1_OPTIMIZATION_$$(name)),LOW), \
|
||||
COPY_DEBUG_SYMBOLS := false, \
|
||||
STRIP_SYMBOLS := $$(if $$($1_STRIP_SYMBOLS_$$(name)),$$($1_STRIP_SYMBOLS_$$(name)),false), \
|
||||
BUILD_INFO_LOG_MACRO := LogInfo, \
|
||||
)) \
|
||||
$$(eval $1 += $$(BUILD_TEST_$$(name)) ) \
|
||||
$$(eval $1 += $$(BUILD_TEST_$$(name)) ) \
|
||||
$$(eval $1_BUILD_INFO_DEPS += $$(BUILD_TEST_$$(name)_BUILD_INFO_DEPS)) \
|
||||
$$(eval $$(BUILD_TEST_$$(name)_BUILD_INFO): | $$($1_BUILD_INFO)) \
|
||||
)
|
||||
|
||||
# Setup rule for printing a summary of all the tests being compiled. On Warn
|
||||
# log level, this replaces the individual build info logging done by
|
||||
# SetupNativeCompilation.
|
||||
$$($1_BUILD_INFO): $$($1_BUILD_INFO_DEPS)
|
||||
$$(call LogWarn, $$(strip Creating $$(words $$(filter-out %.vardeps, $$?)) \
|
||||
test $$($1_LOG_TYPE) file(s) for $1))
|
||||
$(TOUCH) $$@
|
||||
|
||||
endef
|
||||
|
||||
endif # _TEST_FILES_COMPILATION_GMK
|
||||
|
||||
@@ -144,9 +144,19 @@ define SetupBuildLauncherBody
|
||||
|
||||
$1_WINDOWS_JLI_LIB := $(call FindStaticLib, java.base, jli, /libjli)
|
||||
|
||||
$1_EXTRA_FILES := $(LAUNCHER_SRC)/main.c
|
||||
|
||||
ifeq ($(ASAN_ENABLED), true)
|
||||
$1_EXTRA_FILES += $(TOPDIR)/make/data/asan/asan_default_options.c
|
||||
endif
|
||||
|
||||
ifeq ($(LSAN_ENABLED), true)
|
||||
$1_EXTRA_FILES += $(TOPDIR)/make/data/lsan/lsan_default_options.c
|
||||
endif
|
||||
|
||||
$$(eval $$(call SetupJdkExecutable, BUILD_LAUNCHER_$1, \
|
||||
NAME := $1, \
|
||||
EXTRA_FILES := $(LAUNCHER_SRC)/main.c, \
|
||||
EXTRA_FILES := $$($1_EXTRA_FILES), \
|
||||
OPTIMIZATION := $$($1_OPTIMIZATION), \
|
||||
CFLAGS := $$(CFLAGS_JDKEXE) \
|
||||
$$(LAUNCHER_CFLAGS) \
|
||||
|
||||
@@ -41,15 +41,12 @@ ifeq ($(TOOLCHAIN_TYPE), gcc)
|
||||
CFLAGS_JDKLIB += -fvisibility=hidden
|
||||
CXXFLAGS_JDKLIB += -fvisibility=hidden
|
||||
LDFLAGS_JDKLIB += -Wl,--exclude-libs,ALL
|
||||
EXPORT_ALL_SYMBOLS := -fvisibility=default
|
||||
else ifeq ($(TOOLCHAIN_TYPE), clang)
|
||||
CFLAGS_JDKLIB += -fvisibility=hidden
|
||||
CXXFLAGS_JDKLIB += -fvisibility=hidden
|
||||
EXPORT_ALL_SYMBOLS := -fvisibility=default
|
||||
else ifeq ($(TOOLCHAIN_TYPE), xlc)
|
||||
CFLAGS_JDKLIB += -qvisibility=hidden
|
||||
CXXFLAGS_JDKLIB += -qvisibility=hidden
|
||||
EXPORT_ALL_SYMBOLS := -qvisibility=default
|
||||
endif
|
||||
|
||||
# Put the libraries here.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2020, 2023, 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,7 +25,7 @@
|
||||
|
||||
# Versions and download locations for dependencies used by GitHub Actions (GHA)
|
||||
|
||||
GTEST_VERSION=1.8.1
|
||||
GTEST_VERSION=1.13.0
|
||||
JTREG_VERSION=7.1.1+1
|
||||
|
||||
LINUX_X64_BOOT_JDK_EXT=tar.gz
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2023, 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
|
||||
@@ -242,14 +242,15 @@ var getJibProfilesCommon = function (input, data) {
|
||||
common.main_profile_names = [
|
||||
"linux-x64", "linux-x86", "macosx-x64", "macosx-aarch64",
|
||||
"windows-x64", "windows-x86", "windows-aarch64",
|
||||
"linux-aarch64", "linux-arm32", "linux-ppc64le", "linux-s390x"
|
||||
"linux-aarch64", "linux-arm32", "linux-ppc64le", "linux-s390x",
|
||||
"linux-riscv64"
|
||||
];
|
||||
|
||||
// These are the base settings for all the main build profiles.
|
||||
common.main_profile_base = {
|
||||
dependencies: ["boot_jdk", "gnumake", "jtreg", "jib", "autoconf", "jmh", "jcov"],
|
||||
default_make_targets: ["product-bundles", "test-bundles", "static-libs-bundles"],
|
||||
configure_args: concat("--enable-jtreg-failure-handler",
|
||||
configure_args: concat(
|
||||
"--with-exclude-translations=es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK",
|
||||
"--disable-manpages",
|
||||
"--disable-jvm-feature-shenandoahgc",
|
||||
@@ -519,6 +520,17 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
"--disable-warnings-as-errors"
|
||||
],
|
||||
},
|
||||
|
||||
"linux-riscv64": {
|
||||
target_os: "linux",
|
||||
target_cpu: "riscv64",
|
||||
build_cpu: "x64",
|
||||
dependencies: ["devkit", "gtest", "build_devkit"],
|
||||
configure_args: [
|
||||
"--openjdk-target=riscv64-linux-gnu", "--with-freetype=bundled",
|
||||
"--disable-warnings-as-errors"
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
// Add the base settings to all the main profiles
|
||||
@@ -714,7 +726,10 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
},
|
||||
"linux-s390x": {
|
||||
platform: "linux-s390x",
|
||||
}
|
||||
},
|
||||
"linux-riscv64": {
|
||||
platform: "linux-riscv64",
|
||||
},
|
||||
}
|
||||
// Generate common artifacts for all main profiles
|
||||
Object.keys(artifactData).forEach(function (name) {
|
||||
@@ -798,24 +813,6 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
}
|
||||
});
|
||||
|
||||
// Define the reference implementation profiles. These are basically the same
|
||||
// as the open profiles, but upload artifacts to a different location.
|
||||
common.main_profile_names.forEach(function (name) {
|
||||
var riName = name + "-ri";
|
||||
var riDebugName = riName + common.debug_suffix;
|
||||
var openName = name + common.open_suffix;
|
||||
var openDebugName = openName + common.debug_suffix;
|
||||
profiles[riName] = clone(profiles[openName]);
|
||||
profiles[riDebugName] = clone(profiles[openDebugName]);
|
||||
// Rewrite all remote dirs to "bundles/openjdk/BCL/..."
|
||||
for (artifactName in profiles[riName].artifacts) {
|
||||
var artifact = profiles[riName].artifacts[artifactName];
|
||||
artifact.remote = replaceAll(
|
||||
"\/GPL\/", "/BCL/",
|
||||
(artifact.remote != null ? artifact.remote : artifact.local));
|
||||
}
|
||||
});
|
||||
|
||||
// For open profiles, the non-debug jdk bundles, need an "open" prefix on the
|
||||
// remote bundle names, forming the word "openjdk". See JDK-8188789.
|
||||
common.main_profile_names.forEach(function (name) {
|
||||
@@ -944,7 +941,7 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
target_cpu: input.build_cpu,
|
||||
dependencies: [
|
||||
"jtreg", "gnumake", "boot_jdk", "devkit", "jib", "jcov", testedProfileJdk,
|
||||
testedProfileTest, testedProfile + ".jdk_symbols",
|
||||
testedProfileTest,
|
||||
],
|
||||
src: "src.conf",
|
||||
make_args: testOnlyMake,
|
||||
@@ -958,6 +955,9 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
labels: "test"
|
||||
}
|
||||
};
|
||||
if (!testedProfile.endsWith("-jcov")) {
|
||||
testOnlyProfilesPrebuilt["run-test-prebuilt"]["dependencies"].push(testedProfile + ".jdk_symbols");
|
||||
}
|
||||
|
||||
// If actually running the run-test-prebuilt profile, verify that the input
|
||||
// variable is valid and if so, add the appropriate target_* values from
|
||||
@@ -987,11 +987,25 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
dependencies: [ "lldb" ],
|
||||
environment_path: [
|
||||
input.get("gnumake", "install_path") + "/bin",
|
||||
input.get("lldb", "install_path") + "/Xcode.app/Contents/Developer/usr/bin",
|
||||
input.get("lldb", "install_path") + "/Xcode/Contents/Developer/usr/bin",
|
||||
],
|
||||
};
|
||||
profiles["run-test"] = concatObjects(profiles["run-test"], macosxRunTestExtra);
|
||||
profiles["run-test-prebuilt"] = concatObjects(profiles["run-test-prebuilt"], macosxRunTestExtra);
|
||||
} else if (input.build_os == "windows") {
|
||||
// On windows, add the devkit debugger to the path in all the run-test profiles
|
||||
// to make them available to the jtreg failure handler.
|
||||
var archDir = "x64";
|
||||
if (input.build_arch == "aarch64") {
|
||||
archDir = "arm64"
|
||||
}
|
||||
windowsRunTestExtra = {
|
||||
environment_path: [
|
||||
input.get("devkit", "install_path") + "/10/Debuggers/" + archDir
|
||||
]
|
||||
}
|
||||
profiles["run-test"] = concatObjects(profiles["run-test"], windowsRunTestExtra);
|
||||
profiles["run-test-prebuilt"] = concatObjects(profiles["run-test-prebuilt"], windowsRunTestExtra);
|
||||
}
|
||||
|
||||
// The profile run-test-prebuilt defines src.conf as the src bundle. When
|
||||
@@ -1032,12 +1046,13 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
|
||||
var devkit_platform_revisions = {
|
||||
linux_x64: "gcc11.2.0-OL6.4+1.0",
|
||||
macosx: "Xcode12.4+1.0",
|
||||
windows_x64: "VS2022-17.1.0+1.0",
|
||||
linux_aarch64: "gcc11.2.0-OL7.6+1.0",
|
||||
macosx: "Xcode12.4+1.1",
|
||||
windows_x64: "VS2022-17.1.0+1.1",
|
||||
linux_aarch64: input.build_cpu == "x64" ? "gcc11.2.0-OL7.6+1.1" : "gcc11.2.0-OL7.6+1.0",
|
||||
linux_arm: "gcc8.2.0-Fedora27+1.0",
|
||||
linux_ppc64le: "gcc8.2.0-Fedora27+1.0",
|
||||
linux_s390x: "gcc8.2.0-Fedora27+1.0"
|
||||
linux_s390x: "gcc8.2.0-Fedora27+1.0",
|
||||
linux_riscv64: "gcc11.3.0-Fedora_rawhide_68692+1.1"
|
||||
};
|
||||
|
||||
var devkit_platform = (input.target_cpu == "x86"
|
||||
@@ -1123,7 +1138,7 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
organization: common.organization,
|
||||
ext: "tar.gz",
|
||||
module: "devkit-macosx" + (input.build_cpu == "x64" ? "_x64" : ""),
|
||||
revision: (input.build_cpu == "x64" ? "Xcode11.3.1-MacOSX10.15+1.1" : devkit_platform_revisions[devkit_platform])
|
||||
revision: (input.build_cpu == "x64" ? "Xcode11.3.1-MacOSX10.15+1.2" : devkit_platform_revisions[devkit_platform])
|
||||
},
|
||||
|
||||
cups: {
|
||||
@@ -1151,7 +1166,7 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
|
||||
jcov: {
|
||||
organization: common.organization,
|
||||
revision: "3.0-13-jdk-asm+1.0",
|
||||
revision: "3.0-14-jdk-asm+1.0",
|
||||
ext: "zip",
|
||||
environment_name: "JCOV_HOME",
|
||||
},
|
||||
@@ -1217,7 +1232,7 @@ var getJibProfilesDependencies = function (input, common) {
|
||||
gtest: {
|
||||
organization: common.organization,
|
||||
ext: "tar.gz",
|
||||
revision: "1.8.1"
|
||||
revision: "1.13.0+1.0"
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
73
make/data/asan/asan_default_options.c
Normal file
73
make/data/asan/asan_default_options.c
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (c) 2023, Google 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.
|
||||
*/
|
||||
|
||||
#ifndef ADDRESS_SANITIZER
|
||||
#error "Build misconfigured, preprocessor macro ADDRESS_SANITIZER should be defined"
|
||||
#endif
|
||||
|
||||
#ifndef __has_attribute
|
||||
#define __has_attribute(x) 0
|
||||
#endif
|
||||
|
||||
#if (defined(__GNUC__) && !defined(__clang__)) || __has_attribute(visibility)
|
||||
#define ATTRIBUTE_DEFAULT_VISIBILITY __attribute__((visibility("default")))
|
||||
#elif defined(_MSC_VER)
|
||||
#define ATTRIBUTE_DEFAULT_VISIBILITY __declspec(dllexport)
|
||||
#else
|
||||
#define ATTRIBUTE_DEFAULT_VISIBILITY
|
||||
#endif
|
||||
|
||||
#if (defined(__GNUC__) && !defined(__clang__)) || __has_attribute(used)
|
||||
#define ATTRIBUTE_USED __attribute__((used))
|
||||
#else
|
||||
#define ATTRIBUTE_USED
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define CDECL __cdecl
|
||||
#else
|
||||
#define CDECL
|
||||
#endif
|
||||
|
||||
// Override weak symbol exposed by ASan to override default options. This is called by ASan
|
||||
// extremely early during library loading, before main is called. We need to override the default
|
||||
// options because LSan is enabled by default and Hotspot is not yet compatible with it.
|
||||
// Additionally we need to prevent ASan from handling SIGSEGV, so that Hotspot's crash handler is
|
||||
// used. You can override these options by setting the environment variable ASAN_OPTIONS.
|
||||
ATTRIBUTE_DEFAULT_VISIBILITY ATTRIBUTE_USED const char* CDECL __asan_default_options() {
|
||||
return
|
||||
#ifdef LEAK_SANITIZER
|
||||
"leak_check_at_exit=0,"
|
||||
#else
|
||||
// ASan bundles LSan, however we only support LSan when it is explicitly requested during
|
||||
// configuration. Thus we disable it to match if it was not requested.
|
||||
"detect_leaks=0,"
|
||||
#endif
|
||||
"print_suppressions=0,"
|
||||
"handle_segv=0,"
|
||||
// See https://github.com/google/sanitizers/issues/1322. Hopefully this is resolved
|
||||
// at some point and we can remove this option.
|
||||
"intercept_tls_get_addr=0";
|
||||
}
|
||||
30
make/data/asan/asan_default_options.cpp
Normal file
30
make/data/asan/asan_default_options.cpp
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2023, Google 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.
|
||||
*/
|
||||
|
||||
extern "C" {
|
||||
|
||||
#include "./asan_default_options.c"
|
||||
|
||||
} // extern "C"
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2000, 2023, 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
|
||||
@@ -476,6 +476,11 @@ charset x-IBM874 IBM874
|
||||
alias ibm-874
|
||||
alias 874
|
||||
|
||||
# alias for GB18030 is generated at runtime
|
||||
charset GB18030 GB18030
|
||||
package sun.nio.cs
|
||||
type source
|
||||
|
||||
########################################################
|
||||
#
|
||||
# charsets provided by ExtendedCharsets provider.
|
||||
@@ -563,11 +568,6 @@ charset GBK GBK # Simplified Chinese
|
||||
alias windows-936
|
||||
alias CP936
|
||||
|
||||
charset GB18030 GB18030
|
||||
package sun.nio.cs.ext
|
||||
type template
|
||||
alias gb18030-2000
|
||||
|
||||
charset GB2312 EUC_CN
|
||||
package sun.nio.cs.ext
|
||||
type dbcs
|
||||
|
||||
@@ -7,7 +7,6 @@ Big5_HKSCS
|
||||
EUC_CN
|
||||
EUC_KR
|
||||
GBK
|
||||
GB18030
|
||||
IBM856
|
||||
IBM921
|
||||
IBM922
|
||||
|
||||
@@ -11,7 +11,6 @@ EUC_JP_LINUX
|
||||
EUC_JP_Open
|
||||
EUC_TW
|
||||
GBK
|
||||
GB18030
|
||||
ISO_8859_11
|
||||
ISO_8859_3
|
||||
ISO_8859_6
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
#
|
||||
# generate these charsets into sun.nio.cs
|
||||
#
|
||||
Big5
|
||||
Big5_Solaris
|
||||
Big5_HKSCS # always together with Big5
|
||||
EUC_CN
|
||||
EUC_KR
|
||||
EUC_JP
|
||||
EUC_JP_LINUX
|
||||
EUC_JP_Open
|
||||
EUC_TW
|
||||
GBK
|
||||
GB18030
|
||||
ISO_8859_11
|
||||
ISO_8859_3
|
||||
ISO_8859_6
|
||||
ISO_8859_8
|
||||
Johab
|
||||
PCK
|
||||
TIS_620
|
||||
JIS_X_0201
|
||||
JIS_X_0208
|
||||
JIS_X_0212
|
||||
JIS_X_0208_Solaris
|
||||
JIS_X_0212_Solaris
|
||||
@@ -2,7 +2,6 @@
|
||||
# generate these charsets into sun.nio.cs
|
||||
#
|
||||
GBK
|
||||
GB18030
|
||||
Johab
|
||||
MS1255
|
||||
MS1256
|
||||
|
||||
67
make/data/lsan/lsan_default_options.c
Normal file
67
make/data/lsan/lsan_default_options.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2023, Google 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.
|
||||
*/
|
||||
|
||||
#ifndef LEAK_SANITIZER
|
||||
#error "Build misconfigured, preprocessor macro LEAK_SANITIZER should be defined"
|
||||
#endif
|
||||
|
||||
#ifndef __has_attribute
|
||||
#define __has_attribute(x) 0
|
||||
#endif
|
||||
|
||||
#if (defined(__GNUC__) && !defined(__clang__)) || __has_attribute(visibility)
|
||||
#define ATTRIBUTE_DEFAULT_VISIBILITY __attribute__((visibility("default")))
|
||||
#else
|
||||
#define ATTRIBUTE_DEFAULT_VISIBILITY
|
||||
#endif
|
||||
|
||||
#if (defined(__GNUC__) && !defined(__clang__)) || __has_attribute(used)
|
||||
#define ATTRIBUTE_USED __attribute__((used))
|
||||
#else
|
||||
#define ATTRIBUTE_USED
|
||||
#endif
|
||||
|
||||
// Override weak symbol exposed by LSan to override default options. This is called by LSan
|
||||
// extremely early during library loading, before main is called. We need to override the default
|
||||
// options because LSan will perform leak checking at program exit. Unfortunately Hotspot does not
|
||||
// shutdown cleanly at the moment and some leaks occur, we want to ignore these. Instead we
|
||||
// explicitly perform leak checking early during JVM shutdown.
|
||||
ATTRIBUTE_DEFAULT_VISIBILITY ATTRIBUTE_USED const char* __lsan_default_options() {
|
||||
return
|
||||
"print_suppressions=0,"
|
||||
"leak_check_at_exit=0,"
|
||||
// See https://github.com/google/sanitizers/issues/1322. Hopefully this is resolved
|
||||
// at some point and we can remove this option.
|
||||
"intercept_tls_get_addr=0";
|
||||
}
|
||||
|
||||
// Override weak symbol exposed by LSan to override default suppressions. This is called by LSan
|
||||
// extremely early during library loading, before main is called.
|
||||
ATTRIBUTE_DEFAULT_VISIBILITY ATTRIBUTE_USED const char* __lsan_default_suppressions() {
|
||||
return
|
||||
// Remove after JDK-8297688 is resolved.
|
||||
"leak:^JLI_MemAlloc$\n"
|
||||
"leak:^JLI_StringDup$\n";
|
||||
}
|
||||
30
make/data/lsan/lsan_default_options.cpp
Normal file
30
make/data/lsan/lsan_default_options.cpp
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2023, Google 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.
|
||||
*/
|
||||
|
||||
extern "C" {
|
||||
|
||||
#include "./lsan_default_options.c"
|
||||
|
||||
} // extern "C"
|
||||
54
make/data/ubsan/ubsan_default_options.c
Normal file
54
make/data/ubsan/ubsan_default_options.c
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2022, 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.
|
||||
*/
|
||||
|
||||
#ifndef UNDEFINED_BEHAVIOR_SANITIZER
|
||||
#error "Build misconfigured, preprocessor macro UNDEFINED_BEHAVIOR_SANITIZER should be defined"
|
||||
#endif
|
||||
|
||||
#ifndef __has_attribute
|
||||
#define __has_attribute(x) 0
|
||||
#endif
|
||||
|
||||
#if (defined(__GNUC__) && !defined(__clang__)) || __has_attribute(visibility)
|
||||
#define ATTRIBUTE_DEFAULT_VISIBILITY __attribute__((visibility("default")))
|
||||
#else
|
||||
#define ATTRIBUTE_DEFAULT_VISIBILITY
|
||||
#endif
|
||||
|
||||
#if (defined(__GNUC__) && !defined(__clang__)) || __has_attribute(used)
|
||||
#define ATTRIBUTE_USED __attribute__((used))
|
||||
#else
|
||||
#define ATTRIBUTE_USED
|
||||
#endif
|
||||
|
||||
// Override weak symbol exposed by UBSan to override default options. This is called by UBSan
|
||||
// extremely early during library loading, before main is called. We need to override the default
|
||||
// options because by default UBSan only prints a warning for each occurrence. We want jtreg tests
|
||||
// to fail when undefined behavior is encountered. We also want a full stack trace for the offending
|
||||
// thread so it is easier to track down. You can override these options by setting the environment
|
||||
// variable UBSAN_OPTIONS.
|
||||
ATTRIBUTE_DEFAULT_VISIBILITY ATTRIBUTE_USED const char* __ubsan_default_options() {
|
||||
return "halt_on_error=1,print_stacktrace=1";
|
||||
}
|
||||
30
make/data/ubsan/ubsan_default_options.cpp
Normal file
30
make/data/ubsan/ubsan_default_options.cpp
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2022, 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.
|
||||
*/
|
||||
|
||||
extern "C" {
|
||||
|
||||
#include "./ubsan_default_options.c"
|
||||
|
||||
} // extern "C"
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013, 2022, 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
|
||||
@@ -63,20 +63,28 @@ ifeq ($(BASE_OS), OL)
|
||||
LINUX_VERSION := OL6.4
|
||||
endif
|
||||
else ifeq ($(BASE_OS), Fedora)
|
||||
DEFAULT_OS_VERSION := 27
|
||||
ifeq ($(BASE_OS_VERSION), )
|
||||
BASE_OS_VERSION := $(DEFAULT_OS_VERSION)
|
||||
endif
|
||||
ifeq ($(filter x86_64 armhfp, $(ARCH)), )
|
||||
FEDORA_TYPE := fedora-secondary
|
||||
ifeq ($(ARCH), riscv64)
|
||||
DEFAULT_OS_VERSION := rawhide/68692
|
||||
ifeq ($(BASE_OS_VERSION), )
|
||||
BASE_OS_VERSION := $(DEFAULT_OS_VERSION)
|
||||
endif
|
||||
BASE_URL := http://fedora.riscv.rocks/repos-dist/$(BASE_OS_VERSION)/$(ARCH)/Packages/
|
||||
else
|
||||
FEDORA_TYPE := fedora/linux
|
||||
endif
|
||||
ARCHIVED := $(shell [ $(BASE_OS_VERSION) -lt $(DEFAULT_OS_VERSION) ] && echo true)
|
||||
ifeq ($(ARCHIVED),true)
|
||||
BASE_URL := https://archives.fedoraproject.org/pub/archive/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
|
||||
else
|
||||
BASE_URL := https://dl.fedoraproject.org/pub/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
|
||||
DEFAULT_OS_VERSION := 27
|
||||
ifeq ($(BASE_OS_VERSION), )
|
||||
BASE_OS_VERSION := $(DEFAULT_OS_VERSION)
|
||||
endif
|
||||
ifeq ($(filter x86_64 armhfp, $(ARCH)), )
|
||||
FEDORA_TYPE := fedora-secondary
|
||||
else
|
||||
FEDORA_TYPE := fedora/linux
|
||||
endif
|
||||
ARCHIVED := $(shell [ $(BASE_OS_VERSION) -lt $(DEFAULT_OS_VERSION) ] && echo true)
|
||||
ifeq ($(ARCHIVED),true)
|
||||
BASE_URL := https://archives.fedoraproject.org/pub/archive/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
|
||||
else
|
||||
BASE_URL := https://dl.fedoraproject.org/pub/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
|
||||
endif
|
||||
endif
|
||||
LINUX_VERSION := Fedora_$(BASE_OS_VERSION)
|
||||
else
|
||||
@@ -87,8 +95,17 @@ endif
|
||||
# Define external dependencies
|
||||
|
||||
# Latest that could be made to work.
|
||||
GCC_VER := 11.2.0
|
||||
ifeq ($(GCC_VER), 11.2.0)
|
||||
GCC_VER := 11.3.0
|
||||
ifeq ($(GCC_VER), 11.3.0)
|
||||
gcc_ver := gcc-11.3.0
|
||||
binutils_ver := binutils-2.39
|
||||
ccache_ver := ccache-3.7.12
|
||||
mpfr_ver := mpfr-4.1.1
|
||||
gmp_ver := gmp-6.2.1
|
||||
mpc_ver := mpc-1.2.1
|
||||
gdb_ver := gdb-11.2
|
||||
REQUIRED_MIN_MAKE_MAJOR_VERSION := 4
|
||||
else ifeq ($(GCC_VER), 11.2.0)
|
||||
gcc_ver := gcc-11.2.0
|
||||
binutils_ver := binutils-2.37
|
||||
ccache_ver := ccache-3.7.12
|
||||
@@ -189,7 +206,7 @@ RPM_LIST := \
|
||||
libXi libXi-devel \
|
||||
libXdmcp libXdmcp-devel \
|
||||
libXau libXau-devel \
|
||||
libgcc \
|
||||
libgcc libxcrypt \
|
||||
zlib zlib-devel \
|
||||
libffi libffi-devel \
|
||||
fontconfig fontconfig-devel \
|
||||
@@ -245,7 +262,7 @@ define Download
|
||||
$$($(1)_CFG) : $$($(1)_FILE)
|
||||
mkdir -p $$(SRCDIR)
|
||||
tar -C $$(SRCDIR) -xf $$<
|
||||
$$(foreach p,$$(abspath $$(wildcard patches/$$(notdir $$($(1)_DIR)).patch)), \
|
||||
$$(foreach p,$$(abspath $$(wildcard patches/$$(ARCH)-$$(notdir $$($(1)_DIR)).patch)), \
|
||||
echo PATCHING $$(p) ; \
|
||||
patch -d $$($(1)_DIR) -p1 -i $$(p) ; \
|
||||
)
|
||||
@@ -414,6 +431,12 @@ $(gcc) \
|
||||
# wants.
|
||||
$(BUILDDIR)/$(binutils_ver)/Makefile : CONFIG += --enable-64-bit-bfd --libdir=$(PREFIX)/$(word 1,$(LIBDIRS))
|
||||
|
||||
ifneq ($(ARCH), riscv64)
|
||||
# gold is not available for riscv64 for some reason,
|
||||
# and subsequent linking will fail if we try to enable it.
|
||||
LINKER_CONFIG := --enable-gold=default
|
||||
endif
|
||||
|
||||
# Makefile creation. Simply run configure in build dir.
|
||||
# Setting CFLAGS to -O2 generates a much faster ld.
|
||||
$(bfdmakes) \
|
||||
@@ -426,11 +449,11 @@ $(BUILDDIR)/$(binutils_ver)/Makefile \
|
||||
$(PATHPRE) $(ENVS) CFLAGS="-O2 $(CFLAGS)" \
|
||||
$(BINUTILS_CFG) \
|
||||
$(CONFIG) \
|
||||
$(LINKER_CONFIG) \
|
||||
--with-sysroot=$(SYSROOT) \
|
||||
--disable-nls \
|
||||
--program-prefix=$(TARGET)- \
|
||||
--enable-multilib \
|
||||
--enable-gold=default \
|
||||
--enable-threads \
|
||||
--enable-plugins \
|
||||
) > $(@D)/log.config 2>&1
|
||||
@@ -494,7 +517,7 @@ ifeq ($(ARCH), armhfp)
|
||||
$(BUILDDIR)/$(gcc_ver)/Makefile : CONFIG += --with-float=hard
|
||||
endif
|
||||
|
||||
ifneq ($(filter ppc64 ppc64le s390x, $(ARCH)), )
|
||||
ifneq ($(filter riscv64 ppc64 ppc64le s390x, $(ARCH)), )
|
||||
# We only support 64-bit on these platforms anyway
|
||||
CONFIG += --disable-multilib
|
||||
endif
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash -e
|
||||
#
|
||||
# Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2018, 2023, 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,10 +40,22 @@ mkdir -p $BUILD_DIR $JAR_DIR
|
||||
cd $JAR_DIR
|
||||
rm -f *
|
||||
|
||||
wget https://repo.maven.apache.org/maven2/org/apache/commons/commons-math3/$COMMONS_MATH3_VERSION/commons-math3-$COMMONS_MATH3_VERSION.jar
|
||||
wget https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/$JOPT_SIMPLE_VERSION/jopt-simple-$JOPT_SIMPLE_VERSION.jar
|
||||
wget https://repo.maven.apache.org/maven2/org/openjdk/jmh/jmh-core/$JMH_VERSION/jmh-core-$JMH_VERSION.jar
|
||||
wget https://repo.maven.apache.org/maven2/org/openjdk/jmh/jmh-generator-annprocess/$JMH_VERSION/jmh-generator-annprocess-$JMH_VERSION.jar
|
||||
fetchJar() {
|
||||
url="https://repo.maven.apache.org/maven2/$1/$2/$3/$2-$3.jar"
|
||||
if command -v curl > /dev/null; then
|
||||
curl -O --fail $url
|
||||
elif command -v wget > /dev/null; then
|
||||
wget $url
|
||||
else
|
||||
echo "Could not find either curl or wget"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
fetchJar org/apache/commons commons-math3 $COMMONS_MATH3_VERSION
|
||||
fetchJar net/sf/jopt-simple jopt-simple $JOPT_SIMPLE_VERSION
|
||||
fetchJar org/openjdk/jmh jmh-core $JMH_VERSION
|
||||
fetchJar org/openjdk/jmh jmh-generator-annprocess $JMH_VERSION
|
||||
|
||||
tar -cvzf ../$BUNDLE_NAME *
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2023, 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
|
||||
@@ -26,6 +26,12 @@
|
||||
|
||||
# This script copies parts of a Visual Studio installation into a devkit
|
||||
# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin or WSL.
|
||||
#
|
||||
# To include the debugger tools for the jtreg failure_handler, those need to
|
||||
# be explicitly added to the Windows SDK installation first. That is done
|
||||
# through Windows Settings - Apps, find the Windows Software Development Kit
|
||||
# installation, click modify, and add the debugger tools.
|
||||
#
|
||||
# erik.joelsson@oracle.com
|
||||
|
||||
usage_and_exit() {
|
||||
@@ -197,6 +203,17 @@ mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Redist
|
||||
cp -r "$SDK_INSTALL_DIR/Redist/$UCRT_VERSION/ucrt" $DEVKIT_ROOT/$SDK_VERSION/Redist/
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/include
|
||||
cp -r "$SDK_INSTALL_DIR/include/$SDK_FULL_VERSION/"* $DEVKIT_ROOT/$SDK_VERSION/include/
|
||||
if [ -d "$SDK_INSTALL_DIR/Debuggers" ]; then
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Debuggers/lib
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/arm64" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/x64" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/x86" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/lib/arm64" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/lib/x64" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/lib/x86" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/lib/
|
||||
else
|
||||
echo "No SDK debuggers found, skipping"
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
# Generate devkit.info
|
||||
@@ -211,14 +228,14 @@ echo-info "# This file describes to configure how to interpret the contents of t
|
||||
echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\""
|
||||
echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/Debuggers/x86\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
|
||||
echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib/x86;\$DEVKIT_ROOT/VC/atlmfc/lib/x86;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\""
|
||||
echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\""
|
||||
echo-info "DEVKIT_UCRT_DLL_DIR_x86=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x86\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/Debuggers/x64\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
|
||||
echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/x64;\$DEVKIT_ROOT/VC/atlmfc/lib/x64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
|
||||
@@ -226,7 +243,7 @@ echo-info "DEVKIT_VCRUNTIME_1_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$VCRUNTIM
|
||||
echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
|
||||
echo-info "DEVKIT_UCRT_DLL_DIR_x86_64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x64\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_aarch64=\"\$DEVKIT_ROOT/VC/bin/arm64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_aarch64=\"\$DEVKIT_ROOT/VC/bin/arm64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/Debuggers/arm64\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_aarch64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
|
||||
echo-info "DEVKIT_VS_LIB_aarch64=\"\$DEVKIT_ROOT/VC/lib/arm64;\$DEVKIT_ROOT/VC/atlmfc/lib/arm64;\$DEVKIT_ROOT/$SDK_VERSION/lib/arm64\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL\""
|
||||
|
||||
14
make/devkit/patches/riscv64-gcc-11.3.0.patch
Normal file
14
make/devkit/patches/riscv64-gcc-11.3.0.patch
Normal file
@@ -0,0 +1,14 @@
|
||||
diff -ur a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
|
||||
--- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp 2022-11-30 12:25:37.363419659 +0100
|
||||
+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp 2022-11-30 12:42:48.135412054 +0100
|
||||
@@ -59,7 +59,9 @@
|
||||
|
||||
#if !SANITIZER_ANDROID
|
||||
#include <fstab.h>
|
||||
-#include <sys/mount.h>
|
||||
+// sys/mount.h conflicts with linux/fs.h in glibc 2.36+
|
||||
+// See https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E
|
||||
+// This has been fixed elsewhere, but apparently not in Fedora riscv.
|
||||
#include <sys/timeb.h>
|
||||
#include <utmpx.h>
|
||||
#endif
|
||||
@@ -59,6 +59,11 @@ ifeq ($(call check-jvm-feature, compiler2), true)
|
||||
# Add file macro mappings
|
||||
ADLC_CFLAGS += $(FILE_MACRO_CFLAGS)
|
||||
|
||||
ifeq ($(UBSAN_ENABLED), true)
|
||||
ADLC_CFLAGS += $(UBSAN_CFLAGS)
|
||||
ADLC_LDFLAGS += $(UBSAN_LDFLAGS)
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_ADLC, \
|
||||
NAME := adlc, \
|
||||
TYPE := EXECUTABLE, \
|
||||
|
||||
@@ -28,6 +28,14 @@ $(eval $(call IncludeCustomExtension, hotspot/lib/CompileGtest.gmk))
|
||||
GTEST_TEST_SRC += $(TOPDIR)/test/hotspot/gtest
|
||||
GTEST_LAUNCHER_SRC := $(TOPDIR)/test/hotspot/gtest/gtestLauncher.cpp
|
||||
|
||||
ifeq ($(ASAN_ENABLED), true)
|
||||
GTEST_LAUNCHER_SRC += $(TOPDIR)/make/data/asan/asan_default_options.cpp
|
||||
endif
|
||||
|
||||
ifeq ($(LSAN_ENABLED), true)
|
||||
GTEST_LAUNCHER_SRC += $(TOPDIR)/make/data/lsan/lsan_default_options.cpp
|
||||
endif
|
||||
|
||||
# On Windows, there are no internal debug symbols so must set copying to true
|
||||
# to get any at all.
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013, 2023, 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
|
||||
@@ -166,8 +166,10 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJVM, \
|
||||
DISABLED_WARNINGS_clang_g1ParScanThreadState.cpp := delete-abstract-non-virtual-dtor, \
|
||||
DISABLED_WARNINGS_clang_g1YoungGCPostEvacuateTasks.cpp := delete-abstract-non-virtual-dtor, \
|
||||
DISABLED_WARNINGS_clang_management.cpp := missing-field-initializers, \
|
||||
DISABLED_WARNINGS_clang_notificationThread.cpp := bitwise-instead-of-logical, \
|
||||
DISABLED_WARNINGS_clang_os_posix.cpp := mismatched-tags missing-field-initializers, \
|
||||
DISABLED_WARNINGS_clang_postaloc.cpp := tautological-undefined-compare, \
|
||||
DISABLED_WARNINGS_clang_serviceThread.cpp := bitwise-instead-of-logical, \
|
||||
DISABLED_WARNINGS_clang_vm_version_x86.cpp := missing-field-initializers, \
|
||||
DISABLED_WARNINGS_clang_zTracer.cpp := undefined-var-template, \
|
||||
DISABLED_WARNINGS_xlc := $(DISABLED_WARNINGS_xlc), \
|
||||
|
||||
@@ -67,10 +67,12 @@ JVM_CFLAGS_TARGET_DEFINES += \
|
||||
#
|
||||
|
||||
ifeq ($(DEBUG_LEVEL), release)
|
||||
# release builds disable uses of assert macro from <assert.h>.
|
||||
JVM_CFLAGS_DEBUGLEVEL := -DNDEBUG
|
||||
# For hotspot, release builds differ internally between "optimized" and "product"
|
||||
# in that "optimize" does not define PRODUCT.
|
||||
ifneq ($(HOTSPOT_DEBUG_LEVEL), optimized)
|
||||
JVM_CFLAGS_DEBUGLEVEL := -DPRODUCT
|
||||
JVM_CFLAGS_DEBUGLEVEL += -DPRODUCT
|
||||
endif
|
||||
else ifeq ($(DEBUG_LEVEL), fastdebug)
|
||||
JVM_CFLAGS_DEBUGLEVEL := -DASSERT
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2016, 2023, 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
|
||||
@@ -41,10 +41,22 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
$(foreach v, $(JVM_VARIANTS), \
|
||||
$(eval $(call SetupCopyFiles, COPY_GTEST_MSVCR_$v, \
|
||||
DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
|
||||
FILES := $(MSVCR_DLL) $(VCRUNTIME_1_DLL) $(MSVCP_DLL), \
|
||||
FILES := $(MSVCR_DLL), \
|
||||
FLATTEN := true, \
|
||||
)) \
|
||||
$(eval TARGETS += $$(COPY_GTEST_MSVCR_$v)) \
|
||||
$(eval $(call SetupCopyFiles, COPY_GTEST_VCRUNTIME_1_$v, \
|
||||
DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
|
||||
FILES := $(VCRUNTIME_1_DLL), \
|
||||
FLATTEN := true, \
|
||||
)) \
|
||||
$(eval TARGETS += $$(COPY_GTEST_VCRUNTIME_1_$v)) \
|
||||
$(eval $(call SetupCopyFiles, COPY_GTEST_MSVCP_$v, \
|
||||
DEST := $(TEST_IMAGE_DIR)/hotspot/gtest/$v, \
|
||||
FILES := $(MSVCP_DLL), \
|
||||
FLATTEN := true, \
|
||||
)) \
|
||||
$(eval TARGETS += $$(COPY_GTEST_MSVCP_$v)) \
|
||||
$(if $(call equals, $(COPY_DEBUG_SYMBOLS), true), \
|
||||
$(eval $(call SetupCopyFiles, COPY_GTEST_PDB_$v, \
|
||||
SRC := $(HOTSPOT_OUTPUTDIR)/variant-$v/libjvm/gtest, \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2018, 2023, 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
|
||||
@@ -50,18 +50,19 @@ public class SPI {
|
||||
out.println(line);
|
||||
} else {
|
||||
charsets.values()
|
||||
.stream()
|
||||
.filter(cs -> cs.pkgName.equals("sun.nio.cs.ext") &&
|
||||
!cs.isInternal &&
|
||||
(cs.os == null || cs.os.equals(os)))
|
||||
.forEach( cs -> {
|
||||
out.printf(" charset(\"%s\", \"%s\",%n", cs.csName, cs.clzName);
|
||||
out.printf(" new String[] {%n");
|
||||
for (String alias : cs.aliases) {
|
||||
out.printf(" \"%s\",%n", alias);
|
||||
}
|
||||
out.printf(" });%n%n");
|
||||
});
|
||||
.stream()
|
||||
.filter(cs -> cs.pkgName.equals("sun.nio.cs.ext") &&
|
||||
!cs.isInternal &&
|
||||
(cs.os == null || cs.os.equals(os)))
|
||||
.forEach( cs -> {
|
||||
out.printf(" charset(\"%s\", \"%s\",%n", cs.csName, cs.clzName);
|
||||
out.printf(" new String[] {%n");
|
||||
for (String alias : cs.aliases) {
|
||||
out.printf(" \"%s\",%n",
|
||||
alias);
|
||||
}
|
||||
out.printf(" });%n%n");
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if (type.startsWith("stdcs")) { // StandardCharsets.java
|
||||
@@ -93,8 +94,15 @@ public class SPI {
|
||||
.filter(cs -> cs.pkgName.equals("sun.nio.cs"))
|
||||
.forEach( cs -> {
|
||||
if (cs.aliases == null || cs.aliases.length == 0) {
|
||||
out.printf(" static String[] aliases_%s() { return null; }%n%n",
|
||||
cs.clzName);
|
||||
if (cs.csName.equals("GB18030")) {
|
||||
out.printf(" static String[] aliases_GB18030() { return new String[] {%n");
|
||||
out.printf(" GB18030.IS_2000 ? \"gb18030-2000\" : \"gb18030-2022\"%n");
|
||||
out.printf(" };%n");
|
||||
out.printf(" }%n%n");
|
||||
} else {
|
||||
out.printf(" static String[] aliases_%s() { return null; }%n%n",
|
||||
cs.clzName);
|
||||
}
|
||||
} else {
|
||||
boolean methodEnd = true;
|
||||
// non-final for SJIS and MS932 to support sun.nio.cs.map
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2023, 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
|
||||
@@ -147,6 +147,12 @@ public class HelloClasslist {
|
||||
invoke(handle("staticMethod_V", MethodType.methodType(void.class)));
|
||||
|
||||
LOGGER.log(Level.FINE, "New Date: " + newDate + " - old: " + oldDate);
|
||||
|
||||
// The Striped64$Cell is loaded rarely only when there's a contention among
|
||||
// multiple threads performing LongAdder.increment(). This results in
|
||||
// an inconsistency in the classlist between builds (see JDK-8295951).
|
||||
// To avoid the problem, load the class explicitly.
|
||||
Class<?> striped64Class = Class.forName("java.util.concurrent.atomic.Striped64$Cell");
|
||||
}
|
||||
|
||||
public HelloClasslist() {}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2023, 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,8 +34,6 @@ import java.text.MessageFormat;
|
||||
import java.time.*;
|
||||
import java.util.*;
|
||||
import java.util.ResourceBundle.Control;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
@@ -609,16 +607,19 @@ public class CLDRConverter {
|
||||
* Translate the aliases into the real entries in the bundle map.
|
||||
*/
|
||||
static void handleAliases(Map<String, Object> bundleMap) {
|
||||
Set<String> bundleKeys = bundleMap.keySet();
|
||||
try {
|
||||
for (String key : aliases.keySet()) {
|
||||
String targetKey = aliases.get(key);
|
||||
if (bundleKeys.contains(targetKey)) {
|
||||
bundleMap.putIfAbsent(key, bundleMap.get(targetKey));
|
||||
for (String key : aliases.keySet()) {
|
||||
var source = bundleMap.get(aliases.get(key));
|
||||
if (source != null) {
|
||||
if (bundleMap.get(key) instanceof String[] sa) {
|
||||
// fill missing elements in case of String array
|
||||
for (int i = 0; i < sa.length; i++) {
|
||||
if (sa[i] == null && ((String[])source)[i] != null) {
|
||||
sa[i] = ((String[])source)[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
bundleMap.putIfAbsent(key, source);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.getLogger(CLDRConverter.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -633,7 +634,7 @@ public class CLDRConverter {
|
||||
/**
|
||||
* Examine if the id includes the country (territory) code. If it does, it returns
|
||||
* the country code.
|
||||
* Otherwise, it returns null. eg. when the id is "zh_Hans_SG", it return "SG".
|
||||
* Otherwise, it returns null. eg. when the id is "zh_Hans_SG", it returns "SG".
|
||||
* It does NOT return UN M.49 code, e.g., '001', as those three digit numbers cannot
|
||||
* be translated into package names.
|
||||
*/
|
||||
@@ -645,13 +646,21 @@ public class CLDRConverter {
|
||||
/**
|
||||
* Examine if the id includes the region code. If it does, it returns
|
||||
* the region code.
|
||||
* Otherwise, it returns null. eg. when the id is "zh_Hans_SG", it return "SG".
|
||||
* Otherwise, it returns null. eg. when the id is "zh_Hans_SG", it returns "SG".
|
||||
* It DOES return UN M.49 code, e.g., '001', as well as ISO 3166 two letter country codes.
|
||||
*/
|
||||
static String getRegionCode(String id) {
|
||||
return Locale.forLanguageTag(id.replaceAll("_", "-")).getCountry();
|
||||
}
|
||||
|
||||
/**
|
||||
* Examine if the id includes the script code. If it does, it returns
|
||||
* the script code.
|
||||
*/
|
||||
static String getScriptCode(String id) {
|
||||
return Locale.forLanguageTag(id.replaceAll("_", "-")).getScript();
|
||||
}
|
||||
|
||||
private static class KeyComparator implements Comparator<String> {
|
||||
static KeyComparator INSTANCE = new KeyComparator();
|
||||
|
||||
@@ -1020,6 +1029,7 @@ public class CLDRConverter {
|
||||
private static void setupBaseLocales(String localeList) {
|
||||
Arrays.stream(localeList.split(","))
|
||||
.map(Locale::forLanguageTag)
|
||||
.map(l -> new Locale.Builder().setLocale(l).setScript("Latn").build())
|
||||
.map(l -> Control.getControl(Control.FORMAT_DEFAULT)
|
||||
.getCandidateLocales("", l))
|
||||
.forEach(BASE_LOCALES::addAll);
|
||||
|
||||
@@ -417,11 +417,11 @@ class ResourceBundleGenerator implements BundleGenerator {
|
||||
private static final Locale.Builder LOCALE_BUILDER = new Locale.Builder();
|
||||
private static boolean isBaseLocale(String localeID) {
|
||||
localeID = localeID.replaceAll("-", "_");
|
||||
// ignore script here
|
||||
Locale locale = LOCALE_BUILDER
|
||||
.clear()
|
||||
.setLanguage(CLDRConverter.getLanguageCode(localeID))
|
||||
.setRegion(CLDRConverter.getRegionCode(localeID))
|
||||
.setScript(CLDRConverter.getScriptCode(localeID))
|
||||
.build();
|
||||
return CLDRConverter.BASE_LOCALES.contains(locale);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
import static java.lang.System.lineSeparator;
|
||||
import static java.nio.file.StandardOpenOption.*;
|
||||
import static java.util.stream.Collectors.joining;
|
||||
import static jdk.javadoc.doclet.Taglet.Location.TYPE;
|
||||
|
||||
/**
|
||||
@@ -98,7 +99,7 @@ public final class SealedGraph implements Taglet {
|
||||
.map(Objects::toString)
|
||||
.collect(Collectors.toUnmodifiableSet());
|
||||
|
||||
String dotContent = Renderer.graph(typeElement, exports);
|
||||
String dotContent = new Renderer().graph(typeElement, exports);
|
||||
|
||||
try {
|
||||
Files.writeString(dotFile, dotContent, WRITE, CREATE, TRUNCATE_EXISTING);
|
||||
@@ -133,13 +134,10 @@ public final class SealedGraph implements Taglet {
|
||||
(height <= 0 ? "" : " height=\"" + height + "\""));
|
||||
}
|
||||
|
||||
private static final class Renderer {
|
||||
|
||||
private Renderer() {
|
||||
}
|
||||
private final class Renderer {
|
||||
|
||||
// Generates a graph in DOT format
|
||||
static String graph(TypeElement rootClass, Set<String> exports) {
|
||||
String graph(TypeElement rootClass, Set<String> exports) {
|
||||
final State state = new State(rootClass);
|
||||
traverse(state, rootClass, exports);
|
||||
return state.render();
|
||||
@@ -155,17 +153,21 @@ public final class SealedGraph implements Taglet {
|
||||
}
|
||||
}
|
||||
|
||||
private static final class State {
|
||||
private final class State {
|
||||
|
||||
private static final String LABEL = "label";
|
||||
private static final String TOOLTIP = "tooltip";
|
||||
private static final String LINK = "href";
|
||||
private static final String STYLE = "style";
|
||||
|
||||
private final TypeElement rootNode;
|
||||
|
||||
private final StringBuilder builder;
|
||||
|
||||
private final Map<String, Map<String, String>> nodeStyleMap;
|
||||
|
||||
public State(TypeElement rootNode) {
|
||||
this.rootNode = rootNode;
|
||||
nodeStyleMap = new LinkedHashMap<>();
|
||||
builder = new StringBuilder()
|
||||
.append("digraph G {")
|
||||
@@ -188,12 +190,30 @@ public final class SealedGraph implements Taglet {
|
||||
var styles = nodeStyleMap.computeIfAbsent(id(node), n -> new LinkedHashMap<>());
|
||||
styles.put(LABEL, node.getSimpleName().toString());
|
||||
styles.put(TOOLTIP, node.getQualifiedName().toString());
|
||||
styles.put(LINK, relativeLink(node));
|
||||
if (!(node.getModifiers().contains(Modifier.SEALED) || node.getModifiers().contains(Modifier.FINAL))) {
|
||||
// This indicates that the hierarchy is not closed
|
||||
styles.put(STYLE, "dashed");
|
||||
}
|
||||
}
|
||||
|
||||
// A permitted class must be in the same package or in the same module.
|
||||
// This implies the module is always the same.
|
||||
private String relativeLink(TypeElement node) {
|
||||
var util = SealedGraph.this.docletEnvironment.getElementUtils();
|
||||
var rootPackage = util.getPackageOf(rootNode);
|
||||
var nodePackage = util.getPackageOf(node);
|
||||
var backNavigator = rootPackage.getQualifiedName().toString().chars()
|
||||
.filter(c -> c == '.')
|
||||
.mapToObj(c -> "../")
|
||||
.collect(joining()) +
|
||||
"../";
|
||||
var forwardNavigator = nodePackage.getQualifiedName().toString()
|
||||
.replace(".", "/");
|
||||
|
||||
return backNavigator + forwardNavigator + "/" + node.getSimpleName() + ".html";
|
||||
}
|
||||
|
||||
public void addEdge(TypeElement node, TypeElement subNode) {
|
||||
builder.append(" ")
|
||||
.append(quotedId(subNode))
|
||||
@@ -209,8 +229,8 @@ public final class SealedGraph implements Taglet {
|
||||
.append('"').append(nodeName).append("\" ")
|
||||
.append(styles.entrySet().stream()
|
||||
.map(e -> e.getKey() + "=\"" + e.getValue() + "\"")
|
||||
.collect(Collectors.joining(" ", "[", "]")))
|
||||
.append(System.lineSeparator());
|
||||
.collect(joining(" ", "[", "]")))
|
||||
.append(lineSeparator());
|
||||
});
|
||||
builder.append("}");
|
||||
return builder.toString();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -140,6 +140,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBZIP, \
|
||||
$(LIBZ_CFLAGS), \
|
||||
CFLAGS_unix := $(BUILD_LIBZIP_MMAP) -UDEBUG, \
|
||||
DISABLED_WARNINGS_gcc_zip_util.c := unused-function, \
|
||||
DISABLED_WARNINGS_clang := deprecated-non-prototype, \
|
||||
DISABLED_WARNINGS_clang_gzwrite.c := format-nonliteral, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
@@ -211,7 +212,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJLI, \
|
||||
OPTIMIZATION := HIGH, \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \
|
||||
DISABLED_WARNINGS_gcc := unused-function, \
|
||||
DISABLED_WARNINGS_clang := format-nonliteral, \
|
||||
DISABLED_WARNINGS_clang := format-nonliteral deprecated-non-prototype, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
LIBS_unix := $(LIBZ_LIBS), \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2023, 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
|
||||
@@ -120,11 +120,6 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
LIBAWT_VERSIONINFO_RESOURCE := $(TOPDIR)/src/$(MODULE)/windows/native/libawt/windows/awt.rc
|
||||
endif
|
||||
|
||||
ifeq ($(call isTargetOs, linux), true)
|
||||
# FIXME: This is probably not what we want to do, but keep it now for compatibility.
|
||||
LIBAWT_CFLAGS += $(EXPORT_ALL_SYMBOLS)
|
||||
endif
|
||||
|
||||
# Turn off all warnings for debug_mem.c This is needed because the specific warning
|
||||
# about initializing a declared 'extern' cannot be turned off individually. Only
|
||||
# applies to debug builds. This limitation in gcc is tracked in
|
||||
@@ -152,7 +147,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \
|
||||
DISABLED_WARNINGS_gcc_Region.c := maybe-uninitialized, \
|
||||
DISABLED_WARNINGS_gcc_SurfaceData.c := unused-value, \
|
||||
DISABLED_WARNINGS_gcc_TransformHelper.c := sign-compare, \
|
||||
DISABLED_WARNINGS_clang_awt_ImagingLib.c := sign-compare, \
|
||||
DISABLED_WARNINGS_clang_awt_ImagingLib.c := sign-compare deprecated-non-prototype, \
|
||||
DISABLED_WARNINGS_clang_awt_parseImage.c := sign-compare, \
|
||||
DISABLED_WARNINGS_clang_debug_mem.c := extern-initializer format-nonliteral, \
|
||||
DISABLED_WARNINGS_clang_debug_trace.c := format-nonliteral, \
|
||||
@@ -414,7 +409,7 @@ ifeq ($(FREETYPE_TO_USE), system)
|
||||
LIBFREETYPE_LIBS := $(FREETYPE_LIBS)
|
||||
else
|
||||
BUILD_LIBFREETYPE_HEADER_DIRS := $(TOPDIR)/src/$(MODULE)/share/native/libfreetype/include
|
||||
BUILD_LIBFREETYPE_CFLAGS := -DFT2_BUILD_LIBRARY $(EXPORT_ALL_SYMBOLS)
|
||||
BUILD_LIBFREETYPE_CFLAGS := -DFT2_BUILD_LIBRARY
|
||||
|
||||
# For use by libfontmanager:
|
||||
LIBFREETYPE_CFLAGS := -I$(BUILD_LIBFREETYPE_HEADER_DIRS)
|
||||
@@ -433,6 +428,7 @@ else
|
||||
$(BUILD_LIBFREETYPE_CFLAGS), \
|
||||
EXTRA_HEADER_DIRS := $(BUILD_LIBFREETYPE_HEADER_DIRS), \
|
||||
DISABLED_WARNINGS_microsoft := 4267 4244 4996, \
|
||||
DISABLED_WARNINGS_gcc := dangling-pointer stringop-overflow, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
))
|
||||
@@ -762,6 +758,7 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
|
||||
DISABLED_WARNINGS_gcc_splashscreen_gfx_impl.c := implicit-fallthrough maybe-uninitialized, \
|
||||
DISABLED_WARNINGS_gcc_splashscreen_impl.c := implicit-fallthrough sign-compare unused-function, \
|
||||
DISABLED_WARNINGS_gcc_splashscreen_sys.c := type-limits unused-result, \
|
||||
DISABLED_WARNINGS_clang := deprecated-non-prototype, \
|
||||
DISABLED_WARNINGS_clang_dgif_lib.c := sign-compare, \
|
||||
DISABLED_WARNINGS_clang_gzwrite.c := format-nonliteral, \
|
||||
DISABLED_WARNINGS_clang_splashscreen_impl.c := sign-compare, \
|
||||
@@ -834,6 +831,7 @@ ifeq ($(call isTargetOs, macosx), true)
|
||||
DISABLED_WARNINGS_clang_ImageSurfaceData.m := enum-conversion parentheses-equality, \
|
||||
DISABLED_WARNINGS_clang_MTLBlitLoops.m := pointer-arith, \
|
||||
DISABLED_WARNINGS_clang_MTLPipelineStatesStorage.m := semicolon-before-method-body, \
|
||||
DISABLED_WARNINGS_clang_MTLRenderer.m := gnu-folding-constant, \
|
||||
DISABLED_WARNINGS_clang_MTLVertexCache.m := pointer-arith, \
|
||||
DISABLED_WARNINGS_clang_OGLBufImgOps.c := format-nonliteral, \
|
||||
DISABLED_WARNINGS_clang_OGLPaints.c := format-nonliteral, \
|
||||
|
||||
@@ -73,7 +73,7 @@ $(eval $(call SetupJdkExecutable, BUILD_JPACKAGE_APPLAUNCHEREXE, \
|
||||
CXXFLAGS_windows := $(JPACKAGE_CXXFLAGS_windows), \
|
||||
CFLAGS_windows := $(JPACKAGE_CFLAGS_windows), \
|
||||
LDFLAGS := $(LDFLAGS_JDKEXE), \
|
||||
LIBS_macosx := $(LIBCXX) -framework Cocoa, \
|
||||
LIBS_macosx := $(LIBCXX) -framework Cocoa -rpath @executable_path/../Frameworks/ -rpath @executable_path/../PlugIns/, \
|
||||
LIBS_windows := $(LIBCXX) user32.lib ole32.lib msi.lib shlwapi.lib \
|
||||
Shell32.lib, \
|
||||
LIBS_linux := -ldl, \
|
||||
|
||||
@@ -874,7 +874,7 @@ BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm
|
||||
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
BUILD_HOTSPOT_JTREG_EXECUTABLES_CFLAGS_exeFPRegs := -MT
|
||||
BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c libTestJNI.c libCompleteExit.c libTestPsig.c
|
||||
BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c libTestJNI.c libCompleteExit.c libTestPsig.c libnativeStack.c
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libatExit := jvm.lib
|
||||
BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exedaemonDestroy := jvm.lib
|
||||
else
|
||||
@@ -1515,6 +1515,19 @@ else
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libterminatedThread += -lpthread
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libatExit += -ljvm
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libCompleteExit += -lpthread
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libnativeStack += -lpthread
|
||||
endif
|
||||
|
||||
ifeq ($(ASAN_ENABLED), true)
|
||||
# Any executable which launches the JVM and uses a custom launcher needs to explicitly link in the
|
||||
# default ASan options.
|
||||
BUILD_HOTSPOT_JTREG_EXTRA_FILES += $(TOPDIR)/make/data/asan/asan_default_options.c
|
||||
endif
|
||||
|
||||
ifeq ($(LSAN_ENABLED), true)
|
||||
# Any executable which launches the JVM and uses a custom launcher needs to explicitly link in the
|
||||
# default LSan options.
|
||||
BUILD_HOTSPOT_JTREG_EXTRA_FILES += $(TOPDIR)/make/data/lsan/lsan_default_options.c
|
||||
endif
|
||||
|
||||
# This evaluation is expensive and should only be done if this target was
|
||||
@@ -1532,6 +1545,7 @@ ifneq ($(filter build-test-hotspot-jtreg-native, $(MAKECMDGOALS)), )
|
||||
SOURCE_DIRS := $(BUILD_HOTSPOT_JTREG_NATIVE_SRC), \
|
||||
OUTPUT_DIR := $(BUILD_HOTSPOT_JTREG_OUTPUT_DIR), \
|
||||
EXCLUDE := $(BUILD_HOTSPOT_JTREG_EXCLUDE), \
|
||||
EXTRA_FILES := $(BUILD_HOTSPOT_JTREG_EXTRA_FILES), \
|
||||
))
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2023, 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
|
||||
@@ -78,9 +78,11 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libAsyncInvokers := -I$(TEST_LIB_NATIVE_SRC)
|
||||
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTracePinnedThreads := jvm.lib
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libNewDirectByteBuffer := $(WIN_LIB_JAVA)
|
||||
else
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libNewDirectByteBuffer := -ljava
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libNativeThread := -pthread
|
||||
|
||||
# java.lang.foreign tests
|
||||
@@ -130,6 +132,18 @@ ifeq ($(call isTargetOs, linux), true)
|
||||
BUILD_JDK_JTREG_LIBRARIES_STRIP_SYMBOLS_libFib := false
|
||||
endif
|
||||
|
||||
ifeq ($(ASAN_ENABLED), true)
|
||||
# Any executable which launches the JVM and uses a custom launcher needs to explicitly link in the
|
||||
# default ASan options.
|
||||
BUILD_JDK_JTREG_EXTRA_FILES += $(TOPDIR)/make/data/asan/asan_default_options.c
|
||||
endif
|
||||
|
||||
ifeq ($(LSAN_ENABLED), true)
|
||||
# Any executable which launches the JVM and uses a custom launcher needs to explicitly link in the
|
||||
# default LSan options.
|
||||
BUILD_JDK_JTREG_EXTRA_FILES += $(TOPDIR)/make/data/lsan/lsan_default_options.c
|
||||
endif
|
||||
|
||||
# This evaluation is expensive and should only be done if this target was
|
||||
# explicitly called.
|
||||
ifneq ($(filter build-test-jdk-jtreg-native, $(MAKECMDGOALS)), )
|
||||
@@ -145,6 +159,7 @@ ifneq ($(filter build-test-jdk-jtreg-native, $(MAKECMDGOALS)), )
|
||||
SOURCE_DIRS := $(BUILD_JDK_JTREG_NATIVE_SRC), \
|
||||
OUTPUT_DIR := $(BUILD_JDK_JTREG_OUTPUT_DIR), \
|
||||
EXCLUDE := $(BUILD_JDK_JTREG_EXCLUDE), \
|
||||
EXTRA_FILES := $(BUILD_JDK_JTREG_EXTRA_FILES), \
|
||||
))
|
||||
endif
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ ThemesMenu.ruby.labelAndMnemonic=&Ruby
|
||||
ThemesMenu.ruby_accessible_description=A Metal Theme that uses red colors
|
||||
|
||||
|
||||
### Font SubMenu (under Themes)
|
||||
### Font SubMenu (under Themes)
|
||||
FontMenu.fonts.labelAndMnemonic=&Fonts
|
||||
FontMenu.fonts_accessible_description=Menu to choose fonts for the Java look and feel
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2010, 2022, 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
|
||||
@@ -118,7 +118,7 @@ ThemesMenu.ruby.labelAndMnemonic=&Rubinrot
|
||||
ThemesMenu.ruby_accessible_description=Ein Metal-Theme mit roten Farben
|
||||
|
||||
|
||||
### Font SubMenu (under Themes)
|
||||
### Font SubMenu (under Themes)
|
||||
FontMenu.fonts.labelAndMnemonic=Schri&ftarten
|
||||
FontMenu.fonts_accessible_description=Men\u00FC, in dem Sie Schriftarten f\u00FCr das Java-Look-and-Feel ausw\u00E4hlen
|
||||
|
||||
@@ -671,4 +671,3 @@ TreeDemo.accessible_description=Diese Demo zeigt ein Beispiel f\u00FCr die Verwe
|
||||
TreeDemo.tooltip=JTree-Demo
|
||||
TreeDemo.name=Baumdemo
|
||||
TreeDemo.music=Musik
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2010, 2022, 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
|
||||
@@ -48,7 +48,7 @@ SourceCode.loading=<html><body bgcolor="#ffffff">\u30BD\u30FC\u30B9\u30FB\u30B3\
|
||||
|
||||
### Status ###
|
||||
|
||||
Status.loading=\u8AAD\u8FBC\u307F\u4E2D:
|
||||
Status.loading=\u8AAD\u8FBC\u307F\u4E2D:
|
||||
Status.popupMenuAccessible=Shift+F10: \u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u30FB\u30E1\u30CB\u30E5\u30FC\u306E\u6709\u52B9\u5316
|
||||
|
||||
### Menu Bar ###
|
||||
@@ -118,7 +118,7 @@ ThemesMenu.ruby.labelAndMnemonic=\u30EB\u30D3\u30FC(&R)
|
||||
ThemesMenu.ruby_accessible_description=\u8D64\u3092\u57FA\u8ABF\u3068\u3057\u305FMetal\u30C6\u30FC\u30DE
|
||||
|
||||
|
||||
### Font SubMenu (under Themes)
|
||||
### Font SubMenu (under Themes)
|
||||
FontMenu.fonts.labelAndMnemonic=\u30D5\u30A9\u30F3\u30C8(&F)
|
||||
FontMenu.fonts_accessible_description=Java\u30EB\u30C3\u30AF&\u30D5\u30A3\u30FC\u30EB\u7528\u306E\u30D5\u30A9\u30F3\u30C8\u9078\u629E\u30E1\u30CB\u30E5\u30FC
|
||||
|
||||
@@ -184,7 +184,7 @@ MultiMenu.single_accessible_description=SwingSet2\u306E\u30A6\u30A3\u30F3\u30C9\
|
||||
|
||||
### Button Demo ###
|
||||
|
||||
ButtonDemo.accessible_description=ButtonDemo\u3067\u306F\u3001JButton\u3001JRadioButton\u3001JToggleButton\u304A\u3088\u3073JCheckBox\u306E\u4F7F\u7528\u4F8B\u3092\u7D39\u4ECB\u3057\u307E\u3059
|
||||
ButtonDemo.accessible_description=ButtonDemo\u3067\u306F\u3001JButton\u3001JRadioButton\u3001JToggleButton\u304A\u3088\u3073JCheckBox\u306E\u4F7F\u7528\u4F8B\u3092\u7D39\u4ECB\u3057\u307E\u3059
|
||||
ButtonDemo.tooltip=JButton\u3001JRadioButton\u3001JToggleButton\u3001JCheckbox\u30C7\u30E2
|
||||
ButtonDemo.name=Button\u30C7\u30E2
|
||||
|
||||
@@ -202,16 +202,16 @@ ButtonDemo.imagetogglebuttons=\u30A4\u30E1\u30FC\u30B8\u30FB\u30C8\u30B0\u30EB\u
|
||||
ButtonDemo.textcheckboxes=\u30C6\u30AD\u30B9\u30C8\u30FB\u30C1\u30A7\u30C3\u30AF\u30FB\u30DC\u30C3\u30AF\u30B9
|
||||
ButtonDemo.imagecheckboxes=\u30A4\u30E1\u30FC\u30B8\u30FB\u30C1\u30A7\u30C3\u30AF\u30FB\u30DC\u30C3\u30AF\u30B9
|
||||
|
||||
ButtonDemo.button1=1
|
||||
ButtonDemo.button1=1
|
||||
ButtonDemo.button2=2
|
||||
ButtonDemo.button3=<html><font size=2 color=red><bold>3</font></html>
|
||||
|
||||
ButtonDemo.radio1=\u30DC\u30BF\u30F31
|
||||
ButtonDemo.radio1=\u30DC\u30BF\u30F31
|
||||
ButtonDemo.radio2=\u30DC\u30BF\u30F32
|
||||
ButtonDemo.radio3=\u30DC\u30BF\u30F33
|
||||
ButtonDemo.radioX=<html><font size=2 color=red>3<bold>(HTML)</bold></font></html>
|
||||
|
||||
ButtonDemo.check1=1
|
||||
ButtonDemo.check1=1
|
||||
ButtonDemo.check2=2
|
||||
ButtonDemo.check3=3
|
||||
ButtonDemo.checkX=<html><font size=2 color=red>3<bold>(HTML)</bold></font></html>
|
||||
@@ -219,7 +219,7 @@ ButtonDemo.checkX=<html><font size=2 color=red>3<bold>(HTML)</bold></font></html
|
||||
ButtonDemo.customradio=\u30AB\u30B9\u30BF\u30E0\u306E"\u30E1\u30BF\u30EA\u30C3\u30AF\u8ABF"\u30E9\u30B8\u30AA\u30FB\u30DC\u30BF\u30F3
|
||||
ButtonDemo.customcheck=\u30AB\u30B9\u30BF\u30E0\u306E\u96FB\u7403\u30C1\u30A7\u30C3\u30AF\u30FB\u30DC\u30C3\u30AF\u30B9
|
||||
|
||||
ButtonDemo.phone=\u96FB\u8A71
|
||||
ButtonDemo.phone=\u96FB\u8A71
|
||||
ButtonDemo.write=\u66F8\u8FBC\u307F
|
||||
ButtonDemo.peace=\u30D4\u30FC\u30B9
|
||||
|
||||
@@ -427,7 +427,7 @@ ProgressBarDemo.stop_button=\u30C6\u30AD\u30B9\u30C8\u306E\u30ED\u30FC\u30C9\u50
|
||||
ProgressBarDemo.accessible_text_loading_progress=\u30C6\u30AD\u30B9\u30C8\u306E\u30ED\u30FC\u30C9\u4E2D
|
||||
ProgressBarDemo.accessible_text_area_name=\u30ED\u30FC\u30C9\u4E2D\u306E\u30C6\u30AD\u30B9\u30C8
|
||||
|
||||
ProgressBarDemo.accessible_text_area_description=\u3053\u306EJTextArea\u306B\u306F\u3001\u30C6\u30AD\u30B9\u30C8\u304C\u4E00\u5EA6\u306B1\u6587\u5B57\u305A\u3064\u30D0\u30C3\u30D5\u30A1\u304B\u3089\u57CB\u3081\u8FBC\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u30A6\u30A3\u30F3\u30C9\u30A6\u306E\u4E0B\u90E8\u306B\u3042\u308B\u30D7\u30ED\u30B0\u30EC\u30B9\u30FB\u30D0\u30FC\u306B\u3001\u30ED\u30FC\u30C9\u51E6\u7406\u306E\u9032\u6357\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002
|
||||
ProgressBarDemo.accessible_text_area_description=\u3053\u306EJTextArea\u306B\u306F\u3001\u30C6\u30AD\u30B9\u30C8\u304C\u4E00\u5EA6\u306B1\u6587\u5B57\u305A\u3064\u30D0\u30C3\u30D5\u30A1\u304B\u3089\u57CB\u3081\u8FBC\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u30A6\u30A3\u30F3\u30C9\u30A6\u306E\u4E0B\u90E8\u306B\u3042\u308B\u30D7\u30ED\u30B0\u30EC\u30B9\u30FB\u30D0\u30FC\u306B\u3001\u30ED\u30FC\u30C9\u51E6\u7406\u306E\u9032\u6357\u304C\u8868\u793A\u3055\u308C\u307E\u3059
|
||||
|
||||
ProgressBarDemo.text=\u7121\u9650\u306E\u733F\u304C\u7121\u9650\u6570\u306E\u30BF\u30A4\u30D7\u30E9\u30A4\u30BF\u3067\u5165\u529B\u3057\u7D9A\u3051\u308C\u3070\u3001\u3044\u3064\u304B\u306F\u4EBA\u985E\u306E\u5049\u5927\u306A\u4F5C\u54C1\u304C\u3067\u304D\u3042\u304C\u308B\u3068\u4FD7\u306B\u3044\u308F\u308C\u3066\u3044\u307E\u3059\u3002\n\u73FE\u5728\u306E\u9AD8\u901F\u51E6\u7406\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u3092\u4F7F\u7528\u3059\u308C\u3070\u3001\u3053\u306E\u7406\u8AD6\u3092\u30C6\u30B9\u30C8\n\u3067\u304D\u307E\u3059... \n\n\tLzskd jfy 92y;ho4 th;qlh sd 6yty;q2 hnlj 8sdf. Djfy 92y;ho4, th;qxhz d7yty; \n\tQ0hnlj 23&&^ (# ljask djf y92y; fy92y; Sd6y ty;q2h nl jk la gfa harvin garvel\n\tlasdfsd a83sl la8z ks8l 92y;ho4 th;qlh sd 6yty;q2 hnlj 8sdf. Djfy 92y;ho4,\n\tth;qxhz d7yty; Q0hnlj 23&&^ nknod mrs88 jsd79lfm#%$JLaoz6df lso7dj f2 jfls\n\t67d9ol1@2fou99s 1lkj2 @l.k1 2; a89o7aljf 1l3i7ou8 d8l3 lqwerty0092 #1!\n\tja9o do8lkjj139rojsd9**!l6*hd # ljasd78 l2awkjad78 3ol7asljf 3 ldif && l.js\n\tLl ls ewan la8uj 23lll7u 8l 3h hhxx8 8d lsd fixx 891lkjno99sl d8l@@@!!8#8\n\tdfoil jarooda mklaoorj nowai the smisthliylka jkdlfjiw ladajadra lthhheeejfjl\n\tdkddooolda bub mirznod of the koojgaf!! But 2 be or not to be... that is the\n\tquestion. Then when shall we three meet again In thunder, lightning, or in\n\train? When the hurlyburly's done, When the battle's lost and won. That will\n\tbe ere the set of sun. Where the place? Upon the heath. There to meet with\n\tMacbeth. But hath forth not to want..... a banana, or to be.... a banana.\n\tBanana, I knew him banana. Banana banana. Banana banana banana banana.\n\n\n\n\nWell... hmm.... it seemed like a good idea...
|
||||
|
||||
@@ -451,7 +451,7 @@ SliderDemo.accessible_description=\u3053\u306E\u30C7\u30E2\u3067\u306F\u3001JSli
|
||||
SliderDemo.tooltip=JSlider\u30C7\u30E2
|
||||
SliderDemo.name=Slider\u30C7\u30E2
|
||||
|
||||
SliderDemo.slidervalue=Slider\u306E\u5024:
|
||||
SliderDemo.slidervalue=Slider\u306E\u5024:
|
||||
SliderDemo.horizontal=\u6C34\u5E73
|
||||
SliderDemo.vertical=\u5782\u76F4
|
||||
SliderDemo.plain=\u30D7\u30EC\u30FC\u30F3
|
||||
@@ -671,4 +671,3 @@ TreeDemo.accessible_description=\u3053\u306E\u30C7\u30E2\u3067\u306F\u3001JTree\
|
||||
TreeDemo.tooltip=JTree\u30C7\u30E2
|
||||
TreeDemo.name=Tree\u30C7\u30E2
|
||||
TreeDemo.music=\u97F3\u697D
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2010, 2022, 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
|
||||
@@ -48,7 +48,7 @@ SourceCode.loading=<html><body bgcolor="#ffffff">\u6B63\u5728\u52A0\u8F7D\u548C\
|
||||
|
||||
### Status ###
|
||||
|
||||
Status.loading=\u6B63\u5728\u52A0\u8F7D:
|
||||
Status.loading=\u6B63\u5728\u52A0\u8F7D:
|
||||
Status.popupMenuAccessible=\u8BF7\u6309 Shift-F10 \u7EC4\u5408\u952E\u6FC0\u6D3B\u5F39\u51FA\u5F0F\u83DC\u5355
|
||||
|
||||
### Menu Bar ###
|
||||
@@ -118,7 +118,7 @@ ThemesMenu.ruby.labelAndMnemonic=\u5B9D\u77F3\u7EA2(&R)
|
||||
ThemesMenu.ruby_accessible_description=\u7EA2\u8272\u91D1\u5C5E\u4E3B\u9898
|
||||
|
||||
|
||||
### Font SubMenu (under Themes)
|
||||
### Font SubMenu (under Themes)
|
||||
FontMenu.fonts.labelAndMnemonic=\u5B57\u4F53(&F)
|
||||
FontMenu.fonts_accessible_description=\u7528\u6765\u9009\u62E9 Java \u5916\u89C2\u5B57\u4F53\u7684\u83DC\u5355
|
||||
|
||||
@@ -184,7 +184,7 @@ MultiMenu.single_accessible_description=\u5728\u5C4F\u5E55\u4E0A\u521B\u5EFA Swi
|
||||
|
||||
### Button Demo ###
|
||||
|
||||
ButtonDemo.accessible_description=ButtonDemo \u663E\u793A\u4E86\u4F7F\u7528 JButton, JRadioButton, JToggleButton \u548C JCheckBox \u7684\u793A\u4F8B
|
||||
ButtonDemo.accessible_description=ButtonDemo \u663E\u793A\u4E86\u4F7F\u7528 JButton, JRadioButton, JToggleButton \u548C JCheckBox \u7684\u793A\u4F8B
|
||||
ButtonDemo.tooltip=JButton, JRadioButton, JToggleButton, JCheckbox \u6F14\u793A
|
||||
ButtonDemo.name=\u6309\u94AE\u6F14\u793A
|
||||
|
||||
@@ -202,16 +202,16 @@ ButtonDemo.imagetogglebuttons=\u56FE\u50CF\u5207\u6362\u6309\u94AE
|
||||
ButtonDemo.textcheckboxes=\u6587\u672C\u590D\u9009\u6846
|
||||
ButtonDemo.imagecheckboxes=\u56FE\u50CF\u590D\u9009\u6846
|
||||
|
||||
ButtonDemo.button1=\u4E00
|
||||
ButtonDemo.button1=\u4E00
|
||||
ButtonDemo.button2=\u4E8C
|
||||
ButtonDemo.button3=<html><font size=2 color=red><bold>\u4E09!</font></html>
|
||||
|
||||
ButtonDemo.radio1=\u5355\u9009\u4E00
|
||||
ButtonDemo.radio1=\u5355\u9009\u4E00
|
||||
ButtonDemo.radio2=\u5355\u9009\u4E8C
|
||||
ButtonDemo.radio3=\u5355\u9009\u4E09
|
||||
ButtonDemo.radioX=<html><font size=2 color=red>\u4E09<bold> (HTML!)</bold></font></html>
|
||||
|
||||
ButtonDemo.check1=\u4E00
|
||||
ButtonDemo.check1=\u4E00
|
||||
ButtonDemo.check2=\u4E8C
|
||||
ButtonDemo.check3=\u4E09
|
||||
ButtonDemo.checkX=<html><font size=2 color=red>\u4E09<bold> (HTML!)</bold></font></html>
|
||||
@@ -219,7 +219,7 @@ ButtonDemo.checkX=<html><font size=2 color=red>\u4E09<bold> (HTML!)</bold></font
|
||||
ButtonDemo.customradio=\u5B9A\u5236 "chrome" \u5355\u9009\u6309\u94AE\u3002
|
||||
ButtonDemo.customcheck=\u5B9A\u5236\u201C\u706F\u6CE1\u201D\u590D\u9009\u6846\u3002
|
||||
|
||||
ButtonDemo.phone=\u7535\u8BDD
|
||||
ButtonDemo.phone=\u7535\u8BDD
|
||||
ButtonDemo.write=\u5199
|
||||
ButtonDemo.peace=\u5E73\u9759
|
||||
|
||||
@@ -427,7 +427,7 @@ ProgressBarDemo.stop_button=\u505C\u6B62\u52A0\u8F7D\u6587\u672C
|
||||
ProgressBarDemo.accessible_text_loading_progress=\u6587\u672C\u52A0\u8F7D\u8FDB\u5EA6
|
||||
ProgressBarDemo.accessible_text_area_name=\u52A0\u8F7D\u7684\u6587\u672C\u6B63\u5728\u9010\u6E10\u589E\u591A
|
||||
|
||||
ProgressBarDemo.accessible_text_area_description=\u8FD9\u4E2A JTextArea \u7531\u6765\u81EA\u7F13\u51B2\u533A\u7684\u6587\u672C\u9010\u4E2A\u5B57\u7B26\u5730\u586B\u5145, \u540C\u65F6\u7A97\u53E3\u5E95\u90E8\u7684\u8FDB\u5EA6\u680F\u5C06\u663E\u793A\u52A0\u8F7D\u7684\u8FDB\u5EA6
|
||||
ProgressBarDemo.accessible_text_area_description=\u8FD9\u4E2A JTextArea \u7531\u6765\u81EA\u7F13\u51B2\u533A\u7684\u6587\u672C\u9010\u4E2A\u5B57\u7B26\u5730\u586B\u5145\uFF0C\u540C\u65F6\u7A97\u53E3\u5E95\u90E8\u7684\u8FDB\u5EA6\u680F\u5C06\u663E\u793A\u52A0\u8F7D\u7684\u8FDB\u5EA6
|
||||
|
||||
ProgressBarDemo.text=\u5E38\u8A00\u9053: \u5982\u679C\u65E0\u6570\u53EA\u7334\u5B50\u5728\u65E0\u6570\u53F0\u6253\u5B57\u673A\u4E0A\u6572\u51FB\u952E\u76D8, \u6700\u7EC8\n\u5C06\u5F62\u6210\u4EBA\u7C7B\u5386\u53F2\u4E0A\u6240\u6709\u4F1F\u5927\u7684\u8457\u4F5C\u3002\u73B0\u5728, \u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u5F53\u4ECA\u7684\u9AD8\u901F\u8BA1\u7B97\u673A\u6765\u68C0\u9A8C\n\u8FD9\u4E00\u7406\u8BBA\u4E86... \n\n\tLzskd jfy 92y;ho4 th;qlh sd 6yty;q2 hnlj 8sdf. Djfy 92y;ho4, th;qxhz d7yty; \n\tQ0hnlj 23&&^ (# ljask djf y92y; fy92y; Sd6y ty;q2h nl jk la gfa harvin garvel\n\tlasdfsd a83sl la8z ks8l 92y;ho4 th;qlh sd 6yty;q2 hnlj 8sdf. Djfy 92y;ho4,\n\tth;qxhz d7yty; Q0hnlj 23&&^ nknod mrs88 jsd79lfm#%$JLaoz6df lso7dj f2 jfls\n\t67d9ol1@2fou99s 1lkj2 @l.k1 2; a89o7aljf 1l3i7ou8 d8l3 lqwerty0092 #1!\n\tja9o do8lkjj139rojsd9**!l6*hd # ljasd78 l2awkjad78 3ol7asljf 3 ldif && l.js\n\tLl ls ewan la8uj 23lll7u 8l 3h hhxx8 8d lsd fixx 891lkjno99sl d8l@@@!!8#8\n\tdfoil jarooda mklaoorj nowai the smisthliylka jkdlfjiw ladajadra lthhheeejfjl\n\tdkddooolda bub mirznod of the koojgaf!! But 2 be or not to be... that is the\n\tquestion. Then when shall we three meet again In thunder, lightning, or in\n\train? When the hurlyburly's done, When the battle's lost and won. That will\n\tbe ere the set of sun. Where the place? Upon the heath. There to meet with\n\tMacbeth. But hath forth not to want..... a banana, or to be.... a banana.\n\tBanana, I knew him banana. Banana banana. Banana banana banana banana.\n\n\n\n\n\u5662, \u8FD9\u770B\u8D77\u6765\u662F\u4E2A\u597D\u4E3B\u610F...
|
||||
|
||||
@@ -451,7 +451,7 @@ SliderDemo.accessible_description=\u6B64\u6F14\u793A\u663E\u793A\u4E86\u4F7F\u75
|
||||
SliderDemo.tooltip=JSlider \u6F14\u793A
|
||||
SliderDemo.name=\u6ED1\u5757\u6F14\u793A
|
||||
|
||||
SliderDemo.slidervalue=\u6ED1\u5757\u503C:
|
||||
SliderDemo.slidervalue=\u6ED1\u5757\u503C:
|
||||
SliderDemo.horizontal=\u6C34\u5E73
|
||||
SliderDemo.vertical=\u5782\u76F4
|
||||
SliderDemo.plain=\u65E0\u683C\u5F0F
|
||||
@@ -671,4 +671,3 @@ TreeDemo.accessible_description=\u6B64\u6F14\u793A\u663E\u793A\u4E86\u4F7F\u7528
|
||||
TreeDemo.tooltip=JTree \u6F14\u793A
|
||||
TreeDemo.name=\u6811\u6F14\u793A
|
||||
TreeDemo.music=\u97F3\u4E50
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
// Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
// Copyright (c) 2014, 2021, Red Hat, Inc. All rights reserved.
|
||||
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
//
|
||||
@@ -1739,7 +1739,7 @@ void MachPrologNode::format(PhaseRegAlloc *ra_, outputStream *st) const {
|
||||
st->print("\n\t");
|
||||
st->print("ldr rscratch1, [guard]\n\t");
|
||||
st->print("dmb ishld\n\t");
|
||||
st->print("ldr rscratch2, [rthread, #thread_disarmed_offset]\n\t");
|
||||
st->print("ldr rscratch2, [rthread, #thread_disarmed_guard_value_offset]\n\t");
|
||||
st->print("cmp rscratch1, rscratch2\n\t");
|
||||
st->print("b.eq skip");
|
||||
st->print("\n\t");
|
||||
@@ -2301,6 +2301,12 @@ const bool Matcher::match_rule_supported(int opcode) {
|
||||
ret_value = false;
|
||||
}
|
||||
break;
|
||||
case Op_ExpandBits:
|
||||
case Op_CompressBits:
|
||||
if (!(UseSVE > 1 && VM_Version::supports_svebitperm())) {
|
||||
ret_value = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return ret_value; // Per default match rules are supported.
|
||||
@@ -7558,7 +7564,7 @@ instruct storeimmL0(immL0 zero, memory8 mem)
|
||||
instruct storeP(iRegP src, memory8 mem)
|
||||
%{
|
||||
match(Set mem (StoreP mem src));
|
||||
predicate(!needs_releasing_store(n));
|
||||
predicate(!needs_releasing_store(n) && n->as_Store()->barrier_data() == 0);
|
||||
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "str $src, $mem\t# ptr" %}
|
||||
@@ -7572,7 +7578,7 @@ instruct storeP(iRegP src, memory8 mem)
|
||||
instruct storeimmP0(immP0 zero, memory8 mem)
|
||||
%{
|
||||
match(Set mem (StoreP mem zero));
|
||||
predicate(!needs_releasing_store(n));
|
||||
predicate(!needs_releasing_store(n) && n->as_Store()->barrier_data() == 0);
|
||||
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "str zr, $mem\t# ptr" %}
|
||||
@@ -7973,6 +7979,7 @@ instruct storeimmL0_volatile(immL0 zero, /* sync_memory*/indirect mem)
|
||||
instruct storeP_volatile(iRegP src, /* sync_memory*/indirect mem)
|
||||
%{
|
||||
match(Set mem (StoreP mem src));
|
||||
predicate(n->as_Store()->barrier_data() == 0);
|
||||
|
||||
ins_cost(VOLATILE_REF_COST);
|
||||
format %{ "stlr $src, $mem\t# ptr" %}
|
||||
@@ -7985,6 +7992,7 @@ instruct storeP_volatile(iRegP src, /* sync_memory*/indirect mem)
|
||||
instruct storeimmP0_volatile(immP0 zero, /* sync_memory*/indirect mem)
|
||||
%{
|
||||
match(Set mem (StoreP mem zero));
|
||||
predicate(n->as_Store()->barrier_data() == 0);
|
||||
|
||||
ins_cost(VOLATILE_REF_COST);
|
||||
format %{ "stlr zr, $mem\t# ptr" %}
|
||||
@@ -9654,6 +9662,90 @@ instruct get_and_addIi_no_resAcq(indirect mem, Universe dummy, immIAddSub incr)
|
||||
ins_pipe(pipe_serial);
|
||||
%}
|
||||
|
||||
// Manifest a CmpU result in an integer register.
|
||||
// (src1 < src2) ? -1 : ((src1 > src2) ? 1 : 0)
|
||||
instruct cmpU3_reg_reg(iRegINoSp dst, iRegI src1, iRegI src2, rFlagsReg flags)
|
||||
%{
|
||||
match(Set dst (CmpU3 src1 src2));
|
||||
effect(KILL flags);
|
||||
|
||||
ins_cost(INSN_COST * 3);
|
||||
format %{
|
||||
"cmpw $src1, $src2\n\t"
|
||||
"csetw $dst, ne\n\t"
|
||||
"cnegw $dst, lo\t# CmpU3(reg)"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ cmpw($src1$$Register, $src2$$Register);
|
||||
__ csetw($dst$$Register, Assembler::NE);
|
||||
__ cnegw($dst$$Register, $dst$$Register, Assembler::LO);
|
||||
%}
|
||||
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
instruct cmpU3_reg_imm(iRegINoSp dst, iRegI src1, immIAddSub src2, rFlagsReg flags)
|
||||
%{
|
||||
match(Set dst (CmpU3 src1 src2));
|
||||
effect(KILL flags);
|
||||
|
||||
ins_cost(INSN_COST * 3);
|
||||
format %{
|
||||
"subsw zr, $src1, $src2\n\t"
|
||||
"csetw $dst, ne\n\t"
|
||||
"cnegw $dst, lo\t# CmpU3(imm)"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ subsw(zr, $src1$$Register, (int32_t)$src2$$constant);
|
||||
__ csetw($dst$$Register, Assembler::NE);
|
||||
__ cnegw($dst$$Register, $dst$$Register, Assembler::LO);
|
||||
%}
|
||||
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
// Manifest a CmpUL result in an integer register.
|
||||
// (src1 < src2) ? -1 : ((src1 > src2) ? 1 : 0)
|
||||
instruct cmpUL3_reg_reg(iRegINoSp dst, iRegL src1, iRegL src2, rFlagsReg flags)
|
||||
%{
|
||||
match(Set dst (CmpUL3 src1 src2));
|
||||
effect(KILL flags);
|
||||
|
||||
ins_cost(INSN_COST * 3);
|
||||
format %{
|
||||
"cmp $src1, $src2\n\t"
|
||||
"csetw $dst, ne\n\t"
|
||||
"cnegw $dst, lo\t# CmpUL3(reg)"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ cmp($src1$$Register, $src2$$Register);
|
||||
__ csetw($dst$$Register, Assembler::NE);
|
||||
__ cnegw($dst$$Register, $dst$$Register, Assembler::LO);
|
||||
%}
|
||||
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
instruct cmpUL3_reg_imm(iRegINoSp dst, iRegL src1, immLAddSub src2, rFlagsReg flags)
|
||||
%{
|
||||
match(Set dst (CmpUL3 src1 src2));
|
||||
effect(KILL flags);
|
||||
|
||||
ins_cost(INSN_COST * 3);
|
||||
format %{
|
||||
"subs zr, $src1, $src2\n\t"
|
||||
"csetw $dst, ne\n\t"
|
||||
"cnegw $dst, lo\t# CmpUL3(imm)"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ subs(zr, $src1$$Register, (int32_t)$src2$$constant);
|
||||
__ csetw($dst$$Register, Assembler::NE);
|
||||
__ cnegw($dst$$Register, $dst$$Register, Assembler::LO);
|
||||
%}
|
||||
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
// Manifest a CmpL result in an integer register.
|
||||
// (src1 < src2) ? -1 : ((src1 > src2) ? 1 : 0)
|
||||
instruct cmpL3_reg_reg(iRegINoSp dst, iRegL src1, iRegL src2, rFlagsReg flags)
|
||||
@@ -9661,13 +9753,12 @@ instruct cmpL3_reg_reg(iRegINoSp dst, iRegL src1, iRegL src2, rFlagsReg flags)
|
||||
match(Set dst (CmpL3 src1 src2));
|
||||
effect(KILL flags);
|
||||
|
||||
ins_cost(INSN_COST * 6);
|
||||
ins_cost(INSN_COST * 3);
|
||||
format %{
|
||||
"cmp $src1, $src2"
|
||||
"csetw $dst, ne"
|
||||
"cnegw $dst, lt"
|
||||
"cmp $src1, $src2\n\t"
|
||||
"csetw $dst, ne\n\t"
|
||||
"cnegw $dst, lt\t# CmpL3(reg)"
|
||||
%}
|
||||
// format %{ "CmpL3 $dst, $src1, $src2" %}
|
||||
ins_encode %{
|
||||
__ cmp($src1$$Register, $src2$$Register);
|
||||
__ csetw($dst$$Register, Assembler::NE);
|
||||
@@ -9682,19 +9773,14 @@ instruct cmpL3_reg_imm(iRegINoSp dst, iRegL src1, immLAddSub src2, rFlagsReg fla
|
||||
match(Set dst (CmpL3 src1 src2));
|
||||
effect(KILL flags);
|
||||
|
||||
ins_cost(INSN_COST * 6);
|
||||
ins_cost(INSN_COST * 3);
|
||||
format %{
|
||||
"cmp $src1, $src2"
|
||||
"csetw $dst, ne"
|
||||
"cnegw $dst, lt"
|
||||
"subs zr, $src1, $src2\n\t"
|
||||
"csetw $dst, ne\n\t"
|
||||
"cnegw $dst, lt\t# CmpL3(imm)"
|
||||
%}
|
||||
ins_encode %{
|
||||
int32_t con = (int32_t)$src2$$constant;
|
||||
if (con < 0) {
|
||||
__ adds(zr, $src1$$Register, -con);
|
||||
} else {
|
||||
__ subs(zr, $src1$$Register, con);
|
||||
}
|
||||
__ subs(zr, $src1$$Register, (int32_t)$src2$$constant);
|
||||
__ csetw($dst$$Register, Assembler::NE);
|
||||
__ cnegw($dst$$Register, $dst$$Register, Assembler::LT);
|
||||
%}
|
||||
@@ -11084,7 +11170,6 @@ instruct rShiftL_reg_imm(iRegLNoSp dst, iRegL src1, immI src2) %{
|
||||
// BEGIN This section of the file is automatically generated. Do not edit --------------
|
||||
// This section is generated from aarch64_ad.m4
|
||||
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct regL_not_reg(iRegLNoSp dst,
|
||||
@@ -12900,6 +12985,7 @@ instruct ubfizIConvI2LAndI(iRegLNoSp dst, iRegI src, immI_bitmask msk)
|
||||
|
||||
|
||||
// Rotations
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct extrOrL(iRegLNoSp dst, iRegL src1, iRegL src2, immI lshift, immI rshift, rFlagsReg cr)
|
||||
@@ -12971,7 +13057,6 @@ instruct extrAddI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, immI lshift,
|
||||
ins_pipe(ialu_reg_reg_extr);
|
||||
%}
|
||||
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct rorI_imm(iRegINoSp dst, iRegI src, immI shift)
|
||||
@@ -13685,6 +13770,323 @@ instruct SubExtI_uxth_and_shift(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2,
|
||||
ins_pipe(ialu_reg_reg_shift);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmovI_reg_reg_lt(iRegINoSp dst, iRegI src1, iRegI src2, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE src2, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "cselw $dst, $src1, $src2 lt\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ cselw($dst$$Register,
|
||||
$src1$$Register,
|
||||
$src2$$Register,
|
||||
Assembler::LT);
|
||||
%}
|
||||
ins_pipe(icond_reg_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmovI_reg_reg_gt(iRegINoSp dst, iRegI src1, iRegI src2, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE src2, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "cselw $dst, $src1, $src2 gt\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ cselw($dst$$Register,
|
||||
$src1$$Register,
|
||||
$src2$$Register,
|
||||
Assembler::GT);
|
||||
%}
|
||||
ins_pipe(icond_reg_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmovI_reg_imm0_lt(iRegINoSp dst, iRegI src1, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "cselw $dst, $src1, zr lt\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ cselw($dst$$Register,
|
||||
$src1$$Register,
|
||||
zr,
|
||||
Assembler::LT);
|
||||
%}
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmovI_reg_imm0_gt(iRegINoSp dst, iRegI src1, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "cselw $dst, $src1, zr gt\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ cselw($dst$$Register,
|
||||
$src1$$Register,
|
||||
zr,
|
||||
Assembler::GT);
|
||||
%}
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmovI_reg_imm1_le(iRegINoSp dst, iRegI src1, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "csincw $dst, $src1, zr le\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ csincw($dst$$Register,
|
||||
$src1$$Register,
|
||||
zr,
|
||||
Assembler::LE);
|
||||
%}
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmovI_reg_imm1_gt(iRegINoSp dst, iRegI src1, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "csincw $dst, $src1, zr gt\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ csincw($dst$$Register,
|
||||
$src1$$Register,
|
||||
zr,
|
||||
Assembler::GT);
|
||||
%}
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmovI_reg_immM1_lt(iRegINoSp dst, iRegI src1, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "csinvw $dst, $src1, zr lt\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ csinvw($dst$$Register,
|
||||
$src1$$Register,
|
||||
zr,
|
||||
Assembler::LT);
|
||||
%}
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmovI_reg_immM1_ge(iRegINoSp dst, iRegI src1, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "csinvw $dst, $src1, zr ge\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ csinvw($dst$$Register,
|
||||
$src1$$Register,
|
||||
zr,
|
||||
Assembler::GE);
|
||||
%}
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct minI_reg_imm0(iRegINoSp dst, iRegIorL2I src, immI0 imm)
|
||||
%{
|
||||
match(Set dst (MinI src imm));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_imm0_lt(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct minI_imm0_reg(iRegINoSp dst, immI0 imm, iRegIorL2I src)
|
||||
%{
|
||||
match(Set dst (MinI imm src));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_imm0_lt(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct minI_reg_imm1(iRegINoSp dst, iRegIorL2I src, immI_1 imm)
|
||||
%{
|
||||
match(Set dst (MinI src imm));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_imm1_le(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct minI_imm1_reg(iRegINoSp dst, immI_1 imm, iRegIorL2I src)
|
||||
%{
|
||||
match(Set dst (MinI imm src));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_imm1_le(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct minI_reg_immM1(iRegINoSp dst, iRegIorL2I src, immI_M1 imm)
|
||||
%{
|
||||
match(Set dst (MinI src imm));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_immM1_lt(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct minI_immM1_reg(iRegINoSp dst, immI_M1 imm, iRegIorL2I src)
|
||||
%{
|
||||
match(Set dst (MinI imm src));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_immM1_lt(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct maxI_reg_imm0(iRegINoSp dst, iRegIorL2I src, immI0 imm)
|
||||
%{
|
||||
match(Set dst (MaxI src imm));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_imm0_gt(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct maxI_imm0_reg(iRegINoSp dst, immI0 imm, iRegIorL2I src)
|
||||
%{
|
||||
match(Set dst (MaxI imm src));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_imm0_gt(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct maxI_reg_imm1(iRegINoSp dst, iRegIorL2I src, immI_1 imm)
|
||||
%{
|
||||
match(Set dst (MaxI src imm));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_imm1_gt(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct maxI_imm1_reg(iRegINoSp dst, immI_1 imm, iRegIorL2I src)
|
||||
%{
|
||||
match(Set dst (MaxI imm src));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_imm1_gt(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct maxI_reg_immM1(iRegINoSp dst, iRegIorL2I src, immI_M1 imm)
|
||||
%{
|
||||
match(Set dst (MaxI src imm));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_immM1_ge(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct maxI_immM1_reg(iRegINoSp dst, immI_M1 imm, iRegIorL2I src)
|
||||
%{
|
||||
match(Set dst (MaxI imm src));
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_imm0(cr, src);
|
||||
cmovI_reg_immM1_ge(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct bits_reverse_I(iRegINoSp dst, iRegIorL2I src)
|
||||
%{
|
||||
match(Set dst (ReverseI src));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "rbitw $dst, $src" %}
|
||||
ins_encode %{
|
||||
__ rbitw($dst$$Register, $src$$Register);
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct bits_reverse_L(iRegLNoSp dst, iRegL src)
|
||||
%{
|
||||
match(Set dst (ReverseL src));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "rbit $dst, $src" %}
|
||||
ins_encode %{
|
||||
__ rbit($dst$$Register, $src$$Register);
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
|
||||
// END This section of the file is automatically generated. Do not edit --------------
|
||||
@@ -15695,24 +16097,21 @@ instruct cmpLTMask_reg_zero(iRegINoSp dst, iRegIorL2I src, immI0 zero, rFlagsReg
|
||||
// ============================================================================
|
||||
// Max and Min
|
||||
|
||||
instruct cmovI_reg_reg_lt(iRegINoSp dst, iRegI src1, iRegI src2, rFlagsReg cr)
|
||||
%{
|
||||
effect( DEF dst, USE src1, USE src2, USE cr );
|
||||
// Like compI_reg_reg or compI_reg_immI0 but without match rule and second zero parameter.
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "cselw $dst, $src1, $src2 lt\t" %}
|
||||
instruct compI_reg_imm0(rFlagsReg cr, iRegI src)
|
||||
%{
|
||||
effect(DEF cr, USE src);
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "cmpw $src, 0" %}
|
||||
|
||||
ins_encode %{
|
||||
__ cselw(as_Register($dst$$reg),
|
||||
as_Register($src1$$reg),
|
||||
as_Register($src2$$reg),
|
||||
Assembler::LT);
|
||||
__ cmpw($src$$Register, 0);
|
||||
%}
|
||||
|
||||
ins_pipe(icond_reg_reg);
|
||||
ins_pipe(icmp_reg_imm);
|
||||
%}
|
||||
|
||||
instruct minI_rReg(iRegINoSp dst, iRegI src1, iRegI src2)
|
||||
instruct minI_reg_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2)
|
||||
%{
|
||||
match(Set dst (MinI src1 src2));
|
||||
ins_cost(INSN_COST * 3);
|
||||
@@ -15722,31 +16121,13 @@ instruct minI_rReg(iRegINoSp dst, iRegI src1, iRegI src2)
|
||||
compI_reg_reg(cr, src1, src2);
|
||||
cmovI_reg_reg_lt(dst, src1, src2, cr);
|
||||
%}
|
||||
|
||||
%}
|
||||
// FROM HERE
|
||||
|
||||
instruct cmovI_reg_reg_gt(iRegINoSp dst, iRegI src1, iRegI src2, rFlagsReg cr)
|
||||
%{
|
||||
effect( DEF dst, USE src1, USE src2, USE cr );
|
||||
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "cselw $dst, $src1, $src2 gt\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ cselw(as_Register($dst$$reg),
|
||||
as_Register($src1$$reg),
|
||||
as_Register($src2$$reg),
|
||||
Assembler::GT);
|
||||
%}
|
||||
|
||||
ins_pipe(icond_reg_reg);
|
||||
%}
|
||||
|
||||
instruct maxI_rReg(iRegINoSp dst, iRegI src1, iRegI src2)
|
||||
instruct maxI_reg_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2)
|
||||
%{
|
||||
match(Set dst (MaxI src1 src2));
|
||||
ins_cost(INSN_COST * 3);
|
||||
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
compI_reg_reg(cr, src1, src2);
|
||||
@@ -15754,6 +16135,7 @@ instruct maxI_rReg(iRegINoSp dst, iRegI src1, iRegI src2)
|
||||
%}
|
||||
%}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// Branch Instructions
|
||||
|
||||
@@ -16974,6 +17356,157 @@ instruct encode_ascii_array(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len,
|
||||
ins_pipe(pipe_class_memory);
|
||||
%}
|
||||
|
||||
//----------------------------- CompressBits/ExpandBits ------------------------
|
||||
|
||||
instruct compressBitsI_reg(iRegINoSp dst, iRegIorL2I src, iRegIorL2I mask,
|
||||
vRegF tdst, vRegF tsrc, vRegF tmask) %{
|
||||
match(Set dst (CompressBits src mask));
|
||||
effect(TEMP tdst, TEMP tsrc, TEMP tmask);
|
||||
format %{ "mov $tsrc, $src\n\t"
|
||||
"mov $tmask, $mask\n\t"
|
||||
"bext $tdst, $tsrc, $tmask\n\t"
|
||||
"mov $dst, $tdst"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ mov($tsrc$$FloatRegister, __ S, 0, $src$$Register);
|
||||
__ mov($tmask$$FloatRegister, __ S, 0, $mask$$Register);
|
||||
__ sve_bext($tdst$$FloatRegister, __ S, $tsrc$$FloatRegister, $tmask$$FloatRegister);
|
||||
__ mov($dst$$Register, $tdst$$FloatRegister, __ S, 0);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct compressBitsI_memcon(iRegINoSp dst, memory4 mem, immI mask,
|
||||
vRegF tdst, vRegF tsrc, vRegF tmask) %{
|
||||
match(Set dst (CompressBits (LoadI mem) mask));
|
||||
effect(TEMP tdst, TEMP tsrc, TEMP tmask);
|
||||
format %{ "ldrs $tsrc, $mem\n\t"
|
||||
"ldrs $tmask, $mask\n\t"
|
||||
"bext $tdst, $tsrc, $tmask\n\t"
|
||||
"mov $dst, $tdst"
|
||||
%}
|
||||
ins_encode %{
|
||||
loadStore(C2_MacroAssembler(&cbuf), &MacroAssembler::ldrs, $tsrc$$FloatRegister, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 4);
|
||||
__ ldrs($tmask$$FloatRegister, $constantaddress($mask));
|
||||
__ sve_bext($tdst$$FloatRegister, __ S, $tsrc$$FloatRegister, $tmask$$FloatRegister);
|
||||
__ mov($dst$$Register, $tdst$$FloatRegister, __ S, 0);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct compressBitsL_reg(iRegLNoSp dst, iRegL src, iRegL mask,
|
||||
vRegD tdst, vRegD tsrc, vRegD tmask) %{
|
||||
match(Set dst (CompressBits src mask));
|
||||
effect(TEMP tdst, TEMP tsrc, TEMP tmask);
|
||||
format %{ "mov $tsrc, $src\n\t"
|
||||
"mov $tmask, $mask\n\t"
|
||||
"bext $tdst, $tsrc, $tmask\n\t"
|
||||
"mov $dst, $tdst"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ mov($tsrc$$FloatRegister, __ D, 0, $src$$Register);
|
||||
__ mov($tmask$$FloatRegister, __ D, 0, $mask$$Register);
|
||||
__ sve_bext($tdst$$FloatRegister, __ D, $tsrc$$FloatRegister, $tmask$$FloatRegister);
|
||||
__ mov($dst$$Register, $tdst$$FloatRegister, __ D, 0);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct compressBitsL_memcon(iRegLNoSp dst, memory8 mem, immL mask,
|
||||
vRegF tdst, vRegF tsrc, vRegF tmask) %{
|
||||
match(Set dst (CompressBits (LoadL mem) mask));
|
||||
effect(TEMP tdst, TEMP tsrc, TEMP tmask);
|
||||
format %{ "ldrd $tsrc, $mem\n\t"
|
||||
"ldrd $tmask, $mask\n\t"
|
||||
"bext $tdst, $tsrc, $tmask\n\t"
|
||||
"mov $dst, $tdst"
|
||||
%}
|
||||
ins_encode %{
|
||||
loadStore(C2_MacroAssembler(&cbuf), &MacroAssembler::ldrd, $tsrc$$FloatRegister, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 8);
|
||||
__ ldrd($tmask$$FloatRegister, $constantaddress($mask));
|
||||
__ sve_bext($tdst$$FloatRegister, __ D, $tsrc$$FloatRegister, $tmask$$FloatRegister);
|
||||
__ mov($dst$$Register, $tdst$$FloatRegister, __ D, 0);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct expandBitsI_reg(iRegINoSp dst, iRegIorL2I src, iRegIorL2I mask,
|
||||
vRegF tdst, vRegF tsrc, vRegF tmask) %{
|
||||
match(Set dst (ExpandBits src mask));
|
||||
effect(TEMP tdst, TEMP tsrc, TEMP tmask);
|
||||
format %{ "mov $tsrc, $src\n\t"
|
||||
"mov $tmask, $mask\n\t"
|
||||
"bdep $tdst, $tsrc, $tmask\n\t"
|
||||
"mov $dst, $tdst"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ mov($tsrc$$FloatRegister, __ S, 0, $src$$Register);
|
||||
__ mov($tmask$$FloatRegister, __ S, 0, $mask$$Register);
|
||||
__ sve_bdep($tdst$$FloatRegister, __ S, $tsrc$$FloatRegister, $tmask$$FloatRegister);
|
||||
__ mov($dst$$Register, $tdst$$FloatRegister, __ S, 0);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct expandBitsI_memcon(iRegINoSp dst, memory4 mem, immI mask,
|
||||
vRegF tdst, vRegF tsrc, vRegF tmask) %{
|
||||
match(Set dst (ExpandBits (LoadI mem) mask));
|
||||
effect(TEMP tdst, TEMP tsrc, TEMP tmask);
|
||||
format %{ "ldrs $tsrc, $mem\n\t"
|
||||
"ldrs $tmask, $mask\n\t"
|
||||
"bdep $tdst, $tsrc, $tmask\n\t"
|
||||
"mov $dst, $tdst"
|
||||
%}
|
||||
ins_encode %{
|
||||
loadStore(C2_MacroAssembler(&cbuf), &MacroAssembler::ldrs, $tsrc$$FloatRegister, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 4);
|
||||
__ ldrs($tmask$$FloatRegister, $constantaddress($mask));
|
||||
__ sve_bdep($tdst$$FloatRegister, __ S, $tsrc$$FloatRegister, $tmask$$FloatRegister);
|
||||
__ mov($dst$$Register, $tdst$$FloatRegister, __ S, 0);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct expandBitsL_reg(iRegLNoSp dst, iRegL src, iRegL mask,
|
||||
vRegD tdst, vRegD tsrc, vRegD tmask) %{
|
||||
match(Set dst (ExpandBits src mask));
|
||||
effect(TEMP tdst, TEMP tsrc, TEMP tmask);
|
||||
format %{ "mov $tsrc, $src\n\t"
|
||||
"mov $tmask, $mask\n\t"
|
||||
"bdep $tdst, $tsrc, $tmask\n\t"
|
||||
"mov $dst, $tdst"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ mov($tsrc$$FloatRegister, __ D, 0, $src$$Register);
|
||||
__ mov($tmask$$FloatRegister, __ D, 0, $mask$$Register);
|
||||
__ sve_bdep($tdst$$FloatRegister, __ D, $tsrc$$FloatRegister, $tmask$$FloatRegister);
|
||||
__ mov($dst$$Register, $tdst$$FloatRegister, __ D, 0);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
|
||||
instruct expandBitsL_memcon(iRegINoSp dst, memory8 mem, immL mask,
|
||||
vRegF tdst, vRegF tsrc, vRegF tmask) %{
|
||||
match(Set dst (ExpandBits (LoadL mem) mask));
|
||||
effect(TEMP tdst, TEMP tsrc, TEMP tmask);
|
||||
format %{ "ldrd $tsrc, $mem\n\t"
|
||||
"ldrd $tmask, $mask\n\t"
|
||||
"bdep $tdst, $tsrc, $tmask\n\t"
|
||||
"mov $dst, $tdst"
|
||||
%}
|
||||
ins_encode %{
|
||||
loadStore(C2_MacroAssembler(&cbuf), &MacroAssembler::ldrd, $tsrc$$FloatRegister, $mem->opcode(),
|
||||
as_Register($mem$$base), $mem$$index, $mem$$scale, $mem$$disp, 8);
|
||||
__ ldrd($tmask$$FloatRegister, $constantaddress($mask));
|
||||
__ sve_bdep($tdst$$FloatRegister, __ D, $tsrc$$FloatRegister, $tmask$$FloatRegister);
|
||||
__ mov($dst$$Register, $tdst$$FloatRegister, __ D, 0);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// ============================================================================
|
||||
// This name is KNOWN by the ADLC and cannot be changed.
|
||||
// The ADLC forces a 'TypeRawPtr::BOTTOM' output type
|
||||
|
||||
@@ -27,8 +27,10 @@ dnl 2. shift patterns
|
||||
dnl
|
||||
// BEGIN This section of the file is automatically generated. Do not edit --------------
|
||||
// This section is generated from aarch64_ad.m4
|
||||
dnl
|
||||
define(`ORL2I', `ifelse($1,I,orL2I)')
|
||||
|
||||
define(`upcase', `translit(`$*', `a-z', `A-Z')')dnl
|
||||
define(`downcase', `translit(`$*', `A-Z', `a-z')')dnl
|
||||
define(`ORL2I', `ifelse($1,I,orL2I)')dnl
|
||||
dnl
|
||||
define(`BASE_SHIFT_INSN',
|
||||
`// This pattern is automatically generated from aarch64_ad.m4
|
||||
@@ -189,7 +191,7 @@ ALL_SHIFT_KINDS_WITHOUT_ROR(Add, add)
|
||||
ALL_SHIFT_KINDS_WITHOUT_ROR(Sub, sub)
|
||||
dnl
|
||||
dnl EXTEND mode, rshift_op, src, lshift_count, rshift_count
|
||||
define(`EXTEND', `($2$1 (LShift$1 $3 $4) $5)') dnl
|
||||
define(`EXTEND', `($2$1 (LShift$1 $3 $4) $5)')dnl
|
||||
define(`BFM_INSN',`// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
|
||||
@@ -212,7 +214,7 @@ instruct $4$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src, immI lshift_count, immI rsh
|
||||
|
||||
ins_pipe(ialu_reg_shift);
|
||||
%}
|
||||
')
|
||||
')dnl
|
||||
BFM_INSN(L, 63, RShift, sbfm)
|
||||
BFM_INSN(I, 31, RShift, sbfmw)
|
||||
BFM_INSN(L, 63, URShift, ubfm)
|
||||
@@ -336,7 +338,7 @@ instruct ubfizIConvI2LAndI(iRegLNoSp dst, iRegI src, immI_bitmask msk)
|
||||
%}
|
||||
|
||||
|
||||
// Rotations dnl
|
||||
// Rotations
|
||||
define(`EXTRACT_INSN',`
|
||||
// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
@@ -539,4 +541,93 @@ dnl
|
||||
ADD_SUB_ZERO_EXTEND_SHIFT(I,255,Sub,subw,uxtb)
|
||||
ADD_SUB_ZERO_EXTEND_SHIFT(I,65535,Sub,subw,uxth)
|
||||
dnl
|
||||
define(`CMOV_INSN', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmov$1_reg_reg_$3(iReg$1NoSp dst, iReg$1 src1, iReg$1 src2, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE src2, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "$2 $dst, $src1, $src2 $3\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ $2($dst$$Register,
|
||||
$src1$$Register,
|
||||
$src2$$Register,
|
||||
Assembler::upcase($3));
|
||||
%}
|
||||
ins_pipe(icond_reg_reg);
|
||||
%}
|
||||
')dnl
|
||||
CMOV_INSN(I, cselw, lt)
|
||||
CMOV_INSN(I, cselw, gt)
|
||||
dnl
|
||||
define(`CMOV_DRAW_INSN', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct cmov$1_reg_imm$2_$4(iReg$1NoSp dst, iReg$1 src1, rFlagsReg cr)
|
||||
%{
|
||||
effect(DEF dst, USE src1, USE cr);
|
||||
ins_cost(INSN_COST * 2);
|
||||
format %{ "$3 $dst, $src1, zr $4\t" %}
|
||||
|
||||
ins_encode %{
|
||||
__ $3($dst$$Register,
|
||||
$src1$$Register,
|
||||
zr,
|
||||
Assembler::upcase($4));
|
||||
%}
|
||||
ins_pipe(icond_reg);
|
||||
%}
|
||||
')dnl
|
||||
CMOV_DRAW_INSN(I, 0, cselw, lt)
|
||||
CMOV_DRAW_INSN(I, 0, cselw, gt)
|
||||
CMOV_DRAW_INSN(I, 1, csincw, le)
|
||||
CMOV_DRAW_INSN(I, 1, csincw, gt)
|
||||
CMOV_DRAW_INSN(I, M1, csinvw, lt)
|
||||
CMOV_DRAW_INSN(I, M1, csinvw, ge)
|
||||
dnl
|
||||
define(`MINMAX_DRAW_INSN', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
ifelse($6,,
|
||||
instruct downcase($1)$2_reg_imm$4(iReg$2NoSp dst, iReg$2`'ORL2I($2) src, imm$2$3$4 imm),
|
||||
instruct downcase($1)$2_imm$4_reg(iReg$2NoSp dst, imm$2$3$4 imm, iReg$2`'ORL2I($2) src))
|
||||
%{
|
||||
ifelse($6,,
|
||||
match(Set dst ($1$2 src imm));,
|
||||
match(Set dst ($1$2 imm src));)
|
||||
ins_cost(INSN_COST * 3);
|
||||
expand %{
|
||||
rFlagsReg cr;
|
||||
comp$2_reg_imm0(cr, src);
|
||||
cmov$2_reg_imm$4_$5(dst, src, cr);
|
||||
%}
|
||||
%}
|
||||
')dnl
|
||||
MINMAX_DRAW_INSN(Min, I, , 0, lt)
|
||||
MINMAX_DRAW_INSN(Min, I, , 0, lt, rev)
|
||||
MINMAX_DRAW_INSN(Min, I, _, 1, le)
|
||||
MINMAX_DRAW_INSN(Min, I, _, 1, le, rev)
|
||||
MINMAX_DRAW_INSN(Min, I, _, M1, lt)
|
||||
MINMAX_DRAW_INSN(Min, I, _, M1, lt, rev)
|
||||
dnl
|
||||
MINMAX_DRAW_INSN(Max, I, , 0, gt)
|
||||
MINMAX_DRAW_INSN(Max, I, , 0, gt, rev)
|
||||
MINMAX_DRAW_INSN(Max, I, _, 1, gt)
|
||||
MINMAX_DRAW_INSN(Max, I, _, 1, gt, rev)
|
||||
MINMAX_DRAW_INSN(Max, I, _, M1, ge)
|
||||
MINMAX_DRAW_INSN(Max, I, _, M1, ge, rev)
|
||||
dnl
|
||||
define(`BITS_REVERSE', `// This pattern is automatically generated from aarch64_ad.m4
|
||||
// DO NOT EDIT ANYTHING IN THIS SECTION OF THE FILE
|
||||
instruct bits_reverse_$1(iReg$1NoSp dst, iReg$1`'ORL2I($1) src)
|
||||
%{
|
||||
match(Set dst (Reverse$1 src));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "$2 $dst, $src" %}
|
||||
ins_encode %{
|
||||
__ $2($dst$$Register, $src$$Register);
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
')dnl
|
||||
BITS_REVERSE(I, rbitw)
|
||||
BITS_REVERSE(L, rbit)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
// Copyright (c) 2020, 2022, Arm Limited. All rights reserved.
|
||||
// Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
// Copyright (c) 2020, 2023, Arm Limited. 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
|
||||
@@ -134,6 +134,9 @@ source %{
|
||||
(opcode == Op_VectorCastL2X && bt == T_FLOAT) ||
|
||||
(opcode == Op_CountLeadingZerosV && bt == T_LONG) ||
|
||||
(opcode == Op_CountTrailingZerosV && bt == T_LONG) ||
|
||||
// The vector implementation of Op_AddReductionVD/F is for the Vector API only.
|
||||
// It is not suitable for auto-vectorization because it does not add the elements
|
||||
// in the same order as sequential code, and FP addition is non-associative.
|
||||
opcode == Op_AddReductionVD || opcode == Op_AddReductionVF ||
|
||||
opcode == Op_MulReductionVD || opcode == Op_MulReductionVF ||
|
||||
opcode == Op_MulVL) {
|
||||
@@ -2876,23 +2879,30 @@ instruct reduce_addL_sve(iRegLNoSp dst, iRegL isrc, vReg vsrc, vRegD tmp) %{
|
||||
%}
|
||||
|
||||
// reduction addF
|
||||
// Floating-point addition is not associative, so the rules for AddReductionVF
|
||||
// on NEON can't be used to auto-vectorize floating-point reduce-add.
|
||||
// Currently, on NEON, AddReductionVF is only generated by Vector API.
|
||||
instruct reduce_add2F_neon(vRegF dst, vRegF fsrc, vReg vsrc) %{
|
||||
predicate(UseSVE == 0 && Matcher::vector_length(n->in(2)) == 2);
|
||||
match(Set dst (AddReductionVF fsrc vsrc));
|
||||
effect(TEMP_DEF dst);
|
||||
format %{ "reduce_add2F_neon $dst, $fsrc, $vsrc" %}
|
||||
ins_encode %{
|
||||
__ faddp($dst$$FloatRegister, $vsrc$$FloatRegister, __ S);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $fsrc$$FloatRegister);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct reduce_addF_neon(vRegF dst, vRegF fsrc, vReg vsrc, vReg tmp) %{
|
||||
predicate(UseSVE == 0);
|
||||
instruct reduce_add4F_neon(vRegF dst, vRegF fsrc, vReg vsrc, vReg tmp) %{
|
||||
predicate(UseSVE == 0 && Matcher::vector_length(n->in(2)) == 4);
|
||||
match(Set dst (AddReductionVF fsrc vsrc));
|
||||
effect(TEMP_DEF dst, TEMP tmp);
|
||||
format %{ "reduce_addF_neon $dst, $fsrc, $vsrc\t# KILL $tmp" %}
|
||||
format %{ "reduce_add4F_neon $dst, $fsrc, $vsrc\t# KILL $tmp" %}
|
||||
ins_encode %{
|
||||
uint length_in_bytes = Matcher::vector_length_in_bytes(this, $vsrc);
|
||||
__ fadds($dst$$FloatRegister, $fsrc$$FloatRegister, $vsrc$$FloatRegister);
|
||||
__ ins($tmp$$FloatRegister, __ S, $vsrc$$FloatRegister, 0, 1);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $tmp$$FloatRegister);
|
||||
if (length_in_bytes == 16) {
|
||||
__ ins($tmp$$FloatRegister, __ S, $vsrc$$FloatRegister, 0, 2);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $tmp$$FloatRegister);
|
||||
__ ins($tmp$$FloatRegister, __ S, $vsrc$$FloatRegister, 0, 3);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $tmp$$FloatRegister);
|
||||
}
|
||||
__ faddp($tmp$$FloatRegister, __ T4S, $vsrc$$FloatRegister, $vsrc$$FloatRegister);
|
||||
__ faddp($dst$$FloatRegister, $tmp$$FloatRegister, __ S);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $fsrc$$FloatRegister);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
@@ -2910,16 +2920,17 @@ instruct reduce_addF_sve(vRegF dst_src1, vReg src2) %{
|
||||
%}
|
||||
|
||||
// reduction addD
|
||||
|
||||
instruct reduce_addD_neon(vRegD dst, vRegD dsrc, vReg vsrc, vReg tmp) %{
|
||||
// Floating-point addition is not associative, so the rule for AddReductionVD
|
||||
// on NEON can't be used to auto-vectorize floating-point reduce-add.
|
||||
// Currently, on NEON, AddReductionVD is only generated by Vector API.
|
||||
instruct reduce_addD_neon(vRegD dst, vRegD dsrc, vReg vsrc) %{
|
||||
predicate(UseSVE == 0);
|
||||
match(Set dst (AddReductionVD dsrc vsrc));
|
||||
effect(TEMP_DEF dst, TEMP tmp);
|
||||
format %{ "reduce_addD_neon $dst, $dsrc, $vsrc\t# 2D. KILL $tmp" %}
|
||||
effect(TEMP_DEF dst);
|
||||
format %{ "reduce_addD_neon $dst, $dsrc, $vsrc\t# 2D" %}
|
||||
ins_encode %{
|
||||
__ faddd($dst$$FloatRegister, $dsrc$$FloatRegister, $vsrc$$FloatRegister);
|
||||
__ ins($tmp$$FloatRegister, __ D, $vsrc$$FloatRegister, 0, 1);
|
||||
__ faddd($dst$$FloatRegister, $dst$$FloatRegister, $tmp$$FloatRegister);
|
||||
__ faddp($dst$$FloatRegister, $vsrc$$FloatRegister, __ D);
|
||||
__ faddd($dst$$FloatRegister, $dst$$FloatRegister, $dsrc$$FloatRegister);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
@@ -4148,6 +4159,52 @@ instruct vcvtDtoF_gt64b(vReg dst, vReg src, vReg tmp) %{
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// VectorCastHF2F
|
||||
|
||||
instruct vcvtHFtoF(vReg dst, vReg src) %{
|
||||
match(Set dst (VectorCastHF2F src));
|
||||
format %{ "vcvtHFtoF $dst, $src" %}
|
||||
ins_encode %{
|
||||
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
|
||||
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
|
||||
// 4HF to 4F
|
||||
__ fcvtl($dst$$FloatRegister, __ T4S, $src$$FloatRegister, __ T4H);
|
||||
} else {
|
||||
assert(UseSVE > 0, "must be sve");
|
||||
__ sve_vector_extend($dst$$FloatRegister, __ S, $src$$FloatRegister, __ H);
|
||||
__ sve_fcvt($dst$$FloatRegister, __ S, ptrue, $dst$$FloatRegister, __ H);
|
||||
}
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// VectorCastF2HF
|
||||
|
||||
instruct vcvtFtoHF_neon(vReg dst, vReg src) %{
|
||||
predicate(VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))));
|
||||
match(Set dst (VectorCastF2HF src));
|
||||
format %{ "vcvtFtoHF_neon $dst, $src\t# 4F to 4HF" %}
|
||||
ins_encode %{
|
||||
// 4F to 4HF
|
||||
__ fcvtn($dst$$FloatRegister, __ T4H, $src$$FloatRegister, __ T4S);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct vcvtFtoHF_sve(vReg dst, vReg src, vReg tmp) %{
|
||||
predicate(!VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))));
|
||||
match(Set dst (VectorCastF2HF src));
|
||||
effect(TEMP_DEF dst, TEMP tmp);
|
||||
format %{ "vcvtFtoHF_sve $dst, $src\t# KILL $tmp" %}
|
||||
ins_encode %{
|
||||
assert(UseSVE > 0, "must be sve");
|
||||
__ sve_fcvt($dst$$FloatRegister, __ H, ptrue, $src$$FloatRegister, __ S);
|
||||
__ sve_vector_narrow($dst$$FloatRegister, __ H,
|
||||
$dst$$FloatRegister, __ S, $tmp$$FloatRegister);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// ------------------------------ Replicate ------------------------------------
|
||||
|
||||
// replicate from reg
|
||||
@@ -5632,6 +5689,18 @@ instruct vmask_gen_imm(pReg pd, immL con, rFlagsReg cr) %{
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct vmask_gen_sub(pReg pd, iRegL src1, iRegL src2, rFlagsReg cr) %{
|
||||
predicate(UseSVE > 0);
|
||||
match(Set pd (VectorMaskGen (SubL src1 src2)));
|
||||
effect(KILL cr);
|
||||
format %{ "vmask_gen_sub $pd, $src2, $src1\t# KILL cr" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ sve_whilelo($pd$$PRegister, __ elemType_to_regVariant(bt), $src2$$Register, $src1$$Register);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// ------------------------------ Popcount vector ------------------------------
|
||||
|
||||
// vector popcount - INT
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
// Copyright (c) 2020, 2022, Arm Limited. All rights reserved.
|
||||
// Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
// Copyright (c) 2020, 2023, Arm Limited. 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
|
||||
@@ -124,6 +124,9 @@ source %{
|
||||
(opcode == Op_VectorCastL2X && bt == T_FLOAT) ||
|
||||
(opcode == Op_CountLeadingZerosV && bt == T_LONG) ||
|
||||
(opcode == Op_CountTrailingZerosV && bt == T_LONG) ||
|
||||
// The vector implementation of Op_AddReductionVD/F is for the Vector API only.
|
||||
// It is not suitable for auto-vectorization because it does not add the elements
|
||||
// in the same order as sequential code, and FP addition is non-associative.
|
||||
opcode == Op_AddReductionVD || opcode == Op_AddReductionVF ||
|
||||
opcode == Op_MulReductionVD || opcode == Op_MulReductionVF ||
|
||||
opcode == Op_MulVL) {
|
||||
@@ -1808,23 +1811,30 @@ REDUCE_ADD_INT_NEON_SVE_PAIRWISE(I, iRegIorL2I)
|
||||
REDUCE_ADD_INT_NEON_SVE_PAIRWISE(L, iRegL)
|
||||
|
||||
// reduction addF
|
||||
// Floating-point addition is not associative, so the rules for AddReductionVF
|
||||
// on NEON can't be used to auto-vectorize floating-point reduce-add.
|
||||
// Currently, on NEON, AddReductionVF is only generated by Vector API.
|
||||
instruct reduce_add2F_neon(vRegF dst, vRegF fsrc, vReg vsrc) %{
|
||||
predicate(UseSVE == 0 && Matcher::vector_length(n->in(2)) == 2);
|
||||
match(Set dst (AddReductionVF fsrc vsrc));
|
||||
effect(TEMP_DEF dst);
|
||||
format %{ "reduce_add2F_neon $dst, $fsrc, $vsrc" %}
|
||||
ins_encode %{
|
||||
__ faddp($dst$$FloatRegister, $vsrc$$FloatRegister, __ S);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $fsrc$$FloatRegister);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct reduce_addF_neon(vRegF dst, vRegF fsrc, vReg vsrc, vReg tmp) %{
|
||||
predicate(UseSVE == 0);
|
||||
instruct reduce_add4F_neon(vRegF dst, vRegF fsrc, vReg vsrc, vReg tmp) %{
|
||||
predicate(UseSVE == 0 && Matcher::vector_length(n->in(2)) == 4);
|
||||
match(Set dst (AddReductionVF fsrc vsrc));
|
||||
effect(TEMP_DEF dst, TEMP tmp);
|
||||
format %{ "reduce_addF_neon $dst, $fsrc, $vsrc\t# KILL $tmp" %}
|
||||
format %{ "reduce_add4F_neon $dst, $fsrc, $vsrc\t# KILL $tmp" %}
|
||||
ins_encode %{
|
||||
uint length_in_bytes = Matcher::vector_length_in_bytes(this, $vsrc);
|
||||
__ fadds($dst$$FloatRegister, $fsrc$$FloatRegister, $vsrc$$FloatRegister);
|
||||
__ ins($tmp$$FloatRegister, __ S, $vsrc$$FloatRegister, 0, 1);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $tmp$$FloatRegister);
|
||||
if (length_in_bytes == 16) {
|
||||
__ ins($tmp$$FloatRegister, __ S, $vsrc$$FloatRegister, 0, 2);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $tmp$$FloatRegister);
|
||||
__ ins($tmp$$FloatRegister, __ S, $vsrc$$FloatRegister, 0, 3);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $tmp$$FloatRegister);
|
||||
}
|
||||
__ faddp($tmp$$FloatRegister, __ T4S, $vsrc$$FloatRegister, $vsrc$$FloatRegister);
|
||||
__ faddp($dst$$FloatRegister, $tmp$$FloatRegister, __ S);
|
||||
__ fadds($dst$$FloatRegister, $dst$$FloatRegister, $fsrc$$FloatRegister);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
@@ -1847,16 +1857,17 @@ dnl
|
||||
REDUCE_ADD_FP_SVE(F, S)
|
||||
|
||||
// reduction addD
|
||||
|
||||
instruct reduce_addD_neon(vRegD dst, vRegD dsrc, vReg vsrc, vReg tmp) %{
|
||||
// Floating-point addition is not associative, so the rule for AddReductionVD
|
||||
// on NEON can't be used to auto-vectorize floating-point reduce-add.
|
||||
// Currently, on NEON, AddReductionVD is only generated by Vector API.
|
||||
instruct reduce_addD_neon(vRegD dst, vRegD dsrc, vReg vsrc) %{
|
||||
predicate(UseSVE == 0);
|
||||
match(Set dst (AddReductionVD dsrc vsrc));
|
||||
effect(TEMP_DEF dst, TEMP tmp);
|
||||
format %{ "reduce_addD_neon $dst, $dsrc, $vsrc\t# 2D. KILL $tmp" %}
|
||||
effect(TEMP_DEF dst);
|
||||
format %{ "reduce_addD_neon $dst, $dsrc, $vsrc\t# 2D" %}
|
||||
ins_encode %{
|
||||
__ faddd($dst$$FloatRegister, $dsrc$$FloatRegister, $vsrc$$FloatRegister);
|
||||
__ ins($tmp$$FloatRegister, __ D, $vsrc$$FloatRegister, 0, 1);
|
||||
__ faddd($dst$$FloatRegister, $dst$$FloatRegister, $tmp$$FloatRegister);
|
||||
__ faddp($dst$$FloatRegister, $vsrc$$FloatRegister, __ D);
|
||||
__ faddd($dst$$FloatRegister, $dst$$FloatRegister, $dsrc$$FloatRegister);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
@@ -2720,6 +2731,52 @@ instruct vcvtDtoF_gt64b(vReg dst, vReg src, vReg tmp) %{
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// VectorCastHF2F
|
||||
|
||||
instruct vcvtHFtoF(vReg dst, vReg src) %{
|
||||
match(Set dst (VectorCastHF2F src));
|
||||
format %{ "vcvtHFtoF $dst, $src" %}
|
||||
ins_encode %{
|
||||
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
|
||||
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
|
||||
// 4HF to 4F
|
||||
__ fcvtl($dst$$FloatRegister, __ T4S, $src$$FloatRegister, __ T4H);
|
||||
} else {
|
||||
assert(UseSVE > 0, "must be sve");
|
||||
__ sve_vector_extend($dst$$FloatRegister, __ S, $src$$FloatRegister, __ H);
|
||||
__ sve_fcvt($dst$$FloatRegister, __ S, ptrue, $dst$$FloatRegister, __ H);
|
||||
}
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// VectorCastF2HF
|
||||
|
||||
instruct vcvtFtoHF_neon(vReg dst, vReg src) %{
|
||||
predicate(VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))));
|
||||
match(Set dst (VectorCastF2HF src));
|
||||
format %{ "vcvtFtoHF_neon $dst, $src\t# 4F to 4HF" %}
|
||||
ins_encode %{
|
||||
// 4F to 4HF
|
||||
__ fcvtn($dst$$FloatRegister, __ T4H, $src$$FloatRegister, __ T4S);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct vcvtFtoHF_sve(vReg dst, vReg src, vReg tmp) %{
|
||||
predicate(!VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))));
|
||||
match(Set dst (VectorCastF2HF src));
|
||||
effect(TEMP_DEF dst, TEMP tmp);
|
||||
format %{ "vcvtFtoHF_sve $dst, $src\t# KILL $tmp" %}
|
||||
ins_encode %{
|
||||
assert(UseSVE > 0, "must be sve");
|
||||
__ sve_fcvt($dst$$FloatRegister, __ H, ptrue, $src$$FloatRegister, __ S);
|
||||
__ sve_vector_narrow($dst$$FloatRegister, __ H,
|
||||
$dst$$FloatRegister, __ S, $tmp$$FloatRegister);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// ------------------------------ Replicate ------------------------------------
|
||||
|
||||
dnl REPLICATE_INT($1, $2, $3 )
|
||||
@@ -4015,6 +4072,18 @@ instruct vmask_gen_imm(pReg pd, immL con, rFlagsReg cr) %{
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct vmask_gen_sub(pReg pd, iRegL src1, iRegL src2, rFlagsReg cr) %{
|
||||
predicate(UseSVE > 0);
|
||||
match(Set pd (VectorMaskGen (SubL src1 src2)));
|
||||
effect(KILL cr);
|
||||
format %{ "vmask_gen_sub $pd, $src2, $src1\t# KILL cr" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ sve_whilelo($pd$$PRegister, __ elemType_to_regVariant(bt), $src2$$Register, $src1$$Register);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
// ------------------------------ Popcount vector ------------------------------
|
||||
|
||||
// vector popcount - INT
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -505,7 +505,20 @@ class Address {
|
||||
}
|
||||
|
||||
bool uses(Register reg) const {
|
||||
return base() == reg || index() == reg;
|
||||
switch (_mode) {
|
||||
case literal:
|
||||
case no_mode:
|
||||
return false;
|
||||
case base_plus_offset:
|
||||
case base_plus_offset_reg:
|
||||
case pre:
|
||||
case post:
|
||||
case post_reg:
|
||||
return base() == reg || index() == reg;
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
address target() const {
|
||||
@@ -2716,6 +2729,7 @@ template<typename R, typename... Rx>
|
||||
INSN(fabd, 1, 1, 0b110101);
|
||||
INSN(fadd, 0, 0, 0b110101);
|
||||
INSN(fdiv, 1, 0, 0b111111);
|
||||
INSN(faddp, 1, 0, 0b110101);
|
||||
INSN(fmul, 1, 0, 0b110111);
|
||||
INSN(fsub, 0, 1, 0b110101);
|
||||
INSN(fmla, 0, 0, 0b110011);
|
||||
@@ -3929,9 +3943,29 @@ void sve_fcm(Condition cond, PRegister Pd, SIMD_RegVariant T,
|
||||
starti;
|
||||
assert(T_src != B && T_dst != B && T_src != Q && T_dst != Q &&
|
||||
T_src != T_dst, "invalid register variant");
|
||||
guarantee(T_src != H && T_dst != H, "half-precision unsupported");
|
||||
f(0b01100101, 31, 24), f(0b11, 23, 22), f(0b0010, 21, 18);
|
||||
f(T_dst, 17, 16), f(0b101, 15, 13);
|
||||
// The encodings of fields op1 (bits 17-16) and op2 (bits 23-22)
|
||||
// depend on T_src and T_dst as given below -
|
||||
// +-----+------+---------------------------------------------+
|
||||
// | op2 | op1 | Instruction Details |
|
||||
// +-----+------+---------------------------------------------+
|
||||
// | 10 | 01 | FCVT - half-precision to single-precision |
|
||||
// | 11 | 01 | FCVT - half-precision to double-precision |
|
||||
// | 10 | 00 | FCVT - single-precision to half-precision |
|
||||
// | 11 | 11 | FCVT - single-precision to double-precision |
|
||||
// | 11 | 00 | FCVT - double-preciison to half-precision |
|
||||
// | 11 | 10 | FCVT - double-precision to single-precision |
|
||||
// +-----+------+---+-----------------------------------------+
|
||||
int op1 = 0b00;
|
||||
int op2 = (T_src == D || T_dst == D) ? 0b11 : 0b10;
|
||||
if (T_src == H) {
|
||||
op1 = 0b01;
|
||||
} else if (T_dst == S) {
|
||||
op1 = 0b10;
|
||||
} else if (T_dst == D) {
|
||||
op1 = 0b11;
|
||||
}
|
||||
f(0b01100101, 31, 24), f(op2, 23, 22), f(0b0010, 21, 18);
|
||||
f(op1, 17, 16), f(0b101, 15, 13);
|
||||
pgrf(Pg, 10), rf(Zn, 5), rf(Zd, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -63,18 +63,6 @@ void CounterOverflowStub::emit_code(LIR_Assembler* ce) {
|
||||
__ b(_continuation);
|
||||
}
|
||||
|
||||
RangeCheckStub::RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, LIR_Opr array)
|
||||
: _index(index), _array(array), _throw_index_out_of_bounds_exception(false) {
|
||||
assert(info != NULL, "must have info");
|
||||
_info = new CodeEmitInfo(info);
|
||||
}
|
||||
|
||||
RangeCheckStub::RangeCheckStub(CodeEmitInfo* info, LIR_Opr index)
|
||||
: _index(index), _array(), _throw_index_out_of_bounds_exception(true) {
|
||||
assert(info != NULL, "must have info");
|
||||
_info = new CodeEmitInfo(info);
|
||||
}
|
||||
|
||||
void RangeCheckStub::emit_code(LIR_Assembler* ce) {
|
||||
__ bind(_entry);
|
||||
if (_info->deoptimize_on_exception()) {
|
||||
@@ -208,14 +196,6 @@ void NewObjectArrayStub::emit_code(LIR_Assembler* ce) {
|
||||
assert(_result->as_register() == r0, "result must in r0");
|
||||
__ b(_continuation);
|
||||
}
|
||||
// Implementation of MonitorAccessStubs
|
||||
|
||||
MonitorEnterStub::MonitorEnterStub(LIR_Opr obj_reg, LIR_Opr lock_reg, CodeEmitInfo* info)
|
||||
: MonitorAccessStub(obj_reg, lock_reg)
|
||||
{
|
||||
_info = new CodeEmitInfo(info);
|
||||
}
|
||||
|
||||
|
||||
void MonitorEnterStub::emit_code(LIR_Assembler* ce) {
|
||||
assert(__ rsp_offset() == 0, "frame size should be fixed");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -78,4 +78,13 @@ enum {
|
||||
pd_float_saved_as_double = false
|
||||
};
|
||||
|
||||
enum {
|
||||
pd_two_operand_lir_form = false
|
||||
};
|
||||
|
||||
// the number of stack required by ArrayCopyStub
|
||||
enum {
|
||||
pd_arraycopystub_reserved_argument_area_size = 2
|
||||
};
|
||||
|
||||
#endif // CPU_AARCH64_C1_DEFS_AARCH64_HPP
|
||||
|
||||
@@ -3185,7 +3185,8 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr
|
||||
__ encode_heap_oop(rscratch2, obj);
|
||||
obj = rscratch2;
|
||||
}
|
||||
assert_different_registers(obj, addr.base(), tmp, rscratch1, dst);
|
||||
assert_different_registers(obj, addr.base(), tmp, rscratch1);
|
||||
assert_different_registers(dst, addr.base(), tmp, rscratch1);
|
||||
__ lea(tmp, addr);
|
||||
(_masm->*xchg)(dst, obj, tmp);
|
||||
if (is_oop && UseCompressedOops) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -108,7 +108,7 @@ int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register disp_hdr
|
||||
// significant 2 bits cleared and page_size is a power of 2
|
||||
mov(rscratch1, sp);
|
||||
sub(hdr, hdr, rscratch1);
|
||||
ands(hdr, hdr, aligned_mask - os::vm_page_size());
|
||||
ands(hdr, hdr, aligned_mask - (int)os::vm_page_size());
|
||||
// for recursive locking, the result is zero => save it in the displaced header
|
||||
// location (NULL in the displaced hdr location indicates recursive locking)
|
||||
str(hdr, Address(disp_hdr, 0));
|
||||
@@ -199,9 +199,12 @@ void C1_MacroAssembler::initialize_body(Register obj, Register len_in_bytes, int
|
||||
mov(rscratch1, len_in_bytes);
|
||||
lea(t1, Address(obj, hdr_size_in_bytes));
|
||||
lsr(t2, rscratch1, LogBytesPerWord);
|
||||
zero_words(t1, t2);
|
||||
address tpc = zero_words(t1, t2);
|
||||
|
||||
bind(done);
|
||||
if (tpc == nullptr) {
|
||||
Compilation::current()->bailout("no space for trampoline stub");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -228,10 +231,17 @@ void C1_MacroAssembler::initialize_object(Register obj, Register klass, Register
|
||||
if (var_size_in_bytes != noreg) {
|
||||
mov(index, var_size_in_bytes);
|
||||
initialize_body(obj, index, hdr_size_in_bytes, t1, t2);
|
||||
if (Compilation::current()->bailed_out()) {
|
||||
return;
|
||||
}
|
||||
} else if (con_size_in_bytes > hdr_size_in_bytes) {
|
||||
con_size_in_bytes -= hdr_size_in_bytes;
|
||||
lea(t1, Address(obj, hdr_size_in_bytes));
|
||||
zero_words(t1, con_size_in_bytes / BytesPerWord);
|
||||
address tpc = zero_words(t1, con_size_in_bytes / BytesPerWord);
|
||||
if (tpc == nullptr) {
|
||||
Compilation::current()->bailout("no space for trampoline stub");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,6 +277,9 @@ void C1_MacroAssembler::allocate_array(Register obj, Register len, Register t1,
|
||||
|
||||
// clear rest of allocated space
|
||||
initialize_body(obj, arr_size, header_size * BytesPerWord, t1, t2);
|
||||
if (Compilation::current()->bailed_out()) {
|
||||
return;
|
||||
}
|
||||
|
||||
membar(StoreStore);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -60,6 +60,5 @@ define_pd_global(bool, UseTypeProfile, false);
|
||||
|
||||
define_pd_global(bool, OptimizeSinglePrecision, true );
|
||||
define_pd_global(bool, CSEArrayLength, false);
|
||||
define_pd_global(bool, TwoOperandLIRForm, false );
|
||||
|
||||
#endif // CPU_AARCH64_C1_GLOBALS_AARCH64_HPP
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2020, 2023, 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
|
||||
@@ -298,7 +298,12 @@ void C2_MacroAssembler::string_indexof(Register str2, Register str1,
|
||||
stub = RuntimeAddress(StubRoutines::aarch64::string_indexof_linear_uu());
|
||||
assert(stub.target() != NULL, "string_indexof_linear_uu stub has not been generated");
|
||||
}
|
||||
trampoline_call(stub);
|
||||
address call = trampoline_call(stub);
|
||||
if (call == nullptr) {
|
||||
DEBUG_ONLY(reset_labels(LINEARSEARCH, LINEAR_MEDIUM, DONE, NOMATCH, MATCH));
|
||||
ciEnv::current()->record_failure("CodeCache is full");
|
||||
return;
|
||||
}
|
||||
b(DONE);
|
||||
}
|
||||
|
||||
@@ -857,7 +862,12 @@ void C2_MacroAssembler::string_compare(Register str1, Register str2,
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
assert(stub.target() != NULL, "compare_long_string stub has not been generated");
|
||||
trampoline_call(stub);
|
||||
address call = trampoline_call(stub);
|
||||
if (call == nullptr) {
|
||||
DEBUG_ONLY(reset_labels(DONE, SHORT_LOOP, SHORT_STRING, SHORT_LAST, SHORT_LOOP_TAIL, SHORT_LAST2, SHORT_LAST_INIT, SHORT_LOOP_START));
|
||||
ciEnv::current()->record_failure("CodeCache is full");
|
||||
return;
|
||||
}
|
||||
b(DONE);
|
||||
|
||||
bind(SHORT_STRING);
|
||||
|
||||
@@ -35,9 +35,6 @@
|
||||
enum shift_kind kind = Assembler::LSL, unsigned shift = 0);
|
||||
|
||||
public:
|
||||
void emit_entry_barrier_stub(C2EntryBarrierStub* stub);
|
||||
static int entry_barrier_stub_size();
|
||||
|
||||
void string_compare(Register str1, Register str2,
|
||||
Register cnt1, Register cnt2, Register result,
|
||||
Register tmp1, Register tmp2, FloatRegister vtmp1,
|
||||
|
||||
@@ -30,7 +30,7 @@ void CodeBuffer::share_trampoline_for(address dest, int caller_offset) {
|
||||
if (_shared_trampoline_requests == nullptr) {
|
||||
constexpr unsigned init_size = 8;
|
||||
constexpr unsigned max_size = 256;
|
||||
_shared_trampoline_requests = new SharedTrampolineRequests(init_size, max_size);
|
||||
_shared_trampoline_requests = new (mtCompiler)SharedTrampolineRequests(init_size, max_size);
|
||||
}
|
||||
|
||||
bool created;
|
||||
@@ -42,6 +42,8 @@ void CodeBuffer::share_trampoline_for(address dest, int caller_offset) {
|
||||
_finalize_stubs = true;
|
||||
}
|
||||
|
||||
#define __ masm.
|
||||
|
||||
static bool emit_shared_trampolines(CodeBuffer* cb, CodeBuffer::SharedTrampolineRequests* requests) {
|
||||
if (requests == nullptr) {
|
||||
return true;
|
||||
@@ -49,39 +51,35 @@ static bool emit_shared_trampolines(CodeBuffer* cb, CodeBuffer::SharedTrampoline
|
||||
|
||||
MacroAssembler masm(cb);
|
||||
|
||||
bool p_succeeded = true;
|
||||
auto emit = [&](address dest, const CodeBuffer::Offsets &offsets) {
|
||||
masm.set_code_section(cb->stubs());
|
||||
if (!is_aligned(masm.offset(), wordSize)) {
|
||||
if (cb->stubs()->maybe_expand_to_ensure_remaining(NativeInstruction::instruction_size) && cb->blob() == NULL) {
|
||||
ciEnv::current()->record_failure("CodeCache is full");
|
||||
p_succeeded = false;
|
||||
return p_succeeded;
|
||||
}
|
||||
masm.align(wordSize);
|
||||
}
|
||||
|
||||
assert(cb->stubs()->remaining() >= MacroAssembler::max_trampoline_stub_size(), "pre-allocated trampolines");
|
||||
LinkedListIterator<int> it(offsets.head());
|
||||
int offset = *it.next();
|
||||
for (; !it.is_empty(); offset = *it.next()) {
|
||||
masm.relocate(trampoline_stub_Relocation::spec(cb->insts()->start() + offset));
|
||||
}
|
||||
masm.set_code_section(cb->insts());
|
||||
address stub = __ emit_trampoline_stub(offset, dest);
|
||||
assert(stub, "pre-allocated trampolines");
|
||||
|
||||
address stub = masm.emit_trampoline_stub(offset, dest);
|
||||
if (stub == nullptr) {
|
||||
ciEnv::current()->record_failure("CodeCache is full");
|
||||
p_succeeded = false;
|
||||
address reloc_pc = cb->stubs()->end() - NativeCallTrampolineStub::instruction_size;
|
||||
while (!it.is_empty()) {
|
||||
offset = *it.next();
|
||||
address caller_pc = cb->insts()->start() + offset;
|
||||
cb->stubs()->relocate(reloc_pc, trampoline_stub_Relocation::spec(caller_pc));
|
||||
}
|
||||
|
||||
return p_succeeded;
|
||||
return true;
|
||||
};
|
||||
|
||||
requests->iterate(emit);
|
||||
assert(requests->number_of_entries() >= 1, "at least one");
|
||||
const int total_requested_size = MacroAssembler::max_trampoline_stub_size() * requests->number_of_entries();
|
||||
if (cb->stubs()->maybe_expand_to_ensure_remaining(total_requested_size) && cb->blob() == NULL) {
|
||||
ciEnv::current()->record_failure("CodeCache is full");
|
||||
return false;
|
||||
}
|
||||
|
||||
return p_succeeded;
|
||||
requests->iterate(emit);
|
||||
return true;
|
||||
}
|
||||
|
||||
#undef __
|
||||
|
||||
bool CodeBuffer::pd_finalize_stubs() {
|
||||
return emit_shared_stubs_to_interp<MacroAssembler>(this, _shared_stub_to_interp_requests)
|
||||
&& emit_shared_trampolines(this, _shared_trampoline_requests);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2018, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -71,15 +71,14 @@ address CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf, address mark)
|
||||
#undef __
|
||||
|
||||
int CompiledStaticCall::to_interp_stub_size() {
|
||||
// isb; movk; movz; movz; movk; movz; movz; br
|
||||
return 8 * NativeInstruction::instruction_size;
|
||||
return MacroAssembler::static_call_stub_size();
|
||||
}
|
||||
|
||||
int CompiledStaticCall::to_trampoline_stub_size() {
|
||||
// Somewhat pessimistically, we count 3 instructions here (although
|
||||
// there are only two) because we sometimes emit an alignment nop.
|
||||
// Trampoline stubs are always word aligned.
|
||||
return 3 * NativeInstruction::instruction_size + wordSize;
|
||||
return MacroAssembler::max_trampoline_stub_size();
|
||||
}
|
||||
|
||||
// Relocation entries for call stub, compiled java to interpreter.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, 2023, 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
|
||||
@@ -150,6 +150,7 @@ inline void FreezeBase::relativize_interpreted_frame_metadata(const frame& f, co
|
||||
|
||||
// at(frame::interpreter_frame_last_sp_offset) can be NULL at safepoint preempts
|
||||
*hf.addr_at(frame::interpreter_frame_last_sp_offset) = hf.unextended_sp() - hf.fp();
|
||||
// This line can be changed into an assert when we have fixed the "frame padding problem", see JDK-8300197
|
||||
*hf.addr_at(frame::interpreter_frame_locals_offset) = frame::sender_sp_offset + f.interpreter_frame_method()->max_locals() - 1;
|
||||
|
||||
relativize_one(vfp, hfp, frame::interpreter_frame_initial_sp_offset); // == block_top == block_bottom
|
||||
@@ -232,12 +233,12 @@ template<typename FKind> frame ThawBase::new_stack_frame(const frame& hf, frame&
|
||||
assert(frame_sp == unextended_sp, "");
|
||||
caller.set_sp(fp + frame::sender_sp_offset);
|
||||
frame f(frame_sp, frame_sp, fp, hf.pc());
|
||||
// it's set again later in set_interpreter_frame_bottom, but we need to set the locals now so that
|
||||
// we could call ContinuationHelper::InterpretedFrame::frame_bottom
|
||||
// we need to set the locals so that the caller of new_stack_frame() can call
|
||||
// ContinuationHelper::InterpretedFrame::frame_bottom
|
||||
intptr_t offset = *hf.addr_at(frame::interpreter_frame_locals_offset);
|
||||
assert((int)offset == frame::sender_sp_offset + locals - 1, "");
|
||||
// derelativize locals
|
||||
*(intptr_t**)f.addr_at(frame::interpreter_frame_locals_offset) = fp + padding + offset;
|
||||
// set relativized locals
|
||||
*f.addr_at(frame::interpreter_frame_locals_offset) = padding + offset;
|
||||
assert((intptr_t)f.fp() % frame::frame_alignment == 0, "");
|
||||
return f;
|
||||
} else {
|
||||
@@ -300,7 +301,9 @@ inline void ThawBase::derelativize_interpreted_frame_metadata(const frame& hf, c
|
||||
}
|
||||
|
||||
inline void ThawBase::set_interpreter_frame_bottom(const frame& f, intptr_t* bottom) {
|
||||
*(intptr_t**)f.addr_at(frame::interpreter_frame_locals_offset) = bottom - 1;
|
||||
// set relativized locals
|
||||
// this line can be changed into an assert when we have fixed the "frame padding problem", see JDK-8300197
|
||||
*f.addr_at(frame::interpreter_frame_locals_offset) = (bottom - 1) - f.fp();
|
||||
}
|
||||
|
||||
#endif // CPU_AARCH64_CONTINUATIONFREEZETHAW_AARCH64_INLINE_HPP
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2022, 2023, 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
|
||||
@@ -68,7 +68,6 @@ inline void ContinuationHelper::push_pd(const frame& f) {
|
||||
*(intptr_t**)(f.sp() - frame::sender_sp_offset) = f.fp();
|
||||
}
|
||||
|
||||
|
||||
inline void ContinuationHelper::set_anchor_to_entry_pd(JavaFrameAnchor* anchor, ContinuationEntry* entry) {
|
||||
anchor->set_last_Java_fp(entry->entry_fp());
|
||||
}
|
||||
@@ -131,7 +130,7 @@ inline intptr_t* ContinuationHelper::InterpretedFrame::frame_top(const frame& f,
|
||||
}
|
||||
|
||||
inline intptr_t* ContinuationHelper::InterpretedFrame::frame_bottom(const frame& f) { // exclusive; this will not be copied with the frame
|
||||
return (intptr_t*)f.at(frame::interpreter_frame_locals_offset) + 1; // exclusive, so we add 1 word
|
||||
return (intptr_t*)f.at_relative(frame::interpreter_frame_locals_offset) + 1; // exclusive, so we add 1 word
|
||||
}
|
||||
|
||||
inline intptr_t* ContinuationHelper::InterpretedFrame::frame_top(const frame& f, int callee_argsize, bool callee_interpreted) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2020, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -314,7 +314,16 @@ intptr_t* frame::entry_frame_argument_at(int offset) const {
|
||||
return &unextended_sp()[index];
|
||||
}
|
||||
|
||||
// locals
|
||||
|
||||
void frame::interpreter_frame_set_locals(intptr_t* locs) {
|
||||
assert(is_interpreted_frame(), "interpreted frame expected");
|
||||
// set relativized locals
|
||||
ptr_at_put(interpreter_frame_locals_offset, (intptr_t) (locs - fp()));
|
||||
}
|
||||
|
||||
// sender_sp
|
||||
|
||||
intptr_t* frame::interpreter_frame_sender_sp() const {
|
||||
assert(is_interpreted_frame(), "interpreted frame expected");
|
||||
return (intptr_t*) at(interpreter_frame_sender_sp_offset);
|
||||
@@ -526,7 +535,7 @@ bool frame::is_interpreted_frame_valid(JavaThread* thread) const {
|
||||
|
||||
// validate locals
|
||||
|
||||
address locals = (address) *interpreter_frame_locals_addr();
|
||||
address locals = (address)interpreter_frame_locals();
|
||||
return thread->is_in_stack_range_incl(locals, (address)fp());
|
||||
}
|
||||
|
||||
@@ -734,12 +743,12 @@ extern "C" void pf(uintptr_t sp, uintptr_t fp, uintptr_t pc,
|
||||
uintptr_t bcx, uintptr_t thread) {
|
||||
if (!reg_map) {
|
||||
reg_map = NEW_C_HEAP_OBJ(RegisterMap, mtInternal);
|
||||
::new (reg_map) RegisterMap((JavaThread*)thread,
|
||||
::new (reg_map) RegisterMap(reinterpret_cast<JavaThread*>(thread),
|
||||
RegisterMap::UpdateMap::skip,
|
||||
RegisterMap::ProcessFrames::include,
|
||||
RegisterMap::WalkContinuation::skip);
|
||||
} else {
|
||||
*reg_map = RegisterMap((JavaThread*)thread,
|
||||
*reg_map = RegisterMap(reinterpret_cast<JavaThread*>(thread),
|
||||
RegisterMap::UpdateMap::skip,
|
||||
RegisterMap::ProcessFrames::include,
|
||||
RegisterMap::WalkContinuation::skip);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -257,8 +257,9 @@ inline address frame::sender_pc() const { return pauth_strip_point
|
||||
|
||||
inline intptr_t* frame::sender_sp() const { return addr_at( sender_sp_offset); }
|
||||
|
||||
inline intptr_t** frame::interpreter_frame_locals_addr() const {
|
||||
return (intptr_t**)addr_at(interpreter_frame_locals_offset);
|
||||
inline intptr_t* frame::interpreter_frame_locals() const {
|
||||
intptr_t n = *addr_at(interpreter_frame_locals_offset);
|
||||
return &fp()[n]; // return relativized locals
|
||||
}
|
||||
|
||||
inline intptr_t* frame::interpreter_frame_last_sp() const {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2018, 2023, 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
|
||||
@@ -122,8 +122,8 @@ void BarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators
|
||||
void BarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env,
|
||||
Register obj, Register tmp, Label& slowpath) {
|
||||
// If mask changes we need to ensure that the inverse is still encodable as an immediate
|
||||
STATIC_ASSERT(JNIHandles::weak_tag_mask == 1);
|
||||
__ andr(obj, obj, ~JNIHandles::weak_tag_mask);
|
||||
STATIC_ASSERT(JNIHandles::tag_mask == 0b11);
|
||||
__ andr(obj, obj, ~JNIHandles::tag_mask);
|
||||
__ ldr(obj, Address(obj, 0)); // *obj
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label* slo
|
||||
// instruction patching is handled with isb fences on the way back
|
||||
// from the safepoint to Java. So here we can do a plain conditional
|
||||
// branch with no fencing.
|
||||
Address thread_disarmed_addr(rthread, in_bytes(bs_nm->thread_disarmed_offset()));
|
||||
Address thread_disarmed_addr(rthread, in_bytes(bs_nm->thread_disarmed_guard_value_offset()));
|
||||
__ ldrw(rscratch2, thread_disarmed_addr);
|
||||
__ cmp(rscratch1, rscratch2);
|
||||
} else if (patching_type == NMethodPatchingType::conc_instruction_and_data_patch) {
|
||||
@@ -238,7 +238,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label* slo
|
||||
// Combine the guard value (low order) with the epoch value (high order).
|
||||
__ orr(rscratch1, rscratch1, rscratch2, Assembler::LSL, 32);
|
||||
// Compare the global values with the thread-local values.
|
||||
Address thread_disarmed_and_epoch_addr(rthread, in_bytes(bs_nm->thread_disarmed_offset()));
|
||||
Address thread_disarmed_and_epoch_addr(rthread, in_bytes(bs_nm->thread_disarmed_guard_value_offset()));
|
||||
__ ldr(rscratch2, thread_disarmed_and_epoch_addr);
|
||||
__ cmp(rscratch1, rscratch2);
|
||||
} else {
|
||||
@@ -246,7 +246,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label* slo
|
||||
// Subsequent loads of oops must occur after load of guard value.
|
||||
// BarrierSetNMethod::disarm sets guard with release semantics.
|
||||
__ membar(__ LoadLoad);
|
||||
Address thread_disarmed_addr(rthread, in_bytes(bs_nm->thread_disarmed_offset()));
|
||||
Address thread_disarmed_addr(rthread, in_bytes(bs_nm->thread_disarmed_guard_value_offset()));
|
||||
__ ldrw(rscratch2, thread_disarmed_addr);
|
||||
__ cmpw(rscratch1, rscratch2);
|
||||
}
|
||||
@@ -299,3 +299,18 @@ void BarrierSetAssembler::c2i_entry_barrier(MacroAssembler* masm) {
|
||||
__ bind(method_live);
|
||||
}
|
||||
|
||||
void BarrierSetAssembler::check_oop(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& error) {
|
||||
// Check if the oop is in the right area of memory
|
||||
__ mov(tmp2, (intptr_t) Universe::verify_oop_mask());
|
||||
__ andr(tmp1, obj, tmp2);
|
||||
__ mov(tmp2, (intptr_t) Universe::verify_oop_bits());
|
||||
|
||||
// Compare tmp1 and tmp2. We don't use a compare
|
||||
// instruction here because the flags register is live.
|
||||
__ eor(tmp1, tmp1, tmp2);
|
||||
__ cbnz(tmp1, error);
|
||||
|
||||
// make sure klass is 'reasonable', which is not zero.
|
||||
__ load_klass(obj, obj); // get klass
|
||||
__ cbz(obj, error); // if klass is NULL it is broken
|
||||
}
|
||||
|
||||
@@ -72,6 +72,8 @@ public:
|
||||
virtual void nmethod_entry_barrier(MacroAssembler* masm, Label* slow_path, Label* continuation, Label* guard);
|
||||
virtual void c2i_entry_barrier(MacroAssembler* masm);
|
||||
|
||||
virtual void check_oop(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& error);
|
||||
|
||||
virtual bool supports_instruction_patching() {
|
||||
NMethodPatchingType patching_type = nmethod_patching_type();
|
||||
return patching_type == NMethodPatchingType::conc_instruction_and_data_patch ||
|
||||
|
||||
@@ -163,32 +163,12 @@ static NativeNMethodBarrier* native_nmethod_barrier(nmethod* nm) {
|
||||
return barrier;
|
||||
}
|
||||
|
||||
void BarrierSetNMethod::disarm(nmethod* nm) {
|
||||
void BarrierSetNMethod::set_guard_value(nmethod* nm, int value) {
|
||||
if (!supports_entry_barrier(nm)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// The patching epoch is incremented before the nmethod is disarmed. Disarming
|
||||
// is performed with a release store. In the nmethod entry barrier, the values
|
||||
// are read in the opposite order, such that the load of the nmethod guard
|
||||
// acquires the patching epoch. This way, the guard is guaranteed to block
|
||||
// entries to the nmethod, until it has safely published the requirement for
|
||||
// further fencing by mutators, before they are allowed to enter.
|
||||
BarrierSetAssembler* bs_asm = BarrierSet::barrier_set()->barrier_set_assembler();
|
||||
bs_asm->increment_patching_epoch();
|
||||
|
||||
// Disarms the nmethod guard emitted by BarrierSetAssembler::nmethod_entry_barrier.
|
||||
// Symmetric "LDR; DMB ISHLD" is in the nmethod barrier.
|
||||
NativeNMethodBarrier* barrier = native_nmethod_barrier(nm);
|
||||
barrier->set_value(nm, disarmed_value());
|
||||
}
|
||||
|
||||
void BarrierSetNMethod::arm(nmethod* nm, int arm_value) {
|
||||
if (!supports_entry_barrier(nm)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (arm_value == disarmed_value()) {
|
||||
if (value == disarmed_guard_value()) {
|
||||
// The patching epoch is incremented before the nmethod is disarmed. Disarming
|
||||
// is performed with a release store. In the nmethod entry barrier, the values
|
||||
// are read in the opposite order, such that the load of the nmethod guard
|
||||
@@ -200,14 +180,14 @@ void BarrierSetNMethod::arm(nmethod* nm, int arm_value) {
|
||||
}
|
||||
|
||||
NativeNMethodBarrier* barrier = native_nmethod_barrier(nm);
|
||||
barrier->set_value(nm, arm_value);
|
||||
barrier->set_value(nm, value);
|
||||
}
|
||||
|
||||
bool BarrierSetNMethod::is_armed(nmethod* nm) {
|
||||
int BarrierSetNMethod::guard_value(nmethod* nm) {
|
||||
if (!supports_entry_barrier(nm)) {
|
||||
return false;
|
||||
return disarmed_guard_value();
|
||||
}
|
||||
|
||||
NativeNMethodBarrier* barrier = native_nmethod_barrier(nm);
|
||||
return barrier->get_value(nm) != disarmed_value();
|
||||
return barrier->get_value(nm);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2019, 2023, 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
|
||||
@@ -444,6 +444,19 @@ void ZBarrierSetAssembler::generate_c2_load_barrier_stub(MacroAssembler* masm, Z
|
||||
__ b(*stub->continuation());
|
||||
}
|
||||
|
||||
#undef __
|
||||
|
||||
#endif // COMPILER2
|
||||
|
||||
#undef __
|
||||
#define __ masm->
|
||||
|
||||
void ZBarrierSetAssembler::check_oop(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& error) {
|
||||
// Check if mask is good.
|
||||
// verifies that ZAddressBadMask & r0 == 0
|
||||
__ ldr(tmp2, Address(rthread, ZThreadLocalData::address_bad_mask_offset()));
|
||||
__ andr(tmp1, obj, tmp2);
|
||||
__ cbnz(tmp1, error);
|
||||
|
||||
BarrierSetAssembler::check_oop(masm, obj, tmp1, tmp2, error);
|
||||
}
|
||||
|
||||
#undef __
|
||||
|
||||
@@ -97,6 +97,8 @@ public:
|
||||
void generate_c2_load_barrier_stub(MacroAssembler* masm,
|
||||
ZLoadBarrierStubC2* stub) const;
|
||||
#endif // COMPILER2
|
||||
|
||||
void check_oop(MacroAssembler* masm, Register obj, Register tmp1, Register tmp2, Label& error);
|
||||
};
|
||||
|
||||
#endif // CPU_AARCH64_GC_Z_ZBARRIERSETASSEMBLER_AARCH64_HPP
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2019, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -88,6 +88,8 @@ define_pd_global(intx, InlineSmallCode, 1000);
|
||||
"Use Neon for CRC32 computation") \
|
||||
product(bool, UseCRC32, false, \
|
||||
"Use CRC32 instructions for CRC32 computation") \
|
||||
product(bool, UseCryptoPmullForCRC32, false, \
|
||||
"Use Crypto PMULL instructions for CRC32 computation") \
|
||||
product(bool, UseSIMDForMemoryOps, false, \
|
||||
"Use SIMD instructions in generated memory move code") \
|
||||
product(bool, UseSIMDForArrayEquals, true, \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2020, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -802,7 +802,7 @@ void InterpreterMacroAssembler::lock_object(Register lock_reg)
|
||||
// copy
|
||||
mov(rscratch1, sp);
|
||||
sub(swap_reg, swap_reg, rscratch1);
|
||||
ands(swap_reg, swap_reg, (uint64_t)(7 - os::vm_page_size()));
|
||||
ands(swap_reg, swap_reg, (uint64_t)(7 - (int)os::vm_page_size()));
|
||||
|
||||
// Save the test result, for recursive case, the result is zero
|
||||
str(swap_reg, Address(lock_reg, mark_offset));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2015, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -76,6 +76,7 @@ class InterpreterMacroAssembler: public MacroAssembler {
|
||||
|
||||
void restore_locals() {
|
||||
ldr(rlocals, Address(rfp, frame::interpreter_frame_locals_offset * wordSize));
|
||||
lea(rlocals, Address(rfp, rlocals, Address::lsl(3)));
|
||||
}
|
||||
|
||||
void restore_constant_pool_cache() {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -926,8 +926,7 @@ address MacroAssembler::trampoline_call(Address entry) {
|
||||
address MacroAssembler::emit_trampoline_stub(int insts_call_instruction_offset,
|
||||
address dest) {
|
||||
// Max stub size: alignment nop, TrampolineStub.
|
||||
address stub = start_a_stub(NativeInstruction::instruction_size
|
||||
+ NativeCallTrampolineStub::instruction_size);
|
||||
address stub = start_a_stub(max_trampoline_stub_size());
|
||||
if (stub == NULL) {
|
||||
return NULL; // CodeBuffer::expand failed
|
||||
}
|
||||
@@ -959,6 +958,11 @@ address MacroAssembler::emit_trampoline_stub(int insts_call_instruction_offset,
|
||||
return stub_start_addr;
|
||||
}
|
||||
|
||||
int MacroAssembler::max_trampoline_stub_size() {
|
||||
// Max stub size: alignment nop, TrampolineStub.
|
||||
return NativeInstruction::instruction_size + NativeCallTrampolineStub::instruction_size;
|
||||
}
|
||||
|
||||
void MacroAssembler::emit_static_call_stub() {
|
||||
// CompiledDirectStaticCall::set_to_interpreted knows the
|
||||
// exact layout of this stub.
|
||||
@@ -971,6 +975,11 @@ void MacroAssembler::emit_static_call_stub() {
|
||||
br(rscratch1);
|
||||
}
|
||||
|
||||
int MacroAssembler::static_call_stub_size() {
|
||||
// isb; movk; movz; movz; movk; movz; movz; br
|
||||
return 8 * NativeInstruction::instruction_size;
|
||||
}
|
||||
|
||||
void MacroAssembler::c2bool(Register x) {
|
||||
// implements x == 0 ? 0 : 1
|
||||
// note: must only look at least-significant byte of x
|
||||
@@ -1101,6 +1110,7 @@ void MacroAssembler::post_call_nop() {
|
||||
}
|
||||
InstructionMark im(this);
|
||||
relocate(post_call_nop_Relocation::spec());
|
||||
InlineSkippedInstructionsCounter skipCounter(this);
|
||||
nop();
|
||||
movk(zr, 0);
|
||||
movk(zr, 0);
|
||||
@@ -2457,22 +2467,56 @@ void MacroAssembler::verify_heapbase(const char* msg) {
|
||||
#endif
|
||||
|
||||
void MacroAssembler::resolve_jobject(Register value, Register tmp1, Register tmp2) {
|
||||
Label done, not_weak;
|
||||
assert_different_registers(value, tmp1, tmp2);
|
||||
Label done, tagged, weak_tagged;
|
||||
|
||||
cbz(value, done); // Use NULL as-is.
|
||||
tst(value, JNIHandles::tag_mask); // Test for tag.
|
||||
br(Assembler::NE, tagged);
|
||||
|
||||
STATIC_ASSERT(JNIHandles::weak_tag_mask == 1u);
|
||||
tbz(value, 0, not_weak); // Test for jweak tag.
|
||||
|
||||
// Resolve jweak.
|
||||
access_load_at(T_OBJECT, IN_NATIVE | ON_PHANTOM_OOP_REF, value,
|
||||
Address(value, -JNIHandles::weak_tag_value), tmp1, tmp2);
|
||||
// Resolve local handle
|
||||
access_load_at(T_OBJECT, IN_NATIVE | AS_RAW, value, Address(value, 0), tmp1, tmp2);
|
||||
verify_oop(value);
|
||||
b(done);
|
||||
|
||||
bind(not_weak);
|
||||
// Resolve (untagged) jobject.
|
||||
access_load_at(T_OBJECT, IN_NATIVE, value, Address(value, 0), tmp1, tmp2);
|
||||
bind(tagged);
|
||||
STATIC_ASSERT(JNIHandles::TypeTag::weak_global == 0b1);
|
||||
tbnz(value, 0, weak_tagged); // Test for weak tag.
|
||||
|
||||
// Resolve global handle
|
||||
access_load_at(T_OBJECT, IN_NATIVE, value, Address(value, -JNIHandles::TypeTag::global), tmp1, tmp2);
|
||||
verify_oop(value);
|
||||
b(done);
|
||||
|
||||
bind(weak_tagged);
|
||||
// Resolve jweak.
|
||||
access_load_at(T_OBJECT, IN_NATIVE | ON_PHANTOM_OOP_REF,
|
||||
value, Address(value, -JNIHandles::TypeTag::weak_global), tmp1, tmp2);
|
||||
verify_oop(value);
|
||||
|
||||
bind(done);
|
||||
}
|
||||
|
||||
void MacroAssembler::resolve_global_jobject(Register value, Register tmp1, Register tmp2) {
|
||||
assert_different_registers(value, tmp1, tmp2);
|
||||
Label done;
|
||||
|
||||
cbz(value, done); // Use NULL as-is.
|
||||
|
||||
#ifdef ASSERT
|
||||
{
|
||||
STATIC_ASSERT(JNIHandles::TypeTag::global == 0b10);
|
||||
Label valid_global_tag;
|
||||
tbnz(value, 1, valid_global_tag); // Test for global tag
|
||||
stop("non global jobject using resolve_global_jobject");
|
||||
bind(valid_global_tag);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Resolve global handle
|
||||
access_load_at(T_OBJECT, IN_NATIVE, value, Address(value, -JNIHandles::TypeTag::global), tmp1, tmp2);
|
||||
verify_oop(value);
|
||||
|
||||
bind(done);
|
||||
}
|
||||
|
||||
@@ -3559,6 +3603,65 @@ void MacroAssembler::update_word_crc32(Register crc, Register v, Register tmp,
|
||||
eor(crc, crc, tmp);
|
||||
}
|
||||
|
||||
void MacroAssembler::kernel_crc32_using_crypto_pmull(Register crc, Register buf,
|
||||
Register len, Register tmp0, Register tmp1, Register tmp2, Register tmp3) {
|
||||
Label CRC_by4_loop, CRC_by1_loop, CRC_less128, CRC_by128_pre, CRC_by32_loop, CRC_less32, L_exit;
|
||||
assert_different_registers(crc, buf, len, tmp0, tmp1, tmp2);
|
||||
|
||||
subs(tmp0, len, 384);
|
||||
mvnw(crc, crc);
|
||||
br(Assembler::GE, CRC_by128_pre);
|
||||
BIND(CRC_less128);
|
||||
subs(len, len, 32);
|
||||
br(Assembler::GE, CRC_by32_loop);
|
||||
BIND(CRC_less32);
|
||||
adds(len, len, 32 - 4);
|
||||
br(Assembler::GE, CRC_by4_loop);
|
||||
adds(len, len, 4);
|
||||
br(Assembler::GT, CRC_by1_loop);
|
||||
b(L_exit);
|
||||
|
||||
BIND(CRC_by32_loop);
|
||||
ldp(tmp0, tmp1, Address(buf));
|
||||
crc32x(crc, crc, tmp0);
|
||||
ldp(tmp2, tmp3, Address(buf, 16));
|
||||
crc32x(crc, crc, tmp1);
|
||||
add(buf, buf, 32);
|
||||
crc32x(crc, crc, tmp2);
|
||||
subs(len, len, 32);
|
||||
crc32x(crc, crc, tmp3);
|
||||
br(Assembler::GE, CRC_by32_loop);
|
||||
cmn(len, (u1)32);
|
||||
br(Assembler::NE, CRC_less32);
|
||||
b(L_exit);
|
||||
|
||||
BIND(CRC_by4_loop);
|
||||
ldrw(tmp0, Address(post(buf, 4)));
|
||||
subs(len, len, 4);
|
||||
crc32w(crc, crc, tmp0);
|
||||
br(Assembler::GE, CRC_by4_loop);
|
||||
adds(len, len, 4);
|
||||
br(Assembler::LE, L_exit);
|
||||
BIND(CRC_by1_loop);
|
||||
ldrb(tmp0, Address(post(buf, 1)));
|
||||
subs(len, len, 1);
|
||||
crc32b(crc, crc, tmp0);
|
||||
br(Assembler::GT, CRC_by1_loop);
|
||||
b(L_exit);
|
||||
|
||||
BIND(CRC_by128_pre);
|
||||
kernel_crc32_common_fold_using_crypto_pmull(crc, buf, len, tmp0, tmp1, tmp2,
|
||||
4*256*sizeof(juint) + 8*sizeof(juint));
|
||||
mov(crc, 0);
|
||||
crc32x(crc, crc, tmp0);
|
||||
crc32x(crc, crc, tmp1);
|
||||
|
||||
cbnz(len, CRC_less128);
|
||||
|
||||
BIND(L_exit);
|
||||
mvnw(crc, crc);
|
||||
}
|
||||
|
||||
void MacroAssembler::kernel_crc32_using_crc32(Register crc, Register buf,
|
||||
Register len, Register tmp0, Register tmp1, Register tmp2,
|
||||
Register tmp3) {
|
||||
@@ -3670,6 +3773,11 @@ void MacroAssembler::kernel_crc32(Register crc, Register buf, Register len,
|
||||
Register tmp, Register tmp2, Register tmp3) {
|
||||
Label L_by16, L_by16_loop, L_by4, L_by4_loop, L_by1, L_by1_loop, L_exit;
|
||||
|
||||
if (UseCryptoPmullForCRC32) {
|
||||
kernel_crc32_using_crypto_pmull(crc, buf, len, table0, table1, table2, table3);
|
||||
return;
|
||||
}
|
||||
|
||||
if (UseCRC32) {
|
||||
kernel_crc32_using_crc32(crc, buf, len, table0, table1, table2, table3);
|
||||
return;
|
||||
@@ -3969,6 +4077,123 @@ void MacroAssembler::kernel_crc32c(Register crc, Register buf, Register len,
|
||||
kernel_crc32c_using_crc32c(crc, buf, len, table0, table1, table2, table3);
|
||||
}
|
||||
|
||||
void MacroAssembler::kernel_crc32_common_fold_using_crypto_pmull(Register crc, Register buf,
|
||||
Register len, Register tmp0, Register tmp1, Register tmp2, size_t table_offset) {
|
||||
Label CRC_by128_loop;
|
||||
assert_different_registers(crc, buf, len, tmp0, tmp1, tmp2);
|
||||
|
||||
sub(len, len, 256);
|
||||
Register table = tmp0;
|
||||
{
|
||||
uint64_t offset;
|
||||
adrp(table, ExternalAddress(StubRoutines::crc_table_addr()), offset);
|
||||
add(table, table, offset);
|
||||
}
|
||||
add(table, table, table_offset);
|
||||
|
||||
sub(buf, buf, 0x10);
|
||||
ldrq(v1, Address(buf, 0x10));
|
||||
ldrq(v2, Address(buf, 0x20));
|
||||
ldrq(v3, Address(buf, 0x30));
|
||||
ldrq(v4, Address(buf, 0x40));
|
||||
ldrq(v5, Address(buf, 0x50));
|
||||
ldrq(v6, Address(buf, 0x60));
|
||||
ldrq(v7, Address(buf, 0x70));
|
||||
ldrq(v8, Address(pre(buf, 0x80)));
|
||||
|
||||
movi(v25, T4S, 0);
|
||||
mov(v25, S, 0, crc);
|
||||
eor(v1, T16B, v1, v25);
|
||||
|
||||
ldrq(v0, Address(table));
|
||||
b(CRC_by128_loop);
|
||||
|
||||
align(OptoLoopAlignment);
|
||||
BIND(CRC_by128_loop);
|
||||
pmull (v9, T1Q, v1, v0, T1D);
|
||||
pmull2(v10, T1Q, v1, v0, T2D);
|
||||
ldrq(v1, Address(buf, 0x10));
|
||||
eor3(v1, T16B, v9, v10, v1);
|
||||
|
||||
pmull (v11, T1Q, v2, v0, T1D);
|
||||
pmull2(v12, T1Q, v2, v0, T2D);
|
||||
ldrq(v2, Address(buf, 0x20));
|
||||
eor3(v2, T16B, v11, v12, v2);
|
||||
|
||||
pmull (v13, T1Q, v3, v0, T1D);
|
||||
pmull2(v14, T1Q, v3, v0, T2D);
|
||||
ldrq(v3, Address(buf, 0x30));
|
||||
eor3(v3, T16B, v13, v14, v3);
|
||||
|
||||
pmull (v15, T1Q, v4, v0, T1D);
|
||||
pmull2(v16, T1Q, v4, v0, T2D);
|
||||
ldrq(v4, Address(buf, 0x40));
|
||||
eor3(v4, T16B, v15, v16, v4);
|
||||
|
||||
pmull (v17, T1Q, v5, v0, T1D);
|
||||
pmull2(v18, T1Q, v5, v0, T2D);
|
||||
ldrq(v5, Address(buf, 0x50));
|
||||
eor3(v5, T16B, v17, v18, v5);
|
||||
|
||||
pmull (v19, T1Q, v6, v0, T1D);
|
||||
pmull2(v20, T1Q, v6, v0, T2D);
|
||||
ldrq(v6, Address(buf, 0x60));
|
||||
eor3(v6, T16B, v19, v20, v6);
|
||||
|
||||
pmull (v21, T1Q, v7, v0, T1D);
|
||||
pmull2(v22, T1Q, v7, v0, T2D);
|
||||
ldrq(v7, Address(buf, 0x70));
|
||||
eor3(v7, T16B, v21, v22, v7);
|
||||
|
||||
pmull (v23, T1Q, v8, v0, T1D);
|
||||
pmull2(v24, T1Q, v8, v0, T2D);
|
||||
ldrq(v8, Address(pre(buf, 0x80)));
|
||||
eor3(v8, T16B, v23, v24, v8);
|
||||
|
||||
subs(len, len, 0x80);
|
||||
br(Assembler::GE, CRC_by128_loop);
|
||||
|
||||
// fold into 512 bits
|
||||
ldrq(v0, Address(table, 0x10));
|
||||
|
||||
pmull (v10, T1Q, v1, v0, T1D);
|
||||
pmull2(v11, T1Q, v1, v0, T2D);
|
||||
eor3(v1, T16B, v10, v11, v5);
|
||||
|
||||
pmull (v12, T1Q, v2, v0, T1D);
|
||||
pmull2(v13, T1Q, v2, v0, T2D);
|
||||
eor3(v2, T16B, v12, v13, v6);
|
||||
|
||||
pmull (v14, T1Q, v3, v0, T1D);
|
||||
pmull2(v15, T1Q, v3, v0, T2D);
|
||||
eor3(v3, T16B, v14, v15, v7);
|
||||
|
||||
pmull (v16, T1Q, v4, v0, T1D);
|
||||
pmull2(v17, T1Q, v4, v0, T2D);
|
||||
eor3(v4, T16B, v16, v17, v8);
|
||||
|
||||
// fold into 128 bits
|
||||
ldrq(v5, Address(table, 0x20));
|
||||
pmull (v10, T1Q, v1, v5, T1D);
|
||||
pmull2(v11, T1Q, v1, v5, T2D);
|
||||
eor3(v4, T16B, v4, v10, v11);
|
||||
|
||||
ldrq(v6, Address(table, 0x30));
|
||||
pmull (v12, T1Q, v2, v6, T1D);
|
||||
pmull2(v13, T1Q, v2, v6, T2D);
|
||||
eor3(v4, T16B, v4, v12, v13);
|
||||
|
||||
ldrq(v7, Address(table, 0x40));
|
||||
pmull (v14, T1Q, v3, v7, T1D);
|
||||
pmull2(v15, T1Q, v3, v7, T2D);
|
||||
eor3(v1, T16B, v4, v14, v15);
|
||||
|
||||
add(len, len, 0x80);
|
||||
add(buf, buf, 0x10);
|
||||
|
||||
mov(tmp0, v1, D, 0);
|
||||
mov(tmp1, v1, D, 1);
|
||||
}
|
||||
|
||||
SkipIfEqual::SkipIfEqual(
|
||||
MacroAssembler* masm, const bool* flag_addr, bool value) {
|
||||
@@ -4036,6 +4261,11 @@ void MacroAssembler::load_klass(Register dst, Register src) {
|
||||
}
|
||||
}
|
||||
|
||||
void MacroAssembler::load_klass_check_null(Register dst, Register src) {
|
||||
null_check(src, oopDesc::klass_offset_in_bytes());
|
||||
load_klass(dst, src);
|
||||
}
|
||||
|
||||
// ((OopHandle)result).resolve();
|
||||
void MacroAssembler::resolve_oop_handle(Register result, Register tmp1, Register tmp2) {
|
||||
// OopHandle::resolve is an indirection.
|
||||
@@ -4533,9 +4763,9 @@ void MacroAssembler::bang_stack_size(Register size, Register tmp) {
|
||||
// Bang one page at a time because large size can bang beyond yellow and
|
||||
// red zones.
|
||||
Label loop;
|
||||
mov(rscratch1, os::vm_page_size());
|
||||
mov(rscratch1, (int)os::vm_page_size());
|
||||
bind(loop);
|
||||
lea(tmp, Address(tmp, -os::vm_page_size()));
|
||||
lea(tmp, Address(tmp, -(int)os::vm_page_size()));
|
||||
subsw(size, size, rscratch1);
|
||||
str(size, Address(tmp));
|
||||
br(Assembler::GT, loop);
|
||||
@@ -4546,10 +4776,10 @@ void MacroAssembler::bang_stack_size(Register size, Register tmp) {
|
||||
// was post-decremented.) Skip this address by starting at i=1, and
|
||||
// touch a few more pages below. N.B. It is important to touch all
|
||||
// the way down to and including i=StackShadowPages.
|
||||
for (int i = 0; i < (int)(StackOverflow::stack_shadow_zone_size() / os::vm_page_size()) - 1; i++) {
|
||||
for (int i = 0; i < (int)(StackOverflow::stack_shadow_zone_size() / (int)os::vm_page_size()) - 1; i++) {
|
||||
// this could be any sized move but this is can be a debugging crumb
|
||||
// so the bigger the better.
|
||||
lea(tmp, Address(tmp, -os::vm_page_size()));
|
||||
lea(tmp, Address(tmp, -(int)os::vm_page_size()));
|
||||
str(size, Address(tmp));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -581,6 +581,14 @@ public:
|
||||
mrs(0b011, 0b0000, 0b0000, 0b001, reg);
|
||||
}
|
||||
|
||||
inline void get_nzcv(Register reg) {
|
||||
mrs(0b011, 0b0100, 0b0010, 0b000, reg);
|
||||
}
|
||||
|
||||
inline void set_nzcv(Register reg) {
|
||||
msr(0b011, 0b0100, 0b0010, 0b000, reg);
|
||||
}
|
||||
|
||||
// idiv variant which deals with MINLONG as dividend and -1 as divisor
|
||||
int corrected_idivl(Register result, Register ra, Register rb,
|
||||
bool want_remainder, Register tmp = rscratch1);
|
||||
@@ -630,7 +638,9 @@ public:
|
||||
return false;
|
||||
}
|
||||
address emit_trampoline_stub(int insts_call_instruction_offset, address target);
|
||||
static int max_trampoline_stub_size();
|
||||
void emit_static_call_stub();
|
||||
static int static_call_stub_size();
|
||||
|
||||
// The following 4 methods return the offset of the appropriate move instruction
|
||||
|
||||
@@ -823,6 +833,7 @@ public:
|
||||
void store_check(Register obj, Address dst); // same as above, dst is exact store location (reg. is destroyed)
|
||||
|
||||
void resolve_jobject(Register value, Register tmp1, Register tmp2);
|
||||
void resolve_global_jobject(Register value, Register tmp1, Register tmp2);
|
||||
|
||||
// C 'boolean' to Java boolean: x == 0 ? 0 : 1
|
||||
void c2bool(Register x);
|
||||
@@ -832,6 +843,7 @@ public:
|
||||
|
||||
// oop manipulations
|
||||
void load_klass(Register dst, Register src);
|
||||
void load_klass_check_null(Register dst, Register src);
|
||||
void store_klass(Register dst, Register src);
|
||||
void cmp_klass(Register oop, Register trial_klass, Register tmp);
|
||||
|
||||
@@ -1084,9 +1096,6 @@ public:
|
||||
bool acquire, bool release, bool weak,
|
||||
Register result);
|
||||
|
||||
private:
|
||||
void compare_eq(Register rn, Register rm, enum operand_size size);
|
||||
|
||||
#ifdef ASSERT
|
||||
// Template short-hand support to clean-up after a failed call to trampoline
|
||||
// call generation (see trampoline_call() below), when a set of Labels must
|
||||
@@ -1101,6 +1110,9 @@ private:
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
void compare_eq(Register rn, Register rm, enum operand_size size);
|
||||
|
||||
public:
|
||||
// AArch64 OpenJDK uses four different types of calls:
|
||||
// - direct call: bl pc_relative_offset
|
||||
@@ -1411,12 +1423,18 @@ public:
|
||||
Register yz_idx1, Register yz_idx2,
|
||||
Register tmp, Register tmp3, Register tmp4,
|
||||
Register tmp7, Register product_hi);
|
||||
void kernel_crc32_using_crypto_pmull(Register crc, Register buf,
|
||||
Register len, Register tmp0, Register tmp1, Register tmp2,
|
||||
Register tmp3);
|
||||
void kernel_crc32_using_crc32(Register crc, Register buf,
|
||||
Register len, Register tmp0, Register tmp1, Register tmp2,
|
||||
Register tmp3);
|
||||
void kernel_crc32c_using_crc32c(Register crc, Register buf,
|
||||
Register len, Register tmp0, Register tmp1, Register tmp2,
|
||||
Register tmp3);
|
||||
void kernel_crc32_common_fold_using_crypto_pmull(Register crc, Register buf,
|
||||
Register len, Register tmp0, Register tmp1, Register tmp2,
|
||||
size_t table_offset);
|
||||
|
||||
void ghash_modmul (FloatRegister result,
|
||||
FloatRegister result_lo, FloatRegister result_hi, FloatRegister b,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user