mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-15 05:49:40 +01:00
Compare commits
2986 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e482d16c43 | ||
|
|
754d67857b | ||
|
|
f3b42bf53d | ||
|
|
e77ad65c04 | ||
|
|
111b74d777 | ||
|
|
7d9ec688e0 | ||
|
|
6540497350 | ||
|
|
0324f8cbc8 | ||
|
|
1cf5ba0b12 | ||
|
|
82145dd2fc | ||
|
|
395eada57d | ||
|
|
57d29c9d2b | ||
|
|
25f958342e | ||
|
|
d491a9540c | ||
|
|
8b9535d068 | ||
|
|
453101c15d | ||
|
|
48ad07fd2c | ||
|
|
326bf79674 | ||
|
|
76edb04f74 | ||
|
|
c7e37d5eaf | ||
|
|
fa2aecf110 | ||
|
|
7945521d98 | ||
|
|
ca2669bd2f | ||
|
|
933fa3f5aa | ||
|
|
bb930ae01e | ||
|
|
9adbb9c684 | ||
|
|
c54e770c42 | ||
|
|
b204091ef8 | ||
|
|
a85e655e2d | ||
|
|
97679d059b | ||
|
|
1a597ce85b | ||
|
|
c67e801a7e | ||
|
|
356b331207 | ||
|
|
2d48a3aaeb | ||
|
|
970ceeab6d | ||
|
|
0a84d5a0ff | ||
|
|
fdb677e1ae | ||
|
|
1a69c52b9e | ||
|
|
f0caacafef | ||
|
|
e07eabce2d | ||
|
|
4208296685 | ||
|
|
261a9bbb27 | ||
|
|
93bde6c592 | ||
|
|
40967338e9 | ||
|
|
67eba2eb97 | ||
|
|
ef17da2149 | ||
|
|
8b8f7a3a9f | ||
|
|
e1ba0b5061 | ||
|
|
f36d48190e | ||
|
|
d0e2b8385f | ||
|
|
c7ff6513f8 | ||
|
|
be386ae31c | ||
|
|
d7f9679696 | ||
|
|
9abc2c5090 | ||
|
|
390bd8fec1 | ||
|
|
ba15f14cab | ||
|
|
ce11b33ae7 | ||
|
|
ba9dde3c14 | ||
|
|
a8e232df58 | ||
|
|
b712ff07ec | ||
|
|
1ce61e91ea | ||
|
|
9cc0a60a59 | ||
|
|
848278cace | ||
|
|
340113d052 | ||
|
|
425272b225 | ||
|
|
cfe52736c4 | ||
|
|
d2ff797f09 | ||
|
|
308123c3b4 | ||
|
|
d0a4b3e70f | ||
|
|
03a99aea44 | ||
|
|
998ba47ca1 | ||
|
|
ae60008a94 | ||
|
|
d2ac7a107e | ||
|
|
ac379007a0 | ||
|
|
b4f3f1c620 | ||
|
|
5b91e55364 | ||
|
|
b3c2386a16 | ||
|
|
9cda91e98f | ||
|
|
1fba1e7db7 | ||
|
|
d2ee213f52 | ||
|
|
7b2e99178f | ||
|
|
c2d3087635 | ||
|
|
1a6a28f0bb | ||
|
|
4cdda07519 | ||
|
|
bc2f346995 | ||
|
|
fef4ee7763 | ||
|
|
1c3399369f | ||
|
|
8380be1403 | ||
|
|
994a1b643c | ||
|
|
fbee29107f | ||
|
|
10c6c41190 | ||
|
|
c594c9edea | ||
|
|
1a417e98cf | ||
|
|
612ac4317c | ||
|
|
d62d57c36f | ||
|
|
0a08682e95 | ||
|
|
23ce30aa36 | ||
|
|
e17daa170f | ||
|
|
a456fa2511 | ||
|
|
1ab483c2ba | ||
|
|
c8bbde04f3 | ||
|
|
58fb76bbf0 | ||
|
|
0f9d5a6200 | ||
|
|
8bd6e8e842 | ||
|
|
ae0aaab3df | ||
|
|
108cc33b5b | ||
|
|
e7a4fbc359 | ||
|
|
de5fe7d046 | ||
|
|
7f5de78e6f | ||
|
|
a06d3c2511 | ||
|
|
195ff6aa76 | ||
|
|
2473ca4dfc | ||
|
|
946a354565 | ||
|
|
13da321e2b | ||
|
|
e17e39f075 | ||
|
|
75cadd7c0a | ||
|
|
1424f2cc9e | ||
|
|
5dfcfa7941 | ||
|
|
7f0c515e25 | ||
|
|
c2eb0f95e4 | ||
|
|
b6bdc05724 | ||
|
|
4c2a6ef8a1 | ||
|
|
034400dca8 | ||
|
|
efaf0a0160 | ||
|
|
7ff3916e57 | ||
|
|
6a77f9dc21 | ||
|
|
380f105986 | ||
|
|
16c88303b4 | ||
|
|
4a35d170d8 | ||
|
|
4bfef9bf03 | ||
|
|
36d63fdbf5 | ||
|
|
e15276198f | ||
|
|
269b07f585 | ||
|
|
a268618d02 | ||
|
|
6a799a0943 | ||
|
|
35c2a5e334 | ||
|
|
347f167354 | ||
|
|
9d2839baba | ||
|
|
eb8bca41b0 | ||
|
|
68eaf98b48 | ||
|
|
cc3355f537 | ||
|
|
83e14b24a2 | ||
|
|
912ea9a468 | ||
|
|
9b5fd12154 | ||
|
|
b3794805a7 | ||
|
|
48903ca91e | ||
|
|
b9b0c134b9 | ||
|
|
9fa46de478 | ||
|
|
9369498f1a | ||
|
|
62b4d04880 | ||
|
|
281f4bc2d0 | ||
|
|
1f9202ba42 | ||
|
|
bd5d154cea | ||
|
|
b30c82c1ab | ||
|
|
72c4dde970 | ||
|
|
823acee641 | ||
|
|
730c7dd8ed | ||
|
|
66dc31f3d1 | ||
|
|
593570e586 | ||
|
|
311cf8cad0 | ||
|
|
f9b24fa99d | ||
|
|
6de94414c6 | ||
|
|
32cf4d486d | ||
|
|
315ba2044e | ||
|
|
d538bce172 | ||
|
|
c3023ecfff | ||
|
|
d5278a85db | ||
|
|
bb4aa09fcf | ||
|
|
e66e38cc8d | ||
|
|
fb15471e58 | ||
|
|
4b822e8b08 | ||
|
|
618dd7284e | ||
|
|
f80ed5fded | ||
|
|
0e4dddf296 | ||
|
|
c39bbc85dc | ||
|
|
9dcf2708f5 | ||
|
|
f1e6d796e8 | ||
|
|
69b987746b | ||
|
|
61514507c7 | ||
|
|
227be5d537 | ||
|
|
31a15b61ab | ||
|
|
09b3ec99b2 | ||
|
|
ca7738bcbc | ||
|
|
4255ea7841 | ||
|
|
f0285385ad | ||
|
|
233de88cb3 | ||
|
|
dc70f2abdd | ||
|
|
d275c30f30 | ||
|
|
c6d7830dfc | ||
|
|
49773eee5c | ||
|
|
b73e8a4313 | ||
|
|
bf5adbc1d8 | ||
|
|
83c2fb3136 | ||
|
|
28e3d4a281 | ||
|
|
4569a6c06e | ||
|
|
59f3d24ec0 | ||
|
|
8170cbb75c | ||
|
|
9747901b91 | ||
|
|
a905e62f36 | ||
|
|
7d8ca0c513 | ||
|
|
968d41f330 | ||
|
|
897cbed1e1 | ||
|
|
d35a552b9d | ||
|
|
2531594fa2 | ||
|
|
cfa6e0878b | ||
|
|
0e739d5fbf | ||
|
|
79b6dcf52e | ||
|
|
303cc94f93 | ||
|
|
f3e9d52e6e | ||
|
|
cab6533ad9 | ||
|
|
ca2a35c623 | ||
|
|
8d719f4d23 | ||
|
|
fcde9ec75d | ||
|
|
130d0bae70 | ||
|
|
475d4bc0da | ||
|
|
4d3c112070 | ||
|
|
1f7d21bf05 | ||
|
|
a710516b07 | ||
|
|
5335fcfba6 | ||
|
|
cefd74de84 | ||
|
|
05cdc0aa77 | ||
|
|
4066db231e | ||
|
|
00ab028dc0 | ||
|
|
4d09388121 | ||
|
|
9927e275b8 | ||
|
|
d9d3bf35d3 | ||
|
|
6f721f2983 | ||
|
|
07e5b04f37 | ||
|
|
27982685d0 | ||
|
|
63ab31cdef | ||
|
|
4bcba65cc2 | ||
|
|
a41c79ed9d | ||
|
|
f60278ff05 | ||
|
|
56338956e5 | ||
|
|
997c2f836e | ||
|
|
f42ab847cb | ||
|
|
3558ae2d03 | ||
|
|
cdba83d636 | ||
|
|
df9f0f9d5d | ||
|
|
ecdb14d255 | ||
|
|
6271e06459 | ||
|
|
5ad6758b78 | ||
|
|
5cbdb62937 | ||
|
|
b76a9db1da | ||
|
|
de85b246eb | ||
|
|
d395bbcb12 | ||
|
|
3f3cfa8419 | ||
|
|
12fa91a8bf | ||
|
|
baba3e9383 | ||
|
|
8f432d22d9 | ||
|
|
8f40a4dad0 | ||
|
|
faa6928fef | ||
|
|
501fe865e8 | ||
|
|
2e49137b38 | ||
|
|
02c6e31091 | ||
|
|
56eac0155c | ||
|
|
5839368eee | ||
|
|
70a4d09791 | ||
|
|
f524534650 | ||
|
|
7a7270c0bd | ||
|
|
5219fbb397 | ||
|
|
9acc701280 | ||
|
|
1175eb8a27 | ||
|
|
5cbdf8db6c | ||
|
|
8eac661507 | ||
|
|
9e05d4f813 | ||
|
|
f54e7ec9bc | ||
|
|
4738ed88a5 | ||
|
|
6fb68448cc | ||
|
|
7fa7f8a597 | ||
|
|
8fbb0e0f4a | ||
|
|
a7dc867057 | ||
|
|
0b92e7c70b | ||
|
|
1d6d5772d7 | ||
|
|
a8ca4c2947 | ||
|
|
6d08c900c4 | ||
|
|
bc8656528c | ||
|
|
7e4cbf7ede | ||
|
|
e0ebf7426d | ||
|
|
b6f671b41e | ||
|
|
78662d3b17 | ||
|
|
6513930e7a | ||
|
|
72f4cfb2e7 | ||
|
|
92bbff7143 | ||
|
|
2346a1c754 | ||
|
|
8401a88197 | ||
|
|
4a7dc9240b | ||
|
|
91823a458f | ||
|
|
b731247c38 | ||
|
|
ef5fc6d83d | ||
|
|
5bd84d92a1 | ||
|
|
7f01a4d4f5 | ||
|
|
8ae50d45a4 | ||
|
|
0219cf5423 | ||
|
|
4749de17ea | ||
|
|
723ea00e0c | ||
|
|
bede38196b | ||
|
|
34db0587a4 | ||
|
|
f5d9fec70d | ||
|
|
5be998e5ce | ||
|
|
261f588e13 | ||
|
|
812f619214 | ||
|
|
f103a0e31f | ||
|
|
e83fde21ff | ||
|
|
08d82ca044 | ||
|
|
bbcff1b792 | ||
|
|
e92787f075 | ||
|
|
9a2fc5f236 | ||
|
|
214254cac5 | ||
|
|
a3fcc12dc8 | ||
|
|
7af669ecc0 | ||
|
|
d5e5ad5996 | ||
|
|
a9ef11a8d4 | ||
|
|
1d5bbbec86 | ||
|
|
ebd4f912d7 | ||
|
|
cfe349b1e0 | ||
|
|
650bd8320d | ||
|
|
a912e7557c | ||
|
|
a099202006 | ||
|
|
45df73bc12 | ||
|
|
09ff856431 | ||
|
|
daa2552a25 | ||
|
|
3ae6cc4f7e | ||
|
|
3d1e626d8f | ||
|
|
238736e33d | ||
|
|
9f70387b50 | ||
|
|
79c9b7b711 | ||
|
|
8987ea2bdf | ||
|
|
47e357e16f | ||
|
|
89371ad57d | ||
|
|
2d492ea7e1 | ||
|
|
20558b33b9 | ||
|
|
3cfef23dff | ||
|
|
0ac639e5b0 | ||
|
|
95c56a472b | ||
|
|
d941d29b0c | ||
|
|
633ccfc791 | ||
|
|
1c1cfca47c | ||
|
|
f13c56e8aa | ||
|
|
f181b4c76d | ||
|
|
2d19ea519b | ||
|
|
93cf5130d6 | ||
|
|
7b62b4870c | ||
|
|
2587f18d1c | ||
|
|
0761734777 | ||
|
|
9ebcc8e000 | ||
|
|
c055987003 | ||
|
|
a4515c2fa3 | ||
|
|
4a8efe66a5 | ||
|
|
f4e1298403 | ||
|
|
82e488e3ae | ||
|
|
ff7362918f | ||
|
|
035522bd7a | ||
|
|
9486648fdf | ||
|
|
98f96fac17 | ||
|
|
daed5f0dd3 | ||
|
|
52f0eccb24 | ||
|
|
d9b7e6c18c | ||
|
|
43b11a7dca | ||
|
|
17af9b241a | ||
|
|
b9c11d661e | ||
|
|
1577e0f073 | ||
|
|
a46128d0dd | ||
|
|
4d4a89de9b | ||
|
|
cdc3810c17 | ||
|
|
2d432bc656 | ||
|
|
9661feecbc | ||
|
|
55bfd400ca | ||
|
|
b88865d91f | ||
|
|
b89d40e747 | ||
|
|
5b7643e258 | ||
|
|
19f1338ae9 | ||
|
|
e3faa527bd | ||
|
|
d381d4b0b4 | ||
|
|
51763c43f7 | ||
|
|
3580661098 | ||
|
|
bd420dc94e | ||
|
|
854ad24077 | ||
|
|
303c03e2ea | ||
|
|
86b01d9960 | ||
|
|
db1c1037b5 | ||
|
|
f843db55a4 | ||
|
|
0d44b9c7af | ||
|
|
8ef6c48fcb | ||
|
|
a3ac3c7ae5 | ||
|
|
c22ae1301d | ||
|
|
f534667145 | ||
|
|
08f2f9619e | ||
|
|
0e0ba86cd8 | ||
|
|
49849e0dcf | ||
|
|
f9cd96b19b | ||
|
|
782f6f887e | ||
|
|
0594a39498 | ||
|
|
3674ebe6e6 | ||
|
|
6624a6c8d1 | ||
|
|
d9777d76bd | ||
|
|
4589920917 | ||
|
|
89e97c18e5 | ||
|
|
afaeb37bb5 | ||
|
|
a300a41ea1 | ||
|
|
2c3a780b41 | ||
|
|
2bbf651156 | ||
|
|
1ec8f70fdd | ||
|
|
30d2b45bd8 | ||
|
|
16a24a909d | ||
|
|
bc855ff2e0 | ||
|
|
fcc31d9741 | ||
|
|
f99084037a | ||
|
|
9b101c8ba6 | ||
|
|
12a0dac949 | ||
|
|
e756c96259 | ||
|
|
7d850203b9 | ||
|
|
c755492882 | ||
|
|
08619c2e9c | ||
|
|
0208d38b3c | ||
|
|
8db2f8de59 | ||
|
|
81d33c4727 | ||
|
|
73fe789af2 | ||
|
|
122ddd54d0 | ||
|
|
1f8f1f79be | ||
|
|
c1efbbc362 | ||
|
|
8166c2b32b | ||
|
|
a4523cfc7f | ||
|
|
75685a273a | ||
|
|
02e9894454 | ||
|
|
bbfe9c6e25 | ||
|
|
cc177fd515 | ||
|
|
55c503aea2 | ||
|
|
1b62d10b4b | ||
|
|
70bb8e788e | ||
|
|
08bdb35a29 | ||
|
|
0f7ff53cce | ||
|
|
2f83b52706 | ||
|
|
c5b2025c02 | ||
|
|
3ae9021b59 | ||
|
|
95832db2e5 | ||
|
|
e3afdf10ad | ||
|
|
14cdfec16f | ||
|
|
7189a0b227 | ||
|
|
e39ba1a5fe | ||
|
|
b1fadc8f75 | ||
|
|
1ebca30d26 | ||
|
|
9d02eadfed | ||
|
|
4ade26a0ee | ||
|
|
a0084596d4 | ||
|
|
d6fd9c2339 | ||
|
|
8ad902f1ed | ||
|
|
8bc1babb6d | ||
|
|
6d8ffa0972 | ||
|
|
92b2b44b18 | ||
|
|
67ba51cae8 | ||
|
|
d961381c47 | ||
|
|
0b8205428e | ||
|
|
2eb4e18d75 | ||
|
|
518e846e10 | ||
|
|
bfa7e324d9 | ||
|
|
1a9d9b84f8 | ||
|
|
700ceee11e | ||
|
|
c66c50437c | ||
|
|
ae1f9680b6 | ||
|
|
cdfbdfc355 | ||
|
|
5a6cbc47b8 | ||
|
|
58c9fc4526 | ||
|
|
ddcd67afd9 | ||
|
|
01771c74b6 | ||
|
|
0be11c915c | ||
|
|
b62fb1de97 | ||
|
|
d96de580b6 | ||
|
|
499732d316 | ||
|
|
42c3c5cb7b | ||
|
|
439b75eb12 | ||
|
|
6141a568aa | ||
|
|
50bc4343b3 | ||
|
|
1940a13d31 | ||
|
|
83b6b7ace1 | ||
|
|
6b8980e983 | ||
|
|
ed72e31727 | ||
|
|
ec13301b32 | ||
|
|
34e0b54108 | ||
|
|
61068411fa | ||
|
|
315ec64dce | ||
|
|
24eb07061e | ||
|
|
90844ca5dc | ||
|
|
732ac029ec | ||
|
|
48ecf5dfe4 | ||
|
|
a1f5f73508 | ||
|
|
a9cd50a1c8 | ||
|
|
ba77c3a48f | ||
|
|
b3aa4cdcba | ||
|
|
2a22d4691a | ||
|
|
3c59a998c6 | ||
|
|
edb7b9514a | ||
|
|
59a4dbb95a | ||
|
|
077625bba2 | ||
|
|
92de2299c5 | ||
|
|
b0fb95c8d3 | ||
|
|
833bcd2277 | ||
|
|
dece7fbfec | ||
|
|
b13890a199 | ||
|
|
179b982e9d | ||
|
|
d4d5856fd4 | ||
|
|
4a09997f51 | ||
|
|
32fd1b087d | ||
|
|
3d9f3ee2b1 | ||
|
|
c8c58542b3 | ||
|
|
f7d7a6071a | ||
|
|
9f67707386 | ||
|
|
a456f20739 | ||
|
|
0da4a58897 | ||
|
|
1038fed51d | ||
|
|
aeec78ab37 | ||
|
|
096ba80aea | ||
|
|
d42d7de7ff | ||
|
|
87501184d9 | ||
|
|
b57839cc49 | ||
|
|
db44acbeb4 | ||
|
|
238bb5d3bb | ||
|
|
7d7c8d7cdf | ||
|
|
fd8978fa75 | ||
|
|
ea16c13048 | ||
|
|
03730b799c | ||
|
|
a481e029fa | ||
|
|
463d10d607 | ||
|
|
e0896d794e | ||
|
|
5f1b3f48fa | ||
|
|
6f70d425f2 | ||
|
|
5b6ba4e611 | ||
|
|
4be64adddd | ||
|
|
bfeee8da4d | ||
|
|
fcc2a86582 | ||
|
|
74b5a420d5 | ||
|
|
db62441424 | ||
|
|
fa7c124af1 | ||
|
|
654ae83d8e | ||
|
|
167b4fa4d4 | ||
|
|
6c8c4fb321 | ||
|
|
8256d8cf31 | ||
|
|
9c87ea9062 | ||
|
|
67f3781cb1 | ||
|
|
68039c2904 | ||
|
|
2e7a0438c9 | ||
|
|
05b60b3662 | ||
|
|
5903a384b4 | ||
|
|
a37d582eec | ||
|
|
0a9fa0feb2 | ||
|
|
9d813bf7ac | ||
|
|
57fd38b0aa | ||
|
|
dd72eca1bc | ||
|
|
cebdce4479 | ||
|
|
5dcff7325d | ||
|
|
d8fd276e35 | ||
|
|
9353ab1e01 | ||
|
|
c14374f7f5 | ||
|
|
1a53d47cf9 | ||
|
|
4d2687b413 | ||
|
|
1bec3a1bd3 | ||
|
|
570739157d | ||
|
|
e96d7e3af4 | ||
|
|
8e853c8484 | ||
|
|
1dbae5e7cf | ||
|
|
e3342531b4 | ||
|
|
cf6e15a2e3 | ||
|
|
ca2767a5d3 | ||
|
|
ec3f90d1b4 | ||
|
|
d475b8efcb | ||
|
|
580eaf6b7a | ||
|
|
2825119dca | ||
|
|
f953b5c397 | ||
|
|
6446205688 | ||
|
|
90502358ad | ||
|
|
19f7fb98b8 | ||
|
|
fa7cc07ca0 | ||
|
|
4198da6308 | ||
|
|
103c7b0383 | ||
|
|
acdf03d87f | ||
|
|
db1cefbdf4 | ||
|
|
7e98ef4f0e | ||
|
|
466b62e73a | ||
|
|
4506feffa2 | ||
|
|
099b9b9198 | ||
|
|
72c1f57f87 | ||
|
|
06d05b7c47 | ||
|
|
9391671fa7 | ||
|
|
f31cad1b9e | ||
|
|
a5751d5e01 | ||
|
|
2e4089a2c2 | ||
|
|
0c6ad2c298 | ||
|
|
4df87be52f | ||
|
|
243a5f3b79 | ||
|
|
a0f3a629c5 | ||
|
|
d0bd4f51ce | ||
|
|
3af2ea16d6 | ||
|
|
765c6904e3 | ||
|
|
85b4875e2e | ||
|
|
92aac562e6 | ||
|
|
ec94102c63 | ||
|
|
2cbacf440a | ||
|
|
3217c0283e | ||
|
|
f072f34631 | ||
|
|
b4082c3cd1 | ||
|
|
00983b3008 | ||
|
|
4af11eb3ae | ||
|
|
af31d0cf27 | ||
|
|
2cfb876ce7 | ||
|
|
03dca291aa | ||
|
|
6fdb1414fa | ||
|
|
f09e1c6f2d | ||
|
|
700b93fe42 | ||
|
|
e0ebaf2365 | ||
|
|
87c82d8088 | ||
|
|
5cd44b95ad | ||
|
|
30265a42fd | ||
|
|
af2f8f0912 | ||
|
|
d84f0a188d | ||
|
|
ff4faaab4b | ||
|
|
9c5193ff42 | ||
|
|
dfb9afd36b | ||
|
|
c1db9a4de0 | ||
|
|
7c6bbdcd3e | ||
|
|
cce243ac06 | ||
|
|
2304b235a1 | ||
|
|
614fdf63b3 | ||
|
|
0ec73ca081 | ||
|
|
db338313bf | ||
|
|
7053ed12e3 | ||
|
|
4883eafc10 | ||
|
|
fc31a8e0b9 | ||
|
|
d164c986b5 | ||
|
|
90651b2666 | ||
|
|
080f790edc | ||
|
|
183a935fcb | ||
|
|
1b7f659a43 | ||
|
|
134c40b4db | ||
|
|
f661cbe157 | ||
|
|
45b0a4eb00 | ||
|
|
fe76ef7825 | ||
|
|
9cc89c7e8c | ||
|
|
750b4876ce | ||
|
|
0c5879c7e2 | ||
|
|
598c79031d | ||
|
|
38afb5138c | ||
|
|
44f30c463a | ||
|
|
f5cc085a5b | ||
|
|
444f4d009b | ||
|
|
f769f7067f | ||
|
|
fb01d942c3 | ||
|
|
0cb631bf43 | ||
|
|
0ce97f4ec8 | ||
|
|
f482091133 | ||
|
|
16f1845614 | ||
|
|
382ff0afff | ||
|
|
610c9dd4e3 | ||
|
|
d159e01aeb | ||
|
|
fc028c77ba | ||
|
|
ac99f413d7 | ||
|
|
0da9dc64d2 | ||
|
|
e6603b37f2 | ||
|
|
c26005b40e | ||
|
|
52f678435a | ||
|
|
1fb6680207 | ||
|
|
c7b1e7e929 | ||
|
|
59d409ada5 | ||
|
|
aefb3a004f | ||
|
|
a98318b827 | ||
|
|
d011e3ddeb | ||
|
|
ac490e2fce | ||
|
|
a6a40fcabe | ||
|
|
ebe985c1ec | ||
|
|
2aa1b6d565 | ||
|
|
5acfe8c521 | ||
|
|
ce5e4f10dd | ||
|
|
24e63f385c | ||
|
|
8b16f518cb | ||
|
|
c4b791d93a | ||
|
|
427c404400 | ||
|
|
c25444afe2 | ||
|
|
4cd6c8c31e | ||
|
|
6f1fb5f81b | ||
|
|
dba9612ad9 | ||
|
|
80af4650a8 | ||
|
|
840e8200ad | ||
|
|
f86996535a | ||
|
|
f7d3d2b63e | ||
|
|
b543a07b9a | ||
|
|
9cd1a00e3f | ||
|
|
6a54c8a55f | ||
|
|
5ad0c2a370 | ||
|
|
24e8905fdf | ||
|
|
645d027b78 | ||
|
|
144fb9dc25 | ||
|
|
ceb052fc3f | ||
|
|
8083d3a875 | ||
|
|
abdf98fef8 | ||
|
|
df8d608ac7 | ||
|
|
2ee0410a0c | ||
|
|
d5e142fba4 | ||
|
|
e30a679033 | ||
|
|
28383f3e18 | ||
|
|
eeacd60822 | ||
|
|
6abadbf15a | ||
|
|
23b10ec618 | ||
|
|
6960817595 | ||
|
|
18329266ea | ||
|
|
c895368552 | ||
|
|
53abe0d254 | ||
|
|
5c209a7d2d | ||
|
|
02802c9449 | ||
|
|
af30a2dbf3 | ||
|
|
281db94b24 | ||
|
|
dd43791e4a | ||
|
|
18fbb54873 | ||
|
|
e95d21a2bf | ||
|
|
545b41c9ab | ||
|
|
05387aad77 | ||
|
|
3e1a7d0e17 | ||
|
|
98bbf6a045 | ||
|
|
25bac45a67 | ||
|
|
4a81ae28b7 | ||
|
|
a6cbb46a23 | ||
|
|
45bcef756e | ||
|
|
f6ad1656c0 | ||
|
|
5ed600c64e | ||
|
|
b98e69d69b | ||
|
|
a6b33d5a4a | ||
|
|
d615775c53 | ||
|
|
59802b7329 | ||
|
|
ef74b1c19f | ||
|
|
536904f7d3 | ||
|
|
a87de29538 | ||
|
|
48c1293916 | ||
|
|
b59690c5a0 | ||
|
|
aa16309657 | ||
|
|
aa89b8c08d | ||
|
|
a9a95f25de | ||
|
|
6a627fd128 | ||
|
|
7b1c8be3d3 | ||
|
|
f106ea9ed6 | ||
|
|
4ea3a97967 | ||
|
|
2b42b78393 | ||
|
|
07381cf2d4 | ||
|
|
39aba3b4cf | ||
|
|
d8fd6d70de | ||
|
|
394accda4a | ||
|
|
c51b78d5de | ||
|
|
e2b3aaa728 | ||
|
|
0d6e53412e | ||
|
|
ee85a30479 | ||
|
|
8b3e857aab | ||
|
|
30257105cb | ||
|
|
a4ca103a59 | ||
|
|
8acdd5ce55 | ||
|
|
100d734981 | ||
|
|
d2567eb057 | ||
|
|
8dd448e6b8 | ||
|
|
787c2d3671 | ||
|
|
d027ff2530 | ||
|
|
877f2dea32 | ||
|
|
d77b9c2ff6 | ||
|
|
ad248b8245 | ||
|
|
17265ac3e3 | ||
|
|
cf91e8dbca | ||
|
|
fcc8abec1e | ||
|
|
517763ddf1 | ||
|
|
8eddf40f8b | ||
|
|
fcba257a74 | ||
|
|
abe5e3a903 | ||
|
|
e3c0616ac7 | ||
|
|
082623e70e | ||
|
|
c85b06f816 | ||
|
|
539b623427 | ||
|
|
53c7e90bff | ||
|
|
d3669b49eb | ||
|
|
f0b57adba4 | ||
|
|
61e2d7af10 | ||
|
|
7e5574e3f8 | ||
|
|
09a3aca98b | ||
|
|
ae4c0a9af1 | ||
|
|
20a26c54cd | ||
|
|
f854e0370d | ||
|
|
c058d2d4c0 | ||
|
|
bf486b030a | ||
|
|
5f2157a8bc | ||
|
|
9120c1e85c | ||
|
|
d57ae98564 | ||
|
|
804e3e1d96 | ||
|
|
73687afa5e | ||
|
|
c76b491afb | ||
|
|
769ba74d9c | ||
|
|
07d5e13794 | ||
|
|
d23654d851 | ||
|
|
ce3ae66eeb | ||
|
|
85f75843f3 | ||
|
|
01ee832f44 | ||
|
|
2337123692 | ||
|
|
c27746be10 | ||
|
|
1b8996c8b4 | ||
|
|
e2857af6b5 | ||
|
|
69c7455330 | ||
|
|
a195753a0c | ||
|
|
d82d76ad4f | ||
|
|
be52f84b3b | ||
|
|
47caaa4c06 | ||
|
|
528a9bb452 | ||
|
|
2c1ce646b9 | ||
|
|
182cb26581 | ||
|
|
29583aac86 | ||
|
|
c1deb9188b | ||
|
|
fa7e844eb4 | ||
|
|
37aa419c8a | ||
|
|
1dbd0c3e5e | ||
|
|
29d2bf8bb4 | ||
|
|
2e1c7da277 | ||
|
|
00fd0bdcfd | ||
|
|
774aa0130a | ||
|
|
b443bf1f4c | ||
|
|
b3505a88a4 | ||
|
|
565f8579ac | ||
|
|
976fd97ddf | ||
|
|
3aaa5fb06d | ||
|
|
7d323bf629 | ||
|
|
f9cb1ca594 | ||
|
|
5d0d741efe | ||
|
|
17c7ea1f76 | ||
|
|
c049f1a014 | ||
|
|
64c7a2b6f4 | ||
|
|
38f899e9b3 | ||
|
|
43b8741d54 | ||
|
|
cb2baedec2 | ||
|
|
a3a8789cac | ||
|
|
a72976552e | ||
|
|
06024626ed | ||
|
|
9d5df3c087 | ||
|
|
16bf9cba53 | ||
|
|
3baa7ef93a | ||
|
|
afa7a314d2 | ||
|
|
27d3dc1f41 | ||
|
|
faf515b31f | ||
|
|
3f2da7c5b6 | ||
|
|
a02c5e28fb | ||
|
|
4597e4c7a8 | ||
|
|
bc408da53d | ||
|
|
672c2326e2 | ||
|
|
18fd818639 | ||
|
|
8df44305c7 | ||
|
|
392eef08ca | ||
|
|
371dfdfc58 | ||
|
|
d44dc19842 | ||
|
|
58f8a03a50 | ||
|
|
6482ba14aa | ||
|
|
d97cf81a2a | ||
|
|
2eb3bc1633 | ||
|
|
69ce407621 | ||
|
|
0a90983600 | ||
|
|
5798f5bb9d | ||
|
|
6619d1aec9 | ||
|
|
55d52a83a8 | ||
|
|
15161b8cd1 | ||
|
|
1433317e29 | ||
|
|
f2ed4f8df5 | ||
|
|
269df928d8 | ||
|
|
4f3dac70dd | ||
|
|
c770fccd64 | ||
|
|
7dbed2641b | ||
|
|
de7673ad9d | ||
|
|
583ed9bc81 | ||
|
|
bc28936d6b | ||
|
|
4aa72cd991 | ||
|
|
e43b81c035 | ||
|
|
c755d188f9 | ||
|
|
b886a23276 | ||
|
|
a12aaa8a35 | ||
|
|
408e0b1bc1 | ||
|
|
7c1d16f7d3 | ||
|
|
3b79194b8b | ||
|
|
7ceee7642b | ||
|
|
2f43bbd50b | ||
|
|
1806e6b851 | ||
|
|
7554fec6ba | ||
|
|
6d9b343adb | ||
|
|
2766092415 | ||
|
|
53f92901a8 | ||
|
|
092c61fcbf | ||
|
|
d19a8f6e35 | ||
|
|
372f63f99b | ||
|
|
45d73fe88c | ||
|
|
4045f34545 | ||
|
|
217a519b3e | ||
|
|
024b378da1 | ||
|
|
6f65c2ba13 | ||
|
|
45f42598c1 | ||
|
|
700f4e1951 | ||
|
|
58f7b19611 | ||
|
|
8bdce645f3 | ||
|
|
4375a5167f | ||
|
|
de1a62f2b3 | ||
|
|
811a09b5ff | ||
|
|
c67f294553 | ||
|
|
a715a4095a | ||
|
|
0982a2586d | ||
|
|
3df6e7db16 | ||
|
|
e5700a0e11 | ||
|
|
eb2d2e632c | ||
|
|
3a42e735b4 | ||
|
|
c4f6ba9248 | ||
|
|
5d2e4e676b | ||
|
|
937d6ded89 | ||
|
|
6223fc9081 | ||
|
|
1379c0101b | ||
|
|
a9b3a28e2d | ||
|
|
6af175455a | ||
|
|
ca8939dd80 | ||
|
|
43d9e95a42 | ||
|
|
a73d3ad1f4 | ||
|
|
1f3aab409b | ||
|
|
9acf4f0284 | ||
|
|
a21aad64af | ||
|
|
0c0705ca8c | ||
|
|
98126afc3d | ||
|
|
5919a613cc | ||
|
|
b94d0b830c | ||
|
|
438b911b29 | ||
|
|
015e872efe | ||
|
|
70b94c5b15 | ||
|
|
fe7f869e78 | ||
|
|
c0d64ac595 | ||
|
|
9ca97e4c78 | ||
|
|
f79196c54c | ||
|
|
5d0ad03a55 | ||
|
|
76f0e8cd7d | ||
|
|
9ec31bc4b1 | ||
|
|
8c7b78e772 | ||
|
|
9332c44d84 | ||
|
|
a51853081c | ||
|
|
33be52be86 | ||
|
|
089c11bb9b | ||
|
|
6d6d8a571c | ||
|
|
bb3a527f9a | ||
|
|
62767e93dc | ||
|
|
a900c1474e | ||
|
|
507bff762b | ||
|
|
4137646027 | ||
|
|
f8409e2ac9 | ||
|
|
f005f53f26 | ||
|
|
cc387f340d | ||
|
|
746f103f50 | ||
|
|
04e00f760f | ||
|
|
93d9f1ddd9 | ||
|
|
9ed202225f | ||
|
|
9ce9d5e6ba | ||
|
|
67cd1c65ef | ||
|
|
69b450d363 | ||
|
|
c4f73fb3cb | ||
|
|
51f3bcc4c4 | ||
|
|
a635feff6e | ||
|
|
8f03f05654 | ||
|
|
b45fdce61d | ||
|
|
d735ee65ab | ||
|
|
4ce35dcaa5 | ||
|
|
5232a86479 | ||
|
|
dfdc4f4178 | ||
|
|
af2ae2bc80 | ||
|
|
9cd57f38d5 | ||
|
|
2391c4d22c | ||
|
|
80b1670cde | ||
|
|
0252d1b125 | ||
|
|
6c20dab366 | ||
|
|
18dd7131d0 | ||
|
|
9a2901828f | ||
|
|
998c791227 | ||
|
|
360fe38438 | ||
|
|
a664e486bd | ||
|
|
b764e8fee1 | ||
|
|
0589616e2f | ||
|
|
b7c5605096 | ||
|
|
ad33af1a1c | ||
|
|
440cc6eade | ||
|
|
cbdf296926 | ||
|
|
8f2d760f58 | ||
|
|
e9d626d5ec | ||
|
|
94891cacc0 | ||
|
|
a49d8d81eb | ||
|
|
12e2e2e32e | ||
|
|
7cecb22a71 | ||
|
|
2938690aab | ||
|
|
8c538bf520 | ||
|
|
84ed289db0 | ||
|
|
e666162b03 | ||
|
|
515f2685fd | ||
|
|
991018b6b2 | ||
|
|
a893b9dd91 | ||
|
|
82ecc2e8ea | ||
|
|
c0d9c39aa2 | ||
|
|
f32795386e | ||
|
|
d50a168ded | ||
|
|
42cb36b770 | ||
|
|
8465226f29 | ||
|
|
0ed03852e5 | ||
|
|
a86407a0b2 | ||
|
|
0d21eb970f | ||
|
|
8df816992b | ||
|
|
e8d0034042 | ||
|
|
bb42c3904b | ||
|
|
6bc681d6ff | ||
|
|
8c68250797 | ||
|
|
582efc86b4 | ||
|
|
a8556d6c01 | ||
|
|
7a9f1558cd | ||
|
|
0b7f35c9bb | ||
|
|
5df5bab271 | ||
|
|
930f604543 | ||
|
|
36b98d379e | ||
|
|
4994ea2e8f | ||
|
|
2f04b56c06 | ||
|
|
c6f97c9462 | ||
|
|
93196c8b51 | ||
|
|
6988092430 | ||
|
|
fbb2bf7753 | ||
|
|
0cd0c8c54f | ||
|
|
5f23c009e8 | ||
|
|
ab83556ec3 | ||
|
|
40feccaa7b | ||
|
|
d862169f36 | ||
|
|
0be1027a42 | ||
|
|
991abaa069 | ||
|
|
c3a7796068 | ||
|
|
8a46284b54 | ||
|
|
df0aefd4ae | ||
|
|
e6d4bdec07 | ||
|
|
2cc05fd360 | ||
|
|
cfdb3ec24b | ||
|
|
386ffdedf1 | ||
|
|
5d0ffc65f8 | ||
|
|
8e987420b4 | ||
|
|
abca89ba92 | ||
|
|
43da98bcd5 | ||
|
|
40eff40fbf | ||
|
|
cfe68c847e | ||
|
|
e0a36096f2 | ||
|
|
f0d2f69eed | ||
|
|
025d0aead8 | ||
|
|
e1bd798f84 | ||
|
|
795971940c | ||
|
|
382a3145b9 | ||
|
|
7cf200bd15 | ||
|
|
193c0ac698 | ||
|
|
45f53b91f1 | ||
|
|
a1e18b9ed3 | ||
|
|
6b60f787a4 | ||
|
|
f6d95d906a | ||
|
|
170844d307 | ||
|
|
f1744917be | ||
|
|
c1a8187d76 | ||
|
|
65530c9100 | ||
|
|
da271b804e | ||
|
|
45e6d77e4d | ||
|
|
80e464755e | ||
|
|
60efa7c218 | ||
|
|
44af04a583 | ||
|
|
79f6d8076c | ||
|
|
24b47ab2e8 | ||
|
|
d418cb71c2 | ||
|
|
360343c8ed | ||
|
|
b49a7d2768 | ||
|
|
52a398ceb4 | ||
|
|
8826c8bf9f | ||
|
|
88f5cae01f | ||
|
|
69bcf41540 | ||
|
|
5d483c81f7 | ||
|
|
ba7ff766e3 | ||
|
|
266d3c9585 | ||
|
|
ed15a87975 | ||
|
|
fa196116c7 | ||
|
|
57769e3600 | ||
|
|
800a1a0611 | ||
|
|
0aff6e35b8 | ||
|
|
8b76becfe7 | ||
|
|
04c1ea3f9f | ||
|
|
94128d3cf0 | ||
|
|
44f7c58593 | ||
|
|
fa13db19b5 | ||
|
|
3d8755bc34 | ||
|
|
0b8be06024 | ||
|
|
a0b94c4dc8 | ||
|
|
0432476b6e | ||
|
|
8d44d62173 | ||
|
|
81013a98d0 | ||
|
|
0840b597d1 | ||
|
|
a3b2fd358d | ||
|
|
cef72337b1 | ||
|
|
02261d9dd8 | ||
|
|
250f88282b | ||
|
|
fdf41bb6d1 | ||
|
|
b95e28d25a | ||
|
|
33cd8e7aa0 | ||
|
|
5417807e7a | ||
|
|
8bb387d77e | ||
|
|
4b011923e2 | ||
|
|
f5e5b2b6e2 | ||
|
|
c2f2cb75fc | ||
|
|
807e4b3dcf | ||
|
|
282881dd84 | ||
|
|
32ead86b1c | ||
|
|
4b893d695b | ||
|
|
0a07595216 | ||
|
|
95548aa291 | ||
|
|
a16e057c0a | ||
|
|
a9493d71a0 | ||
|
|
92d86d3179 | ||
|
|
83eed73863 | ||
|
|
45986bdcc1 | ||
|
|
0e10a5ad61 | ||
|
|
41491be4d6 | ||
|
|
792f2aa15e | ||
|
|
564b2b7a17 | ||
|
|
eebc4b1ee3 | ||
|
|
e075dabb40 | ||
|
|
f01001207c | ||
|
|
a4dd92fb42 | ||
|
|
1ee0f8da66 | ||
|
|
fc79ef453f | ||
|
|
b5f9d4cad8 | ||
|
|
2f591422cc | ||
|
|
ea48ecca85 | ||
|
|
ceaf51e180 | ||
|
|
61fc85e68d | ||
|
|
40e9a55470 | ||
|
|
04247c5b48 | ||
|
|
babc80bdc8 | ||
|
|
9249a33c97 | ||
|
|
430ceddfa3 | ||
|
|
2804648f95 | ||
|
|
643341dea0 | ||
|
|
ead9ceeca5 | ||
|
|
14216b3f51 | ||
|
|
8cdd97938c | ||
|
|
9a58e303d7 | ||
|
|
eb9632506b | ||
|
|
c02e3d417d | ||
|
|
e69cc568e9 | ||
|
|
26adfef762 | ||
|
|
19d2501437 | ||
|
|
4a5e1727dc | ||
|
|
a852fe1092 | ||
|
|
81fa17dbea | ||
|
|
288dc3d0c3 | ||
|
|
2f060b40b5 | ||
|
|
a09d6af7ae | ||
|
|
7721092e27 | ||
|
|
db9005f0d3 | ||
|
|
3327033b50 | ||
|
|
b38843c8d9 | ||
|
|
e5357d4bee | ||
|
|
d3055ef8e0 | ||
|
|
30a20e1d62 | ||
|
|
2ba6bd02d2 | ||
|
|
36415e8393 | ||
|
|
70185c760f | ||
|
|
91db4e26f7 | ||
|
|
b7fbd6c9bf | ||
|
|
c40a4d6878 | ||
|
|
31ffaa86e5 | ||
|
|
6df9bf9a41 | ||
|
|
b1e12ab2ec | ||
|
|
0852628421 | ||
|
|
d2ab644ad1 | ||
|
|
1d148aa7d3 | ||
|
|
dcf6e9a4c2 | ||
|
|
55d817cdad | ||
|
|
fa107ec80e | ||
|
|
54cdd2715c | ||
|
|
b14549c78a | ||
|
|
568387fe02 | ||
|
|
d3d252186b | ||
|
|
c0a3fc99bd | ||
|
|
2aeb28d63b | ||
|
|
dcdeba2221 | ||
|
|
821b7a445b | ||
|
|
831a82e3c1 | ||
|
|
a4fbf5eda5 | ||
|
|
249ae52324 | ||
|
|
789ec8e924 | ||
|
|
a364036217 | ||
|
|
6908741d9b | ||
|
|
7030b0f6fb | ||
|
|
2f96d5c458 | ||
|
|
de0dac8ac8 | ||
|
|
dac9fc40f8 | ||
|
|
b0b388c137 | ||
|
|
95f71f8848 | ||
|
|
29fd1ea641 | ||
|
|
794e6118a2 | ||
|
|
6137404f00 | ||
|
|
9d5b11b9af | ||
|
|
2fbd14ee69 | ||
|
|
66230b488e | ||
|
|
70dfd21e87 | ||
|
|
523d29a670 | ||
|
|
953f34d325 | ||
|
|
20b1b3d6c1 | ||
|
|
f3d675ecef | ||
|
|
165868a3f6 | ||
|
|
cd2f47b0fd | ||
|
|
ba52c9f91e | ||
|
|
8afd78fe59 | ||
|
|
fee8d7fca4 | ||
|
|
8e56205189 | ||
|
|
42e49be1bc | ||
|
|
7edc69abf5 | ||
|
|
93cc60559c | ||
|
|
bce7c82aae | ||
|
|
abe6c8f317 | ||
|
|
271bfc2715 | ||
|
|
1c21c0f406 | ||
|
|
67fd9e16ef | ||
|
|
914105d32e | ||
|
|
8b1efebaa1 | ||
|
|
66f7633b48 | ||
|
|
25ec11dfe6 | ||
|
|
691c55d04a | ||
|
|
6ca19f3995 | ||
|
|
ca08676916 | ||
|
|
473f41e4e3 | ||
|
|
03fbf449cd | ||
|
|
9b9953cb0b | ||
|
|
d814ae14d1 | ||
|
|
6aeaca98d1 | ||
|
|
4c74378e6a | ||
|
|
63c85322b1 | ||
|
|
cee74b9a63 | ||
|
|
4e033ce5f2 | ||
|
|
b9851bd6eb | ||
|
|
bb2c21a025 | ||
|
|
b73681ae0c | ||
|
|
c940e5a884 | ||
|
|
4a2870a449 | ||
|
|
207f711ac2 | ||
|
|
186fce71ec | ||
|
|
cb6e2c12f4 | ||
|
|
86b4b082bb | ||
|
|
90ab9d500c | ||
|
|
404fbff117 | ||
|
|
92df2d2184 | ||
|
|
2cce4d0d35 | ||
|
|
8698030a91 | ||
|
|
24b0b30f9e | ||
|
|
8553d963c0 | ||
|
|
e20a4c4a39 | ||
|
|
6e40ce24d5 | ||
|
|
e4fd8ee0ac | ||
|
|
eb1839a110 | ||
|
|
b56aedf465 | ||
|
|
08faa8037b | ||
|
|
31d82bb88b | ||
|
|
e554c899e5 | ||
|
|
5af1de038e | ||
|
|
230aec2f49 | ||
|
|
d7fa132400 | ||
|
|
62a8508587 | ||
|
|
64fd535370 | ||
|
|
e061c0b0a4 | ||
|
|
9f0bca3b75 | ||
|
|
d63a3a993b | ||
|
|
ec330e431d | ||
|
|
679f58d07c | ||
|
|
1859ff359e | ||
|
|
13d8bb1f5d | ||
|
|
63f068ad0d | ||
|
|
1ac79543d0 | ||
|
|
87259cf6b3 | ||
|
|
6372176456 | ||
|
|
f60139f2af | ||
|
|
b2607ad0a1 | ||
|
|
2a4463da40 | ||
|
|
1fdcbe61a1 | ||
|
|
cc15f4771e | ||
|
|
1bde299474 | ||
|
|
1e12174562 | ||
|
|
2d91ad91db | ||
|
|
488bc73bcd | ||
|
|
af178514e2 | ||
|
|
116ccec7a0 | ||
|
|
a5846fb547 | ||
|
|
d98cd779b7 | ||
|
|
d320ad28b1 | ||
|
|
647b4aca4b | ||
|
|
1a8987d69e | ||
|
|
da6966ded5 | ||
|
|
676d346314 | ||
|
|
c3a8cf7156 | ||
|
|
b2a0b94b36 | ||
|
|
5f044f9de1 | ||
|
|
3ad5f6532c | ||
|
|
97c6e155ad | ||
|
|
544652776c | ||
|
|
07cf5c9b40 | ||
|
|
0ecc18851a | ||
|
|
6819e3739e | ||
|
|
3c624bcfb1 | ||
|
|
56154746f3 | ||
|
|
dd299ffb44 | ||
|
|
e1442309e1 | ||
|
|
fb47d47b6f | ||
|
|
d02acdc62a | ||
|
|
2b767e1070 | ||
|
|
33f0e50994 | ||
|
|
50d82a0f69 | ||
|
|
1003e3e744 | ||
|
|
1227c14986 | ||
|
|
91442afe47 | ||
|
|
9987e199cc | ||
|
|
61e1313498 | ||
|
|
0962e85dc0 | ||
|
|
371bd92aef | ||
|
|
dfc5561910 | ||
|
|
9678eb8476 | ||
|
|
a2642b89a7 | ||
|
|
b3cda84f13 | ||
|
|
45d22ecc12 | ||
|
|
b89e0cea75 | ||
|
|
d813ff6aba | ||
|
|
f2b6bcdcb9 | ||
|
|
83b5bf8e6c | ||
|
|
f6d6fa2431 | ||
|
|
fbecf91f80 | ||
|
|
c050e4251f | ||
|
|
551c22b433 | ||
|
|
746cdfda77 | ||
|
|
6bfb306487 | ||
|
|
17bd221976 | ||
|
|
2b924057aa | ||
|
|
317bcf10c2 | ||
|
|
80d69a4f40 | ||
|
|
abc0e63cbc | ||
|
|
18602d10f0 | ||
|
|
fcbd7a77c4 | ||
|
|
0d5b47ed3c | ||
|
|
caba73d1dd | ||
|
|
c99361768e | ||
|
|
589a17bd79 | ||
|
|
ba45f1edf0 | ||
|
|
0772441e15 | ||
|
|
3cb767db94 | ||
|
|
c23ab1c223 | ||
|
|
f6dc8f6c3c | ||
|
|
f1c12a7da4 | ||
|
|
2ac0a7f59c | ||
|
|
6d0283ed8e | ||
|
|
6b348af4c0 | ||
|
|
344a758c27 | ||
|
|
b0269509f1 | ||
|
|
be710bc66d | ||
|
|
ea2c9e0af0 | ||
|
|
7fb85c5cef | ||
|
|
e7081dbf6a | ||
|
|
f7618cbf97 | ||
|
|
4e98f838c8 | ||
|
|
202b18b4f5 | ||
|
|
2ab6e13a21 | ||
|
|
e8ad64314e | ||
|
|
fbffd24fc5 | ||
|
|
c01be49675 | ||
|
|
5c6475f522 | ||
|
|
2abb1bbd58 | ||
|
|
10f6cc7fc3 | ||
|
|
8c04c76193 | ||
|
|
8b55d3b501 | ||
|
|
df7a03a4c3 | ||
|
|
4463efaf61 | ||
|
|
ce5fc02a16 | ||
|
|
03214a725d | ||
|
|
faa5e45f7a | ||
|
|
a4dd2f32d7 | ||
|
|
bf38109be4 | ||
|
|
12324e11fb | ||
|
|
36230d8a90 | ||
|
|
874944e5bc | ||
|
|
6ae3e039ab | ||
|
|
13cf1a7277 | ||
|
|
2683d5390b | ||
|
|
f202396944 | ||
|
|
5b3550c107 | ||
|
|
e29746adb0 | ||
|
|
bb3a24d770 | ||
|
|
eb8db40092 | ||
|
|
ca62bf6b7a | ||
|
|
972c4e25d6 | ||
|
|
d97d48b225 | ||
|
|
2999ef704d | ||
|
|
ac156aab26 | ||
|
|
7d7755b8a4 | ||
|
|
1e3fce0242 | ||
|
|
c9f3d958ec | ||
|
|
6ab11e169d | ||
|
|
cf97b67aa2 | ||
|
|
f32a89adb0 | ||
|
|
88ddcf5e65 | ||
|
|
9984385316 | ||
|
|
7d2260eaa5 | ||
|
|
00ac2f30b8 | ||
|
|
2bde5c0ad9 | ||
|
|
c75e285d73 | ||
|
|
ae2c033a13 | ||
|
|
321c843b19 | ||
|
|
8c555ebbcf | ||
|
|
7dd03b6fa4 | ||
|
|
20c8362770 | ||
|
|
0032ebd4ef | ||
|
|
ff31734237 | ||
|
|
90c0a645c2 | ||
|
|
2126589fd0 | ||
|
|
b777d36af8 | ||
|
|
ed2f711c6d | ||
|
|
ca53ccfc32 | ||
|
|
5f5ccc0a66 | ||
|
|
8c88165312 | ||
|
|
b44f91dc52 | ||
|
|
1f4f92b81d | ||
|
|
6d9bd0f890 | ||
|
|
ed12b2ab18 | ||
|
|
865413485d | ||
|
|
bbadc1bb04 | ||
|
|
57f34d2482 | ||
|
|
f5afc05e60 | ||
|
|
aa161ffe8d | ||
|
|
a9a765fdfc | ||
|
|
d21b9aa7bf | ||
|
|
1037728a03 | ||
|
|
d86311b13c | ||
|
|
4231fbb3e6 | ||
|
|
d2dbecb06b | ||
|
|
a6c3e80878 | ||
|
|
5c45b51537 | ||
|
|
bb6082b053 | ||
|
|
c2bdfcee05 | ||
|
|
74225e1f34 | ||
|
|
b0c37f182f | ||
|
|
0aabdd5de8 | ||
|
|
a5e37c9377 | ||
|
|
6c8fc4b347 | ||
|
|
e3121a5a43 | ||
|
|
ab86f12c44 | ||
|
|
30bdc40c81 | ||
|
|
a5e7b8d0d7 | ||
|
|
45c99391f7 | ||
|
|
8b9fe06564 | ||
|
|
58aa826b31 | ||
|
|
f23eb2096f | ||
|
|
16d6414619 | ||
|
|
59b6650614 | ||
|
|
94164d4b45 | ||
|
|
b7e7d71822 | ||
|
|
b550ca992e | ||
|
|
2029316609 | ||
|
|
5621d404bf | ||
|
|
b91701fce6 | ||
|
|
385e7253a7 | ||
|
|
e074254d05 | ||
|
|
1b20e61722 | ||
|
|
6b2955ae93 | ||
|
|
b5141e63fd | ||
|
|
218457a845 | ||
|
|
6431b121c7 | ||
|
|
9050363747 | ||
|
|
dc6eb040b7 | ||
|
|
5d6ff7b933 | ||
|
|
4071e413e5 | ||
|
|
c6e8b72333 | ||
|
|
c5114e7e0f | ||
|
|
fc92df058d | ||
|
|
4e01afab2d | ||
|
|
80229d9e45 | ||
|
|
eeaa69a09d | ||
|
|
6c5d6d08c9 | ||
|
|
896553f439 | ||
|
|
5e79fcc0b9 | ||
|
|
47d82e1ad5 | ||
|
|
815e5d0302 | ||
|
|
65211ff93d | ||
|
|
9501c6fe3c | ||
|
|
f86b47af7c | ||
|
|
78d091c31e | ||
|
|
82d9a199f2 | ||
|
|
b4fa027895 | ||
|
|
2581301798 | ||
|
|
ac99808d5c | ||
|
|
b92cf6375e | ||
|
|
d617d849a0 | ||
|
|
6663052a88 | ||
|
|
43a37f289e | ||
|
|
9d72155fc5 | ||
|
|
51829716bb | ||
|
|
1fadad445c | ||
|
|
c9766be52a | ||
|
|
7610a8bf75 | ||
|
|
5982362c7d | ||
|
|
c74acca8b0 | ||
|
|
6e092bff6a | ||
|
|
90df638cdc | ||
|
|
11badb92aa | ||
|
|
868bf68a3e | ||
|
|
c4683891ee | ||
|
|
796ac9c83d | ||
|
|
8328bb291e | ||
|
|
43b343694f | ||
|
|
b4d40650b2 | ||
|
|
abc5f94df7 | ||
|
|
1a7f59d292 | ||
|
|
cf6f747d17 | ||
|
|
7d1c44eae4 | ||
|
|
b60e48399b | ||
|
|
c82deda455 | ||
|
|
46259d93ba | ||
|
|
68c514a747 | ||
|
|
75eac4de0f | ||
|
|
f3c1d5f3ea | ||
|
|
e45512128a | ||
|
|
92ba6df81a | ||
|
|
1b62e08853 | ||
|
|
68d5cd6f23 | ||
|
|
b4398b503d | ||
|
|
7a7cba0324 | ||
|
|
a2c2b262bc | ||
|
|
0927ad6bb3 | ||
|
|
d682436a54 | ||
|
|
12d1d9acc1 | ||
|
|
f0f04669dc | ||
|
|
07dada6d04 | ||
|
|
21a2cb6922 | ||
|
|
9768f86b74 | ||
|
|
e8d2ed978f | ||
|
|
d097a2cab1 | ||
|
|
95e14306e7 | ||
|
|
89d504b32f | ||
|
|
06c379e859 | ||
|
|
8e70d44f2c | ||
|
|
2da9c4454a | ||
|
|
236207402d | ||
|
|
fbb8954b52 | ||
|
|
8a0e9f26d9 | ||
|
|
5a9aa21b13 | ||
|
|
31d0117e7a | ||
|
|
7d2db524ac | ||
|
|
d845140f33 | ||
|
|
bad4b686c4 | ||
|
|
1c94406e2a | ||
|
|
a91e07ae24 | ||
|
|
4fbaadca47 | ||
|
|
d6d40a3f87 | ||
|
|
7fb4bcc550 | ||
|
|
2e4d569195 | ||
|
|
f1659ec169 | ||
|
|
0b2d972fd3 | ||
|
|
04d347dde1 | ||
|
|
7eeb14c188 | ||
|
|
a498249cfa | ||
|
|
b99716e22a | ||
|
|
c273cdc8bd | ||
|
|
c930bfc387 | ||
|
|
8de231319a | ||
|
|
4032ca9290 | ||
|
|
fcc61389fc | ||
|
|
34c1a8cd79 | ||
|
|
4ccabedd50 | ||
|
|
f0b2f38989 | ||
|
|
b143b66838 | ||
|
|
16ddb7350c | ||
|
|
49e24e3e8f | ||
|
|
7e782e5b4f | ||
|
|
5a6ab5cdcf | ||
|
|
76e57779ec | ||
|
|
f603d437be | ||
|
|
6c8a2cd3fb | ||
|
|
8ea39deb18 | ||
|
|
8753dded1c | ||
|
|
6d199252f6 | ||
|
|
4e60b6278a | ||
|
|
6c5cc4e2d9 | ||
|
|
258de27aef | ||
|
|
8acea1848a | ||
|
|
462140d52d | ||
|
|
ee231d325a | ||
|
|
30d9e9d6dc | ||
|
|
b4d4e3bed4 | ||
|
|
c3fa6db9f2 | ||
|
|
2a5436b3d3 | ||
|
|
fa2b3a414e | ||
|
|
5ede995e53 | ||
|
|
2248e7bc49 | ||
|
|
a2ebd0060a | ||
|
|
5d58977c4a | ||
|
|
5f954ad7f2 | ||
|
|
b6d4e6f724 | ||
|
|
bc5860b142 | ||
|
|
3a33c2639e | ||
|
|
7c844aba67 | ||
|
|
91657bd273 | ||
|
|
b3eb7daed6 | ||
|
|
0ab6045255 | ||
|
|
2234bb04a7 | ||
|
|
d9212b0817 | ||
|
|
118113c31f | ||
|
|
6c09d78859 | ||
|
|
c933c7d4f2 | ||
|
|
0b3e04d41f | ||
|
|
3344bbfb29 | ||
|
|
899e0913f3 | ||
|
|
f4ec972481 | ||
|
|
20a3437a74 | ||
|
|
39cd646f25 | ||
|
|
7c8e01891a | ||
|
|
2b73acfa12 | ||
|
|
5ef43cd3d8 | ||
|
|
aac4b1553e | ||
|
|
bbf16c0b3a | ||
|
|
2be59f90fd | ||
|
|
c2de8bb04d | ||
|
|
e9456bc9af | ||
|
|
44505cde63 | ||
|
|
e7883dafb6 | ||
|
|
29e4a95791 | ||
|
|
c45ccb0b5d | ||
|
|
016121d4b0 | ||
|
|
02daeca60e | ||
|
|
c46387423a | ||
|
|
41b7b4ab0b | ||
|
|
89b0fd4785 | ||
|
|
eeefcda6b6 | ||
|
|
773a6d477e | ||
|
|
5c3b84ba2d | ||
|
|
86875ab33d | ||
|
|
20fec807e5 | ||
|
|
d4ab380c60 | ||
|
|
b27b971f1f | ||
|
|
3c4d3002f2 | ||
|
|
b1860c6416 | ||
|
|
222ac81222 | ||
|
|
d5438d3e05 | ||
|
|
079c89189f | ||
|
|
2af4bb66d4 | ||
|
|
3d4a927981 | ||
|
|
e7c5e104ea | ||
|
|
31a03639b0 | ||
|
|
b055efc73b | ||
|
|
9fd280409c | ||
|
|
fc7a236fd5 | ||
|
|
0c1e2baaec | ||
|
|
f159608a01 | ||
|
|
cd31a3e19d | ||
|
|
5001776189 | ||
|
|
75aff28522 | ||
|
|
3382d83790 | ||
|
|
09c93cbb25 | ||
|
|
6848dc8c89 | ||
|
|
04b99a9767 | ||
|
|
bea445368e | ||
|
|
5e01475e7b | ||
|
|
ce457615c7 | ||
|
|
899faa3fec | ||
|
|
b9bbf16470 | ||
|
|
9ce1ea41ce | ||
|
|
305edce422 | ||
|
|
d25ec12ca3 | ||
|
|
ef9f4f325b | ||
|
|
0fce7a7e9d | ||
|
|
4eb37f220f | ||
|
|
2ea041a2b2 | ||
|
|
e27e4cb99b | ||
|
|
6f7b1ef68a | ||
|
|
65df911e4a | ||
|
|
19317c2c45 | ||
|
|
992bfee42c | ||
|
|
12320dbfc3 | ||
|
|
802683fa08 | ||
|
|
93459f517d | ||
|
|
06a8e9b35e | ||
|
|
41745904a3 | ||
|
|
4114756f39 | ||
|
|
bbb0b31bfe | ||
|
|
83ccc5e2c6 | ||
|
|
e8447846ee | ||
|
|
6f92a23612 | ||
|
|
2914e392a3 | ||
|
|
fa2e12d57f | ||
|
|
260ad514b0 | ||
|
|
10ec13e8ef | ||
|
|
4220a85daf | ||
|
|
d75a8fc89c | ||
|
|
7766e52679 | ||
|
|
2096fd712c | ||
|
|
b147ec205b | ||
|
|
4cb420ecc9 | ||
|
|
b6e631d446 | ||
|
|
5b4b78d657 | ||
|
|
f8f46ca105 | ||
|
|
2049b7016e | ||
|
|
c2d4b9c218 | ||
|
|
f9feed6668 | ||
|
|
060de52812 | ||
|
|
8ca505ebed | ||
|
|
e93ee5deba | ||
|
|
2a48e38d0f | ||
|
|
e60c5b1af0 | ||
|
|
fe74e1ba6a | ||
|
|
b5ebf999a2 | ||
|
|
7bf0d4d5cd | ||
|
|
852e8daf7a | ||
|
|
f9b80cdc1c | ||
|
|
f8fe3457a5 | ||
|
|
b95f04efbf | ||
|
|
bc945571e4 | ||
|
|
16784a72e8 | ||
|
|
dadf395fbe | ||
|
|
046f7fce9f | ||
|
|
3bb12b3ebd | ||
|
|
7e1c393933 | ||
|
|
cf25a79f41 | ||
|
|
0996fdf3ea | ||
|
|
a80b980dcf | ||
|
|
76a63983e2 | ||
|
|
f5b47c645e | ||
|
|
aa39508b83 | ||
|
|
fae19754bb | ||
|
|
a08e1ce906 | ||
|
|
15e098d884 | ||
|
|
27da779f25 | ||
|
|
1693ab3b69 | ||
|
|
9dd7a1a346 | ||
|
|
76cc3910b3 | ||
|
|
d2b1e20c7d | ||
|
|
2034d4c8c5 | ||
|
|
b49579c56c | ||
|
|
5cee2a80b5 | ||
|
|
502320fdde | ||
|
|
8725555c40 | ||
|
|
777c93481f | ||
|
|
2c02243de9 | ||
|
|
ed30132e8b | ||
|
|
b02fa2a90f | ||
|
|
8a4683b5ed | ||
|
|
56352663f5 | ||
|
|
ddc9107b92 | ||
|
|
4926951ba8 | ||
|
|
81221f1be0 | ||
|
|
a54e99d9a7 | ||
|
|
7f998c2049 | ||
|
|
58ceadaf02 | ||
|
|
a37d4170e2 | ||
|
|
c586b1db7a | ||
|
|
222a6908b7 | ||
|
|
9607c93485 | ||
|
|
67acc17b0c | ||
|
|
e858be0038 | ||
|
|
4f41ea7fff | ||
|
|
aac4647e6e | ||
|
|
4819e529c3 | ||
|
|
d9a3f235e2 | ||
|
|
c9e484d473 | ||
|
|
a0e0abb54c | ||
|
|
ab65b5ca93 | ||
|
|
01179544fd | ||
|
|
e33b64329a | ||
|
|
15113a03ad | ||
|
|
14dcde9439 | ||
|
|
1a5a2ecd25 | ||
|
|
073a00a4ca | ||
|
|
642c26950d | ||
|
|
3327aeff0c | ||
|
|
3151573d39 | ||
|
|
9ef9a4a3dc | ||
|
|
863e692b16 | ||
|
|
1c712d2e72 | ||
|
|
c88dc579bd | ||
|
|
300730e127 | ||
|
|
1875cfefc6 | ||
|
|
953a87d003 | ||
|
|
efb31c0079 | ||
|
|
774ac503d0 | ||
|
|
6ce5aaf494 | ||
|
|
cd674679e6 | ||
|
|
fad93836a2 | ||
|
|
243b526b99 | ||
|
|
679dfe21f6 | ||
|
|
a13f428c35 | ||
|
|
363df8be6a | ||
|
|
434827d86e | ||
|
|
f6697e15da | ||
|
|
e1a6f9cdea | ||
|
|
0069129f00 | ||
|
|
a50069aa79 | ||
|
|
39b8c8c057 | ||
|
|
fba270080e | ||
|
|
650afe234d | ||
|
|
80dfa0e342 | ||
|
|
b85845f9da | ||
|
|
e0f158c0a0 | ||
|
|
e3d10322c1 | ||
|
|
f94d7776ca | ||
|
|
00eca5e982 | ||
|
|
68f1177f59 | ||
|
|
abd7c7bcde | ||
|
|
5cd8d5c115 | ||
|
|
3b74e3fbe5 | ||
|
|
f22754cd60 | ||
|
|
56980cf411 | ||
|
|
0ee5cb3c4d | ||
|
|
bcbdcf6f83 | ||
|
|
1e260ac520 | ||
|
|
e78547586a | ||
|
|
f61376e61b | ||
|
|
48a43dd8e8 | ||
|
|
91f76da3a4 | ||
|
|
be712a0152 | ||
|
|
f4f9b16391 | ||
|
|
a37420e027 | ||
|
|
24ab596494 | ||
|
|
232ec9607b | ||
|
|
3ad32dbe57 | ||
|
|
92c64a56ae | ||
|
|
4ddb181ec8 | ||
|
|
712b47a7e0 | ||
|
|
b7dd5b7d0a | ||
|
|
8dbe27427f | ||
|
|
6c26fd43cd | ||
|
|
385806e22e | ||
|
|
bddd7f15bd | ||
|
|
f33b8cbb7a | ||
|
|
99fefbc760 | ||
|
|
b0b08af4d7 | ||
|
|
036560e999 | ||
|
|
0493606cdd | ||
|
|
6b1471a35c | ||
|
|
c19fe5a5d0 | ||
|
|
5faf628164 | ||
|
|
d695515e87 | ||
|
|
727612ede9 | ||
|
|
cf3120dddc | ||
|
|
df96662d1a | ||
|
|
c9e2dcda4b | ||
|
|
79c814c616 | ||
|
|
ed0b0abfb8 | ||
|
|
d0e5ec7ac9 | ||
|
|
9b466ebe89 | ||
|
|
b396e66f2b | ||
|
|
9d7277cbb2 | ||
|
|
cd57e9960f | ||
|
|
ce0e6ca247 | ||
|
|
b65a6220c8 | ||
|
|
7fbd444883 | ||
|
|
65b52f04ae | ||
|
|
3ecb9f51df | ||
|
|
97d01f5e6f | ||
|
|
ab41c31673 | ||
|
|
5064de7c28 | ||
|
|
ea2862f286 | ||
|
|
52bf12aead | ||
|
|
fd8aac2f3c | ||
|
|
ca6c080c99 | ||
|
|
f0b8d4d068 | ||
|
|
431a861d74 | ||
|
|
2c72495789 | ||
|
|
bd3a9c0f0a | ||
|
|
795a86752a | ||
|
|
16dfe8ab5c | ||
|
|
bbf03a5a5c | ||
|
|
546f3df880 | ||
|
|
7f286040e6 | ||
|
|
f24980f896 | ||
|
|
47a20b7526 | ||
|
|
793f1078b6 | ||
|
|
344dad5b73 | ||
|
|
00fdfda12a | ||
|
|
6fec1477a3 | ||
|
|
1c5ff7f80a | ||
|
|
acf788aa1f | ||
|
|
bd9526ecbe | ||
|
|
bc3a1c60ef | ||
|
|
0a0b5a7a8a | ||
|
|
58cc210582 | ||
|
|
493fdf3e24 | ||
|
|
6dcd5b2414 | ||
|
|
828d6c87c0 | ||
|
|
c8d5601a8a | ||
|
|
a1a5907f79 | ||
|
|
e39693ced3 | ||
|
|
f51036e9bc | ||
|
|
66a08540c2 | ||
|
|
680370af5b | ||
|
|
1ce7eeaa52 | ||
|
|
e7b397be03 | ||
|
|
bc86509c39 | ||
|
|
36303f61b6 | ||
|
|
ab263062ef | ||
|
|
5387ee459e | ||
|
|
360a7be9a7 | ||
|
|
5c1fa6f2a4 | ||
|
|
3588e1424d | ||
|
|
e4e3b2b0d7 | ||
|
|
29627db746 | ||
|
|
46e71698c9 | ||
|
|
f69e8bedea | ||
|
|
3816b1ddf6 | ||
|
|
65971e6ac0 | ||
|
|
5f3e767f80 | ||
|
|
9cc2cbba4b | ||
|
|
d5fd66ab02 | ||
|
|
f6a0d5983e | ||
|
|
2afb191a2f | ||
|
|
99ff1b58f4 | ||
|
|
e2d98d99c3 | ||
|
|
29e2bcd7af | ||
|
|
e41a51b3b8 | ||
|
|
359dffbbeb | ||
|
|
68002d4098 | ||
|
|
d6fce83042 | ||
|
|
f36dc58a6f | ||
|
|
b540a63a84 | ||
|
|
12f9a0fc72 | ||
|
|
3d4529f30f | ||
|
|
a9452d32b7 | ||
|
|
466a172faf | ||
|
|
ebba49aa62 | ||
|
|
6d3c3c71dc | ||
|
|
4171ca786e | ||
|
|
550ae1eb0c | ||
|
|
5660cdefc9 | ||
|
|
09ca02c5b8 | ||
|
|
cdd5139d91 | ||
|
|
f05b2137b4 | ||
|
|
f7860d24d9 | ||
|
|
3d3e0d5f7f | ||
|
|
7be50d11b1 | ||
|
|
4eb4d46567 | ||
|
|
1273c8e233 | ||
|
|
7bd93b33db | ||
|
|
4efb4a5c69 | ||
|
|
a78c53091d | ||
|
|
ac0ed22859 | ||
|
|
6508316baf | ||
|
|
ed14cabf3f | ||
|
|
8e8168ab8f | ||
|
|
6411334709 | ||
|
|
fe328ea51a | ||
|
|
6816afe903 | ||
|
|
23681047d1 | ||
|
|
cb5bb89742 | ||
|
|
326df0a555 | ||
|
|
92b8a16fd3 | ||
|
|
7ba94229db | ||
|
|
0dc83b2158 | ||
|
|
fc58f091b8 | ||
|
|
d31e82c17f | ||
|
|
8887f99e55 | ||
|
|
9b0b7b91d5 | ||
|
|
55ddf02900 | ||
|
|
3718824e69 | ||
|
|
6241ea3004 | ||
|
|
ffb4670468 | ||
|
|
23fcdda219 | ||
|
|
187e9e3728 | ||
|
|
987d5902c1 | ||
|
|
87c2f53c25 | ||
|
|
efdad520ca | ||
|
|
26b60b1b28 | ||
|
|
881add500f | ||
|
|
93af7b4699 | ||
|
|
a5327b368f | ||
|
|
fe899cc10d | ||
|
|
0fcc8c0c03 | ||
|
|
119b647cba | ||
|
|
b115ff4fae | ||
|
|
f240c00e9b | ||
|
|
f267ef101f | ||
|
|
91f8f158a4 | ||
|
|
4efe3a9cb7 | ||
|
|
fc77896fd7 | ||
|
|
5b717e764a | ||
|
|
1ed31f9194 | ||
|
|
76ed3a763b | ||
|
|
99bae3bd28 | ||
|
|
e629176759 | ||
|
|
933d7fe513 | ||
|
|
31ac558f3d | ||
|
|
8629655e8b | ||
|
|
79ac0a68de | ||
|
|
af9167398f | ||
|
|
3de260da41 | ||
|
|
a3e259c335 | ||
|
|
c09ed84373 | ||
|
|
daf84b3fbb | ||
|
|
ea8bdc9e7a | ||
|
|
8df3dbea9d | ||
|
|
8dfe1d556a | ||
|
|
4e70e79c7f | ||
|
|
6e8a263a06 | ||
|
|
f5ef48f3b9 | ||
|
|
0ece4eae55 | ||
|
|
c5710296f1 | ||
|
|
a6f5b69e41 | ||
|
|
74c7fb6c9d | ||
|
|
49f0232c39 | ||
|
|
04eb684afe | ||
|
|
b755013961 | ||
|
|
0317c7c485 | ||
|
|
b8ff55c275 | ||
|
|
45f658fb76 | ||
|
|
51f5142db1 | ||
|
|
e7ebd4792b | ||
|
|
7969a3155e | ||
|
|
e197657e02 | ||
|
|
6a1b363341 | ||
|
|
5dfa054899 | ||
|
|
a472ac15e8 | ||
|
|
0e25c51697 | ||
|
|
deb8d5a4ff | ||
|
|
6f2c41beec | ||
|
|
d1df6efddf | ||
|
|
dcd6411bd7 | ||
|
|
3441f43b51 | ||
|
|
7e074712eb | ||
|
|
e52af02245 | ||
|
|
be0da74502 | ||
|
|
84eab58ebb | ||
|
|
7ff32514bf | ||
|
|
998b726ce7 | ||
|
|
8ecd463d9f | ||
|
|
b4b287e7ac | ||
|
|
63838d971b | ||
|
|
725342da29 | ||
|
|
ee2da09405 | ||
|
|
933ed2b69d | ||
|
|
fd79022cd5 | ||
|
|
cc992b27bf | ||
|
|
d79934dd2f | ||
|
|
0ec85f12ef | ||
|
|
5423e4402e | ||
|
|
c912c29690 | ||
|
|
7293fabc43 | ||
|
|
034e24095e | ||
|
|
733707ac37 | ||
|
|
50deeb91cd | ||
|
|
36f660a41f | ||
|
|
6929376717 | ||
|
|
a0ef2fcd8e | ||
|
|
eb4e1b86cd | ||
|
|
4293c9d423 | ||
|
|
0e5675d7b7 | ||
|
|
7705e63e30 | ||
|
|
85935bc056 | ||
|
|
c9f0c7a252 | ||
|
|
117062efaa | ||
|
|
87f8cc390f | ||
|
|
5c67341d93 | ||
|
|
c290d7c178 | ||
|
|
89e704969f | ||
|
|
ea5c82bf9c | ||
|
|
73407fb7a1 | ||
|
|
816dc493b7 | ||
|
|
bdd71ec7bd | ||
|
|
a4b1b99eb0 | ||
|
|
d52a948474 | ||
|
|
13d31713dc | ||
|
|
413f247a65 | ||
|
|
7c14db880f | ||
|
|
c4e301bffa | ||
|
|
0c3498d374 | ||
|
|
4b0829340e | ||
|
|
a3de65241c | ||
|
|
b96d0e610a | ||
|
|
a5fbe0e0d4 | ||
|
|
1f536d5799 | ||
|
|
78d73e02da | ||
|
|
8f64aeabe2 | ||
|
|
79ccccaa96 | ||
|
|
b09494b185 | ||
|
|
593927cf2d | ||
|
|
c2e4376861 | ||
|
|
73501a8757 | ||
|
|
1dc9c053c4 | ||
|
|
b5ae4b5810 | ||
|
|
d9bae78d04 | ||
|
|
31942cda2c | ||
|
|
f62f3738dd | ||
|
|
9e81085efd | ||
|
|
4d98914744 | ||
|
|
c6c7267c54 | ||
|
|
593b4b4460 | ||
|
|
f6344076f2 | ||
|
|
6146dffe45 | ||
|
|
c506cb0e5b | ||
|
|
91cd6261bc | ||
|
|
c6006bc605 | ||
|
|
f38a80b837 | ||
|
|
d7b9fcfbd4 | ||
|
|
a187d013ad | ||
|
|
2785e49558 | ||
|
|
4c5f41c72f | ||
|
|
aad948f0e8 | ||
|
|
b6f518d3c1 | ||
|
|
c95a1b65ae | ||
|
|
05cd7bb4c2 | ||
|
|
f7207feb33 | ||
|
|
328f8c8455 | ||
|
|
15ddaff2ab | ||
|
|
a62dd6282b | ||
|
|
59ccd77845 | ||
|
|
36d744e77b | ||
|
|
727cba4af8 | ||
|
|
d67aed550b | ||
|
|
a609621069 | ||
|
|
8b631e9ecf | ||
|
|
c80c4fb44d | ||
|
|
77d4b381d0 | ||
|
|
b49c270cc9 | ||
|
|
5f56fc5f8a | ||
|
|
a7f9b7d3a4 | ||
|
|
5fccff3de9 | ||
|
|
4f26bca4de | ||
|
|
7c4a7e9628 | ||
|
|
07f4c197b3 | ||
|
|
594cddaa6b | ||
|
|
d72ccc8786 | ||
|
|
4770417e71 | ||
|
|
d7556c7d59 | ||
|
|
8469345e05 | ||
|
|
b1b7b412a7 | ||
|
|
3e459d7a5d | ||
|
|
3852439c98 | ||
|
|
47d80ee133 | ||
|
|
71bd8c66ee | ||
|
|
c64ee496ca | ||
|
|
f93ab74ad1 | ||
|
|
691add8afc | ||
|
|
c6c0599574 | ||
|
|
fd6487f201 | ||
|
|
bb05a1437c | ||
|
|
a88439cd53 | ||
|
|
b190c24737 | ||
|
|
1215af2a23 | ||
|
|
c33da3f290 | ||
|
|
f0932cb5c1 | ||
|
|
c88813019c | ||
|
|
9cf3a2a85c | ||
|
|
6984d3041c | ||
|
|
6a14cb99e0 | ||
|
|
f048eee643 | ||
|
|
a36a5ce599 | ||
|
|
a816ca8a51 | ||
|
|
aa60df6782 | ||
|
|
58bbf34391 | ||
|
|
8b14c7551d | ||
|
|
1e2a0e1795 | ||
|
|
1f8405c74c | ||
|
|
1daa47b01d | ||
|
|
f71b78ced3 | ||
|
|
3471fe3ee4 | ||
|
|
32bdbb2b3f | ||
|
|
69b88e89a2 | ||
|
|
3655ac44e9 | ||
|
|
023881681d | ||
|
|
b8d95b25f0 | ||
|
|
5f0efd5e7c | ||
|
|
c7ad0eb6a4 | ||
|
|
93b5e28256 | ||
|
|
224db84b31 | ||
|
|
02b628a10f | ||
|
|
409b9b8d25 | ||
|
|
ddaf77107d | ||
|
|
efca8bb04f | ||
|
|
84ef74286f | ||
|
|
e9b706c967 | ||
|
|
1b471215b4 | ||
|
|
9f4cbe2ea9 | ||
|
|
8f5e126d82 | ||
|
|
1af9167ee7 | ||
|
|
53d99aff1b | ||
|
|
dcfa5e385a | ||
|
|
9365637c4a | ||
|
|
75c64565c4 | ||
|
|
42bc55bf32 | ||
|
|
fb59857e93 | ||
|
|
2114527fec | ||
|
|
96741fdfe3 | ||
|
|
d0c0743b8c | ||
|
|
8ab2d2b22a | ||
|
|
6d1674a234 | ||
|
|
d048451ca2 | ||
|
|
fac0855180 | ||
|
|
2b73fac982 | ||
|
|
cc52e2d413 | ||
|
|
a5c5bb811d | ||
|
|
7b97cd1c34 | ||
|
|
1d820278f6 | ||
|
|
d7802369bc | ||
|
|
3a4f0a735e | ||
|
|
3ebf2446ee | ||
|
|
a411df237d | ||
|
|
c3805bc224 | ||
|
|
f13a584b8a | ||
|
|
01272809c6 | ||
|
|
d9c2aeb93e | ||
|
|
4fe4b76e30 | ||
|
|
7b37da8726 | ||
|
|
e4307eeefe | ||
|
|
d3dc82585c | ||
|
|
a3ac62f38b | ||
|
|
42384274cc | ||
|
|
0ee9f71c25 | ||
|
|
ddc22a0ffe | ||
|
|
0aad3ec7db | ||
|
|
7b3d32182e | ||
|
|
f416cac815 | ||
|
|
291f04e8c0 | ||
|
|
e57201f206 | ||
|
|
21d168ce93 | ||
|
|
9d85a7afc4 | ||
|
|
325ed5afa7 | ||
|
|
75bd2accd3 | ||
|
|
23ff61a1ff | ||
|
|
98a8940e33 | ||
|
|
340701d021 | ||
|
|
1c0c4dc366 | ||
|
|
f0eab628fd | ||
|
|
54ac263678 | ||
|
|
1ad7870180 | ||
|
|
516f0be2ce | ||
|
|
fceef46739 | ||
|
|
8fa35f419c | ||
|
|
601f9c0fea | ||
|
|
edb9e105eb | ||
|
|
a35c7dbfeb | ||
|
|
c295eb2515 | ||
|
|
3ff554aec1 | ||
|
|
df9296f567 | ||
|
|
f78030e4f1 | ||
|
|
ed6677cbba | ||
|
|
0e033bed54 | ||
|
|
6c7b14a762 | ||
|
|
6f914794d2 | ||
|
|
14ead422aa | ||
|
|
b2d0026bff | ||
|
|
45fd401ff7 | ||
|
|
5b51e2c9aa | ||
|
|
799cba0df4 | ||
|
|
380d90b364 | ||
|
|
45e06252b7 | ||
|
|
97e74a3862 | ||
|
|
90194bc501 | ||
|
|
90a153aa38 | ||
|
|
0b9cde591a | ||
|
|
bb4c847186 | ||
|
|
49f555c5b5 | ||
|
|
5fd6eeaa54 | ||
|
|
364fd8ca63 | ||
|
|
2e224bfc67 | ||
|
|
27f19ce9e7 | ||
|
|
5432554ecb | ||
|
|
548f6e6c5e | ||
|
|
c4da54f7a9 | ||
|
|
58995bfc8c | ||
|
|
314c75c742 | ||
|
|
105b4f734b | ||
|
|
d232a8bbdc | ||
|
|
1344f54bde | ||
|
|
36ed816102 | ||
|
|
148841e5e1 | ||
|
|
ffab67875d | ||
|
|
56d963bdf6 | ||
|
|
3c489ff5e2 | ||
|
|
9babe64b0a | ||
|
|
eb75b23d93 | ||
|
|
23f78001e2 | ||
|
|
b777a1fbae | ||
|
|
cd6c0b147e | ||
|
|
cc6f461357 | ||
|
|
1683dd4109 | ||
|
|
32216fc797 | ||
|
|
666257ae3f | ||
|
|
b989a55847 | ||
|
|
f6f0e6bad2 | ||
|
|
4eb6876e26 | ||
|
|
5b73c007aa | ||
|
|
a962b46f20 | ||
|
|
3c355ece1d | ||
|
|
a74bc73598 | ||
|
|
52708b0603 | ||
|
|
ae71778659 | ||
|
|
d8cd0e6238 | ||
|
|
464a65b11c | ||
|
|
41fcd26eb6 | ||
|
|
81c907a4b8 | ||
|
|
03d633b959 | ||
|
|
78ebde094c | ||
|
|
a51962066d | ||
|
|
19f730fedf | ||
|
|
137ea60ce2 | ||
|
|
d6cd90e122 | ||
|
|
a6c14fb512 | ||
|
|
7f8e2a2e66 | ||
|
|
d284715c15 | ||
|
|
2b4c79548c | ||
|
|
cea2f39843 | ||
|
|
579f3ad056 | ||
|
|
e0626b003a | ||
|
|
1db0f6f9eb | ||
|
|
e6b07111ea | ||
|
|
74226a1c9e | ||
|
|
d178beb598 | ||
|
|
6c237e3450 | ||
|
|
4fb2774614 | ||
|
|
9c4f7e6ac0 | ||
|
|
72cafcadc8 | ||
|
|
15d041a240 | ||
|
|
71dddd7634 | ||
|
|
058b3bbd6d | ||
|
|
b4bb5b3e26 | ||
|
|
836fd81744 | ||
|
|
83661087ea | ||
|
|
9685a7a509 | ||
|
|
afa5d117b7 | ||
|
|
6d172a6a63 | ||
|
|
60bf44dc75 | ||
|
|
9607630405 | ||
|
|
57b41de95d | ||
|
|
2b3aef04c3 | ||
|
|
812a8ded98 | ||
|
|
84e687333e | ||
|
|
562aedc884 | ||
|
|
507393b830 | ||
|
|
84b555a350 | ||
|
|
f1a524fa74 | ||
|
|
19992e1443 | ||
|
|
59d5b2fc13 | ||
|
|
b936fb2115 | ||
|
|
219f632182 | ||
|
|
f9fa6ee530 | ||
|
|
0ea15ed320 | ||
|
|
b6bfe0166b | ||
|
|
d686419127 | ||
|
|
a787d57005 | ||
|
|
ad3d04a30c | ||
|
|
7186448cfe | ||
|
|
1ae687fbd2 | ||
|
|
7e8c6fd47b | ||
|
|
66ca7600c4 | ||
|
|
25387df1e0 | ||
|
|
dd0e38d73a | ||
|
|
8967db2c35 | ||
|
|
1c5e7bf24a | ||
|
|
4ce8048909 | ||
|
|
7073df6b96 | ||
|
|
4c2006a780 | ||
|
|
17cace4c58 | ||
|
|
7966b53750 | ||
|
|
53bff12239 | ||
|
|
2a5a9cc238 | ||
|
|
7ddd950b1d | ||
|
|
f042640a89 | ||
|
|
9e058711b1 | ||
|
|
12134b9ba9 | ||
|
|
ba6e52f984 | ||
|
|
3bbc62d525 | ||
|
|
99aa7bad62 | ||
|
|
e169427eaa | ||
|
|
8e29241702 | ||
|
|
c4270e4517 | ||
|
|
46bcea93ef | ||
|
|
dc728d5d5a | ||
|
|
3899f14f1f | ||
|
|
1f7e05695e | ||
|
|
dbe007c7b0 | ||
|
|
cdb0e033c6 | ||
|
|
5d6d7f29f4 | ||
|
|
4138cbb7b0 | ||
|
|
f2249adf60 | ||
|
|
edcd96a129 | ||
|
|
00a47ca240 | ||
|
|
f0730a655c | ||
|
|
dd383efe04 | ||
|
|
b88a6b82c5 | ||
|
|
154f0709bd | ||
|
|
f418b77aa6 | ||
|
|
cec5c20656 | ||
|
|
3e9fe24ddd | ||
|
|
349d820dd1 | ||
|
|
c2275649b7 | ||
|
|
4fd9f5071f | ||
|
|
9c0cc6b6d8 | ||
|
|
3e02204f5d | ||
|
|
4282af91a0 | ||
|
|
7b9e1ea0d5 | ||
|
|
e640a52207 | ||
|
|
e70749d90d | ||
|
|
5ddedf5391 | ||
|
|
0f41147166 | ||
|
|
3b676c4925 | ||
|
|
bbcb5e8be3 | ||
|
|
7d8c3e9460 | ||
|
|
ba7c4a35c3 | ||
|
|
5e361485c1 | ||
|
|
437b0f5f71 | ||
|
|
daf9610616 | ||
|
|
d1cf52c16a | ||
|
|
9aa277a541 | ||
|
|
f1c2d419cb | ||
|
|
e5d4746fb4 | ||
|
|
0c700cc07d | ||
|
|
313991183b | ||
|
|
8e3541f4fa | ||
|
|
c2ea25db39 | ||
|
|
5cef1a1a84 | ||
|
|
daf8e751d4 | ||
|
|
527e2fedcd | ||
|
|
5e83438315 | ||
|
|
cff49a9152 | ||
|
|
c378d70f33 | ||
|
|
246c483c58 | ||
|
|
2ae751c338 | ||
|
|
4d9392390f | ||
|
|
5c3ac3b6f6 | ||
|
|
932f3af0eb | ||
|
|
2c97d8fb44 | ||
|
|
f1181c706c | ||
|
|
9c5679fe53 | ||
|
|
9c787663dc | ||
|
|
560ab81595 | ||
|
|
0bfde7d243 | ||
|
|
89f51d79cc | ||
|
|
5e7327e608 | ||
|
|
c4c3bd2b78 | ||
|
|
5d5154fbea | ||
|
|
0a926d8d57 | ||
|
|
3388e7fb44 | ||
|
|
3157d22a44 | ||
|
|
3df9af054e | ||
|
|
0c0fa1460a | ||
|
|
3073a78664 | ||
|
|
a2309c8fe0 | ||
|
|
dd20e6fdd7 | ||
|
|
77f10a1c5f | ||
|
|
24715146fd | ||
|
|
ba8c992976 | ||
|
|
53a35e23ee | ||
|
|
d4fbb08ec0 | ||
|
|
57d8e5b8ba | ||
|
|
5b708c4ff5 | ||
|
|
667d078f72 | ||
|
|
74c63197eb | ||
|
|
511e9c3dcb | ||
|
|
ce7292003a | ||
|
|
c957f4c318 | ||
|
|
52dac61212 | ||
|
|
32b8c54ea3 | ||
|
|
21d721f9ff | ||
|
|
709cabc2f1 | ||
|
|
14997b102e | ||
|
|
29b4c54984 | ||
|
|
231caaed9b | ||
|
|
dcf0b454c6 | ||
|
|
876fbcb9f7 | ||
|
|
8166a6ad38 | ||
|
|
87a63370d3 | ||
|
|
1fac489512 | ||
|
|
200f78309b | ||
|
|
f39b5bdcbb | ||
|
|
668d5b0dd2 | ||
|
|
710ec9f95d | ||
|
|
05a3d3acb6 | ||
|
|
45968c05a0 | ||
|
|
72ec986b22 | ||
|
|
f57a34b353 | ||
|
|
3cda6b5fd0 | ||
|
|
8c80661027 | ||
|
|
d43bb4114c | ||
|
|
0e63901156 | ||
|
|
3eb4164d84 | ||
|
|
8a19e99f74 | ||
|
|
3447053144 | ||
|
|
311bd2a9a9 | ||
|
|
2db18d0d1c | ||
|
|
f485ab561e | ||
|
|
54e473f9f8 | ||
|
|
eedbedae93 | ||
|
|
2c8d5d6472 | ||
|
|
841872dc4b | ||
|
|
69eb1bea35 | ||
|
|
e77e12013b | ||
|
|
43148e5328 | ||
|
|
c800d6ea46 | ||
|
|
07038649d5 | ||
|
|
e861a90caa | ||
|
|
86a083c1f7 | ||
|
|
20b88d2aae | ||
|
|
97dbe91443 | ||
|
|
631189b716 | ||
|
|
6db98ef403 | ||
|
|
caf0257075 | ||
|
|
2c35cde750 | ||
|
|
5ca7f854cf | ||
|
|
02c1789d11 | ||
|
|
1406a86c7d | ||
|
|
c5468080e4 | ||
|
|
17088aceaa | ||
|
|
32b46da6e3 | ||
|
|
d30b5f01d3 | ||
|
|
4598218eac | ||
|
|
58646796e5 | ||
|
|
76468b0bcf | ||
|
|
4b3ada699d | ||
|
|
477cbff4b6 | ||
|
|
ddd4d3ad73 | ||
|
|
a7f9351b5d | ||
|
|
c2b37037c6 | ||
|
|
add4b5bf69 | ||
|
|
01cc76e02d | ||
|
|
c13062093b | ||
|
|
5d3ab72d1d | ||
|
|
4c567f5969 | ||
|
|
6782422f01 | ||
|
|
3f1466e7d2 | ||
|
|
c9335a55e1 | ||
|
|
a71eecc4f7 | ||
|
|
f837176802 | ||
|
|
763f890029 | ||
|
|
6641ee235d | ||
|
|
7334402db5 | ||
|
|
81d9e046a3 | ||
|
|
35f815a7b4 | ||
|
|
1aae9e05cf | ||
|
|
a0b7ff8369 | ||
|
|
237866941a | ||
|
|
71a1558a67 | ||
|
|
5c4ea049dd | ||
|
|
8ff932b950 | ||
|
|
c0f41e745d | ||
|
|
e8b79573d2 | ||
|
|
f5db22169b | ||
|
|
7b6e6b647a | ||
|
|
37564ccd3a | ||
|
|
287139e5a5 | ||
|
|
3899723bda | ||
|
|
a6241f31b1 | ||
|
|
9acb43fa6d | ||
|
|
458118d44d | ||
|
|
17c4bbff22 | ||
|
|
50ef3f8522 | ||
|
|
b5654e6a6b | ||
|
|
aa6f495fbe | ||
|
|
9eecf686c5 | ||
|
|
47a983f28a | ||
|
|
477c01454f | ||
|
|
4b61d914f1 | ||
|
|
0c395c7799 | ||
|
|
7eccb460db | ||
|
|
fef1c1e816 | ||
|
|
c4ddbc7c87 | ||
|
|
b9633d42b4 | ||
|
|
98f1ff044f | ||
|
|
e7c3086ed3 | ||
|
|
4c2196918e | ||
|
|
dfec6e2301 | ||
|
|
3c0d8e8275 | ||
|
|
3171d7fd53 | ||
|
|
8c1c23cb0a | ||
|
|
c00a50c8e9 | ||
|
|
9cfcb9eda1 | ||
|
|
a0b7ecd3d1 | ||
|
|
6207a0fa9c | ||
|
|
bc1f07b587 | ||
|
|
b11e82495a | ||
|
|
3f331b632b | ||
|
|
10439e2650 | ||
|
|
f34f98b653 | ||
|
|
4f8fd33ba8 | ||
|
|
50cd98ab88 | ||
|
|
0b8033ccf3 | ||
|
|
947318a06f | ||
|
|
3655d799e3 | ||
|
|
0fc7a11e42 | ||
|
|
af8b8f7e35 | ||
|
|
6db39ae8a5 | ||
|
|
e6aca17c49 | ||
|
|
3e40f4947e | ||
|
|
60418bbde3 | ||
|
|
2fcd065a0d | ||
|
|
8e2b437a8b | ||
|
|
4940eacbf7 | ||
|
|
2eb8699d50 | ||
|
|
12d68f85e1 | ||
|
|
0e36c790ac | ||
|
|
ae7dd83321 | ||
|
|
924a172085 | ||
|
|
52d68e44c9 | ||
|
|
29728ab40f | ||
|
|
5accdba480 | ||
|
|
9a5a2207ad | ||
|
|
4c1f2a17d9 | ||
|
|
561ef8dad2 | ||
|
|
738c9260b1 | ||
|
|
6435c3ecac | ||
|
|
5b37c4faec | ||
|
|
e9f2c8444e | ||
|
|
3ed07d01b9 | ||
|
|
6232632ef8 | ||
|
|
d48bd086df | ||
|
|
1d6cc8fc42 | ||
|
|
bdd3171405 | ||
|
|
6ed5196d7d | ||
|
|
d191a46873 | ||
|
|
f4daf3d7bf | ||
|
|
536bd08692 | ||
|
|
6ded62c828 | ||
|
|
79d1b7b1e1 | ||
|
|
052aed6276 | ||
|
|
8a44936bb0 | ||
|
|
3373070e7f | ||
|
|
ce8ab39164 | ||
|
|
a70653025c | ||
|
|
2c866e388c | ||
|
|
b0d545a4e4 | ||
|
|
31e3fe4a98 | ||
|
|
dd26efb159 | ||
|
|
069ec3aa00 | ||
|
|
d31a60e26f | ||
|
|
d0c8cd6815 | ||
|
|
98db544155 | ||
|
|
f743a9db84 | ||
|
|
9be3c0f789 | ||
|
|
0c44452fef | ||
|
|
cba53708ec | ||
|
|
932380b9e0 | ||
|
|
6baa3e1f56 | ||
|
|
1c643e68f0 | ||
|
|
1046ee088f | ||
|
|
85a3f20cef | ||
|
|
561c090437 | ||
|
|
8e948a84fa | ||
|
|
ba98ee427f | ||
|
|
f78d8f1157 | ||
|
|
d18d952e56 | ||
|
|
a09ca04b62 | ||
|
|
d12c1d0e49 | ||
|
|
066a92efda | ||
|
|
9b7612b045 | ||
|
|
8f9c072c89 | ||
|
|
7ac1051573 | ||
|
|
c9d15dc78b | ||
|
|
87148f819f | ||
|
|
4a53dd56d4 | ||
|
|
d4946d1ec3 | ||
|
|
26b3b9744f | ||
|
|
434b2147c7 | ||
|
|
15959fbf11 | ||
|
|
1e776bc78a | ||
|
|
6647b73cc8 | ||
|
|
256ce3b0ba | ||
|
|
2f37110eca | ||
|
|
68c23b7878 | ||
|
|
50d526442a | ||
|
|
802c6f397e | ||
|
|
8ace8e3323 | ||
|
|
732cd2c94f | ||
|
|
f1b2110aa0 | ||
|
|
f3cfd3735f | ||
|
|
1fd7554dee | ||
|
|
d3c6da23e0 | ||
|
|
d175cf9b7d | ||
|
|
403bf1aad2 | ||
|
|
7b4f8073f0 | ||
|
|
c3ccfc3a2f | ||
|
|
950858350d | ||
|
|
9208a03ec6 | ||
|
|
099978400a | ||
|
|
777ccc075e | ||
|
|
f771851eb2 | ||
|
|
8275fd92d2 | ||
|
|
698165682e | ||
|
|
025a2e986c | ||
|
|
de3bde6688 | ||
|
|
eef80dd156 | ||
|
|
1dd962a92e | ||
|
|
e5079417fd | ||
|
|
a184b53cec | ||
|
|
65c9e92668 | ||
|
|
58ac605fea | ||
|
|
ec50779b72 | ||
|
|
34880c294b | ||
|
|
ded092cb70 | ||
|
|
a0d098f171 | ||
|
|
18fcb81cff | ||
|
|
ecdb5848eb | ||
|
|
5c7903af7d | ||
|
|
e731a74298 | ||
|
|
fa97643b69 | ||
|
|
5573dccf96 | ||
|
|
43e51855df | ||
|
|
bcf09ec04f | ||
|
|
1ab227adc4 | ||
|
|
1d1fd8962d | ||
|
|
1f28622a16 | ||
|
|
4739203b6c | ||
|
|
be4c0e692a | ||
|
|
fce6dbe726 | ||
|
|
10a378637e | ||
|
|
e73349918d | ||
|
|
48b8b9464b | ||
|
|
24cb367d9f | ||
|
|
5cd1a06f1a | ||
|
|
4ab19f8be4 | ||
|
|
e7265c2832 | ||
|
|
8bce4225f6 | ||
|
|
6bd5b48ca7 | ||
|
|
96d0749bfc | ||
|
|
13ecf26ded | ||
|
|
b77effad6c | ||
|
|
df54c56a04 | ||
|
|
76600dc535 | ||
|
|
7f68f1c5f4 | ||
|
|
e1a25da53b | ||
|
|
75f781fa99 | ||
|
|
300590e5ac | ||
|
|
0f21994955 | ||
|
|
84536ec263 | ||
|
|
fd02f209a2 | ||
|
|
149fb4d217 | ||
|
|
01c9167c25 | ||
|
|
d840c67658 | ||
|
|
e615d63fad | ||
|
|
14f4450d25 | ||
|
|
6c31af960e | ||
|
|
248c3bb784 | ||
|
|
14a381f250 | ||
|
|
6fde729219 | ||
|
|
32d59f1ed0 | ||
|
|
9256b1a02a | ||
|
|
3a985f5c15 | ||
|
|
ad7ce8329f | ||
|
|
0b70c2b577 | ||
|
|
ea924f9ff6 | ||
|
|
c37b51609d | ||
|
|
f8077e99a6 | ||
|
|
fa37805dfa | ||
|
|
f114277002 | ||
|
|
b74d5841e6 | ||
|
|
6083cfa267 | ||
|
|
a7730221b6 | ||
|
|
c1581d642a | ||
|
|
d31ff8a886 | ||
|
|
ef0c3851d3 | ||
|
|
4732162a80 | ||
|
|
33dfd5c1e8 | ||
|
|
5e35df892d | ||
|
|
a534ff63b7 | ||
|
|
5eb8f2a9ef | ||
|
|
abc42d9b10 | ||
|
|
5fcdecb5a9 | ||
|
|
68d81ea91b | ||
|
|
52038b7a11 | ||
|
|
e02ca6c7fd | ||
|
|
9a10ca40d7 | ||
|
|
a13fa350f1 | ||
|
|
cb72d9f503 | ||
|
|
0637d18813 | ||
|
|
3be956cf8b | ||
|
|
8bce4a6620 | ||
|
|
272d7eaffc | ||
|
|
9c7b5257f8 | ||
|
|
2ad5e5ace5 | ||
|
|
347b9111fb | ||
|
|
adca27cd2c | ||
|
|
f028816786 | ||
|
|
5dc9441b0a | ||
|
|
3f77a1ee13 | ||
|
|
e9beeba39f | ||
|
|
05b7df20dd | ||
|
|
7264124305 | ||
|
|
00e24ca7ca | ||
|
|
d2aac739a8 | ||
|
|
41aff425b6 | ||
|
|
4edf584b30 | ||
|
|
19889fbd3e | ||
|
|
8c64c68089 | ||
|
|
ba58eb7896 | ||
|
|
07cf679af3 | ||
|
|
4f99e5d754 | ||
|
|
01e63ab0d1 | ||
|
|
d7cd379d57 | ||
|
|
5ef33b6dc2 | ||
|
|
8efa2d97ed | ||
|
|
09eaf981e6 | ||
|
|
a12c5af186 | ||
|
|
4d81cd3608 | ||
|
|
fd621457ce | ||
|
|
d7db7e3515 | ||
|
|
f1c4dc3a28 | ||
|
|
9a6afb10e4 | ||
|
|
8d30a7a642 | ||
|
|
06c1663385 | ||
|
|
f29b91c7b1 | ||
|
|
0dae258b02 | ||
|
|
ede9924b4e | ||
|
|
7d90979693 | ||
|
|
426009abd5 | ||
|
|
6c4c4000d1 | ||
|
|
254ad140f3 | ||
|
|
423f587b01 | ||
|
|
1551fd74e2 | ||
|
|
b40613587d | ||
|
|
05a4d88884 | ||
|
|
e4e1a32fc2 | ||
|
|
a484211e0b | ||
|
|
f063bf980c | ||
|
|
74baa54771 | ||
|
|
0f474d2559 | ||
|
|
b73f903d3d | ||
|
|
09910005ac | ||
|
|
de642a4fd1 | ||
|
|
7db21db8dc | ||
|
|
5f83c52141 | ||
|
|
2c4cd562c9 | ||
|
|
19dd60a8f7 | ||
|
|
be9206bd4b | ||
|
|
c1bf12c7a1 | ||
|
|
1a80af87fe | ||
|
|
a491a76750 | ||
|
|
e66871ae10 | ||
|
|
597a0cd214 | ||
|
|
721a612e66 | ||
|
|
593f3c20f4 | ||
|
|
f8bfe29fae | ||
|
|
1ce36e3055 | ||
|
|
6aa9bf4152 | ||
|
|
53c79c908e | ||
|
|
16604f391f | ||
|
|
ab0fe3d421 | ||
|
|
2464e6b369 | ||
|
|
7558885d92 | ||
|
|
911a265def | ||
|
|
de3e3830d2 | ||
|
|
18619a6ed6 | ||
|
|
efefa14038 | ||
|
|
eae0998268 | ||
|
|
8d210c170e | ||
|
|
07549260db | ||
|
|
bc1df68513 | ||
|
|
5f21cb1b9b | ||
|
|
8867f6b298 | ||
|
|
b6d2068ee2 | ||
|
|
058b35d369 | ||
|
|
677a39996a | ||
|
|
4912ef0e5d | ||
|
|
0b5708a12d | ||
|
|
6931aa0a24 | ||
|
|
259f06de38 | ||
|
|
10467906c4 | ||
|
|
12f8b2493e | ||
|
|
6308eab4d5 | ||
|
|
30e2ffcf77 | ||
|
|
dfecf0dd97 | ||
|
|
6a80d2126c | ||
|
|
d0cebf1350 | ||
|
|
da42f22c48 | ||
|
|
571f84fa86 | ||
|
|
fc42d65040 | ||
|
|
e2ed68fb2f | ||
|
|
43e78a8d44 | ||
|
|
ae65c6240f | ||
|
|
a137c29891 | ||
|
|
fcd8f43ac7 | ||
|
|
ed5bd3c06d | ||
|
|
c8a886ffbe | ||
|
|
b5f40849ac | ||
|
|
6215ab50b3 | ||
|
|
595eda12a4 | ||
|
|
a449cd08d7 | ||
|
|
b2f607fcb6 | ||
|
|
5d2936a29c | ||
|
|
c5d2b222a9 | ||
|
|
b2ef93e7d4 | ||
|
|
c816ca10db | ||
|
|
5bce844ff6 | ||
|
|
afbf71368c | ||
|
|
bbeb1fa936 | ||
|
|
5182f947a2 | ||
|
|
e208093ec8 | ||
|
|
26ddf9c14a | ||
|
|
d921d72f20 | ||
|
|
388f2f8c41 | ||
|
|
71d7768f29 | ||
|
|
38b965363c | ||
|
|
c6f34365c2 | ||
|
|
dd5f96536e | ||
|
|
88990fd1b0 | ||
|
|
d9d089213f | ||
|
|
ab7cdfe74f | ||
|
|
ef05d0b18a | ||
|
|
21c037bb9b | ||
|
|
87a68ef861 | ||
|
|
34c5f24321 | ||
|
|
fb91d40572 | ||
|
|
f8cb8e9795 | ||
|
|
ae4a2cca16 | ||
|
|
022d6b1633 | ||
|
|
f9239f8eac | ||
|
|
528a4138bb | ||
|
|
ec54e400ee | ||
|
|
e611aef563 | ||
|
|
e56a2bc8d2 | ||
|
|
25a7d0c26f | ||
|
|
67712c8370 | ||
|
|
d60b64b17c | ||
|
|
b06db2d390 | ||
|
|
00c8b5c7a0 | ||
|
|
a4142667f3 | ||
|
|
86b6ed4a42 | ||
|
|
b719528ce0 | ||
|
|
8d3bfc152b | ||
|
|
96734e403e | ||
|
|
f2bb972af4 | ||
|
|
0370a1df6b | ||
|
|
8769a48a69 | ||
|
|
4ef8c5c56c | ||
|
|
5119e6d87a | ||
|
|
45f02b1cb5 | ||
|
|
23e2064389 | ||
|
|
4157467833 | ||
|
|
a5689daad8 | ||
|
|
1e123e8a3e | ||
|
|
ed5a7ec3f8 | ||
|
|
089d748192 | ||
|
|
a052a1515e | ||
|
|
f6993442af | ||
|
|
25eeccff38 | ||
|
|
154dedcd10 | ||
|
|
5547d6966c | ||
|
|
af98cf033c | ||
|
|
4010e0a7cb | ||
|
|
84d77dda82 | ||
|
|
ce11ee82ba | ||
|
|
9f0db4a0a4 | ||
|
|
16faa79cf4 | ||
|
|
c02539239e | ||
|
|
01d8aee41b | ||
|
|
decbe031fc | ||
|
|
6213f83d4a | ||
|
|
2ee20ffcdb | ||
|
|
e3c8b1e079 | ||
|
|
7e5478ceab | ||
|
|
97663382e1 | ||
|
|
c84359f622 | ||
|
|
5936104d93 | ||
|
|
a09b75abd0 | ||
|
|
6d0bcba475 | ||
|
|
b1df6e0d01 | ||
|
|
6e7cb44eea | ||
|
|
66b5a3c0ed | ||
|
|
5032fcd7b5 | ||
|
|
cf7aa136ac | ||
|
|
33b174749a | ||
|
|
dbef654a2c | ||
|
|
62f4413b7b | ||
|
|
c1d0a22eac | ||
|
|
8f82f506b8 | ||
|
|
fdbca6b5f6 | ||
|
|
03dc40d756 | ||
|
|
08bce30ea2 | ||
|
|
92a7b61171 | ||
|
|
254e7faf34 | ||
|
|
64cb5ac047 | ||
|
|
15c1c32516 | ||
|
|
f5e1bc5ca8 | ||
|
|
facb1c1b6d | ||
|
|
7baef5d619 | ||
|
|
f58190736e | ||
|
|
cfe2f7eb5d | ||
|
|
80cb99bacb | ||
|
|
e7d9fa1a92 | ||
|
|
3f8b4d6b64 | ||
|
|
1a68506b19 | ||
|
|
0e6307f4b7 | ||
|
|
aeae2e4203 | ||
|
|
f43486fa42 | ||
|
|
bb1d39eef8 | ||
|
|
5d95cda553 | ||
|
|
612faf72b7 | ||
|
|
bb7771888b | ||
|
|
ad51e6bdec |
@@ -2,3 +2,4 @@
|
|||||||
^dist/
|
^dist/
|
||||||
/nbproject/private/
|
/nbproject/private/
|
||||||
^webrev
|
^webrev
|
||||||
|
^.hgtip
|
||||||
|
|||||||
32
.hgtags
32
.hgtags
@@ -99,3 +99,35 @@ a4e6aa1f45ad23a6f083ed98d970b5006ea4d292 jdk7-b116
|
|||||||
6f09ea1c034f087916d2a8cf0d22be768400118f jdk7-b122
|
6f09ea1c034f087916d2a8cf0d22be768400118f jdk7-b122
|
||||||
142129d8599d1f56b29387e7f9a5fad53b6d61df jdk7-b123
|
142129d8599d1f56b29387e7f9a5fad53b6d61df jdk7-b123
|
||||||
aa894c225b1a517b665ac2a58295217ea2245134 jdk7-b124
|
aa894c225b1a517b665ac2a58295217ea2245134 jdk7-b124
|
||||||
|
f658ec2730fa29323c36d23c27e54c7219ef5e16 jdk7-b125
|
||||||
|
f1df068076986679ea1105532a65529d63a89060 jdk7-b126
|
||||||
|
f83cd8bd35c678f94e526990e03dc838d0ec2717 jdk7-b127
|
||||||
|
7da3f5f30855dec6bf3a86529e87dee883b90c72 jdk7-b128
|
||||||
|
6823ea7eb8eb6fab405d7edb7a5c2f690887a2fa jdk7-b129
|
||||||
|
a36beda9b9de91231d92a2c529f21cc218fcf8d5 jdk7-b130
|
||||||
|
d8af56da89bc0fc02a6b6ad78f51157a46d665ab jdk7-b131
|
||||||
|
d61280d36755d1941fb487f554e8b7a6d0bca6a1 jdk7-b132
|
||||||
|
fd444c61e7ed3d92b2a730da7c737b02191b682f jdk7-b133
|
||||||
|
def8e16dd237a47fc067d66d4c616d7baaec6001 jdk7-b134
|
||||||
|
f75a1efb141210901aabe00a834e0fc32bb8b337 jdk7-b135
|
||||||
|
46acf76a533954cfd594bb88fdea79938abfbe20 jdk7-b136
|
||||||
|
d1cf7d4ee16c341f5b8c7e7f1d68a8c412b6c693 jdk7-b137
|
||||||
|
62b8e328f8c8c66c14b0713222116f2add473f3f jdk7-b138
|
||||||
|
955488f34ca418f6cdab843d61c20d2c615637d9 jdk7-b139
|
||||||
|
f4298bc3f4b6baa315643be06966f09684290068 jdk7-b140
|
||||||
|
5d86d0c7692e8f4a58d430d68c03594e2d3403b3 jdk7-b141
|
||||||
|
92bf0655022d4187e9b49c1400f98fb3392a4630 jdk7-b142
|
||||||
|
4a05062d8c4dfa3edec3faf1052af28baba5adff jdk7-b143
|
||||||
|
07a8728ad49ef6dfa469c3a8bf5ab1e9c80bed5c jdk7-b144
|
||||||
|
8294c99e685a1f6d1d37c45cd97854cf74be771e jdk7-b145
|
||||||
|
dca1e8a87e8f756f95b99bac8fe795750d42e1b0 jdk7-b146
|
||||||
|
a2a589fc29543ed32919c78a1810ad93a6fcf5bc jdk7-b147
|
||||||
|
de9223c94f9c710b3eebb599cd3586f36c8b94a9 jdk8-b01
|
||||||
|
1b9d19620eb4606a25b1e28f86d66c8bfa867e06 jdk8-b02
|
||||||
|
6815e85bf96d6d3875954f9777660372cd70d065 jdk8-b03
|
||||||
|
31f5c34d78081572ad9a2401c0bb0c6b9711dd65 jdk8-b04
|
||||||
|
c4f9ea1ecb55ff44e0dd21d2888ead308c86a3aa jdk8-b05
|
||||||
|
429da7734bf491bccde2a752fae97e9f225896dc jdk8-b06
|
||||||
|
bc5710332b294676661103bb20d47d2ea3ba8def jdk8-b07
|
||||||
|
24ee504f80412770c6874836cd9e55b536427b1d jdk8-b08
|
||||||
|
fbf3cabc9e3bb1fcf710941d777cb0400505fbe6 jdk8-b09
|
||||||
|
|||||||
@@ -99,3 +99,35 @@ a12a9e78df8a9d534da0b4a244ed68f0de0bd58e jdk7-b118
|
|||||||
f1591eed71f64f6eba79fb7426f5616cc4dfea73 jdk7-b122
|
f1591eed71f64f6eba79fb7426f5616cc4dfea73 jdk7-b122
|
||||||
ed6950da30cf1e8904b4bdb034d471647942271f jdk7-b123
|
ed6950da30cf1e8904b4bdb034d471647942271f jdk7-b123
|
||||||
024a6755895bf91b5a3c98984c89ee018efbf538 jdk7-b124
|
024a6755895bf91b5a3c98984c89ee018efbf538 jdk7-b124
|
||||||
|
5c4df7e992775c102f08e9f1c0a124b324641b70 jdk7-b125
|
||||||
|
b566d490905691787f8931f69947a92c67c6d5e4 jdk7-b126
|
||||||
|
bd70f76b0309068f157ae759c36eac8f2c6d098e jdk7-b127
|
||||||
|
57d702105b23fb90e40beaf00f8f8aeae5e249e7 jdk7-b128
|
||||||
|
a6b015b59fbc2518762c17ccc35702f03ef7713a jdk7-b129
|
||||||
|
cc58c11af15411042719e9c82707fdbef60a9e0f jdk7-b130
|
||||||
|
5d86d951426aaf340b1ba84ae2d5ab5da65a71e2 jdk7-b131
|
||||||
|
0f62a65fb666b337caa585015ab6ea2e60e709ca jdk7-b132
|
||||||
|
c6f380693342feadccc5fe2c5adf500e861361aa jdk7-b133
|
||||||
|
ddc2fcb3682ffd27f44354db666128827be7e3c3 jdk7-b134
|
||||||
|
783bd02b4ab4596059c74b10a1793d7bd2f1c157 jdk7-b135
|
||||||
|
2fe76e73adaa5133ac559f0b3c2c0707eca04580 jdk7-b136
|
||||||
|
7654afc6a29e43cb0a1343ce7f1287bf690d5e5f jdk7-b137
|
||||||
|
fc47c97bbbd91b1f774d855c48a7e285eb1a351a jdk7-b138
|
||||||
|
7ed6d0b9aaa12320832a7ddadb88d6d8d0dda4c1 jdk7-b139
|
||||||
|
dcfe74f1c6553c556e7d361c30b0b614eb5e40f6 jdk7-b140
|
||||||
|
c6569c5585851dfd39b8de8e021c3c312f51af12 jdk7-b141
|
||||||
|
cfbbdb77eac0397b03eb99ee2e07ea00e0a7b81e jdk7-b142
|
||||||
|
14b8e7eee1058fd4ed5a2700a2ce14b3616278f1 jdk7-b143
|
||||||
|
7203965666a4fe63bf82f5e4204f41ce6285e716 jdk7-b144
|
||||||
|
55e9ebf032186c333e5964ed044419830ac02693 jdk7-b145
|
||||||
|
2d38c2a79c144c30cd04d143d83ee7ec6af40771 jdk7-b146
|
||||||
|
d91364304d7c4ecd34caffdba2b840aeb0d10b51 jdk7-b147
|
||||||
|
f42e3d9394b40a423d345b8da22687b5462e5f25 jdk8-b01
|
||||||
|
69f592185747226a9c765a9fe139c1d34d616f9c jdk8-b02
|
||||||
|
587bb549dff83131b65f40aa51864f69562f34a7 jdk8-b03
|
||||||
|
0b66a233bfb9ba2ebda1e5cdfdb0373d6c1e3c69 jdk8-b04
|
||||||
|
b910aac18c772b823b1f7da03e2c6528725cc6de jdk8-b05
|
||||||
|
28cf2aec4dd7c3c75efc1c15078522467c781a6d jdk8-b06
|
||||||
|
0db7ae9f2b1017124c779bccd016c976928859a0 jdk8-b07
|
||||||
|
fb1bc13260d76447e269e843859eb593fe2a8ab2 jdk8-b08
|
||||||
|
8adb70647b5af5273dfe6a540f07be667cd50216 jdk8-b09
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
project=jdk7
|
project=jdk8
|
||||||
|
|||||||
10
LICENSE
10
LICENSE
@@ -325,11 +325,11 @@ License instead of this License.
|
|||||||
|
|
||||||
"CLASSPATH" EXCEPTION TO THE GPL
|
"CLASSPATH" EXCEPTION TO THE GPL
|
||||||
|
|
||||||
Certain source files distributed by Sun Microsystems, Inc. are subject to
|
Certain source files distributed by Oracle America and/or its affiliates are
|
||||||
the following clarification and special exception to the GPL, but only where
|
subject to the following clarification and special exception to the GPL, but
|
||||||
Sun has expressly included in the particular source file's header the words
|
only where Oracle has expressly included in the particular source file's header
|
||||||
"Sun designates this particular file as subject to the "Classpath" exception
|
the words "Oracle designates this particular file as subject to the "Classpath"
|
||||||
as provided by Sun in the LICENSE file that accompanied this code."
|
exception as provided by Oracle in the LICENSE file that accompanied this code."
|
||||||
|
|
||||||
Linking this library statically or dynamically with other modules is making
|
Linking this library statically or dynamically with other modules is making
|
||||||
a combined work based on this library. Thus, the terms and conditions of
|
a combined work based on this library. Thus, the terms and conditions of
|
||||||
|
|||||||
198
Makefile
198
Makefile
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -25,19 +25,38 @@
|
|||||||
|
|
||||||
BUILD_PARENT_DIRECTORY=.
|
BUILD_PARENT_DIRECTORY=.
|
||||||
|
|
||||||
|
# Basename of any originally supplied ALT_OUTPUTDIR directory
|
||||||
|
ifndef ORIG_OUTPUTDIR_BASENAME
|
||||||
|
ifdef ALT_OUTPUTDIR
|
||||||
|
ORIG_OUTPUTDIR_BASENAME := $(shell basename $(ALT_OUTPUTDIR))
|
||||||
|
else
|
||||||
|
ORIG_OUTPUTDIR_BASENAME = $(PLATFORM)-$(ARCH)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
export ORIG_OUTPUTDIR_BASENAME
|
||||||
|
|
||||||
|
# The three possible directories created for output (3 build flavors)
|
||||||
|
OUTPUTDIR_BASENAME- = $(ORIG_OUTPUTDIR_BASENAME)
|
||||||
|
OUTPUTDIR_BASENAME-debug = $(ORIG_OUTPUTDIR_BASENAME)-debug
|
||||||
|
OUTPUTDIR_BASENAME-fastdebug = $(ORIG_OUTPUTDIR_BASENAME)-fastdebug
|
||||||
|
|
||||||
|
# Relative path to a debug output area
|
||||||
|
REL_JDK_OUTPUTDIR = ../$(OUTPUTDIR_BASENAME-$(DEBUG_NAME))
|
||||||
|
|
||||||
|
# The created jdk image directory
|
||||||
|
JDK_IMAGE_DIRNAME = j2sdk-image
|
||||||
|
JDK_IMAGE_DIR = $(OUTPUTDIR)/$(JDK_IMAGE_DIRNAME)
|
||||||
|
ABS_JDK_IMAGE_DIR = $(ABS_OUTPUTDIR)/$(JDK_IMAGE_DIRNAME)
|
||||||
|
|
||||||
|
# Relative path from an output directory to the image directory
|
||||||
|
REL_JDK_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-$(DEBUG_NAME))/$(JDK_IMAGE_DIRNAME)
|
||||||
|
REL_JDK_DEBUG_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-debug)/$(JDK_IMAGE_DIRNAME)
|
||||||
|
REL_JDK_FASTDEBUG_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-fastdebug)/$(JDK_IMAGE_DIRNAME)
|
||||||
|
|
||||||
ifndef TOPDIR
|
ifndef TOPDIR
|
||||||
TOPDIR:=.
|
TOPDIR:=.
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Openjdk sources (only used if SKIP_OPENJDK_BUILD!=true)
|
|
||||||
OPENJDK_SOURCETREE=$(TOPDIR)/openjdk
|
|
||||||
OPENJDK_BUILDDIR:=$(shell \
|
|
||||||
if [ -r $(OPENJDK_SOURCETREE)/Makefile ]; then \
|
|
||||||
echo "$(OPENJDK_SOURCETREE)"; \
|
|
||||||
else \
|
|
||||||
echo "."; \
|
|
||||||
fi)
|
|
||||||
|
|
||||||
ifndef JDK_TOPDIR
|
ifndef JDK_TOPDIR
|
||||||
JDK_TOPDIR=$(TOPDIR)/jdk
|
JDK_TOPDIR=$(TOPDIR)/jdk
|
||||||
endif
|
endif
|
||||||
@@ -45,12 +64,6 @@ ifndef JDK_MAKE_SHARED_DIR
|
|||||||
JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared
|
JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# For start and finish echo lines
|
|
||||||
TITLE_TEXT = Control $(PLATFORM) $(ARCH) $(RELEASE)
|
|
||||||
DATE_STAMP = `$(DATE) '+%y-%m-%d %H:%M'`
|
|
||||||
START_ECHO = echo "$(TITLE_TEXT) $@ build started: $(DATE_STAMP)"
|
|
||||||
FINISH_ECHO = echo "$(TITLE_TEXT) $@ build finished: $(DATE_STAMP)"
|
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
include $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk
|
include $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk
|
||||||
@@ -66,11 +79,7 @@ include ./make/install-rules.gmk
|
|||||||
include ./make/sponsors-rules.gmk
|
include ./make/sponsors-rules.gmk
|
||||||
include ./make/deploy-rules.gmk
|
include ./make/deploy-rules.gmk
|
||||||
|
|
||||||
# What "all" means
|
all:: sanity
|
||||||
all::
|
|
||||||
@$(START_ECHO)
|
|
||||||
|
|
||||||
all:: openjdk_check sanity
|
|
||||||
|
|
||||||
ifeq ($(SKIP_FASTDEBUG_BUILD), false)
|
ifeq ($(SKIP_FASTDEBUG_BUILD), false)
|
||||||
all:: fastdebug_build
|
all:: fastdebug_build
|
||||||
@@ -80,19 +89,11 @@ ifeq ($(SKIP_DEBUG_BUILD), false)
|
|||||||
all:: debug_build
|
all:: debug_build
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(SKIP_OPENJDK_BUILD), true)
|
|
||||||
all:: openjdk_build
|
|
||||||
endif
|
|
||||||
|
|
||||||
all:: all_product_build
|
all:: all_product_build
|
||||||
|
|
||||||
all::
|
all_product_build::
|
||||||
@$(FINISH_ECHO)
|
|
||||||
|
|
||||||
# Everything for a full product build
|
# Everything for a full product build
|
||||||
all_product_build::
|
|
||||||
@$(START_ECHO)
|
|
||||||
|
|
||||||
ifeq ($(SKIP_PRODUCT_BUILD), false)
|
ifeq ($(SKIP_PRODUCT_BUILD), false)
|
||||||
|
|
||||||
all_product_build:: product_build
|
all_product_build:: product_build
|
||||||
@@ -113,13 +114,20 @@ ifeq ($(SKIP_PRODUCT_BUILD), false)
|
|||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all_product_build::
|
define StartTimer
|
||||||
@$(FINISH_ECHO)
|
$(MKDIR) -p $(BUILDTIMESDIR)
|
||||||
|
$(RM) $(BUILDTIMESDIR)/build_time_*
|
||||||
|
$(call RecordStartTime,TOTAL)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define StopTimer
|
||||||
|
$(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),)
|
||||||
|
endef
|
||||||
|
|
||||||
# Generic build of basic repo series
|
# Generic build of basic repo series
|
||||||
generic_build_repo_series::
|
generic_build_repo_series:: $(SOURCE_TIPS)
|
||||||
$(MKDIR) -p $(OUTPUTDIR)
|
$(MKDIR) -p $(JDK_IMAGE_DIR)
|
||||||
$(MKDIR) -p $(OUTPUTDIR)/j2sdk-image
|
@$(call StartTimer)
|
||||||
|
|
||||||
ifeq ($(BUILD_LANGTOOLS), true)
|
ifeq ($(BUILD_LANGTOOLS), true)
|
||||||
generic_build_repo_series:: langtools
|
generic_build_repo_series:: langtools
|
||||||
@@ -156,14 +164,17 @@ ifeq ($(BUILD_DEPLOY), true)
|
|||||||
clobber:: deploy-clobber
|
clobber:: deploy-clobber
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
generic_build_repo_series::
|
||||||
|
@$(call StopTimer,$(if $(DEBUG_NAME),$(DEBUG_NAME)_build,all_product_build))
|
||||||
|
|
||||||
# The debug build, fastdebug or debug. Needs special handling.
|
# The debug build, fastdebug or debug. Needs special handling.
|
||||||
# Note that debug builds do NOT do INSTALL steps, but must be done
|
# Note that debug builds do NOT do INSTALL steps, but must be done
|
||||||
# after the product build and before the INSTALL step of the product build.
|
# after the product build and before the INSTALL step of the product build.
|
||||||
#
|
#
|
||||||
# DEBUG_NAME is fastdebug or debug
|
# DEBUG_NAME is fastdebug or debug
|
||||||
# ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix
|
# ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix
|
||||||
# The resulting j2sdk-image is used by the install makefiles to create a
|
# The resulting image directory (j2sdk-image) is used by the install makefiles
|
||||||
# debug install bundle jdk-*-debug-** bundle (tar or zip)
|
# to create a debug install bundle jdk-*-debug-** bundle (tar or zip)
|
||||||
# which will install in the debug or fastdebug subdirectory of the
|
# which will install in the debug or fastdebug subdirectory of the
|
||||||
# normal product install area.
|
# normal product install area.
|
||||||
# The install process needs to know what the DEBUG_NAME is, so
|
# The install process needs to know what the DEBUG_NAME is, so
|
||||||
@@ -176,32 +187,26 @@ endif
|
|||||||
|
|
||||||
# Location of fresh bootdir output
|
# Location of fresh bootdir output
|
||||||
ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk
|
ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk
|
||||||
FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/j2sdk-image
|
FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/$(JDK_IMAGE_DIRNAME)
|
||||||
FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME)/j2sdk-image
|
FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/$(REL_JDK_IMAGE_DIR)
|
||||||
|
|
||||||
create_fresh_product_bootdir: FRC
|
create_fresh_product_bootdir: FRC
|
||||||
@$(START_ECHO)
|
|
||||||
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
||||||
GENERATE_DOCS=false \
|
GENERATE_DOCS=false \
|
||||||
BOOT_CYCLE_SETTINGS= \
|
BOOT_CYCLE_SETTINGS= \
|
||||||
build_product_image
|
build_product_image
|
||||||
@$(FINISH_ECHO)
|
|
||||||
|
|
||||||
create_fresh_debug_bootdir: FRC
|
create_fresh_debug_bootdir: FRC
|
||||||
@$(START_ECHO)
|
|
||||||
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
||||||
GENERATE_DOCS=false \
|
GENERATE_DOCS=false \
|
||||||
BOOT_CYCLE_DEBUG_SETTINGS= \
|
BOOT_CYCLE_DEBUG_SETTINGS= \
|
||||||
build_debug_image
|
build_debug_image
|
||||||
@$(FINISH_ECHO)
|
|
||||||
|
|
||||||
create_fresh_fastdebug_bootdir: FRC
|
create_fresh_fastdebug_bootdir: FRC
|
||||||
@$(START_ECHO)
|
|
||||||
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
||||||
GENERATE_DOCS=false \
|
GENERATE_DOCS=false \
|
||||||
BOOT_CYCLE_DEBUG_SETTINGS= \
|
BOOT_CYCLE_DEBUG_SETTINGS= \
|
||||||
build_fastdebug_image
|
build_fastdebug_image
|
||||||
@$(FINISH_ECHO)
|
|
||||||
|
|
||||||
# Create boot image?
|
# Create boot image?
|
||||||
ifeq ($(SKIP_BOOT_CYCLE),false)
|
ifeq ($(SKIP_BOOT_CYCLE),false)
|
||||||
@@ -210,6 +215,8 @@ ifeq ($(SKIP_BOOT_CYCLE),false)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(DO_BOOT_CYCLE),true)
|
ifeq ($(DO_BOOT_CYCLE),true)
|
||||||
|
|
||||||
# Create the bootdir to use in the build
|
# Create the bootdir to use in the build
|
||||||
@@ -234,27 +241,23 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
build_product_image:
|
build_product_image:
|
||||||
@$(START_ECHO)
|
|
||||||
$(MAKE) \
|
$(MAKE) \
|
||||||
SKIP_FASTDEBUG_BUILD=true \
|
SKIP_FASTDEBUG_BUILD=true \
|
||||||
SKIP_DEBUG_BUILD=true \
|
SKIP_DEBUG_BUILD=true \
|
||||||
$(BOOT_CYCLE_SETTINGS) \
|
$(BOOT_CYCLE_SETTINGS) \
|
||||||
generic_build_repo_series
|
generic_build_repo_series
|
||||||
@$(FINISH_ECHO)
|
|
||||||
|
|
||||||
# NOTE: On windows, do not use $(ABS_OUTPUTDIR)-$(DEBUG_NAME).
|
# NOTE: On windows, do not use $(ABS_OUTPUTDIR)-$(DEBUG_NAME).
|
||||||
# Due to the use of short paths in $(ABS_OUTPUTDIR), this may
|
# Due to the use of short paths in $(ABS_OUTPUTDIR), this may
|
||||||
# not be the same location.
|
# not be the same location.
|
||||||
|
|
||||||
generic_debug_build:
|
generic_debug_build:
|
||||||
@$(START_ECHO)
|
|
||||||
$(MAKE) \
|
$(MAKE) \
|
||||||
ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME) \
|
ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)/$(REL_JDK_OUTPUTDIR) \
|
||||||
DEBUG_NAME=$(DEBUG_NAME) \
|
DEBUG_NAME=$(DEBUG_NAME) \
|
||||||
GENERATE_DOCS=false \
|
GENERATE_DOCS=false \
|
||||||
$(BOOT_CYCLE_DEBUG_SETTINGS) \
|
$(BOOT_CYCLE_DEBUG_SETTINGS) \
|
||||||
generic_build_repo_series
|
generic_build_repo_series
|
||||||
@$(FINISH_ECHO)
|
|
||||||
|
|
||||||
build_debug_image:
|
build_debug_image:
|
||||||
$(MAKE) DEBUG_NAME=debug generic_debug_build
|
$(MAKE) DEBUG_NAME=debug generic_debug_build
|
||||||
@@ -267,85 +270,17 @@ product_build:: build_product_image
|
|||||||
debug_build:: build_debug_image
|
debug_build:: build_debug_image
|
||||||
fastdebug_build:: build_fastdebug_image
|
fastdebug_build:: build_fastdebug_image
|
||||||
|
|
||||||
# Check on whether we really can build the openjdk, need source etc.
|
# The source tips are stored with the relative path to the repo.
|
||||||
openjdk_check: FRC
|
# This file will be used when constructing the jdk image.
|
||||||
ifneq ($(SKIP_OPENJDK_BUILD), true)
|
source_tips: $(SOURCE_TIPS)
|
||||||
@$(ECHO) " "
|
$(CAT) $<
|
||||||
@$(ECHO) "================================================="
|
$(SOURCE_TIPS): FRC
|
||||||
@if [ ! -r $(OPENJDK_BUILDDIR)/Makefile ] ; then \
|
@$(prep-target)
|
||||||
$(ECHO) "ERROR: No openjdk source tree available at: $(OPENJDK_BUILDDIR)"; \
|
@$(call GetSourceTips)
|
||||||
exit 1; \
|
|
||||||
else \
|
|
||||||
$(ECHO) "OpenJDK will be built after JDK is built"; \
|
|
||||||
$(ECHO) " OPENJDK_BUILDDIR=$(OPENJDK_BUILDDIR)"; \
|
|
||||||
fi
|
|
||||||
@$(ECHO) "================================================="
|
|
||||||
@$(ECHO) " "
|
|
||||||
endif
|
|
||||||
|
|
||||||
# If we have bundle rules, we have a chance here to do a complete cycle
|
|
||||||
# build, of production and open build.
|
|
||||||
# FIXUP: We should create the openjdk source bundle and build that?
|
|
||||||
# But how do we reliable create or get at a formal openjdk source tree?
|
|
||||||
# The one we have needs to be trimmed of built bits and closed dirs.
|
|
||||||
# The repositories might not be available.
|
|
||||||
# The openjdk source bundle is probably not available.
|
|
||||||
|
|
||||||
ifneq ($(SKIP_OPENJDK_BUILD), true)
|
|
||||||
ifeq ($(BUILD_JDK), true)
|
|
||||||
ifeq ($(BUNDLE_RULES_AVAILABLE), true)
|
|
||||||
|
|
||||||
OPENJDK_OUTPUTDIR=$(ABS_OUTPUTDIR)/open-output
|
|
||||||
OPENJDK_BUILD_NAME \
|
|
||||||
= openjdk-$(JDK_MINOR_VERSION)-$(BUILD_NUMBER)-$(PLATFORM)-$(ARCH)-$(BUNDLE_DATE)
|
|
||||||
OPENJDK_BUILD_BINARY_ZIP=$(ABS_BIN_BUNDLEDIR)/$(OPENJDK_BUILD_NAME).zip
|
|
||||||
BUILT_IMAGE=$(ABS_OUTPUTDIR)/j2sdk-image
|
|
||||||
ifeq ($(PLATFORM)$(ARCH_DATA_MODEL),solaris64)
|
|
||||||
OPENJDK_BOOTDIR=$(BOOTDIR)
|
|
||||||
OPENJDK_IMPORTJDK=$(JDK_IMPORT_PATH)
|
|
||||||
else
|
|
||||||
OPENJDK_BOOTDIR=$(BUILT_IMAGE)
|
|
||||||
OPENJDK_IMPORTJDK=$(BUILT_IMAGE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
openjdk_build:
|
|
||||||
@$(START_ECHO)
|
|
||||||
@$(ECHO) " "
|
|
||||||
@$(ECHO) "================================================="
|
|
||||||
@$(ECHO) "Starting openjdk build"
|
|
||||||
@$(ECHO) " Using: ALT_JDK_DEVTOOLS_DIR=$(JDK_DEVTOOLS_DIR)"
|
|
||||||
@$(ECHO) "================================================="
|
|
||||||
@$(ECHO) " "
|
|
||||||
$(RM) -r $(OPENJDK_OUTPUTDIR)
|
|
||||||
$(MKDIR) -p $(OPENJDK_OUTPUTDIR)
|
|
||||||
($(CD) $(OPENJDK_BUILDDIR) && $(MAKE) \
|
|
||||||
OPENJDK=true \
|
|
||||||
GENERATE_DOCS=false \
|
|
||||||
ALT_JDK_DEVTOOLS_DIR=$(JDK_DEVTOOLS_DIR) \
|
|
||||||
ALT_OUTPUTDIR=$(OPENJDK_OUTPUTDIR) \
|
|
||||||
ALT_BOOTDIR=$(OPENJDK_BOOTDIR) \
|
|
||||||
ALT_JDK_IMPORT_PATH=$(OPENJDK_IMPORTJDK) \
|
|
||||||
product_build )
|
|
||||||
$(RM) $(OPENJDK_BUILD_BINARY_ZIP)
|
|
||||||
( $(CD) $(OPENJDK_OUTPUTDIR)/j2sdk-image && \
|
|
||||||
$(ZIPEXE) -q -r $(OPENJDK_BUILD_BINARY_ZIP) .)
|
|
||||||
$(RM) -r $(OPENJDK_OUTPUTDIR)
|
|
||||||
@$(ECHO) " "
|
|
||||||
@$(ECHO) "================================================="
|
|
||||||
@$(ECHO) "Finished openjdk build"
|
|
||||||
@$(ECHO) " Binary Bundle: $(OPENJDK_BUILD_BINARY_ZIP)"
|
|
||||||
@$(ECHO) "================================================="
|
|
||||||
@$(ECHO) " "
|
|
||||||
@$(FINISH_ECHO)
|
|
||||||
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
clobber:: REPORT_BUILD_TIMES=
|
||||||
clobber::
|
clobber::
|
||||||
$(RM) -r $(OUTPUTDIR)/*
|
$(RM) -r $(OUTPUTDIR)/*
|
||||||
$(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-debug/*
|
|
||||||
$(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-fastdebug/*
|
|
||||||
-($(RMDIR) -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1; $(TRUE))
|
-($(RMDIR) -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1; $(TRUE))
|
||||||
|
|
||||||
clean: clobber
|
clean: clobber
|
||||||
@@ -448,7 +383,6 @@ CACERTS_FILE.desc = Location of certificates file
|
|||||||
DEVTOOLS_PATH.desc = Directory containing zip and gnumake
|
DEVTOOLS_PATH.desc = Directory containing zip and gnumake
|
||||||
CUPS_HEADERS_PATH.desc = Include directory location for CUPS header files
|
CUPS_HEADERS_PATH.desc = Include directory location for CUPS header files
|
||||||
DXSDK_PATH.desc = Root directory of DirectX SDK
|
DXSDK_PATH.desc = Root directory of DirectX SDK
|
||||||
MSVCRT_DLL_PATH.desc = Directory containing mscvrt.dll
|
|
||||||
|
|
||||||
# Make variables to print out (description and value)
|
# Make variables to print out (description and value)
|
||||||
VARIABLE_PRINTVAL_LIST += \
|
VARIABLE_PRINTVAL_LIST += \
|
||||||
@@ -477,12 +411,10 @@ VARIABLE_CHECKFIL_LIST += \
|
|||||||
ifeq ($(PLATFORM), windows)
|
ifeq ($(PLATFORM), windows)
|
||||||
|
|
||||||
VARIABLE_PRINTVAL_LIST += \
|
VARIABLE_PRINTVAL_LIST += \
|
||||||
DXSDK_PATH \
|
DXSDK_PATH
|
||||||
MSVCRT_DLL_PATH
|
|
||||||
|
|
||||||
VARIABLE_CHECKDIR_LIST += \
|
VARIABLE_CHECKDIR_LIST += \
|
||||||
DXSDK_PATH \
|
DXSDK_PATH
|
||||||
MSVCRT_DLL_PATH
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -582,8 +514,8 @@ $(OUTPUTDIR)/test_failures.txt: $(OUTPUTDIR)/test_log.txt
|
|||||||
|
|
||||||
# Get log file of all tests run
|
# Get log file of all tests run
|
||||||
JDK_TO_TEST := $(shell \
|
JDK_TO_TEST := $(shell \
|
||||||
if [ -d "$(ABS_OUTPUTDIR)/j2sdk-image" ] ; then \
|
if [ -d "$(ABS_JDK_IMAGE_DIR)" ] ; then \
|
||||||
$(ECHO) "$(ABS_OUTPUTDIR)/j2sdk-image"; \
|
$(ECHO) "$(ABS_JDK_IMAGE_DIR)"; \
|
||||||
elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then \
|
elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then \
|
||||||
$(ECHO) "$(ABS_OUTPUTDIR)"; \
|
$(ECHO) "$(ABS_OUTPUTDIR)"; \
|
||||||
elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then \
|
elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then \
|
||||||
|
|||||||
24
README
24
README
@@ -9,11 +9,14 @@ README:
|
|||||||
will be needed.
|
will be needed.
|
||||||
|
|
||||||
This one root repository can be obtained with something like:
|
This one root repository can be obtained with something like:
|
||||||
hg clone http://hg.openjdk.java.net/jdk7/jdk7 openjdk7
|
|
||||||
To make sure you have all the nested repositories, you can run:
|
hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk8
|
||||||
cd openjdk7 && sh ./get_source.sh
|
|
||||||
(This is identical to using the Mercurial Forest Extension command
|
To make sure you have all the nested repositories, you can run the
|
||||||
'hg fclone http://hg.openjdk.java.net/jdk7/jdk7 openjdk7').
|
get_source.sh script located in the same respository as this file:
|
||||||
|
|
||||||
|
cd openjdk8 && sh ./get_source.sh
|
||||||
|
|
||||||
People unfamiliar with Mercurial should read the first few chapters of
|
People unfamiliar with Mercurial should read the first few chapters of
|
||||||
the Mercurial book: http://hgbook.red-bean.com/read/
|
the Mercurial book: http://hgbook.red-bean.com/read/
|
||||||
|
|
||||||
@@ -22,20 +25,21 @@ README:
|
|||||||
Simple Build Instructions:
|
Simple Build Instructions:
|
||||||
|
|
||||||
0. Get the necessary system software/packages installed on your system, see
|
0. Get the necessary system software/packages installed on your system, see
|
||||||
http://hg.openjdk.java.net/jdk7/build/raw-file/tip/README-builds.html
|
http://hg.openjdk.java.net/jdk8/build/raw-file/tip/README-builds.html
|
||||||
|
|
||||||
1. If you don't have a jdk6 installed, download and install a JDK 6 from
|
1. If you don't have a jdk6 installed, download and install a JDK 6 from
|
||||||
http://java.sun.com/javase/downloads/index.jsp
|
http://java.sun.com/javase/downloads/index.jsp
|
||||||
Set the environment variable ALT_BOOTDIR to the location of JDK 6.
|
Set the environment variable ALT_BOOTDIR to the location of JDK 6.
|
||||||
|
|
||||||
2. Check the sanity of doing a build with your current system:
|
2. Check the sanity of doing a build with your current system:
|
||||||
gnumake sanity
|
make sanity
|
||||||
See README-builds.html if you run into problems.
|
See README-builds.html if you run into problems.
|
||||||
|
|
||||||
3. Do a complete build of the OpenJDK:
|
3. Do a complete build of the OpenJDK:
|
||||||
gnumake all
|
make all
|
||||||
The resulting JDK image should be found in build/*/j2sdk-image
|
The resulting JDK image should be found in build/*/j2sdk-image
|
||||||
|
|
||||||
where gnumake is GNU make 3.81 or newer, /usr/bin/make on Linux and
|
where make is GNU make 3.81 or newer, /usr/bin/make on Linux usually
|
||||||
/usr/sfw/bin/gmake or /opt/sfw/bin/gmake on Solaris.
|
is 3.81 or newer.
|
||||||
|
|
||||||
|
Complete details are available in README-builds.html.
|
||||||
|
|||||||
@@ -54,7 +54,11 @@
|
|||||||
<li><a href="#opensolaris">OpenSolaris</a></li>
|
<li><a href="#opensolaris">OpenSolaris</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#directories">Source Directory Structure</a> </li>
|
<li><a href="#directories">Source Directory Structure</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#drops">Managing the Source Drops</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
<li><a href="#building">Build Information</a>
|
<li><a href="#building">Build Information</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#gmake">GNU Make (<tt><i>gmake</i></tt>)</a> </li>
|
<li><a href="#gmake">GNU Make (<tt><i>gmake</i></tt>)</a> </li>
|
||||||
@@ -65,7 +69,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="#bootjdk">Bootstrap JDK</a> </li>
|
<li><a href="#bootjdk">Bootstrap JDK</a> </li>
|
||||||
<li><a href="#importjdk">Optional Import JDK</a> </li>
|
<li><a href="#importjdk">Optional Import JDK</a> </li>
|
||||||
<li><a href="#ant">Ant</a> </li>
|
<li><a href="#ant">Ant 1.7.1</a> </li>
|
||||||
<li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
|
<li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
|
||||||
<li><a href="#compilers">Compilers</a>
|
<li><a href="#compilers">Compilers</a>
|
||||||
<ul>
|
<ul>
|
||||||
@@ -114,46 +118,23 @@
|
|||||||
<a href="http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>.
|
<a href="http://mercurial.selenic.com/wiki/Mercurial">Mercurial</a>.
|
||||||
If you are new to Mercurial, please see the
|
If you are new to Mercurial, please see the
|
||||||
<a href="http://mercurial.selenic.com/wiki/BeginnersGuides">Beginner Guides</a>
|
<a href="http://mercurial.selenic.com/wiki/BeginnersGuides">Beginner Guides</a>
|
||||||
or refer to the <a href=""http://hgbook.red-bean.com/">Mercurial Book</a>.
|
or refer to the <a href="http://hgbook.red-bean.com/">Mercurial Book</a>.
|
||||||
The first few chapters of the book provide an excellent overview of
|
The first few chapters of the book provide an excellent overview of
|
||||||
Mercurial, what it is and how it works.
|
Mercurial, what it is and how it works.
|
||||||
<br>
|
<br>
|
||||||
For using Mercurial with the OpenJDK refer to the
|
For using Mercurial with the OpenJDK refer to the
|
||||||
<a href=""http://openjdk.java.net/guide/repositories.html#installConfig">
|
<a href="http://openjdk.java.net/guide/repositories.html#installConfig">
|
||||||
Developer Guide: Installing and Configuring Mercurial</a>
|
Developer Guide: Installing and Configuring Mercurial</a>
|
||||||
section for more information.
|
section for more information.
|
||||||
The Forest Extension is not part of the Mercurial install,
|
|
||||||
and is optional,
|
|
||||||
but can be obtained with the following commands:
|
|
||||||
<blockquote>
|
|
||||||
<tt>
|
|
||||||
hg clone https://bitbucket.org/pmezard/hgforest-crew/overview/ <i>YourHgForest</i>
|
|
||||||
</tt>
|
|
||||||
</blockquote>
|
|
||||||
Once you have the file <tt>forest.py</tt>, you need to add these
|
|
||||||
lines to your <tt>${HOME}/.hgrc</tt> file:
|
|
||||||
<blockquote>
|
|
||||||
<tt>
|
|
||||||
[extensions]
|
|
||||||
<br>forest = <i>YourHgForest</i>/forest.py
|
|
||||||
</tt>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<!-- ------------------------------------------------------ -->
|
<!-- ------------------------------------------------------ -->
|
||||||
<h3><a name="get_source">Getting the Source</a></h3>
|
<h3><a name="get_source">Getting the Source</a></h3>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
To get the entire set of OpenJDK Mercurial repositories
|
To get the entire set of OpenJDK Mercurial repositories
|
||||||
using the Forest Extension:
|
use the script <code>get_source.sh</code> located in the root repository:
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<tt>
|
<tt>
|
||||||
hg fclone http://openjdk.java.net/jdk7/jdk7 <i>YourOpenJDK</i>
|
hg clone http://hg.openjdk.java.net/jdk8/jdk8 <i>YourOpenJDK</i>
|
||||||
</tt>
|
|
||||||
</blockquote>
|
|
||||||
To get the entire set of OpenJDK Mercurial repositories
|
|
||||||
without using the Forest Extension:
|
|
||||||
<blockquote>
|
|
||||||
<tt>
|
|
||||||
hg clone http://openjdk.java.net/jdk7/jdk7 <i>YourOpenJDK</i>
|
|
||||||
<br>cd <i>YourOpenJDK</i>
|
<br>cd <i>YourOpenJDK</i>
|
||||||
<br>sh ./get_source.sh
|
<br>sh ./get_source.sh
|
||||||
</tt>
|
</tt>
|
||||||
@@ -168,9 +149,6 @@
|
|||||||
<br>sh ./make/scripts/hgforest.sh pull -u
|
<br>sh ./make/scripts/hgforest.sh pull -u
|
||||||
</tt>
|
</tt>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
You may find this script <tt>make/scripts/hgforest.sh</tt> faster
|
|
||||||
than the <tt>hg</tt> forest commands provided by the
|
|
||||||
Forest Extension.
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
@@ -207,66 +185,50 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Linux X86 (32-bit)</td>
|
<td>Linux X86 (32-bit)</td>
|
||||||
<td>Fedora 9</td>
|
<td>Fedora 9</td>
|
||||||
<td>gcc 4 </td>
|
<td>gcc 4.3 </td>
|
||||||
<td>JDK 6u14 FCS </td>
|
<td>JDK 6u18</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Linux X64 (64-bit)</td>
|
<td>Linux X64 (64-bit)</td>
|
||||||
<td>Fedora 9</td>
|
<td>Fedora 9</td>
|
||||||
<td>gcc 4 </td>
|
<td>gcc 4.3 </td>
|
||||||
<td>JDK 6u14 FCS </td>
|
<td>JDK 6u18</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Solaris SPARC (32-bit)</td>
|
<td>Solaris SPARC (32-bit)</td>
|
||||||
<td>Solaris 10u2 + patches
|
<td>Solaris 10 Update 6</td>
|
||||||
<br>
|
|
||||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
|
||||||
SunSolve</a> for patch downloads.
|
|
||||||
</td>
|
|
||||||
<td>Sun Studio 12 Update 1 + patches</td>
|
<td>Sun Studio 12 Update 1 + patches</td>
|
||||||
<td>JDK 6u14 FCS </td>
|
<td>JDK 6u18</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Solaris SPARCV9 (64-bit)</td>
|
<td>Solaris SPARCV9 (64-bit)</td>
|
||||||
<td>Solaris 10u2 + patches
|
<td>Solaris 10 Update 6</td>
|
||||||
<br>
|
|
||||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
|
||||||
SunSolve</a> for patch downloads.
|
|
||||||
</td>
|
|
||||||
<td>Sun Studio 12 Update 1 + patches</td>
|
<td>Sun Studio 12 Update 1 + patches</td>
|
||||||
<td>JDK 6u14 FCS </td>
|
<td>JDK 6u18</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Solaris X86 (32-bit)</td>
|
<td>Solaris X86 (32-bit)</td>
|
||||||
<td>Solaris 10u2 + patches
|
<td>Solaris 10 Update 6</td>
|
||||||
<br>
|
|
||||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
|
||||||
SunSolve</a> for patch downloads.
|
|
||||||
</td>
|
|
||||||
<td>Sun Studio 12 Update 1 + patches</td>
|
<td>Sun Studio 12 Update 1 + patches</td>
|
||||||
<td>JDK 6u14 FCS </td>
|
<td>JDK 6u18</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Solaris X64 (64-bit)</td>
|
<td>Solaris X64 (64-bit)</td>
|
||||||
<td>Solaris 10u2 + patches
|
<td>Solaris 10 Update 6</td>
|
||||||
<br>
|
|
||||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
|
||||||
SunSolve</a> for patch downloads.
|
|
||||||
</td>
|
|
||||||
<td>Sun Studio 12 Update 1 + patches</td>
|
<td>Sun Studio 12 Update 1 + patches</td>
|
||||||
<td>JDK 6u14 FCS </td>
|
<td>JDK 6u18</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Windows X86 (32-bit)</td>
|
<td>Windows X86 (32-bit)</td>
|
||||||
<td>Windows XP</td>
|
<td>Windows XP</td>
|
||||||
<td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
|
<td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
|
||||||
<td>JDK 6u14 FCS </td>
|
<td>JDK 6u18</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Windows X64 (64-bit)</td>
|
<td>Windows X64 (64-bit)</td>
|
||||||
<td>Windows Server 2003 - Enterprise x64 Edition</td>
|
<td>Windows Server 2003 - Enterprise x64 Edition</td>
|
||||||
<td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
|
<td>Microsoft Visual Studio C++ 2010 Professional Edition</td>
|
||||||
<td>JDK 6u14 FCS </td>
|
<td>JDK 6u18</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -300,7 +262,7 @@
|
|||||||
way to do it is to execute the following commands as user
|
way to do it is to execute the following commands as user
|
||||||
<tt>root</tt>:
|
<tt>root</tt>:
|
||||||
<p/>
|
<p/>
|
||||||
<code>yum-builddep java-openjdk</code>
|
<code>yum-builddep java-1.6.0-openjdk</code>
|
||||||
<p/>
|
<p/>
|
||||||
<code>yum install gcc gcc-c++</code>
|
<code>yum install gcc gcc-c++</code>
|
||||||
<p/>
|
<p/>
|
||||||
@@ -345,10 +307,10 @@
|
|||||||
</blockquote>
|
</blockquote>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<!-- ------------------------------------------------------ -->
|
<!-- ------------------------------------------------------ -->
|
||||||
<h3><a name="centos">CentOS 5.2</a></h3>
|
<h3><a name="centos">CentOS 5.5</a></h3>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
After installing
|
After installing
|
||||||
<a href="http://www.centos.org/">CentOS 5.2</a>
|
<a href="http://www.centos.org/">CentOS 5.5</a>
|
||||||
you need to make sure you have
|
you need to make sure you have
|
||||||
the following Development bundles installed:
|
the following Development bundles installed:
|
||||||
<blockquote>
|
<blockquote>
|
||||||
@@ -356,7 +318,7 @@
|
|||||||
<li>Development Libraries</li>
|
<li>Development Libraries</li>
|
||||||
<li>Development Tools</li>
|
<li>Development Tools</li>
|
||||||
<li>Java Development</li>
|
<li>Java Development</li>
|
||||||
<li>X Software Development</li>
|
<li>X Software Development (Including XFree86-devel)</li>
|
||||||
</ul>
|
</ul>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>
|
<p>
|
||||||
@@ -552,15 +514,105 @@
|
|||||||
building the OpenJDK runtime libraries and misc files.
|
building the OpenJDK runtime libraries and misc files.
|
||||||
The top level <tt>Makefile</tt>
|
The top level <tt>Makefile</tt>
|
||||||
is used to build the entire OpenJDK.
|
is used to build the entire OpenJDK.
|
||||||
|
|
||||||
|
<h3><a name="drops">Managing the Source Drops</a></h3>
|
||||||
|
<blockquote>
|
||||||
|
<p>
|
||||||
|
The repositories <tt>jaxp</tt> and <tt>jaxws</tt> actually
|
||||||
|
do not contain the sources for JAXP or JAX-WS.
|
||||||
|
These products have their own open source procedures at their
|
||||||
|
<a href="http://jaxp.java.net/">JAXP</a> and
|
||||||
|
<a href="http://jax-ws.java.net/">JAX-WS</a> home pages.
|
||||||
|
The OpenJDK project does need access to these sources to build
|
||||||
|
a complete JDK image because JAXP and JAX-WS are part of the JDK.
|
||||||
|
The current process for delivery of the JAXP and JAX-WS sources
|
||||||
|
involves so called "source drop bundles" downloaded from a public
|
||||||
|
website.
|
||||||
|
There are many reasons for this current mechanism, and it is
|
||||||
|
understood that this is not ideal for the open source community.
|
||||||
|
It is possible this process could change in the future.
|
||||||
|
<br>
|
||||||
|
<b>NOTE:</b> The <a href="http://download.java.net/openjdk/jdk8/">
|
||||||
|
Complete OpenJDK Source Bundles</a> <u>will</u> contain the JAXP and
|
||||||
|
JAX-WS sources.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h4><a name="dropcreation">Creation of New Source Drop Bundles</a></h4>
|
||||||
|
<blockquote>
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
The JAXP or JAX-WS team prepares a new zip bundle,
|
||||||
|
places a copy in a public download area on java.net,
|
||||||
|
sends us a link and a list of CRs (Change Request Numbers).
|
||||||
|
The older download bundles should not be deleted.
|
||||||
|
It is the responsibility of the JAXP and JAX-WS team to
|
||||||
|
place the proper GPL legal notices on the sources
|
||||||
|
and do any filtering or java re-packaging for the
|
||||||
|
OpenJDK instances of these classes.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The OpenJDK team copies this new bundle into shared
|
||||||
|
area (e.g. <tt>/java/devtools/share/jdk8-drops</tt>).
|
||||||
|
Older bundles are never deleted so we retain the history.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The OpenJDK team edits the ant property file
|
||||||
|
<tt>jaxp/jaxp.properties</tt> or
|
||||||
|
<tt>jaxws/jaxws.properties</tt> to update the
|
||||||
|
base URL, the zip bundle name, and the MD5 checksum
|
||||||
|
of the zip bundle
|
||||||
|
(on Solaris: <tt>sum -c md5 <i>bundlename</i></tt>)
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
OpenJDK team reviews and commits those changes with the
|
||||||
|
given CRs.
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<h4><a name="dropusage">Using Source Drop Bundles</a></h4>
|
||||||
|
<blockquote>
|
||||||
|
<p>
|
||||||
|
The ant scripts that build <tt>jaxp</tt> and <tt>jaxws</tt>
|
||||||
|
will attempt to locate these zip bundles from the directory
|
||||||
|
in the environment variable
|
||||||
|
<tt><a href="#ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt>.
|
||||||
|
The checksums protect from getting the wrong, corrupted, or
|
||||||
|
improperly modified sources.
|
||||||
|
Once the sources are made available, the population will not
|
||||||
|
happen again unless a <tt>make clobber</tt> is requested
|
||||||
|
or the <tt>jaxp/drop/</tt> or <tt>jaxws/drop/</tt>
|
||||||
|
directory is explicitly deleted.
|
||||||
|
<br>
|
||||||
|
<b>NOTE:</b> The default Makefile and ant script behavior
|
||||||
|
is to NOT download these bundles from the public http site.
|
||||||
|
In general, doing downloads
|
||||||
|
during the build process is not advised, it creates too much
|
||||||
|
unpredictability in the build process.
|
||||||
|
However, you can use <tt>make ALLOW_DOWNLOADS=true</tt> to
|
||||||
|
tell the ant script that the download of the zip bundle is
|
||||||
|
acceptable.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The recommended procedure for keeping a cache of these
|
||||||
|
source bundles would be to download them once, place them
|
||||||
|
in a directory outside the repositories, and then set
|
||||||
|
<tt><a href="#ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt> to refer
|
||||||
|
to that directory.
|
||||||
|
These drop bundles do change occasionally, so the newer
|
||||||
|
bundles may need to be added to this area from time to time.
|
||||||
|
</p>
|
||||||
|
</blockquote>
|
||||||
|
</blockquote>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<!-- ------------------------------------------------------ -->
|
<!-- ------------------------------------------------------ -->
|
||||||
<hr>
|
<hr>
|
||||||
<h2><a name="building">Build Information</a></h2>
|
<h2><a name="building">Build Information</a></h2>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
Building the OpenJDK
|
Building the OpenJDK
|
||||||
is done with a <tt><i>gmake</i></tt>
|
is done with a <a href="#gmake">GNU <tt>make</tt></a> command line
|
||||||
command line and various
|
and various
|
||||||
environment or make variable settings that direct the make rules
|
environment or make variable settings that direct the makefile rules
|
||||||
to where various components have been installed.
|
to where various components have been installed.
|
||||||
Where possible the makefiles will attempt to located the various
|
Where possible the makefiles will attempt to located the various
|
||||||
components in the default locations or any component specific
|
components in the default locations or any component specific
|
||||||
@@ -578,7 +630,7 @@
|
|||||||
<pre><tt>
|
<pre><tt>
|
||||||
bash
|
bash
|
||||||
. jdk/make/jdk_generic_profile.sh
|
. jdk/make/jdk_generic_profile.sh
|
||||||
<i>gmake</i> sanity && <i>gmake</i>
|
<a href="#gmake"><tt>make</tt></a> sanity && <a href="#gmake"><tt>make</tt></a>
|
||||||
</tt></pre>
|
</tt></pre>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>
|
<p>
|
||||||
@@ -599,25 +651,31 @@
|
|||||||
A few notes about using GNU make:
|
A few notes about using GNU make:
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
In general, you need GNU make version 3.81 or newer.
|
You need GNU make version 3.81 or newer.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Place the location of the GNU make binary in the <tt>PATH</tt>.
|
Place the location of the GNU make binary in the <tt>PATH</tt>.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<strong>Linux:</strong>
|
<strong>Linux:</strong>
|
||||||
The <tt>/usr/bin/make</tt> command should work fine for you.
|
The <tt>/usr/bin/make</tt> should be 3.81 or newer
|
||||||
|
and should work fine for you.
|
||||||
|
If this version is not 3.81 or newer,
|
||||||
|
see the <a href="#buildgmake">"Building GNU make"</a> section.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<strong>Solaris:</strong>
|
<strong>Solaris:</strong>
|
||||||
Do NOT use <tt>/usr/bin/make</tt> on Solaris.
|
Do NOT use <tt>/usr/bin/make</tt> on Solaris.
|
||||||
If your Solaris system has the software
|
If your Solaris system has the software
|
||||||
from the Solaris Companion CD installed,
|
from the Solaris Companion CD installed,
|
||||||
you should use <tt>gmake</tt>
|
you should try and use <tt>gmake</tt>
|
||||||
which will be located in either the <tt>/opt/sfw/bin</tt> or
|
which will be located in either the <tt>/opt/sfw/bin</tt> or
|
||||||
<tt>/usr/sfw/bin</tt> directory.
|
<tt>/usr/sfw/bin</tt> directory.
|
||||||
In more recent versions of Solaris GNU make can be found
|
In more recent versions of Solaris GNU make might be found
|
||||||
at <tt>/usr/bin/gmake</tt>.
|
at <tt>/usr/bin/gmake</tt>.<br>
|
||||||
|
<b>NOTE:</b> It is very likely that this <tt>gmake</tt>
|
||||||
|
could be 3.80, you need 3.81, in which case,
|
||||||
|
see the <a href="#buildgmake">"Building GNU make"</a> section.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<strong>Windows:</strong>
|
<strong>Windows:</strong>
|
||||||
@@ -627,30 +685,25 @@
|
|||||||
as a <tt>make.exe</tt> built for something like
|
as a <tt>make.exe</tt> built for something like
|
||||||
<a href="http://www.mkssoftware.com/">MKS</a>).
|
<a href="http://www.mkssoftware.com/">MKS</a>).
|
||||||
<br>
|
<br>
|
||||||
<b>WARNING:</b> Watch out for make version 3.81, it may
|
<b>WARNING:</b> Watch out on some make 3.81 versions, it may
|
||||||
not work due to a lack of support for MS-DOS drive letter paths
|
not work due to a lack of support for MS-DOS drive letter paths
|
||||||
like <tt>C:/</tt> or <tt>C:\</tt>.
|
like <tt>C:/</tt> or <tt>C:\</tt>.
|
||||||
Use a 3.80 version, or find a newer
|
|
||||||
version that has this problem fixed.
|
|
||||||
The older 3.80 version of make.exe can be downloaded with this
|
|
||||||
<a href="http://cygwin.paracoda.com/release/make/make-3.80-1.tar.bz2" target="_blank">
|
|
||||||
link</a>.
|
|
||||||
Use of this older 3.80 make.exe may require that you install the
|
|
||||||
libintl2.dll library or libintl2 cygwin package which is
|
|
||||||
no longer installed by default by the cygwin installer.
|
|
||||||
<br>
|
<br>
|
||||||
Also see the
|
You may be able to use the information at the
|
||||||
<a href="http://developer.mozilla.org/en/docs/Windows_build_prerequisites_using_cygwin#make" target="_blank">
|
<a href="http://developer.mozilla.org/en/docs/Windows_build_prerequisites_using_cygwin#make" target="_blank">
|
||||||
mozilla developer center</a>
|
mozilla developer center</a>
|
||||||
on this topic.
|
on this topic.
|
||||||
<br>
|
<br>
|
||||||
It's hoped that when make 3.82 starts shipping in a future cygwin
|
It's hoped that when make 3.82 starts shipping in a future cygwin
|
||||||
release that this MS-DOS path issue will be fixed.
|
release that this MS-DOS path issue will be fixed.
|
||||||
In addition to the above 3.80 make.exe you can download
|
<br>
|
||||||
this
|
It may be possible to download the version at
|
||||||
<a href="http://www.cmake.org/files/cygwin/make.exe">
|
<a href="http://www.cmake.org/files/cygwin/make.exe">
|
||||||
www.cmake.org make.exe</a> which will not have a libintl2.dll
|
www.cmake.org make.exe</a>.
|
||||||
dependency.
|
<br>
|
||||||
|
It might be necessary for you to build your own GNU make 3.81,
|
||||||
|
see the <a href="#buildgmake">"Building GNU make"</a> section
|
||||||
|
in that case.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
@@ -662,6 +715,34 @@
|
|||||||
The latest source to GNU make is available at
|
The latest source to GNU make is available at
|
||||||
<a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
|
<a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
|
||||||
ftp.gnu.org/pub/gnu/make/</a>.
|
ftp.gnu.org/pub/gnu/make/</a>.
|
||||||
|
</p>
|
||||||
|
<!-- ------------------------------------------------------ -->
|
||||||
|
<h4><a name="buildgmake">Building GNU make</a></h4>
|
||||||
|
<blockquote>
|
||||||
|
First step is to get the GNU make 3.81 source from
|
||||||
|
<a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
|
||||||
|
ftp.gnu.org/pub/gnu/make/</a>.
|
||||||
|
Building is a little different depending on the OS and unix toolset
|
||||||
|
on Windows:
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<strong>Linux:</strong>
|
||||||
|
<tt>./configure && make</tt>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Solaris:</strong>
|
||||||
|
<tt>./configure && gmake CC=gcc</tt>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Windows for CYGWIN:</strong>
|
||||||
|
<tt>./configure && make</tt>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Windows for MKS: (CYGWIN is recommended)</strong>
|
||||||
|
<tt>./configure && make -f Makefile.win32</tt>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</blockquote>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<!-- ------------------------------------------------------ -->
|
<!-- ------------------------------------------------------ -->
|
||||||
<hr>
|
<hr>
|
||||||
@@ -713,7 +794,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Install
|
Install
|
||||||
<a href="#ant">Ant</a>,
|
<a href="#ant">Ant 1.7.1 or newer</a>,
|
||||||
make sure it is in your PATH.
|
make sure it is in your PATH.
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
@@ -776,7 +857,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Install
|
Install
|
||||||
<a href="#ant">Ant</a>,
|
<a href="#ant">Ant 1.7.1 or newer</a>,
|
||||||
make sure it is in your PATH.
|
make sure it is in your PATH.
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
@@ -862,7 +943,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Install
|
Install
|
||||||
<a href="#ant">Ant</a>,
|
<a href="#ant">Ant 1.7.1 or newer</a>,
|
||||||
make sure it is in your PATH and set
|
make sure it is in your PATH and set
|
||||||
<tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
|
<tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
|
||||||
</li>
|
</li>
|
||||||
@@ -921,16 +1002,22 @@
|
|||||||
<!-- ------------------------------------------------------ -->
|
<!-- ------------------------------------------------------ -->
|
||||||
<h4><a name="ant">Ant</a></h4>
|
<h4><a name="ant">Ant</a></h4>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
All OpenJDK builds require access to least Ant 1.6.5.
|
All OpenJDK builds require access to least Ant 1.7.1.
|
||||||
The Ant tool is available from the
|
The Ant tool is available from the
|
||||||
<a href="http://ant.apache.org" target="_blank">
|
<a href="http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.zip" target="_blank">
|
||||||
Ant download site</a>.
|
Ant 1.7.1 archive download site</a>.
|
||||||
You should always make sure <tt>ant</tt> is in your PATH, and
|
You should always make sure <tt>ant</tt> is in your PATH, and
|
||||||
on Windows you may also need to set
|
on Windows you may also need to set
|
||||||
<tt><a href="#ANT_HOME">ANT_HOME</a></tt>
|
<tt><a href="#ANT_HOME">ANT_HOME</a></tt>
|
||||||
to point to the location of
|
to point to the location of
|
||||||
the Ant installation, this is the directory pathname
|
the Ant installation, this is the directory pathname
|
||||||
that contains a <tt>bin and lib</tt>.
|
that contains a <tt>bin and lib</tt>.
|
||||||
|
<br>
|
||||||
|
<b>WARNING:</b> Ant versions used from IDE tools like NetBeans
|
||||||
|
or installed via system packages may not operate the same
|
||||||
|
as the one obtained from the Ant download bundles.
|
||||||
|
These system and IDE installers sometimes choose to change
|
||||||
|
the ant installation enough to cause differences.
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<!-- ------------------------------------------------------ -->
|
<!-- ------------------------------------------------------ -->
|
||||||
<h4><a name="cacerts">Certificate Authority File (cacert)</a></h4>
|
<h4><a name="cacerts">Certificate Authority File (cacert)</a></h4>
|
||||||
@@ -962,7 +1049,7 @@
|
|||||||
<blockquote>
|
<blockquote>
|
||||||
<strong><a name="gcc">Linux gcc/binutils</a></strong>
|
<strong><a name="gcc">Linux gcc/binutils</a></strong>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
The GNU gcc compiler version should be 4 or newer.
|
The GNU gcc compiler version should be 4.3 or newer.
|
||||||
The compiler used should be the default compiler installed
|
The compiler used should be the default compiler installed
|
||||||
in <tt>/usr/bin</tt>.
|
in <tt>/usr/bin</tt>.
|
||||||
</blockquote>
|
</blockquote>
|
||||||
@@ -1047,21 +1134,16 @@
|
|||||||
<strong><a name="msvc32">Windows i586: Microsoft Visual Studio 2010 Compilers</a></strong>
|
<strong><a name="msvc32">Windows i586: Microsoft Visual Studio 2010 Compilers</a></strong>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>
|
<p>
|
||||||
<b>BEGIN WARNING</b>: At this time (Spring/Summer 2010) JDK 7 is starting a transition to
|
<b>BEGIN WARNING</b>: JDK 7 has transitioned to
|
||||||
use the newest VS2010 Microsoft compilers. These build instructions are updated
|
use the newest VS2010 Microsoft compilers.
|
||||||
to show where we are going. We have a QA process to go through before
|
No other compilers are known to build the entire JDK,
|
||||||
official builds actually use VS2010. So for now, official builds are
|
|
||||||
still using VS2003. No other compilers are known to build the entire JDK,
|
|
||||||
including non-open portions.
|
including non-open portions.
|
||||||
So for now you should be able to build with either VS2003 or VS2010.
|
|
||||||
We do not guarantee that VS2008 will work, although there is sufficient
|
|
||||||
makefile support to make at least basic JDK builds plausible.
|
|
||||||
Visual Studio 2010 Express compilers are now able to build all the
|
Visual Studio 2010 Express compilers are now able to build all the
|
||||||
open source repositories, but this is 32 bit only. To build 64 bit
|
open source repositories, but this is 32 bit only. To build 64 bit
|
||||||
Windows binaries use the the 7.1 Windows SDK.<b>END WARNING.</b>
|
Windows binaries use the the 7.1 Windows SDK.
|
||||||
|
<b>END WARNING.</b>
|
||||||
<p>
|
<p>
|
||||||
The 32-bit OpenJDK Windows build
|
The 32-bit OpenJDK Windows build requires
|
||||||
requires
|
|
||||||
Microsoft Visual Studio C++ 2010 (VS2010) Professional
|
Microsoft Visual Studio C++ 2010 (VS2010) Professional
|
||||||
Edition or Express compiler.
|
Edition or Express compiler.
|
||||||
The compiler and other tools are expected to reside
|
The compiler and other tools are expected to reside
|
||||||
@@ -1088,11 +1170,10 @@
|
|||||||
</blockquote>
|
</blockquote>
|
||||||
<strong><a name="msvc64">Windows x64: Microsoft Visual Studio 2010 Professional Compiler</a></strong>
|
<strong><a name="msvc64">Windows x64: Microsoft Visual Studio 2010 Professional Compiler</a></strong>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
For <b>X64</b>, builds, when using the VS2010 Professional
|
For <b>X64</b>, the set up is much the same as 32 bit
|
||||||
compiler, the 64 bit build set up is much the same as 32 bit
|
|
||||||
except that you run <tt>amd64\VCVARS64.BAT</tt>
|
except that you run <tt>amd64\VCVARS64.BAT</tt>
|
||||||
to set the compiler environment variables.
|
to set the compiler environment variables.
|
||||||
Previously 64 bit builds had used the 64 bit compiler in
|
Previously 64 bit builds had to use the 64 bit compiler in
|
||||||
an unbundled Windows SDK but this is no longer necessary if
|
an unbundled Windows SDK but this is no longer necessary if
|
||||||
you have VS2010 Professional.
|
you have VS2010 Professional.
|
||||||
</blockquote>
|
</blockquote>
|
||||||
@@ -1414,14 +1495,14 @@
|
|||||||
but it's normally found via the DirectX environment variable
|
but it's normally found via the DirectX environment variable
|
||||||
<tt>DXSDK_DIR</tt>.
|
<tt>DXSDK_DIR</tt>.
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<strong><a name="msvcrt"><tt>MSVCR100.DLL</tt></a></strong>
|
<strong><a name="msvcrNN"><tt>MSVCR100.DLL</tt></a></strong>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
The OpenJDK build requires access to a redistributable
|
The OpenJDK build requires access to a redistributable
|
||||||
<tt>MSVCR100.DLL</tt>.
|
<tt>MSVCR100.DLL</tt>.
|
||||||
This is usually picked up automatically from the redist
|
This is usually picked up automatically from the redist
|
||||||
directories of Visual Studio 2010.
|
directories of Visual Studio 2010.
|
||||||
If this cannot be found set the
|
If this cannot be found set the
|
||||||
<a href="#ALT_MSVCRT_DLL_PATH"><tt>ALT_MSVCRT_DLL_PATH</tt></a>
|
<a href="#ALT_MSVCRNN_DLL_PATH"><tt>ALT_MSVCRNN_DLL_PATH</tt></a>
|
||||||
variable to the location of this file.
|
variable to the location of this file.
|
||||||
<p>
|
<p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
@@ -1614,6 +1695,13 @@
|
|||||||
and on Windows with CYGWIN
|
and on Windows with CYGWIN
|
||||||
<tt>/usr/bin</tt>.
|
<tt>/usr/bin</tt>.
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><tt><a name="ALT_DROPS_DIR">ALT_DROPS_DIR</a></tt> </dt>
|
||||||
|
<dd>
|
||||||
|
The location of any source drop bundles
|
||||||
|
(see <a href="#drops">Managing the Source Drops</a>).
|
||||||
|
The default will be
|
||||||
|
<tt>$(ALT_JDK_DEVTOOLS_PATH)/share/jdk8-drops</tt>.
|
||||||
|
</dd>
|
||||||
<dt><a name="ALT_UNIXCCS_PATH"><tt>ALT_UNIXCCS_PATH</tt></a></dt>
|
<dt><a name="ALT_UNIXCCS_PATH"><tt>ALT_UNIXCCS_PATH</tt></a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<strong>Solaris only:</strong>
|
<strong>Solaris only:</strong>
|
||||||
@@ -1649,6 +1737,12 @@
|
|||||||
Where each of these directories contain the import JDK image
|
Where each of these directories contain the import JDK image
|
||||||
for that platform.
|
for that platform.
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a name="ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a></dt>
|
||||||
|
<dd>
|
||||||
|
The top-level directory of the libraries and include files for the platform's
|
||||||
|
graphical programming environment. The default location is platform specific.
|
||||||
|
For example, on Linux it defaults to <tt>/usr/X11R6/</tt>.
|
||||||
|
</dd>
|
||||||
<dt><strong>Windows specific:</strong></dt>
|
<dt><strong>Windows specific:</strong></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<dl>
|
<dl>
|
||||||
@@ -1659,9 +1753,8 @@
|
|||||||
located.
|
located.
|
||||||
The default is whatever WINDOWSSDKDIR is set to
|
The default is whatever WINDOWSSDKDIR is set to
|
||||||
(or WindowsSdkDir) or the path
|
(or WindowsSdkDir) or the path
|
||||||
<pre>
|
<br>
|
||||||
c:\Program Files\Microsoft SDKs\Windows\v6.1a
|
<tt>c:\Program Files\Microsoft SDKs\Windows\v7.0a</tt>
|
||||||
</pre>
|
|
||||||
</dd>
|
</dd>
|
||||||
<dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt>
|
<dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt>
|
||||||
<dd>
|
<dd>
|
||||||
@@ -1671,15 +1764,85 @@
|
|||||||
variable <tt>DXSDK_DIR</tt>,
|
variable <tt>DXSDK_DIR</tt>,
|
||||||
failing that, look in <tt>C:/DXSDK</tt>.
|
failing that, look in <tt>C:/DXSDK</tt>.
|
||||||
</dd>
|
</dd>
|
||||||
<dt><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt>
|
|
||||||
<dd>
|
|
||||||
The location of the
|
|
||||||
<a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>.
|
|
||||||
</dd>
|
|
||||||
<dt><tt><a name="ALT_MSVCRNN_DLL_PATH">ALT_MSVCRNN_DLL_PATH</a></tt> </dt>
|
<dt><tt><a name="ALT_MSVCRNN_DLL_PATH">ALT_MSVCRNN_DLL_PATH</a></tt> </dt>
|
||||||
<dd>
|
<dd>
|
||||||
The location of the
|
The location of the
|
||||||
<a href="#msvcrt"><tt>MSVCR100.DLL</tt></a>.
|
<a href="#msvcrNN"><tt>MSVCR100.DLL</tt></a>.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
<dt><strong>Cross-Compilation Support:</strong></dt>
|
||||||
|
<dd>
|
||||||
|
<dl>
|
||||||
|
<dt><a name="CROSS_COMPILE_ARCH"><tt>CROSS_COMPILE_ARCH</tt></a> </dt>
|
||||||
|
<dd>
|
||||||
|
Set to the target architecture of a cross-compilation build. If set, this
|
||||||
|
variable is used to signify that we are cross-compiling. The expectation
|
||||||
|
is that <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> is set
|
||||||
|
to point to the cross-compiler and that any cross-compilation specific flags
|
||||||
|
are passed using <a href="#EXTRA_CFLAGS"><tt>EXTRA_CFLAGS</tt></a>.
|
||||||
|
The <a href="#ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a> variable should
|
||||||
|
also be set to point to the graphical header files (e.g. X11) provided with
|
||||||
|
the cross-compiler.
|
||||||
|
When cross-compiling we skip execution of any demos etc that may be built, and
|
||||||
|
also skip binary-file verification.
|
||||||
|
</dd>
|
||||||
|
<dt><tt><a name="EXTRA_CFLAGS">EXTRA_CFLAGS</a></tt> </dt>
|
||||||
|
<dd>
|
||||||
|
Used to pass cross-compilation options to the cross-compiler.
|
||||||
|
These are added to the <tt>CFLAGS</tt> and <tt>CXXFLAGS</tt> variables.
|
||||||
|
</dd>
|
||||||
|
<dt><tt><a name="USE_ONLY_BOOTDIR_TOOLS">USE_ONLY_BOOTDIR_TOOLS</a></tt> </dt>
|
||||||
|
<dd>
|
||||||
|
Used primarily for cross-compilation builds (and always set in that case)
|
||||||
|
this variable indicates that tools from the boot JDK should be used during
|
||||||
|
the build process, not the tools (<tt>javac</tt>, <tt>javah</tt>, <tt>jar</tt>)
|
||||||
|
just built (which can't execute on the build host).
|
||||||
|
</dd>
|
||||||
|
<dt><tt><a name="HOST_CC">HOST_CC</a></tt> </dt>
|
||||||
|
<dd>
|
||||||
|
The location of the C compiler to generate programs to run on the build host.
|
||||||
|
Some parts of the build generate programs that are then compiled and executed
|
||||||
|
to produce other parts of the build. Normally the primary C compiler is used
|
||||||
|
to do this, but when cross-compiling that would be the cross-compiler and the
|
||||||
|
resulting program could not be executed.
|
||||||
|
On Linux this defaults to <tt>/usr/bin/gcc</tt>; on other platforms it must be
|
||||||
|
set explicitly.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dt><strong>Specialized Build Options:</strong></dt>
|
||||||
|
<dd>
|
||||||
|
Some build variables exist to support specialized build environments and/or specialized
|
||||||
|
build products. Their use is only supported in those contexts:
|
||||||
|
<dl>
|
||||||
|
<dt><tt><a name="BUILD_CLIENT_ONLY">BUILD_CLIENT_ONLY</a></tt> </dt>
|
||||||
|
<dd>
|
||||||
|
Indicates this build will only contain the Hotspot client VM. In addition to
|
||||||
|
controlling the Hotspot build target, it ensures that we don't try to copy
|
||||||
|
any server VM files/directories, and defines a default <tt>jvm.cfg</tt> file
|
||||||
|
suitable for a client-only environment. Using this in a 64-bit build will
|
||||||
|
generate a sanity warning as 64-bit client builds are not directly supported.
|
||||||
|
</dd>
|
||||||
|
<dt><tt><a name="BUILD_HEADLESS_ONLY"></a>BUILD_HEADLESS_ONLY</tt> </dt>
|
||||||
|
<dd>
|
||||||
|
Used when the build environment has no graphical capabilities at all. This
|
||||||
|
excludes building anything that requires graphical libraries to be available.
|
||||||
|
</dd>
|
||||||
|
<dt><tt><a name="JAVASE_EMBEDDED"></a>JAVASE_EMBEDDED</tt> </dt>
|
||||||
|
<dd>
|
||||||
|
Used to indicate this is a build of the Oracle Java SE Embedded product.
|
||||||
|
This will enable the directives included in the SE-Embedded specific build
|
||||||
|
files.
|
||||||
|
</dd>
|
||||||
|
<dt><tt><a name="LIBZIP_CAN_USE_MMAP">LIBZIP_CAN_USE_MMAP</a></tt> </dt>
|
||||||
|
<dd>
|
||||||
|
If set to false, disables the use of mmap by the zip utility. Otherwise,
|
||||||
|
mmap will be used.
|
||||||
|
</dd>
|
||||||
|
<dt><tt><a name="COMPRESS_JARS"></a>COMPRESS_JARS</tt> </dt>
|
||||||
|
<dd>
|
||||||
|
If set to true, causes certain jar files that would otherwise be built without
|
||||||
|
compression, to use compression.
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -1687,6 +1850,81 @@
|
|||||||
</blockquote>
|
</blockquote>
|
||||||
<!-- ------------------------------------------------------ -->
|
<!-- ------------------------------------------------------ -->
|
||||||
<hr>
|
<hr>
|
||||||
|
<h2><a name="hints">Hints and Tips</a></h2>
|
||||||
|
<blockquote>
|
||||||
|
You don't have to use all these hints and tips, and in fact people do actually
|
||||||
|
build with systems that contradict these, but they might prove to be
|
||||||
|
helpful to some.
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
If <tt>make sanity</tt> does not work, find out why, fix that
|
||||||
|
before going any further. Or at least understand what the
|
||||||
|
complaints are from it.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
JDK: Keep in mind that you are building a JDK, but you need
|
||||||
|
a JDK (BOOTDIR JDK) to build this JDK.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Ant: The ant utility is a java application and besides having
|
||||||
|
ant available to you, it's important that ant finds the right
|
||||||
|
java to run with. Make sure you can type <tt>ant -version</tt>
|
||||||
|
and get clean results with no error messages.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Linux: Try and favor the system packages over building your own
|
||||||
|
or getting packages from other areas.
|
||||||
|
Most Linux builds should be possible with the system's
|
||||||
|
available packages.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Solaris: Typically you will need to get compilers on your systems
|
||||||
|
and occasionally GNU make 3.81 if a gmake binary is not available.
|
||||||
|
The gmake binary might not be 3.81, be careful.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Windows VS2010:
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Only the C++ part of VS2010 is needed.
|
||||||
|
Try to let the installation go to the default install directory.
|
||||||
|
Always reboot your system after installing VS2010.
|
||||||
|
The system environment variable VS100COMNTOOLS should be
|
||||||
|
set in your environment.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Make sure that TMP and TEMP are also set in the environment
|
||||||
|
and refer to Windows paths that exist, like <tt>C:\temp</tt>,
|
||||||
|
not <tt>/tmp</tt>, not <tt>/cygdrive/c/temp</tt>, and not <tt>C:/temp</tt>.
|
||||||
|
<tt>C:\temp</tt> is just an example, it is assumed that this area is
|
||||||
|
private to the user, so by default after installs you should
|
||||||
|
see a unique user path in these variables.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
You need to use vsvars32.bat or vsvars64.bat to get the
|
||||||
|
PATH, INCLUDE, LIB, LIBPATH, and WINDOWSSDKDIR
|
||||||
|
variables set in your shell environment.
|
||||||
|
These bat files are not easy to use from a shell environment.
|
||||||
|
However, there is a script placed in the root jdk8 repository called
|
||||||
|
vsvars.sh that can help, it should only be done once in a shell
|
||||||
|
that will be doing the build, e.g.<br>
|
||||||
|
<tt>sh ./make/scripts/vsvars.sh -v10 > settings<br>
|
||||||
|
eval `cat settings`</tt><br>
|
||||||
|
Or just <tt>eval `sh ./make/scripts/vsvars.sh -v10`</tt>.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Windows: PATH order is critical, see the
|
||||||
|
<a href="#paths">paths</a> section for more information.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Windows 64bit builds: Use ARCH_DATA_MODEL=64.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</blockquote>
|
||||||
|
<!-- ------------------------------------------------------ -->
|
||||||
|
<hr>
|
||||||
<h2><a name="troubleshooting">Troubleshooting</a></h2>
|
<h2><a name="troubleshooting">Troubleshooting</a></h2>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
A build can fail for any number of reasons.
|
A build can fail for any number of reasons.
|
||||||
@@ -1711,6 +1949,19 @@
|
|||||||
Some of the more common problems with builds are briefly described
|
Some of the more common problems with builds are briefly described
|
||||||
below, with suggestions for remedies.
|
below, with suggestions for remedies.
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>
|
||||||
|
<b>Corrupted Bundles on Windows:</b>
|
||||||
|
<blockquote>
|
||||||
|
Some virus scanning software has been known to corrupt the
|
||||||
|
downloading of zip bundles.
|
||||||
|
It may be necessary to disable the 'on access' or 'real time'
|
||||||
|
virus scanning features to prevent this corruption.
|
||||||
|
This type of "real time" virus scanning can also slow down the
|
||||||
|
build process significantly.
|
||||||
|
Temporarily disabling the feature, or excluding the build
|
||||||
|
output directory may be necessary to get correct and faster builds.
|
||||||
|
</blockquote>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>Slow Builds:</b>
|
<b>Slow Builds:</b>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
@@ -1806,7 +2057,11 @@
|
|||||||
</blockquote>
|
</blockquote>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>Windows Error Message: <tt>*** fatal error - couldn't allocate heap, ... </tt></b>
|
<b>Windows Error Messages:</b><br>
|
||||||
|
<tt>*** fatal error - couldn't allocate heap, ... </tt><br>
|
||||||
|
<tt>rm fails with "Directory not empty"</tt><br>
|
||||||
|
<tt>unzip fails with "cannot create ... Permission denied"</tt><br>
|
||||||
|
<tt>unzip fails with "cannot create ... Error 50"</tt><br>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
The CYGWIN software can conflict with other non-CYGWIN
|
The CYGWIN software can conflict with other non-CYGWIN
|
||||||
software. See the CYGWIN FAQ section on
|
software. See the CYGWIN FAQ section on
|
||||||
@@ -1815,12 +2070,11 @@
|
|||||||
</blockquote>
|
</blockquote>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>Windows Error Message: <tt>*** multiple target patterns. Stop.</tt></b>
|
<b>Windows Error Message: <tt>spawn failed</tt></b>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
The CYGWIN make version 3.81 may not like the Windows <tt>C:/</tt>
|
Try rebooting the system, or there could be some kind of
|
||||||
style paths, it may not like the ':' character in the path
|
issue with the disk or disk partition being used.
|
||||||
when used in a makefile target definition.
|
Sometimes it comes with a "Permission Denied" message.
|
||||||
See the <a href="#gmake"><tt><i>gmake</i></tt></a> section.
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
4707
THIRD_PARTY_README
4707
THIRD_PARTY_README
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,4 @@
|
|||||||
^build/
|
^build/
|
||||||
^dist/
|
^dist/
|
||||||
/nbproject/private/
|
/nbproject/private/
|
||||||
|
^.hgtip
|
||||||
|
|||||||
@@ -99,3 +99,35 @@ cff5a173ec1e89013359e804a3e31736ef6fb462 jdk7-b120
|
|||||||
1523a060032c8a5b7840198da8911abeff88118f jdk7-b122
|
1523a060032c8a5b7840198da8911abeff88118f jdk7-b122
|
||||||
a230c142628cea22475ab9dc5cd544266ddf2466 jdk7-b123
|
a230c142628cea22475ab9dc5cd544266ddf2466 jdk7-b123
|
||||||
f90b3e014e831eb4f32ef035a1dad2b8ba87949f jdk7-b124
|
f90b3e014e831eb4f32ef035a1dad2b8ba87949f jdk7-b124
|
||||||
|
1ce58c72b7892cb813eb920276c7e7f17a1b79fe jdk7-b125
|
||||||
|
d7532bcd3742f1576dd07ff9fbb535c9c9a276e9 jdk7-b126
|
||||||
|
64775e83f4df894355f45555f50c410de6727b4e jdk7-b127
|
||||||
|
9baa8f94a11d6c5cab3f9f0e5a20106326d0932e jdk7-b128
|
||||||
|
66fa0fcc779296c99746b09efce6109944f82f30 jdk7-b129
|
||||||
|
563a8f8b5be3940e9346cffac4eff9ed02b3c69f jdk7-b130
|
||||||
|
9d6dd2cdfcb92612dbd836ecded87770d52b49db jdk7-b131
|
||||||
|
1b1e75e8f476e5c07f0d2b035993895e2603e1f0 jdk7-b132
|
||||||
|
671fe2e623ffefb4b7c312be919fc71eb48c1df1 jdk7-b133
|
||||||
|
918003855fa0dba5acf4bf1fe36526d2fc4c1ba8 jdk7-b134
|
||||||
|
e0b72ae5dc5e824b342801c8d1d336a55eb54e2c jdk7-b135
|
||||||
|
48ef0c712e7cbf272f47f9224db92a3c6a9e2612 jdk7-b136
|
||||||
|
a66c01d8bf895261715955df0b95545c000ed6a8 jdk7-b137
|
||||||
|
78d8cf04697e9df54f7f11e195b7da29b8e345a2 jdk7-b138
|
||||||
|
60b074ec6fcf5cdf9efce22fdfb02326ed8fa2d3 jdk7-b139
|
||||||
|
cdf5d19ec142424489549025e9c42e51f32cf688 jdk7-b140
|
||||||
|
a58635cdd921bafef353f4864184a0481353197b jdk7-b141
|
||||||
|
a2f340a048c88d10cbedc0504f5cf03d39925a40 jdk7-b142
|
||||||
|
51ed32f6f4de56f16e910ac54ba6c6f6606f4f17 jdk7-b143
|
||||||
|
7033a5756ad552d88114594d8e2d2e4dc2c05963 jdk7-b144
|
||||||
|
77ec0541aa2aa4da27e9e385a118a2e51e7fca24 jdk7-b145
|
||||||
|
770227a4087e4e401fe87ccd19738440111c3948 jdk7-b146
|
||||||
|
73323cb3396260d93e0ab731fd2d431096ceed0f jdk7-b147
|
||||||
|
949fb60ca830364571e7c4c9964e6b351ca929ec jdk8-b01
|
||||||
|
ed8d94519a87b4adac270c3eec9134ff1f62bff5 jdk8-b02
|
||||||
|
cd0da00694fbce642db9be936d3e4909a71d911d jdk8-b03
|
||||||
|
60a68d688e24473cf84dedd1e60901a61ab82555 jdk8-b04
|
||||||
|
cc1b599b986a37cb57de4584c5e58169766ca535 jdk8-b05
|
||||||
|
45c43dde7ba7f176333a51a98f086275478836fa jdk8-b06
|
||||||
|
3d61f0856f349e2163bf98146465dab3b7437f63 jdk8-b07
|
||||||
|
0d52b1c87aa8fdea7fdc9c4126ea58f95ca6b351 jdk8-b08
|
||||||
|
a891732c1a83082177ff7a4cf1506068d9cc0a47 jdk8-b09
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
project=jdk7
|
project=jdk8
|
||||||
|
|||||||
@@ -325,11 +325,11 @@ License instead of this License.
|
|||||||
|
|
||||||
"CLASSPATH" EXCEPTION TO THE GPL
|
"CLASSPATH" EXCEPTION TO THE GPL
|
||||||
|
|
||||||
Certain source files distributed by Sun Microsystems, Inc. are subject to
|
Certain source files distributed by Oracle America and/or its affiliates are
|
||||||
the following clarification and special exception to the GPL, but only where
|
subject to the following clarification and special exception to the GPL, but
|
||||||
Sun has expressly included in the particular source file's header the words
|
only where Oracle has expressly included in the particular source file's header
|
||||||
"Sun designates this particular file as subject to the "Classpath" exception
|
the words "Oracle designates this particular file as subject to the "Classpath"
|
||||||
as provided by Sun in the LICENSE file that accompanied this code."
|
exception as provided by Oracle in the LICENSE file that accompanied this code."
|
||||||
|
|
||||||
Linking this library statically or dynamically with other modules is making
|
Linking this library statically or dynamically with other modules is making
|
||||||
a combined work based on this library. Thus, the terms and conditions of
|
a combined work based on this library. Thus, the terms and conditions of
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -63,8 +63,8 @@ include $(TOPDIR)/make/common/Defs-$(PLATFORM).gmk
|
|||||||
# Localizations for the different parts of the product beyond English
|
# Localizations for the different parts of the product beyond English
|
||||||
#
|
#
|
||||||
|
|
||||||
JRE_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK
|
JRE_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK
|
||||||
PLUGIN_LOCALES = de es fr it ja ko sv zh_CN zh_TW zh_HK
|
PLUGIN_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK
|
||||||
JDK_LOCALES = ja zh_CN
|
JDK_LOCALES = ja zh_CN
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -25,12 +25,23 @@
|
|||||||
|
|
||||||
# Properties for jprt
|
# Properties for jprt
|
||||||
|
|
||||||
# Use whatever release that the submitted job requests
|
# The release to build
|
||||||
jprt.tools.default.release=${jprt.submit.release}
|
jprt.tools.default.release=jdk8
|
||||||
|
|
||||||
# The different build flavors we want, we override here so we just get these 2
|
# The different build flavors we want, we override here so we just get these 2
|
||||||
jprt.build.flavors=product,fastdebug
|
jprt.build.flavors=product,fastdebug
|
||||||
|
|
||||||
|
# Standard list of jprt build targets for this source tree
|
||||||
|
jprt.build.targets= \
|
||||||
|
solaris_sparc_5.10-{product|fastdebug}, \
|
||||||
|
solaris_sparcv9_5.10-{product|fastdebug}, \
|
||||||
|
solaris_i586_5.10-{product|fastdebug}, \
|
||||||
|
solaris_x64_5.10-{product|fastdebug}, \
|
||||||
|
linux_i586_2.6-{product|fastdebug}, \
|
||||||
|
linux_x64_2.6-{product|fastdebug}, \
|
||||||
|
windows_i586_5.1-{product|fastdebug}, \
|
||||||
|
windows_x64_5.2-{product|fastdebug}
|
||||||
|
|
||||||
# Directories to be excluded from the source bundles
|
# Directories to be excluded from the source bundles
|
||||||
jprt.bundle.exclude.src.dirs=build dist webrev
|
jprt.bundle.exclude.src.dirs=build dist webrev
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -405,8 +405,7 @@ public class ObjectStreamClass implements java.io.Serializable {
|
|||||||
if (!serializable ||
|
if (!serializable ||
|
||||||
externalizable ||
|
externalizable ||
|
||||||
forProxyClass ||
|
forProxyClass ||
|
||||||
name.equals("java.lang.String") ||
|
name.equals("java.lang.String")){
|
||||||
isEnum) {
|
|
||||||
fields = NO_FIELDS;
|
fields = NO_FIELDS;
|
||||||
} else if (serializable) {
|
} else if (serializable) {
|
||||||
/* Ask for permission to override field access checks.
|
/* Ask for permission to override field access checks.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,85 +23,85 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=Syntax: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00f6glich sind:\n -port Aktivierungsport, an dem der ORBD gestartet werden sollte, Standardvorgabe 1049 (optional)\n -defaultdb Verzeichnis f\u00fcr ORBD-Dateien, Standardvorgabe "./orb.db" (optional)\n -serverid Server-ID f\u00fcr ORBD, Standardvorgabe 1 (optional)\n -ORBInitialPort Anfangsport (erforderlich)\n -ORBInitialHost Anf\u00e4nglicher Rechnername (erforderlich)\n
|
orbd.usage=Verwendung: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00F6glich sind:\n -port Aktivierungsport, an dem der ORBD gestartet werden sollte, Standardwert 1049 (optional)\n -defaultdb Verzeichnis f\u00FCr ORBD-Dateien, Standardwert "./orb.db" (optional)\n -serverid Server-ID f\u00FCr ORBD, Standardwert 1 (optional)\n -ORBInitialPort Anfangsport (erforderlich)\n -ORBInitialHost Anf\u00E4nglicher HostName (erforderlich)\n
|
||||||
|
|
||||||
servertool.usage=Syntax: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00f6glich sind:\n -ORBInitialPort Anfangsport (erforderlich)\n -ORBInitialHost Anf\u00e4nglicher Rechnername (erforderlich)\n
|
servertool.usage=Verwendung: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00F6glich sind:\n -ORBInitialPort Anfangsport (erforderlich)\n -ORBInitialHost Anf\u00E4nglicher HostName (erforderlich)\n
|
||||||
servertool.banner=\n\nWillkommen beim Java IDL-Server-Tool \nBitte geben Sie an der Eingabeaufforderung Befehle ein. \n
|
servertool.banner=\n\nWillkommen beim Java IDL-Servertool \nGeben Sie die entsprechenden Befehle im Prompt ein \n
|
||||||
servertool.shorthelp=\n\n\tVerf\u00fcgbare Befehle: \n\t------------------- \n
|
servertool.shorthelp=\n\n\tVerf\u00FCgbare Befehle: \n\t------------------- \n
|
||||||
servertool.baddef=Fehlerhafte Serverdefinition: {0}
|
servertool.baddef=Ung\u00FCltige Serverdefinition: {0}
|
||||||
servertool.nosuchserver=\tDer Server wurde nicht gefunden.
|
servertool.nosuchserver=\tServer wurde nicht gefunden.
|
||||||
servertool.helddown=\tServer ist au\u00dfer Betrieb.
|
servertool.helddown=\tServer ist au\u00DFer Betrieb.
|
||||||
servertool.nosuchorb=\tUng\u00fcltige ORB
|
servertool.nosuchorb=\tUng\u00FCltiger ORB.
|
||||||
servertool.serverup=\tServer ist bereits in Betrieb.
|
servertool.serverup=\tServer ist bereits hochgefahren.
|
||||||
servertool.appname=\tAnwendungsname - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\tName - {0}
|
servertool.name=\tName - {0}
|
||||||
servertool.classpath=\tKlassenpfad - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\tArgs - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\tVmargs - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\tServer-ID - {0}
|
servertool.serverid=\tServer-ID - {0}
|
||||||
servertool.servernotrunning=\tServer l\u00e4uft nicht.
|
servertool.servernotrunning=\tServer wird nicht ausgef\u00FChrt.
|
||||||
servertool.register=\n\n\tregister -server <Serverklassenname> \n\t -applicationName <alternativer Servername> \n\t -classpath <Klassenpfad f\u00fcr Server> \n\t -args <Argumente f\u00fcr Server> \n\t -vmargs <Argumente f\u00fcr Server Java VM>\n
|
servertool.register=\n\n\tregister -server <Serverklassenname> \n\t -applicationName <alternativer Servername> \n\t -classpath <Classpath f\u00FCr Server> \n\t -args <Argumente f\u00FCr Server> \n\t -vmargs <Argumente f\u00FCr Server Java VM>\n
|
||||||
servertool.register1=aktivierbaren Server registrieren
|
servertool.register1=aktivierbaren Server registrieren
|
||||||
servertool.register2=\tServer registriert (serverid = {0})
|
servertool.register2=\tServer registriert (serverid = {0}).
|
||||||
servertool.register3=\tServer registriert, aber au\u00dfer Betrieb (serverid = {0})
|
servertool.register3=\tServer registriert, aber au\u00DFer Betrieb (serverid = {0}).
|
||||||
servertool.register4=\tServer bereits registriert (serverid = {0})
|
servertool.register4=\tServer bereits registriert (serverid = {0}).
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <Server-ID> | -applicationName <Name> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <Server-ID> | -applicationName <Name> ] \n
|
||||||
servertool.unregister1=Registrierung eines registrierten Servers l\u00f6schen
|
servertool.unregister1=Registrierung eines registrierten Servers aufheben
|
||||||
servertool.unregister2=\tServer-Registrierung gel\u00f6scht
|
servertool.unregister2=\tServerregistrierung aufgehoben.
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <Server-ID> | -applicationName <Name> ] [ <-endpointType <Endpunkttyp> ] \n
|
servertool.locate=\n\tlocate [ -serverid <Server-ID> | -applicationName <Name> ] [ <-endpointType <endpointType> ] \n
|
||||||
servertool.locate1=Finden von Ports eines speziellen Typs bei einem registrierten Server
|
servertool.locate1=Ports eines speziellen Typs f\u00FCr einen registrierten Server finden
|
||||||
servertool.locate2=\n\n\tHostname {0} \n\n\t\tPort\t\tPorttyp\t\tORB-ID\n\t\t----\t\t-------\t\t------\n
|
servertool.locate2=\n\n\tHostname {0} \n\n\t\tPort\t\tPorttyp\t\tORB-ID\n\t\t----\t\t-------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <Server-ID> | -applicationName <Name> ] [ -orbid <ORB-Name> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <Server-ID> | -applicationName <Name> ] [ -orbid <ORB-Name> ]\n
|
||||||
servertool.locateorb1=Finden von Ports eines speziellen ORBs bei einem registrierten Server
|
servertool.locateorb1=Ports f\u00FCr einen speziellen ORB bei einem registrierten Server finden
|
||||||
servertool.locateorb2=\n\n\tHostname {0} \n\n\t\tPort\t\tPorttyp\t\tORB-ID\n\t\t----\t\t-------\t\t------\n
|
servertool.locateorb2=\n\n\tHostname {0} \n\n\t\tPort\t\tPortType\t\tORB-ID\n\t\t----\t\t-------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <Name> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <Name> ] \n
|
||||||
servertool.getserverid1=\u00dcbergeben der Server-ID f\u00fcr einen Anwendungsnamen
|
servertool.getserverid1=Server-ID f\u00FCr applicationName zur\u00FCckgeben
|
||||||
servertool.getserverid2=\tServer-ID f\u00fcr Anwendungsname {0} ist {1}.
|
servertool.getserverid2=\tServer-ID f\u00FCr applicationName {0} ist {1}
|
||||||
|
|
||||||
servertool.list=\n\tlist\n
|
servertool.list=\n\tlist\n
|
||||||
servertool.list1=Auflisten aller registrierten Server
|
servertool.list1=alle registrierten Server auflisten
|
||||||
servertool.list2=\n\tServer-ID\tServer-Klassenname\t\tServer-Anwendung\n\t---------\t------------------\t\t----------------\n
|
servertool.list2=\n\tServer-ID\tServerklassenname\t\tServeranwendung\n\t---------\t-----------------\t\t------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=Auflisten der gegenw\u00e4rtig aktiven Server
|
servertool.listactive1=derzeit aktive Server auflisten
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=Auflisten der gegenw\u00e4rtig definierten Anwendungsnamen
|
servertool.listappnames1=derzeit definierte applicationNames auflisten
|
||||||
servertool.listappnames2=Gegenw\u00e4rtig definierte Serveranwendungsnamen:
|
servertool.listappnames2=Derzeit definierte Server-applicationNames:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <Server-ID> | -applicationName <Name> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <Server-ID> | -applicationName <Name> ]\n
|
||||||
servertool.shutdown1=Herunterfahren eines registrierten Servers
|
servertool.shutdown1=registrierten Server herunterfahren
|
||||||
servertool.shutdown2=\tServer erfolgreich heruntergefahren
|
servertool.shutdown2=\tServer erfolgreich heruntergefahren.
|
||||||
servertool.startserver=\n\tstartup [ -serverid <Server-ID> | -applicationName <Name> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <Server-ID> | -applicationName <Name> ]\n
|
||||||
servertool.startserver1=Hochfahren eines registrierten Servers
|
servertool.startserver1=registrierten Server starten
|
||||||
servertool.startserver2=\tServer erfolgreich hochgefahren
|
servertool.startserver2=\tServer erfolgreich hochgefahren.
|
||||||
|
|
||||||
servertool.quit=\n\tquit\n
|
servertool.quit=\n\tquit\n
|
||||||
servertool.quit1=Dieses Tool beenden
|
servertool.quit1=dieses Tool beenden
|
||||||
|
|
||||||
servertool.help=\thelp\n\tOR\n\thelp <Befehlsname>\n
|
servertool.help=\thelp\n\tOR\n\thelp <Befehlsname>\n
|
||||||
servertool.help1=Hilfe anfordern
|
servertool.help1=Hilfe abrufen
|
||||||
|
|
||||||
servertool.orbidmap=\tSyntax: orblist [ -serverid <Server-ID> | -applicationName <Name> ]\n
|
servertool.orbidmap=\\Verwendung: orblist [ -serverid <Server-ID> | -applicationName <Name> ]\n
|
||||||
servertool.orbidmap1=Liste von ORB-Namen und ihren Zuordnungen
|
servertool.orbidmap1=Liste von ORB-Namen und ihren Zuordnungen
|
||||||
servertool.orbidmap2=\n\tORB-ID\t\tORB-Name\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tORB-ID\t\tORB-Name\n\t------\t\t--------\n
|
||||||
pnameserv.success=St\u00e4ndiger Namensserver erfolgreich hochgefahren
|
pnameserv.success=Persistenter NameServer erfolgreich gestartet
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=Syntax: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00f6glich sind:\n -ORBInitialPort Erster Port (erforderlich)\n -InitialServicesFile Datei mit Liste von Anfangsdiensten (erforderlich)\n
|
bootstrap.usage=Verwendung: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00F6glich sind:\n -ORBInitialPort Anf\u00E4nglicher Port (erforderlich)\n -InitialServicesFile Datei mit Liste von anf\u00E4nglichen Services (erforderlich)\n
|
||||||
bootstrap.success=Ein Port wird auf {0} eingestellt, und Dienste werden von {1} gelesen
|
bootstrap.success=Port wird auf {0} gesetzt, Services werden aus {1} gelesen
|
||||||
bootstrap.filenotreadable=Die Datei {0} kann nicht gelesen werden.
|
bootstrap.filenotreadable=Datei {0} kann nicht gelesen werden
|
||||||
bootstrap.filenotfound=Die Datei {0} wurde nicht gefunden.
|
bootstrap.filenotfound=Datei {0} wurde nicht gefunden
|
||||||
bootstrap.exception=Beim Speichern von Eigenschaften in Datei {0} wurde eine Ausnahme aufgefangen: Ausnahme {1}.
|
bootstrap.exception=Beim Speichern von Eigenschaften in Datei {0} wurde eine Ausnahme abgefangen: Ausnahme {1}
|
||||||
|
|
||||||
tnameserv.exception=Beim Hochfahren des Bootstrap-Dienstes auf Port {0} wurde eine Ausnahme aufgefangen.
|
tnameserv.exception=Beim Hochfahren des Bootstrap-Services auf Port {0} wurde eine Ausnahme abgefangen
|
||||||
tnameserv.usage=Versuchen Sie, einen anderen Port mit den Befehlszeilenargumenten -ORBInitialPort <Portnummer> zu verwenden.
|
tnameserv.usage=Verwenden Sie einen anderen Port mit den Befehlszeilenargumenten -ORBInitialPort <Portnummer>
|
||||||
tnameserv.invalidhostoption=ORBInitialHost ist keine g\u00fcltige Option f\u00fcr NameService
|
tnameserv.invalidhostoption=ORBInitialHost ist keine g\u00FCltige Option f\u00FCr NameService
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 ist keine g\u00fcltige Option f\u00fcr NameService
|
tnameserv.orbinitialport0=ORBInitialPort 0 ist keine g\u00FCltige Option f\u00FCr NameService
|
||||||
tnameserv.hs1=Anf\u00e4nglicher Namenskontext:\n{0}
|
tnameserv.hs1=Anf\u00E4nglicher Namenskontext:\n{0}
|
||||||
tnameserv.hs2=\u00dcbergangsnamensserver: Port f\u00fcr anf\u00e4ngliche Objektreferenzen wird eingestellt auf: {0}
|
tnameserv.hs2=TransientNameServer: Port f\u00FCr anf\u00E4ngliche Objektreferenzen wird auf {0} gesetzt
|
||||||
tnameserv.hs3=Bereit
|
tnameserv.hs3=Bereit.
|
||||||
|
|
||||||
orbd.commfailure=\nORBD konnte nicht gestartet werden, weil ORBinitialPort bereits verwendet wird
|
orbd.commfailure=\nStart von ORBD nicht erfolgreich, da ORBinitialPort bereits verwendet wird
|
||||||
orbd.internalexception=\ORBD konnte wegen einer internen Ausnahme nicht gestartet werden. \nM\u00f6gliche Ursachen: \n1. Der angegebene ORBInitialPort oder ORBActivationPort wird bereits verwendet \n2. Keine Berechtigung zum Schreiben von orb.db
|
orbd.internalexception=\nStart von ORBD aufgrund einer internen Ausnahme nicht erfolgreich. \nM\u00F6gliche Ursachen: \n1. Der angegebene ORBInitialPort oder ORBActivationPort wird bereits verwendet \n2. Keine Berechtigung zum Schreiben von orb.db
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,24 +23,24 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n -port Puerto de activaci\u00f3n en el que se debe iniciar el ORBD, el predeterminado es el 1049 (opcional)\n -defaultdb Directorio para los archivos de ORBD, el predeterminado es "./orb.db" (opcional)\n -serverid Identificador de servidor para ORBD, el predeterminado es 1 (opcional)\n -ORBInitialPort Puerto inicial (necesario)\n -ORBInitialHost Nombre de sistema inicial (necesario)\n
|
orbd.usage=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n -port Puerto de activaci\u00F3n en el que se debe iniciar el ORBD, por defecto es el 1049 (opcional)\n -defaultdb Directorio para los archivos de ORBD, por defecto es "./orb.db" (opcional)\n -serverid Identificador de servidor para ORBD, por defecto es 1 (opcional)\n -ORBInitialPort Puerto inicial (necesario)\n -ORBInitialHost Nombre de host inicial (necesario)\n
|
||||||
|
|
||||||
servertool.usage=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n -ORBInitialPort Puerto inicial (necesario)\n -ORBInitialHost Nombre de sistema inicial (necesario)\n
|
servertool.usage=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n -ORBInitialPort Puerto inicial (necesario)\n -ORBInitialHost Nombre de host inicial (necesario)\n
|
||||||
servertool.banner=\n\nBienvenido Java IDL Server Tool \nescriba los comandos en el indicador \n
|
servertool.banner=\n\nBienvenido a Java IDL Server Tool \nescriba los comandos en la petici\u00F3n de datos \n
|
||||||
servertool.shorthelp=\n\n\tComandos disponibles: \n\t------------------- \n
|
servertool.shorthelp=\n\n\tComandos disponibles: \n\t------------------- \n
|
||||||
servertool.baddef=Definici\u00f3n de servidor incorrecta: {0}
|
servertool.baddef=Definici\u00F3n de servidor incorrecta: {0}
|
||||||
servertool.nosuchserver=\tno se ha encontrado el servidor.
|
servertool.nosuchserver=\tno se ha encontrado el servidor.
|
||||||
servertool.helddown=\tel servidor se mantiene desconectado.
|
servertool.helddown=\tel servidor se mantiene desconectado.
|
||||||
servertool.nosuchorb=\tORB no v\u00e1lido.
|
servertool.nosuchorb=\tORB no v\u00E1lido.
|
||||||
servertool.serverup=\tel servidor ya est\u00e1 conectado.
|
servertool.serverup=\tel servidor ya est\u00E1 conectado.
|
||||||
servertool.appname=\tnombre de aplicaci\u00f3n - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\tnombre - {0}
|
servertool.name=\tname - {0}
|
||||||
servertool.classpath=\truta de clase - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targumentos - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\targumentos de MV - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\tidentificador de servidor - {0}
|
servertool.serverid=\tserver id - {0}
|
||||||
servertool.servernotrunning=\tel servidor no se est\u00e1 ejecutando.
|
servertool.servernotrunning=\tel servidor no se est\u00E1 ejecutando.
|
||||||
servertool.register=\n\n\tregister -server <nombre de clase de servidor> \n\t -applicationName <nombre de servidor alternativo> \n\t -classpath <ruta de clase al servidor> \n\t -args <argumentos para el servidor> \n\t -vmargs <argumentos para la MV Java del servidor>\n
|
servertool.register=\n\n\tregister -server <nombre de clase de servidor> \n\t -applicationName <nombre de servidor alternativo> \n\t -classpath <classpath al servidor> \n\t -args <argumentos para el servidor> \n\t -vmargs <argumentos para la MV Java del servidor>\n
|
||||||
servertool.register1=registrar un servidor que se pueda activar
|
servertool.register1=registrar un servidor que se pueda activar
|
||||||
servertool.register2=\tservidor registrado (identificador de servidor = {0}).
|
servertool.register2=\tservidor registrado (identificador de servidor = {0}).
|
||||||
servertool.register3=\tservidor registrado pero desconectado (identificador de servidor = {0}).
|
servertool.register3=\tservidor registrado pero desconectado (identificador de servidor = {0}).
|
||||||
@@ -51,57 +51,57 @@ servertool.unregister1=anular el registro de un servidor registrado
|
|||||||
servertool.unregister2=\tanulado el registro del servidor.
|
servertool.unregister2=\tanulado el registro del servidor.
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <identificador de servidor> | -applicationName <nombre> ] [ <-endpointType <tipo de punto final> ] \n
|
servertool.locate=\n\tlocate [ -serverid <identificador de servidor> | -applicationName <nombre> ] [ <-endpointType <tipo de punto final> ] \n
|
||||||
servertool.locate1=localizar puertos de un tipo espec\u00edfico para un servidor registrado
|
servertool.locate1=localizar puertos de un tipo espec\u00EDfico para un servidor registrado
|
||||||
servertool.locate2=\n\n\tNombre de sistema {0} \n\n\t\tPuerto\t\tTipo de puerto\t\tIdentificador ORB\n\t\t----\t\t---------\t\t------\n
|
servertool.locate2=\n\n\tNombre de host {0} \n\n\t\tPuerto\t\tTipo de puerto\t\tIdentificador ORB\n\t\t----\t\t---------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <identificador de servidor> | -applicationName <nombre> ] [ -orbid <nombre de ORB> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <identificador de servidor> | -applicationName <nombre> ] [ -orbid <nombre de ORB> ]\n
|
||||||
servertool.locateorb1=localizar puertos para un ORB espec\u00edfico del servidor registrado
|
servertool.locateorb1=localizar puertos para un ORB espec\u00EDfico del servidor registrado
|
||||||
servertool.locateorb2=\n\n\tNombre de sistema {0} \n\n\t\tPuerto\t\tTipo de puerto\t\tIdentificador de ORB\n\t\t----\t\t--------\t\t------\n
|
servertool.locateorb2=\n\n\tNombre de host {0} \n\n\t\tPuerto\t\tTipo de puerto\t\tIdentificador de ORB\n\t\t----\t\t--------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <nombre> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <nombre> ] \n
|
||||||
servertool.getserverid1=devolver el identificador de servidor para un nombre de aplicaci\u00f3n
|
servertool.getserverid1=devolver el identificador de servidor para un valor de applicationName
|
||||||
servertool.getserverid2=\tIdentificador de servidor para el nombre de aplicaci\u00f3n {0} es {1}
|
servertool.getserverid2=\tEl identificador de servidor para applicationName {0} es {1}
|
||||||
|
|
||||||
servertool.list=\n\tlista\n
|
servertool.list=\n\tlist\n
|
||||||
servertool.list1=enumerar todos los servidores registrados
|
servertool.list1=enumerar todos los servidores registrados
|
||||||
servertool.list2=\n\tIdentificador de servidor\tNombre de clase del servidor\t\tAplicaci\u00f3n de servidor\n\t-------------------------\t----------------------------\t\t----------------------\n
|
servertool.list2=\n\tIdentificador de servidor\tNombre de clase del servidor\t\tAplicaci\u00F3n de servidor\n\t-------------------------\t----------------------------\t\t----------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=enumerar los servidores actualmente activos
|
servertool.listactive1=enumerar los servidores actualmente activos
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=enumerar los nombres de aplicaci\u00f3n actualmente definidos
|
servertool.listappnames1=enumerar los nombres de aplicaci\u00F3n actualmente definidos
|
||||||
servertool.listappnames2=Nombres de aplicaci\u00f3n de servidor actualmente definidos:
|
servertool.listappnames2=Nombres de aplicaci\u00F3n de servidor actualmente definidos:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
|
||||||
servertool.shutdown1=apagar un servidor registrado
|
servertool.shutdown1=apagar un servidor registrado
|
||||||
servertool.shutdown2=\tservidor apagado satisfactoriamente.
|
servertool.shutdown2=\tservidor apagado correctamente.
|
||||||
servertool.startserver=\n\tstartup [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
|
||||||
servertool.startserver1=iniciar un servidor registrado
|
servertool.startserver1=iniciar un servidor registrado
|
||||||
servertool.startserver2=\tservidor iniciado satisfactoriamente.
|
servertool.startserver2=\tservidor iniciado correctamente.
|
||||||
|
|
||||||
servertool.quit=\n\tsalir\n
|
servertool.quit=\n\tquit\n
|
||||||
servertool.quit1=salir de esta herramienta
|
servertool.quit1=salir de esta herramienta
|
||||||
|
|
||||||
servertool.help=\thelp\n\tO\n\thelp <nombre de comando>\n
|
servertool.help=\thelp\n\tO\n\thelp <nombre de comando>\n
|
||||||
servertool.help1=obtener ayuda
|
servertool.help1=obtener ayuda
|
||||||
|
|
||||||
servertool.orbidmap=\tSintaxis: orblist [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
|
servertool.orbidmap=\tSintaxis: orblist [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
|
||||||
servertool.orbidmap1=lista de nombres de ORB y su reasignaci\u00f3n
|
servertool.orbidmap1=lista de nombres de ORB y su asignaci\u00F3n
|
||||||
servertool.orbidmap2=\n\tIdentificador de ORB\t\tNombre de ORB\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tIdentificador de ORB\t\tNombre de ORB\n\t------\t\t--------\n
|
||||||
pnameserv.success=Servidor de nombres constante iniciado satisfactoriamente
|
pnameserv.success=NameServer constante iniciado correctamente
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n -ORBInitialPort Puerto inicial (necesario)\n -InitialServicesFile Archivo que contiene una lista de los servicios iniciales (necesario)\n
|
bootstrap.usage=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n -ORBInitialPort Puerto inicial (necesario)\n -InitialServicesFile Archivo que contiene una lista de los servicios iniciales (necesario)\n
|
||||||
bootstrap.success=estableciendo puerto en {0} y leyendo servicios de {1}
|
bootstrap.success=definiendo puerto en {0} y leyendo servicios de {1}
|
||||||
bootstrap.filenotreadable=el archivo {0} no se puede leer
|
bootstrap.filenotreadable=el archivo {0} no se puede leer
|
||||||
bootstrap.filenotfound=no se ha encontrado el archivo {0}
|
bootstrap.filenotfound=no se ha encontrado el archivo {0}
|
||||||
bootstrap.exception=se ha interceptado una excepci\u00f3n al guardar las propiedades en el archivo {0}: Excepci\u00f3n {1}
|
bootstrap.exception=se ha obtenido una excepci\u00F3n al guardar las propiedades en el archivo {0}: Excepci\u00F3n {1}
|
||||||
|
|
||||||
tnameserv.exception=se ha interceptado una excepci\u00f3n al iniciar el servicio de rutina de carga en el puerto {0}
|
tnameserv.exception=se ha obtenido una excepci\u00F3n al iniciar el servicio de inicializaci\u00F3n de datos en el puerto {0}
|
||||||
tnameserv.usage=intente utilizar un puerto distinto con argumentos de l\u00ednea de comandos -ORBInitialPort <n.\u00ba de puerto>
|
tnameserv.usage=intente utilizar un puerto distinto con argumentos de l\u00EDnea de comandos -ORBInitialPort <n.\u00BA de puerto>
|
||||||
tnameserv.invalidhostoption=ORBInitialHost no es una opci\u00f3n v\u00e1lida para NameService
|
tnameserv.invalidhostoption=ORBInitialHost no es una opci\u00F3n v\u00E1lida para NameService
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 no es una opci\u00f3n v\u00e1lida para NameService
|
tnameserv.orbinitialport0=ORBInitialPort 0 no es una opci\u00F3n v\u00E1lida para NameService
|
||||||
tnameserv.hs1=Contexto de asignaci\u00f3n de nombres inicial:\n{0}
|
tnameserv.hs1=Contexto de Nomenclatura Inicial:\n{0}
|
||||||
tnameserv.hs2=TransientNameServer: estableciendo puerto para referencias a objeto iniciales en: {0}
|
tnameserv.hs2=TransientNameServer: definiendo puerto para referencias a objeto iniciales en: {0}
|
||||||
tnameserv.hs3=Listo.
|
tnameserv.hs3=Listo.
|
||||||
|
|
||||||
orbd.commfailure=\nORBD no puede iniciarse porque ORBinitialPort ya est\u00e1 en uso
|
orbd.commfailure=\nORBD no puede iniciarse porque ORBinitialPort ya est\u00E1 en uso
|
||||||
orbd.internalexception=\nORBD no puede iniciarse debido a una excepci\u00f3n interna. \nCausas posibles: \n1. El ORBInitialPort o el ORBActivationPort especificado ya est\u00e1 en uso \n2. No tiene permiso de escritura para orb.db
|
orbd.internalexception=\nORBD no puede iniciarse debido a una excepci\u00F3n interna. \nCausas posibles: \n1. El ORBInitialPort o el ORBActivationPort especificado ya est\u00E1 en uso \n2. No tiene permiso de escritura para orb.db
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,58 +23,58 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=Syntaxe : {0} <options> \n\no\u00f9 <options> comprend :\n -port Port d''activation o\u00f9 le ORBD doit \u00eatre d\u00e9marr\u00e9, 1049 par d\u00e9faut (facultatif)\n -defaultdb R\u00e9pertoire des fichiers ORBD, par d\u00e9faut "./orb.db" (facultatif)\n -serverid ID de serveur pour ORBD, 1 (facultatif)\n -ORBInitialPort Port initial (requis)\n -ORBInitialHost Nom d''h\u00f4te initial (requis)\n
|
orbd.usage=Syntaxe : {0} <options> \n\no\u00F9 <options> comprend :\n -port Port d''activation o\u00F9 l''ORBD doit \u00EAtre d\u00E9marr\u00E9, 1049 par d\u00E9faut (facultatif)\n -defaultdb R\u00E9pertoire des fichiers ORBD, par d\u00E9faut "./orb.db" (facultatif)\n -serverid ID de serveur pour ORBD, 1 par d\u00E9faut (facultatif)\n -ORBInitialPort Port initial (obligatoire)\n -ORBInitialHost Nom d''h\u00F4te initial (obligatoire)\n
|
||||||
|
|
||||||
servertool.usage=Syntaxe : {0} <options> \n\no\u00f9 <options> comprend :\n -ORBInitialPort Port initial (requis)\n -ORBInitialHost Nom d''h\u00f4te initial (requis)\n
|
servertool.usage=Syntaxe : {0} <options> \n\no\u00F9 <options> comprend :\n -ORBInitialPort Port initial (obligatoire)\n -ORBInitialHost Nom d''h\u00F4te initial (obligatoire)\n
|
||||||
servertool.banner=\n\nBienvenue dans l'outil Java IDL Server Tool \nSp\u00e9cifiez des commandes \u00e0 l'invite \n
|
servertool.banner=\n\nBienvenue dans l'outil Java IDL Server Tool \nSp\u00E9cifiez des commandes \u00E0 l'invite \n
|
||||||
servertool.shorthelp=\n\n\tCommandes disponibles : \n\t------------------- \n
|
servertool.shorthelp=\n\n\tCommandes disponibles : \n\t------------------- \n
|
||||||
servertool.baddef=D\u00e9finition de serveur non valide : {0}
|
servertool.baddef=D\u00E9finition de serveur incorrecte : {0}
|
||||||
servertool.nosuchserver=\tce serveur est introuvable.
|
servertool.nosuchserver=\tce serveur est introuvable.
|
||||||
servertool.helddown=\tserveur interrompu.
|
servertool.helddown=\tserveur interrompu.
|
||||||
servertool.nosuchorb=\tORB non valide.
|
servertool.nosuchorb=\tORB non valide.
|
||||||
servertool.serverup=\tle serveur fonctionne d\u00e9j\u00e0.
|
servertool.serverup=\tle serveur fonctionne d\u00E9j\u00E0.
|
||||||
servertool.appname=\tNom d''application - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\tnom - {0}
|
servertool.name=\tname - {0}
|
||||||
servertool.classpath=\tclasspath - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targs - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\tvmargs - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\tserver id - {0}
|
servertool.serverid=\tID de serveur - {0}
|
||||||
servertool.servernotrunning=\tLe serveur ne fonctionne pas.
|
servertool.servernotrunning=\tle serveur ne fonctionne pas.
|
||||||
servertool.register=\n\n\tregister -server <nom de classe de serveur> \n\t -applicationName <deuxi\u00e8me nom de serveur> \n\t -classpath <chemin de classe au serveur> \n\t -args <arguments au serveur> \n\t -vmargs <arguments au serveur Java VM>\n
|
servertool.register=\n\n\tregister -server <nom de classe de serveur> \n\t -applicationName <deuxi\u00E8me nom de serveur> \n\t -classpath <variable d'environnement CLASSPATH du serveur> \n\t -args <arguments au serveur> \n\t -vmargs <arguments au serveur Java VM>\n
|
||||||
servertool.register1=inscrire un serveur activable
|
servertool.register1=inscrire un serveur activable
|
||||||
servertool.register2=\tserveur inscrit (ID serveur = {0}).
|
servertool.register2=\tserveur inscrit (ID serveur = {0}).
|
||||||
servertool.register3=\tserveur inscrit mais interrompu (ID serveur = {0}).
|
servertool.register3=\tserveur inscrit mais interrompu (ID serveur = {0}).
|
||||||
servertool.register4=\tserveur d\u00e9j\u00e0 inscrit (ID serveur = {0}).
|
servertool.register4=\tserveur d\u00E9j\u00E0 inscrit (ID serveur = {0}).
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <ID serveur> | -applicationName <nom> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <ID serveur> | -applicationName <nom> ] \n
|
||||||
servertool.unregister1=d\u00e9sinscrire un serveur inscrit
|
servertool.unregister1=d\u00E9sinscrire un serveur inscrit
|
||||||
servertool.unregister2=\tserveur d\u00e9sinscrit.
|
servertool.unregister2=\tserveur d\u00E9sinscrit.
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <ID serveur> | -applicationName <nom> ] [ <-endpointType <type de point d'extr\u00e9mit\u00e9> ] \n
|
servertool.locate=\n\tlocate [ -serverid <ID serveur> | -applicationName <nom> ] [ <-endpointType <type de point d'extr\u00E9mit\u00E9> ] \n
|
||||||
servertool.locate1=rep\u00e9rer des ports de type sp\u00e9cifique d'un serveur inscrit
|
servertool.locate1=rep\u00E9rer des ports de type sp\u00E9cifique d'un serveur inscrit
|
||||||
servertool.locate2=\n\n\tNom d''h\u00f4te {0} \n\n\t\tPort\t\tType de port\t\tID ORB\n\t\t----\t\t---------\t\t------\n
|
servertool.locate2=\n\n\tNom d''h\u00F4te {0} \n\n\t\tPort\t\tType de port\t\tID ORB\n\t\t----\t\t---------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <ID serveur> | -applicationName <nom> ] [ -orbid <nom ORB> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <ID serveur> | -applicationName <nom> ] [ -orbid <nom ORB> ]\n
|
||||||
servertool.locateorb1=rep\u00e9rer les ports d'un ORB sp\u00e9cifique de serveurs inscrits
|
servertool.locateorb1=rep\u00E9rer les ports d'un ORB sp\u00E9cifique de serveur inscrit
|
||||||
servertool.locateorb2=\n\n\tNom d''h\u00f4te {0} \n\n\t\tPort\t\tType de port\t\tID ORB\n\t\t----\t\t--------\t\t------\n
|
servertool.locateorb2=\n\n\tNom d''h\u00F4te {0} \n\n\t\tPort\t\tType de port\t\tID ORB\n\t\t----\t\t--------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <nom> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <nom> ] \n
|
||||||
servertool.getserverid1=renvoyer l'ID serveur pour un applicationName
|
servertool.getserverid1=renvoyer l'ID serveur pour un nom d'application
|
||||||
servertool.getserverid2=\tL''ID serveur de applicationName {0} est {1}
|
servertool.getserverid2=\tL''ID serveur du nom d''application {0} est {1}
|
||||||
|
|
||||||
servertool.list=\n\tlist
|
servertool.list=\n\tlist\n
|
||||||
servertool.list1=lister tous les serveurs inscrits
|
servertool.list1=lister tous les serveurs inscrits
|
||||||
servertool.list2=\n\tID serveur\tNom de classe serveur\t\tApplication serveur\n\t---------\t-----------------\t\t------------------\n
|
servertool.list2=\n\tID serveur\tNom de classe serveur\t\tApplication serveur\n\t---------\t-----------------\t\t------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=lister les serveurs actifs
|
servertool.listactive1=lister les serveurs actifs
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=lister les noms d'application d\u00e9finis
|
servertool.listappnames1=lister les noms d'application d\u00E9finis
|
||||||
servertool.listappnames2=noms d'application du serveur d\u00e9finis :
|
servertool.listappnames2=Noms d'application du serveur d\u00E9finis :
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <ID serveur> | -applicationName <nom> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <ID serveur> | -applicationName <nom> ]\n
|
||||||
servertool.shutdown1=arr\u00eater un serveur inscrit
|
servertool.shutdown1=arr\u00EAter un serveur inscrit
|
||||||
servertool.shutdown2=\tserveur arr\u00eat\u00e9.
|
servertool.shutdown2=\tserveur arr\u00EAt\u00E9.
|
||||||
servertool.startserver=\n\tstartup [ -serverid <ID serveur> | -applicationName <nom> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <ID serveur> | -applicationName <nom> ]\n
|
||||||
servertool.startserver1=d\u00e9marrer un serveur inscrit
|
servertool.startserver1=d\u00E9marrer un serveur inscrit
|
||||||
servertool.startserver2=\tserveur d\u00e9marr\u00e9.
|
servertool.startserver2=\tserveur d\u00E9marr\u00E9.
|
||||||
|
|
||||||
servertool.quit=\n\tquit\n
|
servertool.quit=\n\tquit\n
|
||||||
servertool.quit1=fermer cet outil
|
servertool.quit1=fermer cet outil
|
||||||
@@ -83,25 +83,25 @@ servertool.help=\thelp\n\tOR\n\thelp <commande>\n
|
|||||||
servertool.help1=afficher l'aide
|
servertool.help1=afficher l'aide
|
||||||
|
|
||||||
servertool.orbidmap=\tSyntaxe : orblist [ -serverid <ID serveur> | -applicationName <nom> ]\n
|
servertool.orbidmap=\tSyntaxe : orblist [ -serverid <ID serveur> | -applicationName <nom> ]\n
|
||||||
servertool.orbidmap1=liste des noms orb et de leur mappage
|
servertool.orbidmap1=liste des noms ORB et de leur mappage
|
||||||
servertool.orbidmap2=\n\tID ORB\t\tNom ORB\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tID ORB\t\tNom ORB\n\t------\t\t--------\n
|
||||||
pnameserv.success=NameServer persistant d\u00e9marr\u00e9
|
pnameserv.success=NameServer persistant d\u00E9marr\u00E9
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=Syntaxe : {0} <options> \n\no\u00f9 <options> comprend :\n -ORBInitialPort Port initial (requis)\n -InitialServicesFile Fichier contenant la liste des services initiaux (requis)\n
|
bootstrap.usage=Syntaxe : {0} <options> \n\no\u00F9 <options> comprend :\n -ORBInitialPort Port initial (obligatoire)\n -InitialServicesFile Fichier contenant la liste des services initiaux (obligatoire)\n
|
||||||
bootstrap.success=configuration du port sur {0} et lecture des services de {1}
|
bootstrap.success=configuration du port sur {0} et lecture des services de {1}
|
||||||
bootstrap.filenotreadable=le fichier {0} n''est pas lisible
|
bootstrap.filenotreadable=le fichier {0} n''est pas lisible
|
||||||
bootstrap.filenotfound=fichier {0} introuvable
|
bootstrap.filenotfound=fichier {0} introuvable
|
||||||
bootstrap.exception=erreur d\u00e9tect\u00e9e pendant l''enregistrement des propri\u00e9t\u00e9s dans le fichier {0} : Erreur {1}
|
bootstrap.exception=exception d\u00E9tect\u00E9e lors de l''enregistrement des propri\u00E9t\u00E9s dans le fichier {0}. Exception : {1}
|
||||||
|
|
||||||
tnameserv.exception=Erreur d\u00e9tect\u00e9e pendant le d\u00e9marrage du service d''amor\u00e7age sur le port {0}
|
tnameserv.exception=exception d\u00E9tect\u00E9e lors du d\u00E9marrage du service bootstrap sur le port {0}
|
||||||
tnameserv.usage=essayez un autre port avec les arguments de ligne de commande -ORBInitialPort <num\u00e9ro de port>
|
tnameserv.usage=essayez un autre port avec les arguments de ligne de commande -ORBInitialPort <num\u00E9ro de port>
|
||||||
tnameserv.invalidhostoption=ORBInitialHost n'est pas une option valide pour NameService
|
tnameserv.invalidhostoption=ORBInitialHost n'est pas une option valide pour NameService
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 n'est pas une option valide pour NameService
|
tnameserv.orbinitialport0=ORBInitialPort 0 n'est pas une option valide pour NameService
|
||||||
tnameserv.hs1=Contexte d''appellation initial :\n{0}
|
tnameserv.hs1=Contexte de d\u00E9nomination initial :\n{0}
|
||||||
tnameserv.hs2=TransientNameServer : configuration du port pour des r\u00e9f\u00e9rences d''objet initial \u00e0 : {0}
|
tnameserv.hs2=TransientNameServer : configuration du port pour des r\u00E9f\u00E9rences d''objet initial sur {0}
|
||||||
tnameserv.hs3=Pr\u00eat.
|
tnameserv.hs3=Pr\u00EAt.
|
||||||
|
|
||||||
orbd.commfailure=\nLe d\u00e9marrage de ORBD a \u00e9chou\u00e9 car ORBinitialPort est d\u00e9j\u00e0 utilis\u00e9
|
orbd.commfailure=\nLe d\u00E9marrage d'ORBD a \u00E9chou\u00E9 car ORBinitialPort est d\u00E9j\u00E0 utilis\u00E9
|
||||||
orbd.internalexception=\nLe d\u00e9marrage de ORBD a \u00e9chou\u00e9 \u00e0 cause d'une exception interne. \nCauses possibles\u00a0: \n1. Le ORBInitialPort ou le ORBActivationPort sp\u00e9cifi\u00e9 est d\u00e9j\u00e0 utilis\u00e9 \n2. Pas d'autorisation en \u00e9criture permettant d'\u00e9crire orb.db
|
orbd.internalexception=\nLe d\u00E9marrage d'ORBD a \u00E9chou\u00E9 en raison d'une exception interne. \nCauses possibles\u00A0: \n1. L'\u00E9l\u00E9ment ORBInitialPort ou ORBActivationPort sp\u00E9cifi\u00E9 est d\u00E9j\u00E0 utilis\u00E9 \n2. Aucune autorisation en \u00E9criture permettant d'\u00E9crire orb.db
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,28 +23,28 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=Utilizzo: {0} <opzioni> \n\ndove <opzioni> comprende:\n -port Porta di attivazione da cui avviare ORBD, default 1049 (opzionale)\n -defaultdb Directory per i file ORBD, default "./orb.db" (opzionale)\n -serverid Id server per ORBD, default 1 (opzionale)\n -ORBInitialPort Porta iniziale (richiesta)\n -ORBInitialHost Nome host iniziale (richiesto)\n
|
orbd.usage=Utilizzo: {0} <opzioni> \n\ndove <opzioni> include:\n -port Porta di attivazione da cui avviare ORBD, valore predefinito 1049 (opzionale)\n -defaultdb Directory per i file ORBD, valore predefinito "./orb.db" (opzionale)\n -serverid ID server per ORBD, valore predefinito 1 (opzionale)\n -ORBInitialPort Porta iniziale (richiesta)\n -ORBInitialHost HostName iniziale (richiesto)\n
|
||||||
|
|
||||||
servertool.usage=Utilizzo: {0} <opzioni> \n\ndove <opzioni> comprende:\n -ORBInitialPort Porta iniziale (richiesta)\n -ORBInitialHost Nome host iniziale (richiesto)\n
|
servertool.usage=Utilizzo: {0} <opzioni> \n\ndove <opzioni> include:\n -ORBInitialPort Porta iniziale (richiesta)\n -ORBInitialHost HostName iniziale (richiesto)\n
|
||||||
servertool.banner=\n\nBenvenuti a Java IDL Server Tool \nimmettere i comandi quando richiesto \n
|
servertool.banner=\n\nBenvenuti in Java IDL Server Tool \nimmettere i comandi quando richiesto \n
|
||||||
servertool.shorthelp=\n\n\tComandi disponibili:\n\t-------------------- \n
|
servertool.shorthelp=\n\n\tComandi disponibili:\n\t-------------------- \n
|
||||||
servertool.baddef=Definizione server errata: {0}
|
servertool.baddef=Definizione server errata: {0}
|
||||||
servertool.nosuchserver=\timpossibile trovare il server indicato.
|
servertool.nosuchserver=\timpossibile trovare il server indicato.
|
||||||
servertool.helddown=\til server \u00e8 mantenuto inattivo.
|
servertool.helddown=\til server \u00E8 mantenuto inattivo.
|
||||||
servertool.nosuchorb=\tORB non valido.
|
servertool.nosuchorb=\tORB non valido.
|
||||||
servertool.serverup=\til server \u00e8 gi\u00e0 attivo.
|
servertool.serverup=\til server \u00E8 gi\u00E0 attivo.
|
||||||
servertool.appname=\tNomeApplicazione - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\tnome - {0}
|
servertool.name=\tnome - {0}
|
||||||
servertool.classpath=\tclasspath - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targom - {0}
|
servertool.args=\targom - {0}
|
||||||
servertool.vmargs=\targomvm - {0}
|
servertool.vmargs=\targomvm - {0}
|
||||||
servertool.serverid=\tid server - {0}
|
servertool.serverid=\tID server - {0}
|
||||||
servertool.servernotrunning=\til server non \u00e8 in funzione.
|
servertool.servernotrunning=\til server non \u00E8 in funzione.
|
||||||
servertool.register=\n\n\tregister -server <nome classe server> \n\t -applicationName <nome server alternativo> \n\t -classpath <classpath per il server> \n\t -args <argom per il server> \n\t -vmargs <argom per la Java VM del server>\n
|
servertool.register=\n\n\tregister -server <nome classe server> \n\t -applicationName <nome server alternativo> \n\t -classpath <classpath per il server> \n\t -args <argom per il server> \n\t -vmargs <argom per la Java VM del server>\n
|
||||||
servertool.register1=registra un server attivabile
|
servertool.register1=registra un server attivabile
|
||||||
servertool.register2=\tserver registrato (idserver = {0}).
|
servertool.register2=\tserver registrato (idserver = {0}).
|
||||||
servertool.register3=\tserver registrato ma mantenuto inattivo (idserver = {0}).
|
servertool.register3=\tserver registrato ma mantenuto inattivo (idserver = {0}).
|
||||||
servertool.register4=\tserver gi\u00e0 registrato (idserver = {0}).
|
servertool.register4=\tserver gi\u00E0 registrato (idserver = {0}).
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <id server> | -applicationName <nome> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <id server> | -applicationName <nome> ] \n
|
||||||
servertool.unregister1=rimuovi un server registrato.
|
servertool.unregister1=rimuovi un server registrato.
|
||||||
@@ -55,19 +55,19 @@ servertool.locate1=individua le porte di un tipo specifico per un server registr
|
|||||||
servertool.locate2=\n\n\tNome host {0} \n\n\t\tPorta\t\tTipo porta\t\tId ORB\n\t\t-----\t\t----------\t\t------\n
|
servertool.locate2=\n\n\tNome host {0} \n\n\t\tPorta\t\tTipo porta\t\tId ORB\n\t\t-----\t\t----------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <id server> | -applicationName <nome> ] [ -orbid <nome ORB> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <id server> | -applicationName <nome> ] [ -orbid <nome ORB> ]\n
|
||||||
servertool.locateorb1=individua le porte per un orb specifico di un server registrato
|
servertool.locateorb1=individua le porte per un orb specifico di un server registrato
|
||||||
servertool.locateorb2=\n\n\tNome host {0} \n\n\t\tPorta\t\tTipoPorta\t\tId ORB\n\t\t-----\t\t---------\t\t------\n
|
servertool.locateorb2=\n\n\tNome host {0} \n\n\t\tPorta\t\tPortType\t\tId ORB\n\t\t-----\t\t---------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <nome> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <nome> ] \n
|
||||||
servertool.getserverid1=restituisce l'id server per un applicationName
|
servertool.getserverid1=restituisce l'id server per un applicationName
|
||||||
servertool.getserverid2=\tL''ID server per applicationName {0} \u00e8 {1}
|
servertool.getserverid2=\tL''ID server per applicationName {0} \u00E8 {1}
|
||||||
|
|
||||||
servertool.list=\n\tlist\n
|
servertool.list=\n\tlista\n
|
||||||
servertool.list1=elenca tutti i server registrati
|
servertool.list1=elenca tutti i server registrati
|
||||||
servertool.list2=\n\tID server\tNome classe server\t\tApplicazione server\n\t---------\t------------------\t\t-------------------\n
|
servertool.list2=\n\tID server\tNome classe server\t\tApplicazione server\n\t---------\t------------------\t\t-------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=elenca i server attualmente attivi
|
servertool.listactive1=elenca i server attivi al momento
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=elenca gli applicationName attualmente definiti
|
servertool.listappnames1=elenca applicationNames definiti al momento
|
||||||
servertool.listappnames2=applicationName del server attualmente definiti:
|
servertool.listappnames2=applicationNames del server definiti al momento:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <id server> | -applicationName <nome> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <id server> | -applicationName <nome> ]\n
|
||||||
servertool.shutdown1=arresta un server registrato
|
servertool.shutdown1=arresta un server registrato
|
||||||
@@ -76,32 +76,32 @@ servertool.startserver=\n\tstartup [ -serverid <id server> | -applicationName <n
|
|||||||
servertool.startserver1=avvia un server registrato
|
servertool.startserver1=avvia un server registrato
|
||||||
servertool.startserver2=\tserver avviato correttamente.
|
servertool.startserver2=\tserver avviato correttamente.
|
||||||
|
|
||||||
servertool.quit=\n\tquit\n
|
servertool.quit=\n\tesci\n
|
||||||
servertool.quit1=esci dall'applicazione corrente
|
servertool.quit1=esci dall'applicazione corrente
|
||||||
|
|
||||||
servertool.help=\thelp\n\tOR\n\thelp <nome comando>\n
|
servertool.help=\thelp\n\tOR\n\thelp <nome comando>\n
|
||||||
servertool.help1=get help
|
servertool.help1=Guida
|
||||||
|
|
||||||
servertool.orbidmap=\tUtilizzo: orblist [ -serverid <id server> | -applicationName <nome> ]\n
|
servertool.orbidmap=\tUtilizzo: orblist [ -serverid <id server> | -applicationName <nome> ]\n
|
||||||
servertool.orbidmap1=elenco dei nomi orb e relativa mappatura
|
servertool.orbidmap1=lista nomi orb e relativa mappatura
|
||||||
servertool.orbidmap2=\n\tId ORB\t\tNome ORB\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tId ORB\t\tNome ORB\n\t------\t\t--------\n
|
||||||
pnameserv.success=NameServer persistente avviato correttamente
|
pnameserv.success=NameServer persistente avviato correttamente
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=Utilizzo: {0} <opzioni> \n\ndove <opzioni> comprende:\n -ORBInitialPort Porta iniziale (richiesta)\n -InitialServicesFile File contenente l''elenco dei servizi iniziali (richiesto)\n
|
bootstrap.usage=Utilizzo: {0} <opzioni> \n\ndove <opzioni> include:\n -ORBInitialPort Porta iniziale (richiesta)\n -InitialServicesFile File contenente la lista dei servizi iniziali (richiesto)\n
|
||||||
bootstrap.success=impostazione porta su {0} e lettura servizi da {1} in corso
|
bootstrap.success=impostazione porta su {0} e lettura servizi da {1} in corso
|
||||||
bootstrap.filenotreadable=il file {0} non \u00e8 leggibile
|
bootstrap.filenotreadable=il file {0} non \u00E8 leggibile
|
||||||
bootstrap.filenotfound=impossibile trovare il file {0}
|
bootstrap.filenotfound=impossibile trovare il file {0}
|
||||||
bootstrap.exception=rilevata un''eccezione durante il salvataggio delle propriet\u00e0 nel file {0}: eccezione {1}
|
bootstrap.exception=rilevata un''eccezione durante il salvataggio delle propriet\u00E0 nel file {0}: eccezione {1}
|
||||||
|
|
||||||
tnameserv.exception=rilevata un''eccezione durante l''avvio del servizio di bootstrap sulla porta {0}
|
tnameserv.exception=rilevata un''eccezione durante l''avvio del servizio di bootstrap sulla porta {0}
|
||||||
tnameserv.usage=utilizzare un'altra porta con gli argomenti di riga di comando -ORBInitialPort <n.porta>
|
tnameserv.usage=utilizzare un'altra porta con gli argomenti di riga di comando -ORBInitialPort <n.porta>
|
||||||
tnameserv.invalidhostoption=ORBInitialHost non \u00e8 un'opzione valida per NameService
|
tnameserv.invalidhostoption=ORBInitialHost non \u00E8 un'opzione valida per NameService
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 non \u00e8 un'opzione valida per NameService
|
tnameserv.orbinitialport0=ORBInitialPort 0 non \u00E8 un'opzione valida per NameService
|
||||||
tnameserv.hs1=Contesto di denominazione iniziale:\n{0}
|
tnameserv.hs1=Contesto di denominazione iniziale:\n{0}
|
||||||
tnameserv.hs2=TransientNameServer: impostazione della porta per i riferimenti degli oggetti iniziali a: {0}
|
tnameserv.hs2=TransientNameServer: impostazione della porta per i riferimenti degli oggetti iniziali a: {0}
|
||||||
tnameserv.hs3=Pronto.
|
tnameserv.hs3=Pronto.
|
||||||
|
|
||||||
orbd.commfailure=\nImpossibile avviare ORBD perch\u00e9 ORBinitialPort \u00e8 gi\u00e0 in uso
|
orbd.commfailure=\nImpossibile avviare ORBD perch\u00E9 ORBinitialPort \u00E8 gi\u00E0 in uso
|
||||||
orbd.internalexception=\nImpossibile avviare ORBD a causa di un'eccezione interna. \neCause possibili: \n1. ORBInitialPort o ORBActivationPort specificato gi\u00e0 in uso \n2. Mancanza dei permessi di scrittura per orb.db
|
orbd.internalexception=\nImpossibile avviare ORBD a causa di un'eccezione interna. \neCause possibili: \n1. ORBInitialPort o ORBActivationPort specificato gi\u00E0 in uso \n2. Non esistono autorizzazioni per scrivere orb.db
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,85 +23,85 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=\u4f7f\u3044\u65b9: {0} <options> \n\n<options> \u306b\u306f\u6b21\u306e\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002\n -port ORBD \u306e\u8d77\u52d5\u30dd\u30fc\u30c8\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 1049 (\u30aa\u30d7\u30b7\u30e7\u30f3)\n -defaultdb ORBD \u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f "./orb.db" (\u30aa\u30d7\u30b7\u30e7\u30f3)\n -serverid ORBD \u306e\u30b5\u30fc\u30d0 Id\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306f 1 (\u30aa\u30d7\u30b7\u30e7\u30f3)\n -ORBInitialPort \u521d\u671f\u30dd\u30fc\u30c8 (\u5fc5\u9808)\n -ORBInitialHost \u521d\u671f\u30db\u30b9\u30c8\u540d (\u5fc5\u9808)\n
|
orbd.usage=\u4F7F\u7528\u65B9\u6CD5: {0} <options> \n\n<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u304C\u3042\u308A\u307E\u3059\u3002\n -port ORBD\u306E\u8D77\u52D5\u30DD\u30FC\u30C8\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u306F1049(\u30AA\u30D7\u30B7\u30E7\u30F3)\n -defaultdb ORBD\u30D5\u30A1\u30A4\u30EB\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u306F"./orb.db"(\u30AA\u30D7\u30B7\u30E7\u30F3)\n -serverid ORBD\u306E\u30B5\u30FC\u30D0\u30FCId\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u306F1(\u30AA\u30D7\u30B7\u30E7\u30F3)\n -ORBInitialPort \u521D\u671F\u30DD\u30FC\u30C8(\u5FC5\u9808)\n -ORBInitialHost \u521D\u671F\u30DB\u30B9\u30C8\u540D(\u5FC5\u9808)\n
|
||||||
|
|
||||||
servertool.usage=\u4f7f\u3044\u65b9: {0} <options> \n\n<options> \u306b\u306f\u6b21\u306e\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002\n -ORBInitialPort \u521d\u671f\u30dd\u30fc\u30c8 (\u5fc5\u9808)\n -ORBInitialHost \u521d\u671f\u30db\u30b9\u30c8\u540d (\u5fc5\u9808)\n
|
servertool.usage=\u4F7F\u7528\u65B9\u6CD5: {0} <options> \n\n<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u304C\u3042\u308A\u307E\u3059\u3002\n -ORBInitialPort \u521D\u671F\u30DD\u30FC\u30C8(\u5FC5\u9808)\n -ORBInitialHost \u521D\u671F\u30DB\u30B9\u30C8\u540D(\u5FC5\u9808)\n
|
||||||
servertool.banner=\n\nJava IDL Server Tool \u3078\u3088\u3046\u3053\u305d\n\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u30b3\u30de\u30f3\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 \n
|
servertool.banner=\n\nJava IDL Server Tool\u3078\u3088\u3046\u3053\u305D\n\u30D7\u30ED\u30F3\u30D7\u30C8\u306B\u30B3\u30DE\u30F3\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\n
|
||||||
servertool.shorthelp=\n\n\t\u4f7f\u7528\u53ef\u80fd\u306a\u30b3\u30de\u30f3\u30c9: \n\t------------------- \n
|
servertool.shorthelp=\n\n\t\u4F7F\u7528\u53EF\u80FD\u306A\u30B3\u30DE\u30F3\u30C9: \n\t------------------- \n
|
||||||
servertool.baddef=\u4e0d\u6b63\u306a\u30b5\u30fc\u30d0\u5b9a\u7fa9: {0}
|
servertool.baddef=\u4E0D\u6B63\u306A\u30B5\u30FC\u30D0\u30FC\u5B9A\u7FA9: {0}
|
||||||
servertool.nosuchserver=\t\u6307\u5b9a\u3055\u308c\u305f\u30b5\u30fc\u30d0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
|
servertool.nosuchserver=\t\u6307\u5B9A\u3055\u308C\u305F\u30B5\u30FC\u30D0\u30FC\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002
|
||||||
servertool.helddown=\t\u30b5\u30fc\u30d0\u306f\u505c\u6b62\u3057\u3066\u3044\u307e\u3059\u3002
|
servertool.helddown=\t\u30B5\u30FC\u30D0\u30FC\u306F\u505C\u6B62\u3057\u3066\u3044\u307E\u3059\u3002
|
||||||
servertool.nosuchorb=\tORB \u304c\u7121\u52b9\u3067\u3059\u3002
|
servertool.nosuchorb=\tORB\u304C\u7121\u52B9\u3067\u3059\u3002
|
||||||
servertool.serverup=\t\u30b5\u30fc\u30d0\u306f\u8d77\u52d5\u3057\u3066\u3044\u307e\u3059\u3002
|
servertool.serverup=\t\u30B5\u30FC\u30D0\u30FC\u306F\u8D77\u52D5\u3057\u3066\u3044\u307E\u3059\u3002
|
||||||
servertool.appname=\tapplicationName - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\tname - {0}
|
servertool.name=\tname - {0}
|
||||||
servertool.classpath=\tclasspath - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targs - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\tvmargs - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\tserver id - {0}
|
servertool.serverid=\tserver id - {0}
|
||||||
servertool.servernotrunning=\t\u30b5\u30fc\u30d0\u306f\u7a3c\u52d5\u3057\u3066\u3044\u307e\u305b\u3093\u3002
|
servertool.servernotrunning=\t\u30B5\u30FC\u30D0\u30FC\u306F\u7A3C\u50CD\u3057\u3066\u3044\u307E\u305B\u3093\u3002
|
||||||
servertool.register=\n\n\tregister -server <server class name> \n\t -applicationName <alternate server name> \n\t -classpath <classpath to server> \n\t -args <args to server> \n\t -vmargs <args to server Java VM>\n
|
servertool.register=\n\n\tregister -server <server class name> \n\t -applicationName <alternate server name> \n\t -classpath <classpath to server> \n\t -args <args to server> \n\t -vmargs <args to server Java VM>\n
|
||||||
servertool.register1=\u8d77\u52d5\u53ef\u80fd\u306a\u30b5\u30fc\u30d0\u3092\u767b\u9332\u3057\u307e\u3059\u3002
|
servertool.register1=\u8D77\u52D5\u53EF\u80FD\u306A\u30B5\u30FC\u30D0\u30FC\u3092\u767B\u9332\u3057\u307E\u3059
|
||||||
servertool.register2=\t\u767b\u9332\u3055\u308c\u305f\u30b5\u30fc\u30d0 (serverid = {0})\u3002
|
servertool.register2=\t\u767B\u9332\u3055\u308C\u305F\u30B5\u30FC\u30D0\u30FC(serverid={0})\u3002
|
||||||
servertool.register3=\t\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u304c\u8d77\u52d5\u3057\u3066\u3044\u306a\u3044\u30b5\u30fc\u30d0 (serverid = {0})\u3002
|
servertool.register3=\t\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u304C\u8D77\u52D5\u3057\u3066\u3044\u306A\u3044\u30B5\u30FC\u30D0\u30FC(serverid={0})\u3002
|
||||||
servertool.register4=\t\u767b\u9332\u6e08\u307f\u306e\u30b5\u30fc\u30d0 (serverid = {0})\u3002
|
servertool.register4=\t\u767B\u9332\u6E08\u306E\u30B5\u30FC\u30D0\u30FC(serverid={0})\u3002
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <server id> | -applicationName <name> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.unregister1=\u767b\u9332\u3055\u308c\u305f\u30b5\u30fc\u30d0\u306e\u767b\u9332\u3092\u89e3\u9664\u3057\u307e\u3059\u3002
|
servertool.unregister1=\u767B\u9332\u3055\u308C\u305F\u30B5\u30FC\u30D0\u30FC\u306E\u767B\u9332\u3092\u89E3\u9664\u3057\u307E\u3059
|
||||||
servertool.unregister2=\t\u30b5\u30fc\u30d0\u306e\u767b\u9332\u304c\u89e3\u9664\u3055\u308c\u307e\u3057\u305f\u3002
|
servertool.unregister2=\t\u30B5\u30FC\u30D0\u30FC\u306E\u767B\u9332\u304C\u89E3\u9664\u3055\u308C\u307E\u3057\u305F\u3002
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <server id> | -applicationName <name> ] [ <-endpointType <endpointType> ] \n
|
servertool.locate=\n\tlocate [ -serverid <server id> | -applicationName <name> ] [ <-endpointType <endpointType> ]\n
|
||||||
servertool.locate1=\u767b\u9332\u3055\u308c\u305f\u30b5\u30fc\u30d0\u306e\u7279\u5b9a\u30bf\u30a4\u30d7\u306e\u30dd\u30fc\u30c8\u3092\u691c\u51fa\u3057\u307e\u3059\u3002
|
servertool.locate1=\u767B\u9332\u3055\u308C\u305F\u30B5\u30FC\u30D0\u30FC\u306E\u7279\u5B9A\u30BF\u30A4\u30D7\u306E\u30DD\u30FC\u30C8\u3092\u691C\u51FA\u3057\u307E\u3059
|
||||||
servertool.locate2=\n\n\t\u30db\u30b9\u30c8\u540d {0} \n\n\t\t\u30dd\u30fc\u30c8\t\t\u30dd\u30fc\u30c8\u30bf\u30a4\u30d7\t\tORB ID\n\t\t------\t\t------------\t\t------\n
|
servertool.locate2=\n\n\t\u30DB\u30B9\u30C8\u540D{0}\n\n\t\t\u30DD\u30FC\u30C8\t\t\u30DD\u30FC\u30C8\u30FB\u30BF\u30A4\u30D7\t\tORB ID\n\t\t------\t\t------------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <server id> | -applicationName <name> ] [ -orbid <ORB name> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <server id> | -applicationName <name> ] [ -orbid <ORB name> ]\n
|
||||||
servertool.locateorb1=\u767b\u9332\u3055\u308c\u305f\u30b5\u30fc\u30d0\u306e\u7279\u5b9a ORB \u306e\u30dd\u30fc\u30c8\u3092\u691c\u51fa\u3057\u307e\u3059\u3002
|
servertool.locateorb1=\u767B\u9332\u3055\u308C\u305F\u30B5\u30FC\u30D0\u30FC\u306E\u7279\u5B9AORB\u306E\u30DD\u30FC\u30C8\u3092\u691C\u51FA\u3057\u307E\u3059
|
||||||
servertool.locateorb2=\n\n\t\u30db\u30b9\u30c8\u540d {0} \n\n\t\t\u30dd\u30fc\u30c8\t\t\u30dd\u30fc\u30c8\u30bf\u30a4\u30d7\t\tORB ID\n\t\t------\t\t------------\t\t------\n
|
servertool.locateorb2=\n\n\t\u30DB\u30B9\u30C8\u540D{0}\n\n\t\t\u30DD\u30FC\u30C8\t\t\u30DD\u30FC\u30C8\u30FB\u30BF\u30A4\u30D7\t\tORB ID\n\t\t------\t\t------------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <name> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <name> ]\n
|
||||||
servertool.getserverid1=applicationName \u306e\u30b5\u30fc\u30d0 ID \u3092\u8fd4\u3057\u307e\u3059\u3002
|
servertool.getserverid1=applicationName\u306E\u30B5\u30FC\u30D0\u30FCID\u3092\u8FD4\u3057\u307E\u3059
|
||||||
servertool.getserverid2=\tapplicationName {0} \u306e\u30b5\u30fc\u30d0 ID \u306f {1} \u3067\u3059\u3002
|
servertool.getserverid2=\tapplicationName {0}\u306E\u30B5\u30FC\u30D0\u30FCID\u306F{1}\u3067\u3059
|
||||||
|
|
||||||
servertool.list=\n\t\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002\n
|
servertool.list=\n\t\u30EA\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\n
|
||||||
servertool.list1=\u767b\u9332\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d0\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
|
servertool.list1=\u767B\u9332\u3055\u308C\u305F\u3059\u3079\u3066\u306E\u30B5\u30FC\u30D0\u30FC\u306E\u30EA\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059
|
||||||
servertool.list2=\n\t\u30b5\u30fc\u30d0 Id\t\u30b5\u30fc\u30d0\u306e\u30af\u30e9\u30b9\u540d\t\t\u30b5\u30fc\u30d0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\n\t---------\t----------------\t\t----------------------\n
|
servertool.list2=\n\t\u30B5\u30FC\u30D0\u30FCID\t\u30B5\u30FC\u30D0\u30FC\u306E\u30AF\u30E9\u30B9\u540D\t\t\u30B5\u30FC\u30D0\u30FC\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\n\t---------\t----------------\t\t----------------------\n
|
||||||
servertool.listactive=\n\t\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30b5\u30fc\u30d0\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
|
servertool.listactive=\n\t\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30B5\u30FC\u30D0\u30FC\u306E\u30EA\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059
|
||||||
servertool.listactive1=\u73fe\u5728\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30b5\u30fc\u30d0\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
|
servertool.listactive1=\u73FE\u5728\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30B5\u30FC\u30D0\u30FC\u306E\u30EA\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059
|
||||||
servertool.listappnames=\tapplicationNames \u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002\n
|
servertool.listappnames=\tapplicationNames\u306E\u30EA\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\n
|
||||||
servertool.listappnames1=\u73fe\u5728\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b applicationNames \u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002
|
servertool.listappnames1=\u73FE\u5728\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308BapplicationNames\u306E\u30EA\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059
|
||||||
servertool.listappnames2=\u73fe\u5728\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30b5\u30fc\u30d0 applicationNames:
|
servertool.listappnames2=\u73FE\u5728\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308B\u30B5\u30FC\u30D0\u30FCapplicationNames:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.shutdown1=\u767b\u9332\u3055\u308c\u305f\u30b5\u30fc\u30d0\u3092\u505c\u6b62\u3057\u307e\u3059\u3002
|
servertool.shutdown1=\u767B\u9332\u3055\u308C\u305F\u30B5\u30FC\u30D0\u30FC\u3092\u505C\u6B62\u3057\u307E\u3059
|
||||||
servertool.shutdown2=\t\u30b5\u30fc\u30d0\u306e\u505c\u6b62\u306b\u6210\u529f\u3057\u307e\u3057\u305f\u3002
|
servertool.shutdown2=\t\u30B5\u30FC\u30D0\u30FC\u306E\u505C\u6B62\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002
|
||||||
servertool.startserver=\n\tstartup [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.startserver1=\u767b\u9332\u3055\u308c\u305f\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002
|
servertool.startserver1=\u767B\u9332\u3055\u308C\u305F\u30B5\u30FC\u30D0\u30FC\u3092\u8D77\u52D5\u3057\u307E\u3059
|
||||||
servertool.startserver2=\t\u30b5\u30fc\u30d0\u306e\u8d77\u52d5\u306b\u6210\u529f\u3057\u307e\u3057\u305f\u3002
|
servertool.startserver2=\t\u30B5\u30FC\u30D0\u30FC\u306E\u8D77\u52D5\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002
|
||||||
|
|
||||||
servertool.quit=\n\tquit\n
|
servertool.quit=\n\t\u7D42\u4E86\u3057\u307E\u3059\n
|
||||||
servertool.quit1=\u3053\u306e\u30c4\u30fc\u30eb\u3092\u7d42\u4e86\u3057\u307e\u3059\u3002
|
servertool.quit1=\u3053\u306E\u30C4\u30FC\u30EB\u3092\u7D42\u4E86\u3057\u307E\u3059
|
||||||
|
|
||||||
servertool.help=\thelp\n\t\u307e\u305f\u306f\n\thelp <command name>\n
|
servertool.help=\thelp\n\t\u307E\u305F\u306F\n\thelp <command name>\n
|
||||||
servertool.help1=\u30d8\u30eb\u30d7\u3092\u8868\u793a\u3057\u307e\u3059\u3002
|
servertool.help1=\u30D8\u30EB\u30D7\u3092\u8868\u793A\u3057\u307E\u3059
|
||||||
|
|
||||||
servertool.orbidmap=\t\u4f7f\u3044\u65b9: orblist [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.orbidmap=\t\u4F7F\u7528\u65B9\u6CD5: orblist [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.orbidmap1=ORB \u540d\u304a\u3088\u3073\u305d\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u306e\u30ea\u30b9\u30c8
|
servertool.orbidmap1=ORB\u540D\u304A\u3088\u3073\u305D\u306E\u30DE\u30C3\u30D4\u30F3\u30B0\u306E\u30EA\u30B9\u30C8
|
||||||
servertool.orbidmap2=\n\tORB Id\t\tORB \u540d\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tORB ID\t\tORB\u540D\n\t------\t\t--------\n
|
||||||
pnameserv.success=\u6301\u7d9a NameServer \u306e\u8d77\u52d5\u306b\u6210\u529f\u3057\u307e\u3057\u305f\u3002
|
pnameserv.success=\u6301\u7D9ANameServer\u306E\u8D77\u52D5\u306B\u6210\u529F\u3057\u307E\u3057\u305F
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=\u4f7f\u3044\u65b9: {0} <options> \n\n<options> \u306b\u306f\u6b21\u306e\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002\n -ORBInitialPort \u521d\u671f\u30dd\u30fc\u30c8 (\u5fc5\u9808)\n -InitialServicesFile \u521d\u671f\u30b5\u30fc\u30d3\u30b9\u30ea\u30b9\u30c8\u3092\u542b\u3080\u30d5\u30a1\u30a4\u30eb (\u5fc5\u9808)\n
|
bootstrap.usage=\u4F7F\u7528\u65B9\u6CD5: {0} <options> \n\n<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u304C\u3042\u308A\u307E\u3059\u3002\n -ORBInitialPort \u521D\u671F\u30DD\u30FC\u30C8(\u5FC5\u9808)\n -InitialServicesFile \u521D\u671F\u30B5\u30FC\u30D3\u30B9\u30FB\u30EA\u30B9\u30C8\u3092\u542B\u3080\u30D5\u30A1\u30A4\u30EB(\u5FC5\u9808)\n
|
||||||
bootstrap.success=\u30dd\u30fc\u30c8\u3092 {0} \u306b\u8a2d\u5b9a\u3057\u3001{1} \u304b\u3089\u30b5\u30fc\u30d3\u30b9\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002
|
bootstrap.success=\u30DD\u30FC\u30C8\u3092{0}\u306B\u8A2D\u5B9A\u3057\u3001{1}\u304B\u3089\u30B5\u30FC\u30D3\u30B9\u3092\u8AAD\u307F\u8FBC\u307F\u307E\u3059
|
||||||
bootstrap.filenotreadable=\u30d5\u30a1\u30a4\u30eb {0} \u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3002
|
bootstrap.filenotreadable=\u30D5\u30A1\u30A4\u30EB{0}\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093
|
||||||
bootstrap.filenotfound=\u30d5\u30a1\u30a4\u30eb {0} \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002
|
bootstrap.filenotfound=\u30D5\u30A1\u30A4\u30EB{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
|
||||||
bootstrap.exception=\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u30d5\u30a1\u30a4\u30eb {0} \u306b\u4fdd\u5b58\u4e2d\u306b\u4f8b\u5916\u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f: \u4f8b\u5916 {1}
|
bootstrap.exception=\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u30D5\u30A1\u30A4\u30EB{0}\u306B\u4FDD\u5B58\u4E2D\u306B\u4F8B\u5916\u3092\u6355\u6349\u3057\u307E\u3057\u305F: \u4F8B\u5916{1}
|
||||||
|
|
||||||
tnameserv.exception=\u30dd\u30fc\u30c8 {0} \u3067\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u30b5\u30fc\u30d3\u30b9\u3092\u8d77\u52d5\u4e2d\u306b\u4f8b\u5916\u3092\u30ad\u30e3\u30c3\u30c1\u3057\u307e\u3057\u305f\u3002
|
tnameserv.exception=\u30DD\u30FC\u30C8{0}\u3067\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30B5\u30FC\u30D3\u30B9\u3092\u8D77\u52D5\u4E2D\u306B\u4F8B\u5916\u3092\u6355\u6349\u3057\u307E\u3057\u305F
|
||||||
tnameserv.usage=\u30b3\u30de\u30f3\u30c9\u884c\u5f15\u6570 -ORBInitialPort <portno> \u3092\u4f7f\u3063\u3066\u5225\u306e\u30dd\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
tnameserv.usage=\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u5F15\u6570-ORBInitialPort<portno>\u3092\u4F7F\u7528\u3057\u3066\u5225\u306E\u30DD\u30FC\u30C8\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
|
||||||
tnameserv.invalidhostoption=ORBInitialHost \u306f NameService \u306b\u6709\u52b9\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
|
tnameserv.invalidhostoption=ORBInitialHost\u306FNameService\u306B\u6709\u52B9\u306A\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u306F\u3042\u308A\u307E\u305B\u3093
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 \u306f NameService \u306b\u6709\u52b9\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002
|
tnameserv.orbinitialport0=ORBInitialPort 0\u306FNameService\u306B\u6709\u52B9\u306A\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u306F\u3042\u308A\u307E\u305B\u3093
|
||||||
tnameserv.hs1=\u521d\u671f\u30cd\u30fc\u30df\u30f3\u30b0\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8:\n{0}
|
tnameserv.hs1=\u521D\u671F\u30CD\u30FC\u30DF\u30F3\u30B0\u30FB\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8:\n{0}
|
||||||
tnameserv.hs2=TransientNameServer: \u521d\u671f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u53c2\u7167\u306e\u30dd\u30fc\u30c8\u3092 {0} \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002
|
tnameserv.hs2=TransientNameServer: \u521D\u671F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u53C2\u7167\u306E\u30DD\u30FC\u30C8\u3092{0}\u306B\u8A2D\u5B9A\u3057\u307E\u3059
|
||||||
tnameserv.hs3=\u6e96\u5099\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002
|
tnameserv.hs3=\u6E96\u5099\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002
|
||||||
|
|
||||||
orbd.commfailure=\nORBinitialPort \u304c\u4f7f\u7528\u4e2d\u3067\u3042\u308b\u305f\u3081\u3001ORBD \u306e\u8d77\u52d5\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
|
orbd.commfailure=\nORBinitialPort\u304C\u4F7F\u7528\u4E2D\u3067\u3042\u308B\u305F\u3081\u3001ORBD\u306E\u8D77\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F
|
||||||
orbd.internalexception=\n\u5185\u90e8\u4f8b\u5916\u306e\u305f\u3081\u306b ORBD \u306e\u8d77\u52d5\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\n\u8003\u3048\u3089\u308c\u308b\u539f\u56e0: \n1. \u6307\u5b9a\u3055\u308c\u305f ORBInitialPort \u307e\u305f\u306f ORBActivationPort \u304c\u4f7f\u7528\u4e2d\n2. orb.db \u3078\u306e\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u304c\u306a\u3044
|
orbd.internalexception=\n\u5185\u90E8\u4F8B\u5916\u306E\u305F\u3081\u306BORBD\u306E\u8D77\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\n\u8003\u3048\u3089\u308C\u308B\u539F\u56E0: \n1. \u6307\u5B9A\u3055\u308C\u305FORBInitialPort\u307E\u305F\u306FORBActivationPort\u304C\u4F7F\u7528\u4E2D\n2. orb.db\u3078\u306E\u66F8\u8FBC\u307F\u6A29\u9650\u304C\u306A\u3044
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,85 +23,85 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=\uc0ac\uc6a9\ubc95: {0} <\uc635\uc158> \n\n<\uc635\uc158>\uc5d0 \ub4e4\uc5b4\uac00\ub294 \ud56d\ubaa9\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n -port ORBD\uac00 \uc2dc\uc791\ub418\uc5b4\uc57c \ud558\ub294 \ud65c\uc131 \ud3ec\ud2b8\ub85c \uae30\ubcf8\uac12\uc740 1049\uc785\ub2c8\ub2e4(\uc120\ud0dd \uc0ac\ud56d).\n -defaultdb ORBD \ud30c\uc77c\uc758 \ub514\ub809\ud1a0\ub9ac. \uae30\ubcf8\uac12\uc740 "./orb.db"\uc785\ub2c8\ub2e4(\uc120\ud0dd \uc0ac\ud56d).\n -serverid ORBD\uc758 \uc11c\ubc84 ID. \uae30\ubcf8\uac12\uc740 1 \uc785\ub2c8\ub2e4(\uc120\ud0dd \uc0ac\ud56d).\n -ORBInitialPort \ucd08\uae30 \ud3ec\ud2b8(\ud544\uc218)\n -ORBInitialHost \ucd08\uae30 \ud638\uc2a4\ud2b8\uba85(\ud544\uc218)\n
|
orbd.usage=\uC0AC\uC6A9\uBC95: {0} <options> \n\n\uC5EC\uAE30\uC11C <options>\uB294 \uB2E4\uC74C\uACFC \uAC19\uC2B5\uB2C8\uB2E4.\n -port ORBD\uAC00 \uC2DC\uC791\uB418\uC5B4\uC57C \uD558\uB294 \uD65C\uC131 \uD3EC\uD2B8\uB85C, \uAE30\uBCF8\uAC12\uC740 1049\uC785\uB2C8\uB2E4(\uC120\uD0DD \uC0AC\uD56D).\n -defaultdb ORBD \uD30C\uC77C\uC758 \uB514\uB809\uD1A0\uB9AC\uB85C, \uAE30\uBCF8\uAC12\uC740 "./orb.db"\uC785\uB2C8\uB2E4(\uC120\uD0DD \uC0AC\uD56D).\n -serverid ORBD\uC758 \uC11C\uBC84 ID\uB85C, \uAE30\uBCF8\uAC12\uC740 1 \uC785\uB2C8\uB2E4(\uC120\uD0DD \uC0AC\uD56D).\n -ORBInitialPort \uCD08\uAE30 \uD3EC\uD2B8\uC785\uB2C8\uB2E4(\uD544\uC218).\n -ORBInitialHost \uCD08\uAE30 HostName\uC785\uB2C8\uB2E4(\uD544\uC218).\n
|
||||||
|
|
||||||
servertool.usage=\uc0ac\uc6a9\ubc95: {0} <\uc635\uc158> \n\n<\uc635\uc158>\uc5d0 \ub4e4\uc5b4\uac00\ub294 \ud56d\ubaa9\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n -ORBInitialPort \ucd08\uae30 \ud3ec\ud2b8(\ud544\uc218)\n -ORBInitialHost \ucd08\uae30 \ud638\uc2a4\ud2b8\uba85(\ud544\uc218)\n
|
servertool.usage=\uC0AC\uC6A9\uBC95: {0} <options> \n\n\uC5EC\uAE30\uC11C <options>\uB294 \uB2E4\uC74C\uACFC \uAC19\uC2B5\uB2C8\uB2E4.\n -ORBInitialPort \uCD08\uAE30 \uD3EC\uD2B8\uC785\uB2C8\uB2E4(\uD544\uC218).\n -ORBInitialHost \uCD08\uAE30 HostName\uC785\uB2C8\uB2E4(\uD544\uC218).\n
|
||||||
servertool.banner=\n\nJava IDL \uc11c\ubc84 \ub3c4\uad6c\uc785\ub2c8\ub2e4\n\ud504\ub86c\ud504\ud2b8\uc5d0 \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud558\uc2ed\uc2dc\uc624\n
|
servertool.banner=\n\nJava IDL \uC11C\uBC84 \uD234 \uC2DC\uC791 \n\uD504\uB86C\uD504\uD2B8\uC5D0 \uBA85\uB839\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624.\n
|
||||||
servertool.shorthelp=\n\n\t\uc0ac\uc6a9 \uac00\ub2a5\ud55c \uba85\ub839\uc5b4: \n\t------------------- \n
|
servertool.shorthelp=\n\n\t\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uBA85\uB839: \n\t------------------- \n
|
||||||
servertool.baddef=\uc798\ubabb\ub41c \uc11c\ubc84 \uc815\uc758: {0}
|
servertool.baddef=\uC798\uBABB\uB41C \uC11C\uBC84 \uC815\uC758: {0}
|
||||||
servertool.nosuchserver=\t\ud574\ub2f9 \uc11c\ubc84\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
|
servertool.nosuchserver=\t\uD574\uB2F9 \uC11C\uBC84\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
|
||||||
servertool.helddown=\t\uc11c\ubc84\uac00 \ub2e4\uc6b4\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
servertool.helddown=\t\uC11C\uBC84\uC758 \uC791\uB3D9\uC774 \uC911\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
|
||||||
servertool.nosuchorb=\t\uc798\ubabb\ub41c ORB.
|
servertool.nosuchorb=\tORB\uAC00 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4.
|
||||||
servertool.serverup=\t\uc11c\ubc84\uac00 \uc774\ubbf8 \uac00\ub3d9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
servertool.serverup=\t\uC11C\uBC84\uAC00 \uC774\uBBF8 \uC791\uB3D9 \uC911\uC785\uB2C8\uB2E4.
|
||||||
servertool.appname=\t\uc751\uc6a9\ud504\ub85c\uadf8\ub7a8 \uc774\ub984 - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\t\uc774\ub984 - {0}
|
servertool.name=\tname - {0}
|
||||||
servertool.classpath=\tclasspath - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targs - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\tvmargs - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\t\uc11c\ubc84 ID - {0}
|
servertool.serverid=\tserver id - {0}
|
||||||
servertool.servernotrunning=\t\uc11c\ubc84\uac00 \uc2e4\ud589 \uc911\uc774 \uc544\ub2d9\ub2c8\ub2e4.
|
servertool.servernotrunning=\t\uC11C\uBC84\uAC00 \uC2E4\uD589 \uC911\uC774 \uC544\uB2D9\uB2C8\uB2E4.
|
||||||
servertool.register=\n\n\tregister -server <\uc11c\ubc84 \ud074\ub798\uc2a4 \uc774\ub984> \n\t -applicationName <\ub300\uccb4 \uc11c\ubc84 \uc774\ub984> \n\t -classpath <\uc11c\ubc84\uc758 classpath> \n\t -args <\uc11c\ubc84 \uc778\uc790> \n\t -vmargs <\uc11c\ubc84 Java VM \uc778\uc790>\n
|
servertool.register=\n\n\tregister -server <server class name> \n\t -applicationName <alternate server name> \n\t -classpath <classpath to server> \n\t -args <args to server> \n\t -vmargs <args to server Java VM>\n
|
||||||
servertool.register1=\ud65c\uc131 \uac00\ub2a5 \uc11c\ubc84 \ub4f1\ub85d
|
servertool.register1=\uD65C\uC131 \uAC00\uB2A5 \uC11C\uBC84 \uB4F1\uB85D
|
||||||
servertool.register2=\t\uc11c\ubc84\uac00 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4(serverid = {0}).
|
servertool.register2=\t\uC11C\uBC84\uAC00 \uB4F1\uB85D\uB418\uC5C8\uC2B5\uB2C8\uB2E4(serverid = {0}).
|
||||||
servertool.register3=\t\uc11c\ubc84\uac00 \ub4f1\ub85d\ub418\uc5c8\uc9c0\ub9cc \ub2e4\uc6b4\ub418\uc5c8\uc2b5\ub2c8\ub2e4(serverid = {0}).
|
servertool.register3=\t\uC11C\uBC84\uAC00 \uB4F1\uB85D\uB418\uC5C8\uC9C0\uB9CC \uC791\uB3D9\uC774 \uC911\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4(serverid = {0}).
|
||||||
servertool.register4=\t\uc11c\ubc84\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4(serverid = {0}).
|
servertool.register4=\t\uC11C\uBC84\uAC00 \uC774\uBBF8 \uB4F1\uB85D\uB418\uC5C8\uC2B5\uB2C8\uB2E4(serverid = {0}).
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <\uc11c\ubc84 ID> | -applicationName <\uc774\ub984> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <server id> | -applicationName <name> ] \n
|
||||||
servertool.unregister1=\ub4f1\ub85d\ub41c \uc11c\ubc84\uc758 \ub4f1\ub85d\uc744 \ucde8\uc18c\ud569\ub2c8\ub2e4
|
servertool.unregister1=\uB4F1\uB85D\uB41C \uC11C\uBC84\uC758 \uB4F1\uB85D \uD574\uC81C
|
||||||
servertool.unregister2=\t\uc11c\ubc84\uac00 \ub4f1\ub85d \ucde8\uc18c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
servertool.unregister2=\t\uC11C\uBC84\uC758 \uB4F1\uB85D\uC774 \uD574\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <\uc11c\ubc84 ID> | -applicationName <\uc774\ub984> ] [ <-endpointType <Endpoint \uc885\ub958> ] \n
|
servertool.locate=\n\tlocate [ -serverid <server id> | -applicationName <name> ] [ <-endpointType <endpointType> ] \n
|
||||||
servertool.locate1=\ub4f1\ub85d\ub41c \uc11c\ubc84\uc5d0 \ub300\ud55c \ud2b9\uc815 \uc885\ub958\uc758 \ud3ec\ud2b8\ub97c \ucc3e\uc2b5\ub2c8\ub2e4
|
servertool.locate1=\uB4F1\uB85D\uB41C \uC11C\uBC84\uC5D0 \uB300\uD55C \uD2B9\uC815 \uC720\uD615\uC758 \uD3EC\uD2B8 \uCC3E\uAE30
|
||||||
servertool.locate2=\n\n\t\ud638\uc2a4\ud2b8 \uc774\ub984 {0} \n\n\t\t\ud3ec\ud2b8\t\t\ud3ec\ud2b8 \uc885\ub958\t\tORB ID\n\t\t----\t\t---------\t\t------\n
|
servertool.locate2=\n\n\t\uD638\uC2A4\uD2B8 \uC774\uB984 {0} \n\n\t\t\uD3EC\uD2B8\t\t\uD3EC\uD2B8 \uC720\uD615\t\tORB ID\n\t\t----\t\t---------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <\uc11c\ubc84 ID> | -applicationName <\uc774\ub984> ] [ -orbid <ORB \uc774\ub984> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <server id> | -applicationName <name> ] [ -orbid <ORB name> ]\n
|
||||||
servertool.locateorb1=\ub4f1\ub85d\ub41c \uc11c\ubc84\uc758 \ud2b9\uc815 ORB\uc5d0 \ub300\ud55c \ud3ec\ud2b8\ub97c \ucc3e\uc2b5\ub2c8\ub2e4
|
servertool.locateorb1=\uB4F1\uB85D\uB41C \uC11C\uBC84\uC5D0 \uB300\uD55C \uD2B9\uC815 ORB\uC758 \uD3EC\uD2B8 \uCC3E\uAE30
|
||||||
servertool.locateorb2=\n\n\t\ud638\uc2a4\ud2b8 \uc774\ub984 {0} \n\n\t\t\ud3ec\ud2b8\t\t\ud3ec\ud2b8 \uc885\ub958\t\tORB ID\n\t\t----\t\t--------\t\t------\n
|
servertool.locateorb2=\n\n\t\uD638\uC2A4\uD2B8 \uC774\uB984 {0} \n\n\t\t\uD3EC\uD2B8\t\tPortType\t\tORB ID\n\t\t----\t\t--------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <\uc774\ub984> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <name> ] \n
|
||||||
servertool.getserverid1=\uc9c0\uc815\ud55c \uc751\uc6a9\ud504\ub85c\uadf8\ub7a8 \uc774\ub984\uc5d0 \ub300\ud55c \uc11c\ubc84 ID\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.
|
servertool.getserverid1=applicationName\uC5D0 \uB300\uD55C \uC11C\uBC84 ID \uBC18\uD658
|
||||||
servertool.getserverid2=\t\uc751\uc6a9\ud504\ub85c\uadf8\ub7a8 \uc774\ub984 {0}\uc5d0 \ub300\ud55c \uc11c\ubc84 ID\ub294 {1}\uc785\ub2c8\ub2e4.
|
servertool.getserverid2=\tapplicationName {0}\uC5D0 \uB300\uD55C \uC11C\uBC84 ID\uB294 {1}\uC785\uB2C8\uB2E4.
|
||||||
|
|
||||||
servertool.list=\n\t\ubaa9\ub85d\n
|
servertool.list=\n\t\uBAA9\uB85D\n
|
||||||
servertool.list1=\ub4f1\ub85d\ub41c \uc11c\ubc84\ub97c \ubaa8\ub450 \ub098\uc5f4\ud569\ub2c8\ub2e4.
|
servertool.list1=\uB4F1\uB85D\uB41C \uC11C\uBC84 \uBAA8\uB450 \uB098\uC5F4
|
||||||
servertool.list2=\n\t\uc11c\ubc84 ID\t\uc11c\ubc84 \ud074\ub798\uc2a4 \uc774\ub984\t\t\uc11c\ubc84 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\n\t---------\t-----------------\t\t------------------\n
|
servertool.list2=\n\t\uC11C\uBC84 ID\t\uC11C\uBC84 \uD074\uB798\uC2A4 \uC774\uB984\t\t\uC11C\uBC84 \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8\n\t---------\t-----------------\t\t------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=\ud604\uc7ac\uc758 \ud65c\uc131 \uc11c\ubc84\ub97c \ub098\uc5f4\ud569\ub2c8\ub2e4.
|
servertool.listactive1=\uD604\uC7AC \uD65C\uC131 \uC11C\uBC84 \uB098\uC5F4
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=\ud604\uc7ac \uc815\uc758\ub41c \uc751\uc6a9\ud504\ub85c\uadf8\ub7a8 \uc774\ub984\uc744 \ub098\uc5f4\ud569\ub2c8\ub2e4.
|
servertool.listappnames1=\uD604\uC7AC \uC815\uC758\uB41C applicationNames \uB098\uC5F4
|
||||||
servertool.listappnames2=\ud604\uc7ac \uc815\uc758\ub41c \uc11c\ubc84 \uc751\uc6a9\ud504\ub85c\uadf8\ub7a8 \uc774\ub984:
|
servertool.listappnames2=\uD604\uC7AC \uC815\uC758\uB41C \uC11C\uBC84 applicationNames:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <\uc11c\ubc84 ID> | -applicationName <\uc774\ub984> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.shutdown1=\ub4f1\ub85d\ub41c \uc11c\ubc84\ub97c \uc885\ub8cc\ud569\ub2c8\ub2e4.
|
servertool.shutdown1=\uB4F1\uB85D\uB41C \uC11C\uBC84 \uC885\uB8CC
|
||||||
servertool.shutdown2=\t\uc11c\ubc84\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc885\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
servertool.shutdown2=\t\uC11C\uBC84\uAC00 \uC131\uACF5\uC801\uC73C\uB85C \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
|
||||||
servertool.startserver=\n\tstartup [ -serverid <\uc11c\ubc84 ID> | -applicationName <\uc774\ub984> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.startserver1=\ub4f1\ub85d\ub41c \uc11c\ubc84\ub97c \uc2dc\uc791\ud569\ub2c8\ub2e4.
|
servertool.startserver1=\uB4F1\uB85D\uB41C \uC11C\uBC84 \uC2DC\uC791
|
||||||
servertool.startserver2=\t\uc11c\ubc84\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc2dc\uc791\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
servertool.startserver2=\t\uC11C\uBC84\uAC00 \uC131\uACF5\uC801\uC73C\uB85C \uC2DC\uC791\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
|
||||||
|
|
||||||
servertool.quit=\n\tquit\n
|
servertool.quit=\n\tquit\n
|
||||||
servertool.quit1=\uc774 \ub3c4\uad6c\ub97c \uc885\ub8cc\ud569\ub2c8\ub2e4.
|
servertool.quit1=\uC774 \uD234 \uC885\uB8CC
|
||||||
|
|
||||||
servertool.help=\thelp\n\t\ub610\ub294\n\thelp <\uba85\ub839\uc5b4 \uc774\ub984>\n
|
servertool.help=\thelp\n\tOR\n\thelp <command name>\n
|
||||||
servertool.help1=\ub3c4\uc6c0\ub9d0\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.
|
servertool.help1=\uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
|
||||||
|
|
||||||
servertool.orbidmap=\tUsage:orblist [ -serverid <\uc11c\ubc84 ID> | -applicationName <\uc774\ub984> ]\n
|
servertool.orbidmap=\t\uC0AC\uC6A9\uBC95: orblist [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.orbidmap1=ORB \uc774\ub984\uacfc \ud574\ub2f9 \ub9e4\ud551\uc744 \ub098\uc5f4\ud569\ub2c8\ub2e4
|
servertool.orbidmap1=ORB \uC774\uB984\uACFC \uD574\uB2F9 \uB9E4\uD551 \uB098\uC5F4
|
||||||
servertool.orbidmap2=\n\tORB ID\t\tORB \uc774\ub984\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tORB ID\t\tORB \uC774\uB984\n\t------\t\t--------\n
|
||||||
pnameserv.success=\uc9c0\uc18d \uc774\ub984 \uc11c\ubc84\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc2dc\uc791\ub418\uc5c8\uc2b5\ub2c8\ub2e4
|
pnameserv.success=\uC9C0\uC18D NameServer\uAC00 \uC131\uACF5\uC801\uC73C\uB85C \uC2DC\uC791\uB428
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=\uc0ac\uc6a9\ubc95: {0} <\uc635\uc158> \n\n<\uc635\uc158>\uc5d0 \ub4e4\uc5b4\uac00\ub294 \ud56d\ubaa9\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.\n -ORBInitialPort \ucd08\uae30 \ud3ec\ud2b8(\ud544\uc218)\n -InitialServicesFile \ucd08\uae30 \uc11c\ube44\uc2a4 \ubaa9\ub85d\uc774 \ub4e4\uc5b4 \uc788\ub294 \ud30c\uc77c(\ud544\uc218)\n
|
bootstrap.usage=\uC0AC\uC6A9\uBC95: {0} <options> \n\n\uC5EC\uAE30\uC11C <options>\uB294 \uB2E4\uC74C\uACFC \uAC19\uC2B5\uB2C8\uB2E4.\n -ORBInitialPort \uCD08\uAE30 \uD3EC\uD2B8\uC785\uB2C8\uB2E4(\uD544\uC218).\n -InitialServicesFile \uCD08\uAE30 \uC11C\uBE44\uC2A4 \uBAA9\uB85D\uC774 \uB4E4\uC5B4 \uC788\uB294 \uD30C\uC77C\uC785\uB2C8\uB2E4(\uD544\uC218).\n
|
||||||
bootstrap.success=\ud3ec\ud2b8\ub97c {0}(\uc73c)\ub85c \uc124\uc815\ud558\uace0 {1}\uc5d0\uc11c \uc11c\ube44\uc2a4\ub97c \uc77d\uc2b5\ub2c8\ub2e4
|
bootstrap.success=\uD3EC\uD2B8\uB97C {0}(\uC73C)\uB85C \uC124\uC815\uD558\uACE0 {1}\uC5D0\uC11C \uC11C\uBE44\uC2A4\uB97C \uC77D\uB294 \uC911
|
||||||
bootstrap.filenotreadable={0} \ud30c\uc77c\uc744 \uc77d\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4
|
bootstrap.filenotreadable={0} \uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
|
||||||
bootstrap.filenotfound={0} \ud30c\uc77c\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4
|
bootstrap.filenotfound={0} \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
|
||||||
bootstrap.exception={0} \ud30c\uc77c\uc5d0 \ub4f1\ub85d \uc815\ubcf4\ub97c \uc800\uc7a5\ud558\ub294 \ub3d9\uc548 \uc608\uc678\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.\uc608\uc678 {1}
|
bootstrap.exception={0} \uD30C\uC77C\uC5D0 \uC18D\uC131\uC744 \uC800\uC7A5\uD558\uB294 \uC911 \uC608\uC678 \uC0AC\uD56D \uBC1C\uC0DD: {1} \uC608\uC678 \uC0AC\uD56D
|
||||||
|
|
||||||
tnameserv.exception={0} \ud3ec\ud2b8\uc5d0\uc11c \ubd80\ud2b8\uc2a4\ud2b8\ub7a9 \uc11c\ube44\uc2a4\ub97c \uc2dc\uc791\ud558\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4
|
tnameserv.exception={0} \uD3EC\uD2B8\uC5D0\uC11C \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uC11C\uBE44\uC2A4\uB97C \uC2DC\uC791\uD558\uB294 \uC911 \uC608\uC678 \uC0AC\uD56D\uC774 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.
|
||||||
tnameserv.usage=ORBInitialPort <\ud3ec\ud2b8 \ubc88\ud638> \uba85\ub839\uc904 \uc778\uc790\ub85c \ub2e4\ub978 \ud3ec\ud2b8 \uc0ac\uc6a9\uc744 \uc2dc\ub3c4\ud569\ub2c8\ub2e4
|
tnameserv.usage=-ORBInitialPort <portno> \uBA85\uB839\uD589 \uC778\uC218\uB85C \uB2E4\uB978 \uD3EC\uD2B8 \uC0AC\uC6A9 \uC2DC\uB3C4
|
||||||
tnameserv.invalidhostoption=ORBInitialHost\ub294 NameService\uc758 \uc720\ud6a8\ud55c \uc635\uc158\uc774 \uc544\ub2d9\ub2c8\ub2e4.
|
tnameserv.invalidhostoption=ORBInitialHost\uB294 NameService\uC5D0 \uB300\uD574 \uC801\uD569\uD55C \uC635\uC158\uC774 \uC544\uB2D9\uB2C8\uB2E4.
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0\uc740 NameService\uc758 \uc720\ud6a8\ud55c \uc635\uc158\uc774 \uc544\ub2d9\ub2c8\ub2e4
|
tnameserv.orbinitialport0=ORBInitialPort 0\uC740 NameService\uC5D0 \uB300\uD574 \uC801\uD569\uD55C \uC635\uC158\uC774 \uC544\uB2D9\uB2C8\uB2E4.
|
||||||
tnameserv.hs1=\ucd08\uae30 \uba85\ub839 \ucee8\ud14d\uc2a4\ud2b8:\n{0}
|
tnameserv.hs1=\uCD08\uAE30 \uC774\uB984 \uC9C0\uC815 \uCEE8\uD14D\uC2A4\uD2B8:\n{0}
|
||||||
tnameserv.hs2=TransientNameServer:\ucd08\uae30 \uac1d\uccb4 \ucc38\uc870\ub97c \uc704\ud55c \ud3ec\ud2b8 \uc124\uc815: {0} {0}
|
tnameserv.hs2=TransientNameServer: \uCD08\uAE30 \uAC1D\uCCB4 \uCC38\uC870\uB97C \uC704\uD55C \uD3EC\uD2B8\uB97C {0}(\uC73C)\uB85C \uC124\uC815\uD558\uB294 \uC911
|
||||||
tnameserv.hs3=\uc900\ube44\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
|
tnameserv.hs3=\uC900\uBE44\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
|
||||||
|
|
||||||
orbd.commfailure=\nORBinitialPort\uac00 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc774\ubbc0\ub85c ORBD\ub97c \uc2dc\uc791\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
orbd.commfailure=\nORBinitialPort\uAC00 \uC774\uBBF8 \uC0AC\uC6A9 \uC911\uC774\uC5B4\uC11C ORBD \uC2DC\uC791\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.
|
||||||
orbd.internalexception=\n\ub0b4\ubd80 \uc624\ub958\ub85c \uc778\ud574 ORBD\ub97c \uc2dc\uc791\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\uac00\ub2a5\ud55c \uc774\uc720: \n1. \uc9c0\uc815\ud55c ORBInitialPort \ub610\ub294 ORBActivationPort\uac00 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4.\n2. orb.db\uc744 \uc791\uc131\ud560 \uc4f0\uae30 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
|
orbd.internalexception=\n\uB0B4\uBD80 \uC608\uC678 \uC0AC\uD56D\uC73C\uB85C \uC778\uD574 ORBD \uC2DC\uC791\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \n\uAC00\uB2A5\uD55C \uC6D0\uC778: \n1. \uC9C0\uC815\uB41C ORBInitialPort \uB610\uB294 ORBActivationPort\uAC00 \uC774\uBBF8 \uC0AC\uC6A9 \uC911\uC785\uB2C8\uB2E4.\n2. orb.db\uB97C \uC4F8 \uC218 \uC788\uB294 \uC4F0\uAE30 \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
#
|
||||||
# Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,85 +23,85 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=Uso: {0} <options> \n\nem que <options> inclui:\n -port porta de ativa\u00e7\u00e3o na qual o ORBD deve ser iniciado, padr\u00e3o 1049 (opcional)\n -defaultdb diret\u00f3rio dos arquivos ORBD, padr\u00e3o "./orb.db" (opcional)\n -serverid id do servidor para ORBD, padr\u00e3o 1 (opcional)\n -ORBInitialPort porta inicial (necess\u00e1rio)\n -ORBInitialHost nome de host inicial (necess\u00e1rio)\n
|
orbd.usage=Uso: {0} <op\u00E7\u00F5es> \n\nem que <op\u00E7\u00F5es> inclui:\n -port porta de ativa\u00E7\u00E3o na qual o ORBD deve ser iniciado, default 1049 (opcional)\n -defaultdb diret\u00F3rio dos arquivos ORBD, default "./orb.db" (opcional)\n -serverid id do servidor para ORBD, default 1 (opcional)\n -ORBInitialPort porta inicial (obrigat\u00F3rio)\n -ORBInitialHost nome de host inicial (obrigat\u00F3rio)\n
|
||||||
|
|
||||||
servertool.usage=Uso: {0} <options> \n\nem que <options> inclui:\n -ORBInitialPort porta inicial (necess\u00e1rio)\n -ORBInitialHost nome de host inicial (necess\u00e1rio)\n
|
servertool.usage=Uso: {0} <op\u00E7\u00F5es> \n\nem que <op\u00E7\u00F5es> inclui:\n -ORBInitialPort porta inicial (obrigat\u00F3rio)\n -ORBInitialHost nome de host inicial (obrigat\u00F3rio)\n
|
||||||
servertool.banner=\n\nBem-vindo a ferramenta de servidor IDL Java \ninsira os comandos no prompt \n
|
servertool.banner=\n\nBem-vindo \u00E0 Ferramenta de Servidor IDL Java \ninsira os comandos no prompt \n
|
||||||
servertool.shorthelp=\n\n\tComandos dispon\u00edveis: \n\t------------------- \n
|
servertool.shorthelp=\n\n\tComandos Dispon\u00EDveis: \n\t------------------- \n
|
||||||
servertool.baddef=Servidor mal definido: {0}
|
servertool.baddef=Defini\u00E7\u00E3o do servidor inv\u00E1lida: {0}
|
||||||
servertool.nosuchserver=\tservidor n\u00e3o encontrado.
|
servertool.nosuchserver=\tservidor n\u00E3o encontrado.
|
||||||
servertool.helddown=\to servidor est\u00e1 em espera.
|
servertool.helddown=\to servidor est\u00E1 em espera.
|
||||||
servertool.nosuchorb=\tORB inv\u00e1lido.
|
servertool.nosuchorb=\tORB inv\u00E1lido.
|
||||||
servertool.serverup=\to servidor j\u00e1 est\u00e1 ativo.
|
servertool.serverup=\to servidor j\u00E1 est\u00E1 ativo.
|
||||||
servertool.appname=\tapplicationName - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\tname - {0}
|
servertool.name=\tname - {0}
|
||||||
servertool.classpath=\tclasspath - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targs - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\tvmargs - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\tserver id - {0}
|
servertool.serverid=\tserver id - {0}
|
||||||
servertool.servernotrunning=\to servidor n\u00e3o est\u00e1 em execu\u00e7\u00e3o.
|
servertool.servernotrunning=\to servidor n\u00E3o est\u00E1 em execu\u00E7\u00E3o.
|
||||||
servertool.register=\n\n\tregister -server <server class name> \n\t -applicationName <alternate server name> \n\t -classpath <classpath to server> \n\t -args <args to server> \n\t -vmargs <args to server Java VM>\n
|
servertool.register=\n\n\tregister -server <nome da classe do servidor> \n\t -applicationName <nome do servidor alternativo> \n\t -classpath <classpath para o servidor> \n\t -args <args para o servidor> \n\t -vmargs <args para a VM Java do servidor>\n
|
||||||
servertool.register1=registra um servidor ativ\u00e1vel
|
servertool.register1=registra um servidor ativ\u00E1vel
|
||||||
servertool.register2=\tservidor registrado (serverid = {0}).
|
servertool.register2=\tservidor registrado (serverid = {0}).
|
||||||
servertool.register3=\tservidor registrado, mas em espera (serverid = {0}).
|
servertool.register3=\tservidor registrado, mas em espera (serverid = {0}).
|
||||||
servertool.register4=\tservidor j\u00e1 registrado (serverid = {0}).
|
servertool.register4=\tservidor j\u00E1 registrado (serverid = {0}).
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <server id> | -applicationName <name> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <id do servidor> | -applicationName <nome> ] \n
|
||||||
servertool.unregister1=cancela o registro de um servidor registrado
|
servertool.unregister1=cancela o registro de um servidor registrado
|
||||||
servertool.unregister2=\tservidor n\u00e3o registrado.
|
servertool.unregister2=\tservidor n\u00E3o registrado.
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <server id> | -applicationName <name> ] [ <-endpointType <endpointType> ] \n
|
servertool.locate=\n\tlocate [ -serverid <id do servidor> | -applicationName <nome> ] [ <-endpointType <endpointType> ] \n
|
||||||
servertool.locate1=localiza portas de tipo espec\u00edfico para um servidor registrado
|
servertool.locate1=localiza portas de tipo espec\u00EDfico para um servidor registrado
|
||||||
servertool.locate2=\n\n\tNome do host {0} \n\n\t\tPorta\t\tTipo de porta\t\tId do ORB\n\t\t----\t\t---------\t\t------\n
|
servertool.locate2=\n\n\tNome do Host {0} \n\n\t\tPorta\t\tTipo de Porta\t\tId do ORB\n\t\t----\t\t---------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <server id> | -applicationName <name> ] [ -orbid <ORB name> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <id do servidor> | -applicationName <nome> ] [ -orbid <nome ORB> ]\n
|
||||||
servertool.locateorb1=localiza portas para um orb espec\u00edfico de servidor registrado
|
servertool.locateorb1=localiza portas para um orb espec\u00EDfico de servidor registrado
|
||||||
servertool.locateorb2=\n\n\tNome do host {0} \n\n\t\tPorta\t\tTipo de porta\t\tId do ORB\n\t\t----\t\t--------\t\t------\n
|
servertool.locateorb2=\n\n\tNome do Host {0} \n\n\t\tPorta\t\tTipo de Porta\t\tId do ORB\n\t\t----\t\t--------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <name> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <nome> ] \n
|
||||||
servertool.getserverid1=retorna o id do servidor de um applicationName
|
servertool.getserverid1=retorna o id do servidor de um applicationName
|
||||||
servertool.getserverid2=\tID do servidor de applicationName {0} \u00e9 {1}
|
servertool.getserverid2=\tID do Servidor de applicationName {0} \u00E9 {1}
|
||||||
|
|
||||||
servertool.list=\n\tlist\n
|
servertool.list=\n\tlist\n
|
||||||
servertool.list1=lista todos os servidores registrados
|
servertool.list1=lista todos os servidores registrados
|
||||||
servertool.list2=\n\tId do servidor\tNome de classe do servidor\t\tAplicativo do servidor\n\t---------\t-----------------\t\t------------------\n
|
servertool.list2=\n\tId do Servidor\tNome de Classe do Servidor\t\tAplica\u00E7\u00E3o do Servidor\n\t---------\t-----------------\t\t------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=lista os servidores atualmente ativos
|
servertool.listactive1=lista os servidores atualmente ativos
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=lista os applicationNames atualmente definidos
|
servertool.listappnames1=lista os applicationNames atualmente definidos
|
||||||
servertool.listappnames2=applicationNames do servidor atualmente definidos:
|
servertool.listappnames2=applicationNames do servidor definidos atualmente:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <id do servidor> | -applicationName <nome> ]\n
|
||||||
servertool.shutdown1=desliga um servidor registrado
|
servertool.shutdown1=faz shutdown de um servidor registrado
|
||||||
servertool.shutdown2=\tservidor desligado com \u00eaxito.
|
servertool.shutdown2=\tshutdown do servidor bem-sucedido.
|
||||||
servertool.startserver=\n\tstartup [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <id do servidor> | -applicationName <nome> ]\n
|
||||||
servertool.startserver1=inicia um servidor registrado
|
servertool.startserver1=inicia um servidor registrado
|
||||||
servertool.startserver2=\tservidor iniciado com \u00eaxito.
|
servertool.startserver2=\tservidor iniciado com \u00EAxito.
|
||||||
|
|
||||||
servertool.quit=\n\tquit\n
|
servertool.quit=\n\tquit\n
|
||||||
servertool.quit1=sai desta ferramenta
|
servertool.quit1=sai desta ferramenta
|
||||||
|
|
||||||
servertool.help=\thelp\n\tOR\n\thelp <command name>\n
|
servertool.help=\thelp\n\tOR\n\thelp <nome do comando>\n
|
||||||
servertool.help1=obt\u00e9m ajuda
|
servertool.help1=obt\u00E9m ajuda
|
||||||
|
|
||||||
servertool.orbidmap=\tUso: orblist [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.orbidmap=\tUso: orblist [ -serverid <id do servidor> | -applicationName <nome> ]\n
|
||||||
servertool.orbidmap1=lista de nomes de orb e seus mapeamentos
|
servertool.orbidmap1=lista de nomes de orb e seus mapeamentos
|
||||||
servertool.orbidmap2=\n\tId de ORB\t\tNome de ORB\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tId de ORB\t\tNome de ORB\n\t------\t\t--------\n
|
||||||
pnameserv.success=NameServer persistente iniciado com \u00eaxito
|
pnameserv.success=NameServer Persistente Iniciado com \u00CAxito
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=Uso: {0} <options> \n\nem que <options> inclui:\n -ORBInitialPort porta inicial (necess\u00e1rio)\n -InitialServicesFile arquivo que cont\u00e9m a lista de servi\u00e7os iniciais (necess\u00e1rio)\n
|
bootstrap.usage=Uso: {0} <op\u00E7\u00F5es> \n\nem que <op\u00E7\u00F5es> inclui:\n -ORBInitialPort porta inicial (obrigat\u00F3rio)\n -InitialServicesFile arquivo que cont\u00E9m a lista de servi\u00E7os iniciais (obrigat\u00F3rio)\n
|
||||||
bootstrap.success=configurando porta para {0} e lendo servi\u00e7os de {1}
|
bootstrap.success=definindo porta para {0} e lendo servi\u00E7os de {1}
|
||||||
bootstrap.filenotreadable=o arquivo {0} n\u00e3o \u00e9 leg\u00edvel
|
bootstrap.filenotreadable=o arquivo {0} n\u00E3o \u00E9 leg\u00EDvel
|
||||||
bootstrap.filenotfound=arquivo {0} n\u00e3o encontrado
|
bootstrap.filenotfound=arquivo {0} n\u00E3o encontrado
|
||||||
bootstrap.exception=exce\u00e7\u00e3o capturada ao salvar as propriedades no arquivo {0}: Exce\u00e7\u00e3o {1}
|
bootstrap.exception=exce\u00E7\u00E3o capturada ao salvar as propriedades no Arquivo {0}: exce\u00E7\u00E3o {1}
|
||||||
|
|
||||||
tnameserv.exception=uma exce\u00e7\u00e3o capturada ao iniciar o servi\u00e7o de inicializa\u00e7\u00e3o na porta {0}
|
tnameserv.exception=uma exce\u00E7\u00E3o capturada ao iniciar o servi\u00E7o de inicializa\u00E7\u00E3o na porta {0}
|
||||||
tnameserv.usage=tente usar outra porta com os argumentos de linha de comando -ORBInitialPort <portno>
|
tnameserv.usage=tente usar outra porta com os argumentos de linha de comandos -ORBInitialPort <n\u00BA da porta>
|
||||||
tnameserv.invalidhostoption=ORBInitialHost n\u00e3o \u00e9 uma op\u00e7\u00e3o v\u00e1lida para NameService
|
tnameserv.invalidhostoption=ORBInitialHost n\u00E3o \u00E9 uma op\u00E7\u00E3o v\u00E1lida para NameService
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 n\u00e3o \u00e9 uma op\u00e7\u00e3o v\u00e1lida para NameService
|
tnameserv.orbinitialport0=ORBInitialPort 0 n\u00E3o \u00E9 uma op\u00E7\u00E3o v\u00E1lida para NameService
|
||||||
tnameserv.hs1=Contexto de nomea\u00e7\u00e3o inicial:\n{0}
|
tnameserv.hs1=Contexto de Nomea\u00E7\u00E3o Inicial:\n{0}
|
||||||
tnameserv.hs2=TransientNameServer: definindo porta para as refer\u00eancias de objeto iniciais: {0}
|
tnameserv.hs2=TransientNameServer: definindo porta para as refer\u00EAncias de objeto iniciais: {0}
|
||||||
tnameserv.hs3=Pronto.
|
tnameserv.hs3=Pronto.
|
||||||
|
|
||||||
orbd.commfailure=\nFalha ao iniciar ORBD porque ORBinitialPort j\u00e1 est\u00e1 em uso
|
orbd.commfailure=\nFalha ao iniciar ORBD porque ORBinitialPort j\u00E1 est\u00E1 em uso
|
||||||
orbd.internalexception=\nFalha ao iniciar ORBD devido a uma exce\u00e7\u00e3o interna. \nPoss\u00edveis causas: \n1. ORBInitialPort especificado ou ORBActivationPort j\u00e1 em uso \n2. Sem permiss\u00e3o de grava\u00e7\u00e3o para gravar orb.db
|
orbd.internalexception=\nFalha ao iniciar ORBD devido a uma exce\u00E7\u00E3o interna. \nPoss\u00EDveis causas: \n1. ORBInitialPort especificado ou ORBActivationPort j\u00E1 em uso \n2. Sem permiss\u00E3o de grava\u00E7\u00E3o para gravar orb.db
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,85 +23,85 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=G\u00f6r s\u00e5 h\u00e4r: {0} <alternativ> \n\nd\u00e4r <alternativ> omfattar:\n -port Aktiveringsport d\u00e4r ORBD ska startas, standard 1049 (valfritt)\n -defaultdb Katalog f\u00f6r ORBD-filer, standard "./orb.db" (valfritt)\n -serverid Server-ID f\u00f6r ORBD, standard 1 (valfritt)\n -ORBInitialPort Initialport (obligatoriskt)\n -ORBInitialHost Initialt v\u00e4rdnamn (obligatoriskt)\n
|
orbd.usage=Syntax: {0} <alternativ> \n\nd\u00E4r <alternativ> inkluderar:\n -port Aktiveringsport d\u00E4r ORBD ska startas, standard 1049 (valfritt)\n -defaultdb Katalog f\u00F6r ORBD-filer, standard "./orb.db" (valfritt)\n -serverid Server-id f\u00F6r ORBD, standard 1 (valfritt)\n -ORBInitialPort Ursprunglig port (obligatoriskt)\n -ORBInitialHost Ursprungligt v\u00E4rdnamn (obligatoriskt)\n
|
||||||
|
|
||||||
servertool.usage=G\u00f6r s\u00e5 h\u00e4r: {0} <alternativ> \n\nd\u00e4r <alternativ> omfattar:\n -ORBInitialPort Initialport (obligatoriskt)\n -ORBInitialHost Initialt v\u00e4rdnamn (obligatoriskt)\n
|
servertool.usage=Syntax: {0} <alternativ> \n\nd\u00E4r <alternativ> inkluderar:\n -ORBInitialPort Ursprunglig port (obligatoriskt)\n -ORBInitialHost Ursprungligt v\u00E4rdnamn (obligatoriskt)\n
|
||||||
servertool.banner=\n\nV\u00e4lkommen till Java IDL Server Tool \nskriv kommandona vid prompten \n
|
servertool.banner=\n\nV\u00E4lkommen till Java IDL Server Tool \nange kommandona vid kommandoraden \n
|
||||||
servertool.shorthelp=\n\n\tTillg\u00e4ngliga kommandon: \n\t------------------- \n
|
servertool.shorthelp=\n\n\tTillg\u00E4ngliga kommandon: \n\t------------------- \n
|
||||||
servertool.baddef=D\u00e5lig serverdefinition: {0}
|
servertool.baddef=Felaktig serverdefinition: {0}
|
||||||
servertool.nosuchserver=\tn\u00e5gon s\u00e5dan server kan inte hittas.
|
servertool.nosuchserver=\tn\u00E5gon s\u00E5dan server kan inte hittas.
|
||||||
servertool.helddown=\tserver h\u00e5lls nere.
|
servertool.helddown=\tservern h\u00E5lls avst\u00E4ngd.
|
||||||
servertool.nosuchorb=\togiltig ORB.
|
servertool.nosuchorb=\togiltig ORB.
|
||||||
servertool.serverup=\tserver \u00e4r redan uppe.
|
servertool.serverup=\tserver \u00E4r redan startad
|
||||||
servertool.appname=\tapplicationName - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\tnamn - {0}
|
servertool.name=\tnamn - {0}
|
||||||
servertool.classpath=\tclasspath - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targs - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\tvmargs - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\tserver id - {0}
|
servertool.serverid=\tserver id - {0}
|
||||||
servertool.servernotrunning=\tserver k\u00f6rs inte.
|
servertool.servernotrunning=\tserver k\u00F6rs inte.
|
||||||
servertool.register=\n\n\tregister -server <serverklassnamn> \n\t -applicationName <alternativt servernamn> \n\t -classpath <klass\u00f6kv\u00e4g till server> \n\t -args <argument till server> \n\t -vmargs <argument till server-JVM>\n
|
servertool.register=\n\n\tregister -server <serverklassnamn> \n\t -applicationName <alternativt servernamn> \n\t -classpath <klass\u00F6kv\u00E4g till server> \n\t -args <argument till server> \n\t -vmargs <argument till server-JVM>\n
|
||||||
servertool.register1=registrera en aktiverbar server
|
servertool.register1=registrera en aktiverbar server
|
||||||
servertool.register2=\tserver registrerad (serverid = {0}).
|
servertool.register2=\tserver registrerad (serverid = {0}).
|
||||||
servertool.register3=\tserver registrerad men h\u00e5lls nere (serverid = {0}).
|
servertool.register3=\tserver registrerad men h\u00E5lls avst\u00E4ngd(serverid = {0}).
|
||||||
servertool.register4=\tserver har redan registrerats (serverid = {0}).
|
servertool.register4=\tserver har redan registrerats (serverid = {0}).
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <server-id> | -applicationName <namn> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <server-id> | -applicationName <namn> ] \n
|
||||||
servertool.unregister1=avregistrera en registrerad server
|
servertool.unregister1=avregistrera en registrerad server
|
||||||
servertool.unregister2=\tserver oregistrerad.
|
servertool.unregister2=\tserver avregistrerad.
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <server-id> | -applicationName <namn> ] [ <-endpointType <endpointtyp> ] \n
|
servertool.locate=\n\tlocate [ -serverid <server-id> | -applicationName <namn> ] [ <-endpointType <slutpunktstyp> ] \n
|
||||||
servertool.locate1=lokaliserar portar av en viss typ f\u00f6r en registrerad server
|
servertool.locate1=hitta portar av en viss typ f\u00F6r en registrerad server
|
||||||
servertool.locate2=\n\n\tV\u00e4rdnamn {0} \n\n\t\tPort\t\tPorttyp\t\tORB-ID\n\t\t----\t\t---------\t\t------\n
|
servertool.locate2=\n\n\tV\u00E4rdnamn {0} \n\n\t\tPort\t\tPorttyp\t\tORB-id\n\t\t----\t\t---------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <server-id> | -applicationName <namn> ] [ -orbid <ORB-namn> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <server-id> | -applicationName <namn> ] [ -orbid <ORB-namn> ]\n
|
||||||
servertool.locateorb1=lokaliserar portar f\u00f6r en viss ORB f\u00f6r en registrerad server
|
servertool.locateorb1=hitta portar f\u00F6r en viss ORB f\u00F6r en registrerad server
|
||||||
servertool.locateorb2=\n\n\tV\u00e4rdnamn {0} \n\n\t\tPort\t\tPorttyp\t\tORB-ID\n\t\t----\t\t--------\t\t------\n
|
servertool.locateorb2=\n\n\tV\u00E4rdnamn {0} \n\n\t\tPort\t\tPorttyp\t\tORB-id\n\t\t----\t\t--------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <namn> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <namn> ] \n
|
||||||
servertool.getserverid1=returnerar server-id f\u00f6r ett applicationName
|
servertool.getserverid1=returnerar server-id f\u00F6r ett applicationName
|
||||||
servertool.getserverid2=\tServer-ID f\u00f6r applicationName {0} \u00e4r {1}
|
servertool.getserverid2=\tServer-id f\u00F6r applicationName {0} \u00E4r {1}
|
||||||
|
|
||||||
servertool.list=\n\tlist_\n
|
servertool.list=\n\tlist_\n
|
||||||
servertool.list1=listar alla registrerade servrar
|
servertool.list1=listar alla registrerade servrar
|
||||||
servertool.list2=\n\tServer Id\tServer Class Name\t\tServer Application\n\t---------\t-----------------\t\t------------------\n
|
servertool.list2=\n\tServer-id\tServerklassnamn\t\tServerapplikation\n\t---------\t-----------------\t\t------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=listar alla f\u00f6r tillf\u00e4llet aktiva servrar
|
servertool.listactive1=listar alla f\u00F6r tillf\u00E4llet aktiva servrar
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=listar de applicationNames som f\u00f6r tillf\u00e4llet \u00e4r definierade
|
servertool.listappnames1=listar de applicationNames som f\u00F6r tillf\u00E4llet \u00E4r definierade
|
||||||
servertool.listappnames2=Aktuella definierade server-applicationNames:
|
servertool.listappnames2=Definierade applikationsnamn f\u00F6r servern:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <server-id> | -applicationName <namn> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <server-id> | -applicationName <namn> ]\n
|
||||||
servertool.shutdown1=st\u00e4nger en registrerad server
|
servertool.shutdown1=st\u00E4nger av en registrerad server
|
||||||
servertool.shutdown2=\tserver har st\u00e4ngts av.
|
servertool.shutdown2=\tserver har st\u00E4ngts av.
|
||||||
servertool.startserver=\n\tstartup [ -serverid <server-id> | -applicationName <namn> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <server-id> | -applicationName <namn> ]\n
|
||||||
servertool.startserver1=startar en registrerad server
|
servertool.startserver1=startar en registrerad server
|
||||||
servertool.startserver2=\tserver har startats.
|
servertool.startserver2=\tserver har startats.
|
||||||
|
|
||||||
servertool.quit=\n\tquit\n
|
servertool.quit=\n\tquit\n
|
||||||
servertool.quit1=avsluta det h\u00e4r verktyget
|
servertool.quit1=avsluta det h\u00E4r verktyget
|
||||||
|
|
||||||
servertool.help=\thelp\n\tOR\n\thelp <kommandonamn>\n
|
servertool.help=\thelp\n\tELLER\n\thelp <kommandonamn>\n
|
||||||
servertool.help1=get help
|
servertool.help1=f\u00E5 hj\u00E4lp
|
||||||
|
|
||||||
servertool.orbidmap=\tG\u00f6r s\u00e5 h\u00e4r: orblist [ -serverid <server-id> | -applicationName <namn> ]\n
|
servertool.orbidmap=\tSyntax: orblist [ -serverid <server-id> | -applicationName <namn> ]\n
|
||||||
servertool.orbidmap1=lista \u00f6ver ORB-namn och deras mappning
|
servertool.orbidmap1=lista \u00F6ver ORB-namn och deras mappning
|
||||||
servertool.orbidmap2=\n\tORB-ID\t\tORB-namn\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tORB-id\t\tORB-namn\n\t------\t\t--------\n
|
||||||
pnameserv.success=Namnservern har startats utan problem
|
pnameserv.success=Den best\u00E4ndiga namnservern har startats
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=G\u00f6r s\u00e5 h\u00e4r: {0} <alternativ> \n\nd\u00e4r <alternativ> omfattar:\n -ORBInitialPort Initialport (obligatoriskt)\n -InitialServicesFile En fil som inneh\u00e5ller en lista \u00f6ver initiala tj\u00e4nster (obligatoriskt)\n
|
bootstrap.usage=Syntax: {0} <alternativ> \n\nd\u00E4r <alternativ> inkluderar:\n -ORBInitialPort Ursprunglig port (obligatoriskt)\n -InitialServicesFile En fil som inneh\u00E5ller en lista \u00F6ver ursprungliga tj\u00E4nster (obligatoriskt)\n
|
||||||
bootstrap.success=s\u00e4tter porten till {0} och l\u00e4ser tj\u00e4nster fr\u00e5n {1}
|
bootstrap.success=st\u00E4ller in porten till {0} och l\u00E4ser tj\u00E4nster fr\u00E5n {1}
|
||||||
bootstrap.filenotreadable=filen {0} g\u00e5r inte att l\u00e4sa
|
bootstrap.filenotreadable=filen {0} kan inte l\u00E4sas
|
||||||
bootstrap.filenotfound=filen {0} g\u00e5r inte att hitta
|
bootstrap.filenotfound=filen {0} hittas inte
|
||||||
bootstrap.exception=p\u00e5tr\u00e4ffade undantag medan egenskaper sparades i filen {0}: Undantag {1}
|
bootstrap.exception=p\u00E5tr\u00E4ffade undantag medan egenskaper sparades i filen {0}: Undantag {1}
|
||||||
|
|
||||||
tnameserv.exception=p\u00e5tr\u00e4ffade ett undantagsfel n\u00e4r starttj\u00e4nsten startades vid porten {0}
|
tnameserv.exception=p\u00E5tr\u00E4ffade ett undantag n\u00E4r starttj\u00E4nsten startades vid porten {0}
|
||||||
tnameserv.usage=f\u00f6rs\u00f6k att anv\u00e4nda en annan port med kommandoradsargument -ORBInitialPort <portnr>
|
tnameserv.usage=f\u00F6rs\u00F6k att anv\u00E4nda en annan port med kommandoradsargument -ORBInitialPort <portnr>
|
||||||
tnameserv.invalidhostoption=ORBInitialHost \u00e4r inte ett giltigt alternativ f\u00f6r NameService
|
tnameserv.invalidhostoption=ORBInitialHost \u00E4r inte ett giltigt alternativ f\u00F6r NameService
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 \u00e4r inte ett giltigt alternativ f\u00f6r NameService
|
tnameserv.orbinitialport0=ORBInitialPort 0 \u00E4r inte ett giltigt alternativ f\u00F6r NameService
|
||||||
tnameserv.hs1=Initial namngivningskontext:\n{0}
|
tnameserv.hs1=Ursprunglig namngivningskontext:\n{0}
|
||||||
tnameserv.hs2=TransientNameServer: anger port f\u00f6r initiala objektreferenser till: {0}
|
tnameserv.hs2=TransientNameServer: st\u00E4ller in port f\u00F6r ursprungliga objektreferenser till: {0}
|
||||||
tnameserv.hs3=Klar.
|
tnameserv.hs3=Redo.
|
||||||
|
|
||||||
orbd.commfailure=\nMisslyckades starta ORBD f\u00f6r att ORBinitialport anv\u00e4ndas redan
|
orbd.commfailure=\nKunde inte starta ORBD eftersom ORBinitialport redan anv\u00E4nds
|
||||||
orbd.internalexception=\nMisslyckades starta ORBD p\u00e5 grund av internt undantag. \nM\u00f6jliga Orsakar: \n1. Anget ORBInitialPort or ORBAktiveringsPort anv\u00e4ndas redan \n2. No Write Tillst\u00e5nd att skriva orb.db
|
orbd.internalexception=\nKunde inte starta ORBD p\u00E5 grund av internt undantag. \nM\u00F6jliga orsaker: \n1. Angivet ORBInitialPort eller ORBActivationPort anv\u00E4ndas redan \n2. Ingen beh\u00F6righet att skriva till orb.db
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,85 +23,85 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=\u7528\u6cd5\uff1a{0} <\u9009\u9879> \n\n\u5176\u4e2d\uff0c<\u9009\u9879> \u5305\u62ec\uff1a\n -port \u6fc0\u6d3b\u542f\u52a8 ORBD \u7684\u7aef\u53e3\uff0c\u7f3a\u7701\u503c\u4e3a 1049 (\u53ef\u9009)\n -defaultdb ORBD \u6587\u4ef6\u7684\u76ee\u5f55\uff0c\u7f3a\u7701\u503c\u4e3a "./orb.db" (\u53ef\u9009)\n -serverid ORBD \u7684\u670d\u52a1\u5668\u6807\u8bc6\u7b26\uff0c\u7f3a\u7701\u503c\u4e3a 1 (\u53ef\u9009)\n -ORBInitialPort \u521d\u59cb\u7aef\u53e3\uff08\u5fc5\u9700\uff09\n -ORBInitialHost \u521d\u59cb\u4e3b\u673a\u540d\u79f0\uff08\u5fc5\u9700\uff09\n
|
orbd.usage=\u7528\u6CD5: {0} <\u9009\u9879> \n\n\u5176\u4E2D, <\u9009\u9879> \u5305\u62EC: \n -port \u6FC0\u6D3B\u542F\u52A8 ORBD \u7684\u7AEF\u53E3, \u9ED8\u8BA4\u503C\u4E3A 1049 (\u53EF\u9009)\n -defaultdb ORBD \u6587\u4EF6\u7684\u76EE\u5F55, \u9ED8\u8BA4\u503C\u4E3A "./orb.db" (\u53EF\u9009)\n -serverid ORBD \u7684\u670D\u52A1\u5668 ID, \u9ED8\u8BA4\u503C\u4E3A 1 (\u53EF\u9009)\n -ORBInitialPort \u521D\u59CB\u7AEF\u53E3 (\u5FC5\u9700)\n -ORBInitialHost \u521D\u59CB HostName (\u5FC5\u9700)\n
|
||||||
|
|
||||||
servertool.usage=\u7528\u6cd5\uff1a {0} <\u9009\u9879> \n\n\u5176\u4e2d\uff0c<\u9009\u9879> \u5305\u62ec\uff1a\n -ORBInitialPort \u521d\u59cb\u7aef\u53e3\uff08\u5fc5\u9700\uff09\n -ORBInitialHost \u521d\u59cb\u4e3b\u673a\u540d\u79f0\uff08\u5fc5\u9700\uff09\n
|
servertool.usage=\u7528\u6CD5: {0} <\u9009\u9879> \n\n\u5176\u4E2D, <\u9009\u9879> \u5305\u62EC: \n -ORBInitialPort \u521D\u59CB\u7AEF\u53E3 (\u5FC5\u9700)\n -ORBInitialHost \u521D\u59CB HostName (\u5FC5\u9700)\n
|
||||||
servertool.banner=\n\n\u6b22\u8fce\u4f7f\u7528 Java IDL \u670d\u52a1\u5668\u5de5\u5177 \n\u8bf7\u5728\u63d0\u793a\u5904\u8f93\u5165\u547d\u4ee4 \n
|
servertool.banner=\n\n\u6B22\u8FCE\u4F7F\u7528 Java IDL \u670D\u52A1\u5668\u5DE5\u5177 \n\u8BF7\u5728\u63D0\u793A\u5904\u8F93\u5165\u547D\u4EE4 \n
|
||||||
servertool.shorthelp=\n\n\t\u53ef\u7528\u547d\u4ee4\uff1a\n\t------------------- \n
|
servertool.shorthelp=\n\n\t\u53EF\u7528\u547D\u4EE4: \n\t------------------- \n
|
||||||
servertool.baddef=\u9519\u8bef\u7684\u670d\u52a1\u5668\u5b9a\u4e49\uff1a {0}
|
servertool.baddef=\u9519\u8BEF\u7684\u670D\u52A1\u5668\u5B9A\u4E49: {0}
|
||||||
servertool.nosuchserver=\t\u627e\u4e0d\u5230\u8fd9\u79cd\u670d\u52a1\u5668\u3002
|
servertool.nosuchserver=\t\u627E\u4E0D\u5230\u8FD9\u79CD\u670D\u52A1\u5668\u3002
|
||||||
servertool.helddown=\t\u670d\u52a1\u5668\u5df2\u88ab\u5173\u95ed\u3002
|
servertool.helddown=\t\u670D\u52A1\u5668\u5DF2\u88AB\u5173\u95ED\u3002
|
||||||
servertool.nosuchorb=\t\u65e0\u6548\u7684\u5bf9\u8c61\u8bf7\u6c42\u4ee3\u7406\u7a0b\u5e8f (ORB)\u3002
|
servertool.nosuchorb=\t\u65E0\u6548\u7684\u5BF9\u8C61\u8BF7\u6C42\u4EE3\u7406\u7A0B\u5E8F (ORB)\u3002
|
||||||
servertool.serverup=\t\u670d\u52a1\u5668\u5df2\u5f00\u542f\u3002
|
servertool.serverup=\t\u670D\u52A1\u5668\u5DF2\u5728\u8FD0\u884C\u3002
|
||||||
servertool.appname=\tapplicationName - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\tname - {0}
|
servertool.name=\tname - {0}
|
||||||
servertool.classpath=\tclasspath - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targs - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\tvmargs - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\t\u670d\u52a1\u5668\u6807\u8bc6\u7b26 - {0}
|
servertool.serverid=\t\u670D\u52A1\u5668 ID - {0}
|
||||||
servertool.servernotrunning=\t\u670d\u52a1\u5668\u6ca1\u6709\u8fd0\u884c\u3002
|
servertool.servernotrunning=\t\u670D\u52A1\u5668\u6CA1\u6709\u8FD0\u884C\u3002
|
||||||
servertool.register=\n\n\tregister -server<\u670d\u52a1\u5668\u7c7b\u540d\u79f0> \n\t -applicationName <\u5907\u7528\u670d\u52a1\u5668\u540d\u79f0> \n\t -classpath <\u5230\u670d\u52a1\u5668\u7684\u7c7b\u8def\u5f84> \n\t -args <\u670d\u52a1\u5668\u7684\u53c2\u6570> \n\t -vmargs <\u670d\u52a1\u5668 Java VM \u7684\u53c2\u6570>\n
|
servertool.register=\n\n\tregister -server<\u670D\u52A1\u5668\u7C7B\u540D\u79F0> \n\t -applicationName <\u5907\u7528\u670D\u52A1\u5668\u540D\u79F0> \n\t -classpath <\u670D\u52A1\u5668\u7684\u7C7B\u8DEF\u5F84> \n\t -args <\u670D\u52A1\u5668\u7684\u53C2\u6570> \n\t -vmargs <\u670D\u52A1\u5668 Java VM \u7684\u53C2\u6570>\n
|
||||||
servertool.register1=\u6ce8\u518c\u4e00\u4e2a\u53ef\u6fc0\u6d3b\u7684\u670d\u52a1\u5668
|
servertool.register1=\u6CE8\u518C\u4E00\u4E2A\u53EF\u6FC0\u6D3B\u7684\u670D\u52A1\u5668
|
||||||
servertool.register2=\t\u5df2\u6ce8\u518c\u670d\u52a1\u5668 (serverid = {0})\u3002
|
servertool.register2=\t\u5DF2\u6CE8\u518C\u670D\u52A1\u5668 (serverid = {0})\u3002
|
||||||
servertool.register3=\t\u5df2\u6ce8\u518c\u670d\u52a1\u5668\uff0c\u4f46\u5df2\u88ab\u5173\u95ed (serverid = {0})\u3002
|
servertool.register3=\t\u5DF2\u6CE8\u518C\u670D\u52A1\u5668, \u4F46\u5DF2\u88AB\u5173\u95ED (serverid = {0})\u3002
|
||||||
servertool.register4=\t\u670d\u52a1\u5668\u5df2\u6ce8\u518c (serverid = {0})\u3002
|
servertool.register4=\t\u670D\u52A1\u5668\u5DF2\u6CE8\u518C (serverid = {0})\u3002
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <server id> | -applicationName <name> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <server id> | -applicationName <name> ] \n
|
||||||
servertool.unregister1=\u53d6\u6d88\u670d\u52a1\u5668\u6ce8\u518c
|
servertool.unregister1=\u6CE8\u9500\u5DF2\u6CE8\u518C\u7684\u670D\u52A1\u5668
|
||||||
servertool.unregister2=\t\u670d\u52a1\u5668\u672a\u6ce8\u518c\u3002
|
servertool.unregister2=\t\u670D\u52A1\u5668\u5DF2\u6CE8\u9500\u3002
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <server id> | -applicationName <name> ] [ <-endpointType <endpointType> ] \n
|
servertool.locate=\n\tlocate [ -serverid <server id> | -applicationName <name> ] [ <-endpointType <endpointType> ] \n
|
||||||
servertool.locate1=\u4e3a\u5df2\u6ce8\u518c\u670d\u52a1\u5668\u5b9a\u4f4d\u7279\u5b9a\u7c7b\u578b\u7684\u7aef\u53e3
|
servertool.locate1=\u4E3A\u5DF2\u6CE8\u518C\u670D\u52A1\u5668\u5B9A\u4F4D\u7279\u5B9A\u7C7B\u578B\u7684\u7AEF\u53E3
|
||||||
servertool.locate2=\n\n\t\u4e3b\u673a\u540d\u79f0 {0} \n\n\t\t\u7aef\u53e3\t\t\u7aef\u53e3\u7c7b\u578b\t\tORB \u6807\u8bc6\n\t\t----\t\t---------\t\t------\n
|
servertool.locate2=\n\n\t\u4E3B\u673A\u540D\u79F0 {0} \n\n\t\t\u7AEF\u53E3\t\t\u7AEF\u53E3\u7C7B\u578B\t\tORB \u6807\u8BC6\n\t\t----\t\t---------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <server id> | -applicationName <name> ] [ -orbid <ORB name> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <server id> | -applicationName <name> ] [ -orbid <ORB name> ]\n
|
||||||
servertool.locateorb1=\u4e3a\u5df2\u6ce8\u518c\u670d\u52a1\u5668\u7684\u7279\u5b9a\u5bf9\u8c61\u8bf7\u6c42\u4ee3\u7406\u7a0b\u5e8f\u5b9a\u4f4d\u7aef\u53e3\u3002
|
servertool.locateorb1=\u4E3A\u5DF2\u6CE8\u518C\u670D\u52A1\u5668\u7684\u7279\u5B9A\u5BF9\u8C61\u8BF7\u6C42\u4EE3\u7406\u7A0B\u5E8F\u5B9A\u4F4D\u7AEF\u53E3\u3002
|
||||||
servertool.locateorb2=\n\n\t\u4e3b\u673a\u540d\u79f0 {0} \n\n\t\t\u7aef\u53e3\t\t\u7aef\u53e3\u7c7b\u578b\t\tORB \u6807\u8bc6\n\t\t----\t\t--------\t\t------\n
|
servertool.locateorb2=\n\n\t\u4E3B\u673A\u540D\u79F0 {0} \n\n\t\t\u7AEF\u53E3\t\t\u7AEF\u53E3\u7C7B\u578B\t\tORB \u6807\u8BC6\n\t\t----\t\t--------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <name> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <name> ] \n
|
||||||
servertool.getserverid1=\u8fd4\u56de\u5e94\u7528\u7a0b\u5e8f\u540d\u79f0\u7684\u670d\u52a1\u5668\u6807\u8bc6\u7b26
|
servertool.getserverid1=\u8FD4\u56DE applicationName \u7684\u670D\u52A1\u5668 ID
|
||||||
servertool.getserverid2=\t\u5e94\u7528\u7a0b\u5e8f\u540d\u79f0 {0} \u7684\u670d\u52a1\u5668\u6807\u8bc6\u7b26\u662f {1}
|
servertool.getserverid2=\tapplicationName {0} \u7684\u670D\u52A1\u5668 ID \u662F {1}
|
||||||
|
|
||||||
servertool.list=\n\t\u5217\u8868\n
|
servertool.list=\n\t\u5217\u8868\n
|
||||||
servertool.list1=\u5217\u51fa\u6240\u6709\u5df2\u6ce8\u518c\u670d\u52a1\u5668
|
servertool.list1=\u5217\u51FA\u6240\u6709\u5DF2\u6CE8\u518C\u670D\u52A1\u5668
|
||||||
servertool.list2=\n\t\u670d\u52a1\u5668\u6807\u8bc6\u7b26\t\t\u670d\u52a1\u5668\u7c7b\u540d\u79f0\t\t\t\u670d\u52a1\u5668\u5e94\u7528\u7a0b\u5e8f\n\t---------\t-----------------\t------------------\n
|
servertool.list2=\n\t\u670D\u52A1\u5668 ID\t\u670D\u52A1\u5668\u7C7B\u540D\u79F0\t\t\u670D\u52A1\u5668\u5E94\u7528\u7A0B\u5E8F\n\t---------\t-----------------\t\t------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=\u5217\u51fa\u5f53\u524d\u6d3b\u52a8\u7684\u670d\u52a1\u5668
|
servertool.listactive1=\u5217\u51FA\u5F53\u524D\u6D3B\u52A8\u7684\u670D\u52A1\u5668
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=\u5217\u51fa\u5f53\u524d\u5b9a\u4e49\u7684\u5e94\u7528\u7a0b\u5e8f\u540d\u79f0
|
servertool.listappnames1=\u5217\u51FA\u5F53\u524D\u5B9A\u4E49\u7684 applicationName
|
||||||
servertool.listappnames2=\u5f53\u524d\u5b9a\u4e49\u7684\u670d\u52a1\u5668\u5e94\u7528\u7a0b\u5e8f\u540d\u79f0\uff1a
|
servertool.listappnames2=\u5F53\u524D\u5B9A\u4E49\u7684\u670D\u52A1\u5668 applicationName:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.shutdown1=\u5173\u95ed\u4e00\u4e2a\u5df2\u6ce8\u518c\u670d\u52a1\u5668
|
servertool.shutdown1=\u5173\u95ED\u4E00\u4E2A\u5DF2\u6CE8\u518C\u670D\u52A1\u5668
|
||||||
servertool.shutdown2=\t\u670d\u52a1\u5668\u6210\u529f\u5173\u95ed\u3002
|
servertool.shutdown2=\t\u670D\u52A1\u5668\u6210\u529F\u5173\u95ED\u3002
|
||||||
servertool.startserver=\n\tstartup [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.startserver1=\u542f\u52a8\u4e00\u4e2a\u5df2\u6ce8\u518c\u670d\u52a1\u5668
|
servertool.startserver1=\u542F\u52A8\u4E00\u4E2A\u5DF2\u6CE8\u518C\u670D\u52A1\u5668
|
||||||
servertool.startserver2=\t\u670d\u52a1\u5668\u6210\u529f\u542f\u52a8\u3002
|
servertool.startserver2=\t\u670D\u52A1\u5668\u6210\u529F\u542F\u52A8\u3002
|
||||||
|
|
||||||
servertool.quit=\n\t\u9000\u51fa\n
|
servertool.quit=\n\t\u9000\u51FA\n
|
||||||
servertool.quit1=\u9000\u51fa\u6b64\u5de5\u5177
|
servertool.quit1=\u9000\u51FA\u6B64\u5DE5\u5177
|
||||||
|
|
||||||
servertool.help=\thelp\n\t\u6216\n\thelp <command name>\n
|
servertool.help=\thelp\n\t\u6216\n\thelp <command name>\n
|
||||||
servertool.help1=\u53d6\u5f97\u5e2e\u52a9
|
servertool.help1=\u83B7\u53D6\u5E2E\u52A9
|
||||||
|
|
||||||
servertool.orbidmap=\t\u7528\u6cd5\uff1aorblist [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.orbidmap=\t\u7528\u6CD5: orblist [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.orbidmap1=\u5bf9\u8c61\u8bf7\u6c42\u4ee3\u7406\u7a0b\u5e8f (orb) \u540d\u79f0\u53ca\u5176\u6620\u5c04\u5217\u8868
|
servertool.orbidmap1=\u5BF9\u8C61\u8BF7\u6C42\u4EE3\u7406\u7A0B\u5E8F (orb) \u540D\u79F0\u53CA\u5176\u6620\u5C04\u5217\u8868
|
||||||
servertool.orbidmap2=\n\tORB \u6807\u8bc6\t\tORB \u540d\u79f0\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tORB \u6807\u8BC6\t\tORB \u540D\u79F0\n\t------\t\t--------\n
|
||||||
pnameserv.success=\u6301\u4e45\u6027\u540d\u79f0\u670d\u52a1\u5668\u6210\u529f\u542f\u52a8
|
pnameserv.success=\u6301\u4E45\u6027\u540D\u79F0\u670D\u52A1\u5668\u6210\u529F\u542F\u52A8
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=\u7528\u6cd5\uff1a{0} <\u9009\u9879> \n\n\u5176\u4e2d\uff0c<\u9009\u9879> \u5305\u62ec\uff1a\n -ORBInitialPort \u521d\u59cb\u7aef\u53e3\uff08\u5fc5\u9700\uff09\n -InitialServicesFile \u5305\u542b\u521d\u59cb\u670d\u52a1\u5217\u8868\u7684\u6587\u4ef6\uff08\u5fc5\u9700\uff09\n
|
bootstrap.usage=\u7528\u6CD5: {0} <\u9009\u9879> \n\n\u5176\u4E2D, <\u9009\u9879> \u5305\u62EC: \n -ORBInitialPort \u521D\u59CB\u7AEF\u53E3 (\u5FC5\u9700)\n -InitialServicesFile \u5305\u542B\u521D\u59CB\u670D\u52A1\u5217\u8868\u7684\u6587\u4EF6 (\u5FC5\u9700)\n
|
||||||
bootstrap.success=\u5c06\u7aef\u53e3\u8bbe\u7f6e\u4e3a{0}\u5e76\u4ece{1}\u8bfb\u53d6\u670d\u52a1
|
bootstrap.success=\u5C06\u7AEF\u53E3\u8BBE\u7F6E\u4E3A{0}\u5E76\u4ECE{1}\u8BFB\u53D6\u670D\u52A1
|
||||||
bootstrap.filenotreadable=\u4e0d\u53ef\u8bfb\u53d6\u6587\u4ef6 {0}
|
bootstrap.filenotreadable=\u6587\u4EF6{0}\u4E0D\u53EF\u8BFB\u53D6
|
||||||
bootstrap.filenotfound=\u6ca1\u6709\u627e\u5230\u6587\u4ef6{0}
|
bootstrap.filenotfound=\u6CA1\u6709\u627E\u5230\u6587\u4EF6{0}
|
||||||
bootstrap.exception=\u5c06\u5c5e\u6027\u4fdd\u5b58\u5230\u6587\u4ef6{0}\u65f6\u53d1\u751f\u5f02\u5e38\uff1a\u5f02\u5e38 {1}
|
bootstrap.exception=\u5C06\u5C5E\u6027\u4FDD\u5B58\u5230\u6587\u4EF6{0}\u65F6\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF: \u5F02\u5E38\u9519\u8BEF{1}
|
||||||
|
|
||||||
tnameserv.exception=\u542f\u52a8{0}\u7aef\u53e3\u4e0a\u7684\u81ea\u5f15\u5bfc\u7a0b\u5e8f\u670d\u52a1\u65f6\u53d1\u751f\u5f02\u5e38
|
tnameserv.exception=\u542F\u52A8{0}\u7AEF\u53E3\u4E0A\u7684\u5F15\u5BFC\u7A0B\u5E8F\u670D\u52A1\u65F6\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF
|
||||||
tnameserv.usage=\u5c1d\u8bd5\u5229\u7528\u547d\u4ee4\u884c\u53c2\u6570\u4f7f\u7528\u4e0d\u540c\u7684\u7aef\u53e3 -ORBInnitialPort <portno>
|
tnameserv.usage=\u5C1D\u8BD5\u5229\u7528\u547D\u4EE4\u884C\u53C2\u6570 -ORBInitialPort <portno> \u4F7F\u7528\u4E0D\u540C\u7684\u7AEF\u53E3
|
||||||
tnameserv.invalidhostoption=ORBInitialHost \u4e0d\u662f\u540d\u79f0\u670d\u52a1\u5668\u7684\u6709\u6548\u9009\u9879
|
tnameserv.invalidhostoption=ORBInitialHost \u4E0D\u662F NameService \u7684\u6709\u6548\u9009\u9879
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 \u4e0d\u662f\u540d\u79f0\u670d\u52a1\u5668\u7684\u6709\u6548\u9009\u9879
|
tnameserv.orbinitialport0=ORBInitialPort 0 \u4E0D\u662F NameService \u7684\u6709\u6548\u9009\u9879
|
||||||
tnameserv.hs1=\u521d\u59cb\u7684\u547d\u540d\u8303\u56f4\uff1a\n{0}
|
tnameserv.hs1=\u521D\u59CB\u7684\u547D\u540D\u4E0A\u4E0B\u6587: \n{0}
|
||||||
tnameserv.hs2=TransientNameServer: \u5c06\u521d\u59cb\u5bf9\u8c61\u5f15\u7528\u7aef\u53e3\u8bbe\u7f6e\u4e3a\uff1a{0}
|
tnameserv.hs2=TransientNameServer: \u5C06\u521D\u59CB\u5BF9\u8C61\u5F15\u7528\u7AEF\u53E3\u8BBE\u7F6E\u4E3A: {0}
|
||||||
tnameserv.hs3=\u51c6\u5907\u5c31\u7eea\u3002
|
tnameserv.hs3=\u51C6\u5907\u5C31\u7EEA\u3002
|
||||||
|
|
||||||
orbd.commfailure=\n\u7531\u4e8e ORBinitialPort \u5df2\u5728\u4f7f\u7528\u4e2d\uff0c\u542f\u52a8 ORBD \u5931\u8d25
|
orbd.commfailure=\n\u7531\u4E8E ORBinitialPort \u5DF2\u5728\u4F7F\u7528\u4E2D, \u65E0\u6CD5\u542F\u52A8 ORBD
|
||||||
orbd.internalexception=\n\u5185\u90e8\u5f02\u5e38\uff0c\u542f\u52a8 ORBD \u5931\u8d25\u3002 \n\u53ef\u80fd\u539f\u56e0\uff1a\n1. \u6307\u5b9a\u7684 ORBInitialPort \u6216 ORBActivationPort \u5df2\u5728\u4f7f\u7528\u4e2d \n2. \u6ca1\u6709\u5199 orb.db \u7684\u5199\u5165\u6743\u9650
|
orbd.internalexception=\n\u7531\u4E8E\u5185\u90E8\u5F02\u5E38\u9519\u8BEF, \u65E0\u6CD5\u542F\u52A8 ORBD\u3002\n\u53EF\u80FD\u539F\u56E0: \n1. \u6307\u5B9A\u7684 ORBInitialPort \u6216 ORBActivationPort \u5DF2\u5728\u4F7F\u7528\u4E2D \n2. \u6CA1\u6709\u5199\u5165 orb.db \u7684\u6743\u9650
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -23,85 +23,85 @@
|
|||||||
# questions.
|
# questions.
|
||||||
#
|
#
|
||||||
|
|
||||||
orbd.usage=\u7528\u6cd5\uff1a{0} <options> \n\n\u5176\u4e2d <options> \u5305\u62ec\uff1a\n -port ORBD \u61c9\u88ab\u555f\u52d5\u7684\u555f\u52d5\u57e0\u6240\u5728\uff0c\u9810\u8a2d\u70ba 1049 (\u53ef\u9078)\n -defaultdb ORBD \u6a94\u6848\u7684\u76ee\u9304\uff0c\u9810\u8a2d "./orb.db" (\u53ef\u9078)\n -serverid ORBD \u4f3a\u670d\u5668 Id\uff0c\u9810\u8a2d\u70ba 1 (\u53ef\u9078)\n -ORBInitialPort \u8d77\u59cb\u57e0\uff08\u5fc5\u8981\uff09\n -ORBInitialHost \u8d77\u59cb\u4e3b\u6a5f\u540d\u7a31\uff08\u5fc5\u8981\uff09\n
|
orbd.usage=\u7528\u6CD5: {0} <options> \n\n\u5176\u4E2D <options> \u5305\u62EC: \n -port ORBD \u61C9\u88AB\u555F\u52D5\u7684\u555F\u52D5\u9023\u63A5\u57E0\u6240\u5728\uFF0C\u9810\u8A2D\u70BA 1049 (\u53EF\u9078)\n -defaultdb ORBD \u6A94\u6848\u7684\u76EE\u9304\uFF0C\u9810\u8A2D "./orb.db" (\u53EF\u9078)\n -serverid ORBD \u4F3A\u670D\u5668 Id\uFF0C\u9810\u8A2D\u70BA 1 (\u53EF\u9078)\n -ORBInitialPort \u8D77\u59CB\u9023\u63A5\u57E0 (\u5FC5\u8981)\n -ORBInitialHost \u8D77\u59CB\u4E3B\u6A5F\u540D\u7A31 (\u5FC5\u8981)\n
|
||||||
|
|
||||||
servertool.usage=\u7528\u6cd5\uff1a {0} <options> \n\nwhere <options> \u5305\u62ec\uff1a\n -ORBInitialPort \u8d77\u59cb\u57e0\uff08\u5fc5\u8981\uff09\n -ORBInitialHost \u8d77\u59cb\u4e3b\u6a5f\u540d\u7a31\uff08\u5fc5\u8981\uff09\n
|
servertool.usage=\u7528\u6CD5: {0} <options> \n\nwhere <options> \u5305\u62EC:\n -ORBInitialPort \u8D77\u59CB\u9023\u63A5\u57E0 (\u5FC5\u8981)\n -ORBInitialHost \u8D77\u59CB\u4E3B\u6A5F\u540D\u7A31 (\u5FC5\u8981)\n
|
||||||
servertool.banner=\n\n\u6b61\u8fce\u4f86\u5230 Java IDL \u4f3a\u670d\u5668\u5de5\u5177 \n\u8acb\u5728\u63d0\u793a\u8655\u8f38\u5165\u6307\u4ee4 \n
|
servertool.banner=\n\n\u6B61\u8FCE\u4F7F\u7528 Java IDL \u4F3A\u670D\u5668\u5DE5\u5177 \n\u8ACB\u5728\u63D0\u793A\u8655\u8F38\u5165\u547D\u4EE4 \n
|
||||||
servertool.shorthelp=\n\n\t\u73fe\u6709\u7684\u6307\u4ee4\uff1a\n\t------------------- \n
|
servertool.shorthelp=\n\n\t\u53EF\u7528\u7684\u547D\u4EE4: \n\t------------------- \n
|
||||||
servertool.baddef=\u932f\u8aa4\u7684\u4f3a\u670d\u5668\u5b9a\u7fa9\uff1a {0}
|
servertool.baddef=\u932F\u8AA4\u7684\u4F3A\u670D\u5668\u5B9A\u7FA9: {0}
|
||||||
servertool.nosuchserver=\t\u627e\u4e0d\u5230\u9019\u500b\u4f3a\u670d\u5668\u3002
|
servertool.nosuchserver=\t\u627E\u4E0D\u5230\u9019\u500B\u4F3A\u670D\u5668\u3002
|
||||||
servertool.helddown=\t\u4f3a\u670d\u5668\u4e0d\u5728\u5de5\u4f5c\u72c0\u614b\u3002
|
servertool.helddown=\t\u4F3A\u670D\u5668\u4E0D\u5728\u5DE5\u4F5C\u72C0\u614B\u3002
|
||||||
servertool.nosuchorb=\t\u7121\u6548\u7684 ORB.
|
servertool.nosuchorb=\t\u7121\u6548\u7684 ORB.
|
||||||
servertool.serverup=\t\u4f3a\u670d\u5668\u5df2\u5728\u5de5\u4f5c\u72c0\u614b\u3002
|
servertool.serverup=\t\u4F3A\u670D\u5668\u5DF2\u5728\u5DE5\u4F5C\u72C0\u614B\u3002
|
||||||
servertool.appname=\tapplicationName - {0}
|
servertool.appname=\tapplicationName - {0}
|
||||||
servertool.name=\t\u540d\u7a31 - {0}
|
servertool.name=\tname - {0}
|
||||||
servertool.classpath=\tclasspath - {0}
|
servertool.classpath=\tclasspath - {0}
|
||||||
servertool.args=\targs - {0}
|
servertool.args=\targs - {0}
|
||||||
servertool.vmargs=\tvmargs - {0}
|
servertool.vmargs=\tvmargs - {0}
|
||||||
servertool.serverid=\t\u4f3a\u670d\u5668 id - {0}
|
servertool.serverid=\tserver id - {0}
|
||||||
servertool.servernotrunning=\t\u4f3a\u670d\u5668\u672a\u904b\u4f5c\u3002
|
servertool.servernotrunning=\t\u4F3A\u670D\u5668\u672A\u57F7\u884C\u3002
|
||||||
servertool.register=\n\n\tregister -server<server class name> \n\t -applicationName <alternate server name> \n\t -classpath <classpath to server> \n\t -args <args to server> \n\t -vmargs <args to server Java VM>\n
|
servertool.register=\n\n\tregister -server <server class name> \n\t -applicationName <alternate server name> \n\t -classpath <classpath to server> \n\t -args <args to server> \n\t -vmargs <args to server Java VM>\n
|
||||||
servertool.register1=\u8a3b\u518a\u4e00\u500b\u53ef\u555f\u52d5\u7684\u4f3a\u670d\u5668
|
servertool.register1=\u8A3B\u518A\u4E00\u500B\u53EF\u555F\u52D5\u7684\u4F3A\u670D\u5668
|
||||||
servertool.register2=\t\u5df2\u8a3b\u518a\u904e\u7684\u4f3a\u670d\u5668 (serverid = {0})\u3002
|
servertool.register2=\t\u5DF2\u8A3B\u518A\u904E\u7684\u4F3A\u670D\u5668 (serverid = {0})\u3002
|
||||||
servertool.register3=\t\u5df2\u8a3b\u518a\u904e\u7684\u4f3a\u670d\u5668\uff0c\u4f46\u4e0d\u5728\u5de5\u4f5c\u72c0\u614b (serverid = {0})\u3002
|
servertool.register3=\t\u5DF2\u8A3B\u518A\u904E\u7684\u4F3A\u670D\u5668\uFF0C\u4F46\u4E0D\u5728\u5DE5\u4F5C\u72C0\u614B (serverid = {0})\u3002
|
||||||
servertool.register4=\t\u4f3a\u670d\u5668\u5df2\u8a3b\u518a (serverid = {0})\u3002
|
servertool.register4=\t\u4F3A\u670D\u5668\u5DF2\u8A3B\u518A (serverid = {0})\u3002
|
||||||
|
|
||||||
servertool.unregister=\n\tunregister [ -serverid <server id> | -applicationName <name> ] \n
|
servertool.unregister=\n\tunregister [ -serverid <server id> | -applicationName <name> ] \n
|
||||||
servertool.unregister1=\u672a\u8a3b\u518a\u4e00\u500b\u5df2\u8a3b\u518a\u904e\u7684\u4f3a\u670d\u5668
|
servertool.unregister1=\u5C07\u5DF2\u8A3B\u518A\u7684\u4F3A\u670D\u5668\u53D6\u6D88\u8A3B\u518A
|
||||||
servertool.unregister2=\t\u4f3a\u670d\u5668\u672a\u8a3b\u518a\u3002
|
servertool.unregister2=\t\u4F3A\u670D\u5668\u5DF2\u53D6\u6D88\u8A3B\u518A\u3002
|
||||||
|
|
||||||
servertool.locate=\n\tlocate [ -serverid <server id> | -applicationName <name> ] [ <-endpointType <endpointType> ] \n
|
servertool.locate=\n\tlocate [ -serverid <server id> | -applicationName <name> ] [ <-endpointType <endpointType> ] \n
|
||||||
servertool.locate1=\u91dd\u5c0d\u4e00\u500b\u5df2\u8a3b\u518a\u904e\u7684\u4f3a\u670d\u5668\u5c0b\u627e\u7279\u5b9a\u985e\u578b\u7684\u9023\u63a5\u57e0
|
servertool.locate1=\u91DD\u5C0D\u4E00\u500B\u5DF2\u8A3B\u518A\u904E\u7684\u4F3A\u670D\u5668\u5C0B\u627E\u7279\u5B9A\u985E\u578B\u7684\u9023\u63A5\u57E0
|
||||||
servertool.locate2=\n\n\t\u4e3b\u6a5f\u540d\u7a31 {0} \n\n\t\tPort\t\tPort Type\t\tORB Id\n\t\t----\t\t---------\t\t------\n
|
servertool.locate2=\n\n\t\u4E3B\u6A5F\u540D\u7A31 {0} \n\n\t\t\u9023\u63A5\u57E0\t\t\u9023\u63A5\u57E0\u985E\u578B\t\tORB Id\n\t\t----\t\t---------\t\t------\n
|
||||||
servertool.locateorb=\n\tlocateperorb [ -serverid <server id> | -applicationName <name> ] [ -orbid <ORB name> ]\n
|
servertool.locateorb=\n\tlocateperorb [ -serverid <server id> | -applicationName <name> ] [ -orbid <ORB name> ]\n
|
||||||
servertool.locateorb1=\u91dd\u5c0d\u5df2\u8a3b\u518a\u904e\u7684\u4f3a\u670d\u5668\u7684\u7279\u5b9a orb \u5c0b\u627e\u9023\u63a5\u57e0\u3002
|
servertool.locateorb1=\u91DD\u5C0D\u5DF2\u8A3B\u518A\u904E\u7684\u4F3A\u670D\u5668\u7684\u7279\u5B9A orb \u5C0B\u627E\u9023\u63A5\u57E0\u3002
|
||||||
servertool.locateorb2=\n\n\t\u4e3b\u6a5f\u540d\u7a31 {0} \n\n\t\tPort\t\tPortType\t\tORB Id\n\t\t----\t\t--------\t\t------\n
|
servertool.locateorb2=\n\n\t\u4E3B\u6A5F\u540D\u7A31 {0} \n\n\t\t\u9023\u63A5\u57E0\t\t\u9023\u63A5\u57E0\u985E\u578B\t\tORB Id\n\t\t----\t\t--------\t\t------\n
|
||||||
servertool.getserverid=\n\tgetserverid [ -applicationName <name> ] \n
|
servertool.getserverid=\n\tgetserverid [ -applicationName <name> ] \n
|
||||||
servertool.getserverid1=\u91dd\u5c0d\u4e00\u500b applicationName \u50b3\u56de\u4f3a\u670d\u5668\u8b58\u5225\u78bc
|
servertool.getserverid1=\u50B3\u56DE applicationName \u7684\u4F3A\u670D\u5668\u8B58\u5225\u78BC
|
||||||
servertool.getserverid2=\tapplicationName \u7684\u4f3a\u670d\u5668\u8b58\u5225\u78bc {0} \u70ba {1}
|
servertool.getserverid2=\tapplicationName \u7684\u4F3A\u670D\u5668\u8B58\u5225\u78BC {0} \u70BA {1}
|
||||||
|
|
||||||
servertool.list=\n\t\u6e05\u55ae\n
|
servertool.list=\n\tlist\n
|
||||||
servertool.list1=\u5217\u51fa\u6240\u6709\u8a3b\u518a\u904e\u7684\u4f3a\u670d\u5668
|
servertool.list1=\u5217\u51FA\u6240\u6709\u8A3B\u518A\u904E\u7684\u4F3A\u670D\u5668
|
||||||
servertool.list2=\n\t\u4f3a\u670d\u5668\u8b58\u5225\u78bc\t\u4f3a\u670d\u5668\u985e\u5225\u540d\u7a31\t\t\u4f3a\u670d\u5668\u61c9\u7528\u7a0b\u5f0f\n\t---------\t-----------------\t\t------------------\n
|
servertool.list2=\n\t\u4F3A\u670D\u5668\u8B58\u5225\u78BC\t\u4F3A\u670D\u5668\u985E\u5225\u540D\u7A31\t\t\u4F3A\u670D\u5668\u61C9\u7528\u7A0B\u5F0F\n\t---------\t-----------------\t\t------------------\n
|
||||||
servertool.listactive=\n\tlistactive
|
servertool.listactive=\n\tlistactive
|
||||||
servertool.listactive1=\u5217\u51fa\u73fe\u5728\u555f\u52d5\u7684\u4f3a\u670d\u5668
|
servertool.listactive1=\u5217\u51FA\u76EE\u524D\u4F7F\u7528\u4E2D\u7684\u4F3A\u670D\u5668
|
||||||
servertool.listappnames=\tlistappnames\n
|
servertool.listappnames=\tlistappnames\n
|
||||||
servertool.listappnames1=\u5217\u51fa\u73fe\u5728\u88ab\u5b9a\u7fa9\u7684 applicationNames
|
servertool.listappnames1=\u5217\u51FA\u76EE\u524D\u5B9A\u7FA9\u7684 applicationNames
|
||||||
servertool.listappnames2=\u73fe\u5728\u5b9a\u7fa9\u7684\u4f3a\u670d\u5668 applicationNames\uff1a
|
servertool.listappnames2=\u76EE\u524D\u5B9A\u7FA9\u7684\u4F3A\u670D\u5668 applicationNames:
|
||||||
|
|
||||||
servertool.shutdown=\n\tshutdown [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.shutdown=\n\tshutdown [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.shutdown1=\u95dc\u9589\u4e00\u500b\u8a3b\u518a\u904e\u7684\u4f3a\u670d\u5668
|
servertool.shutdown1=\u95DC\u9589\u4E00\u500B\u8A3B\u518A\u904E\u7684\u4F3A\u670D\u5668
|
||||||
servertool.shutdown2=\t\u4f3a\u670d\u5668\u95dc\u9589\u6210\u529f\u3002
|
servertool.shutdown2=\t\u4F3A\u670D\u5668\u95DC\u9589\u6210\u529F\u3002
|
||||||
servertool.startserver=\n\tstartup [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.startserver=\n\tstartup [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.startserver1=\u958b\u555f\u4e00\u500b\u8a3b\u518a\u904e\u7684\u4f3a\u670d\u5668
|
servertool.startserver1=\u555F\u52D5\u4E00\u500B\u8A3B\u518A\u904E\u7684\u4F3A\u670D\u5668
|
||||||
servertool.startserver2=\t\u4f3a\u670d\u5668\u958b\u555f\u6210\u529f\u3002
|
servertool.startserver2=\t\u4F3A\u670D\u5668\u555F\u52D5\u6210\u529F\u3002
|
||||||
|
|
||||||
servertool.quit=\n\t\u96e2\u958b\n
|
servertool.quit=\n\tquit\n
|
||||||
servertool.quit1=\u96e2\u958b\u9019\u500b\u5de5\u5177
|
servertool.quit1=\u96E2\u958B\u9019\u500B\u5DE5\u5177
|
||||||
|
|
||||||
servertool.help=\t\u5e6b\u52a9\n\tOR\n\thelp <command name>\n
|
servertool.help=\thelp\n\t\u6216\n\thelp <command name>\n
|
||||||
servertool.help1=\u53d6\u5f97\u5e6b\u52a9
|
servertool.help1=\u53D6\u5F97\u8AAA\u660E
|
||||||
|
|
||||||
servertool.orbidmap=\t\u7528\u6cd5\uff1a orblist [ -serverid <server id> | -applicationName <name> ]\n
|
servertool.orbidmap=\t\u7528\u6CD5: orblist [ -serverid <server id> | -applicationName <name> ]\n
|
||||||
servertool.orbidmap1=orb \u540d\u7a31\u53ca\u5176\u5c0d\u6620\u6e05\u55ae
|
servertool.orbidmap1=orb \u540D\u7A31\u53CA\u5176\u5C0D\u6620\u6E05\u55AE
|
||||||
servertool.orbidmap2=\n\tORB Id\t\tORB \u540d\u7a31\n\t------\t\t--------\n
|
servertool.orbidmap2=\n\tORB Id\t\tORB \u540D\u7A31\n\t------\t\t--------\n
|
||||||
pnameserv.success=\u6c38\u4e45\u6027 NameServer \u958b\u555f\u6210\u529f
|
pnameserv.success=\u6C38\u4E45\u6027 NameServer \u555F\u52D5\u6210\u529F
|
||||||
|
|
||||||
|
|
||||||
bootstrap.usage=\u7528\u6cd5\uff1a {0} <options> \n\n\u5176\u4e2d <options> \u5305\u62ec\uff1a\n -ORBInitialPort \u8d77\u59cb\u57e0\uff08\u5fc5\u8981\uff09\n -InitialServicesFile \u542b\u6709\u8d77\u555f\u670d\u52d9\u6e05\u55ae\u7684\u6a94\u6848\uff08\u5fc5\u8981\uff09\n
|
bootstrap.usage=\u7528\u6CD5: {0} <options> \n\n\u5176\u4E2D <options> \u5305\u62EC: \n -ORBInitialPort \u8D77\u59CB\u9023\u63A5\u57E0 (\u5FC5\u8981)\n -InitialServicesFile \u542B\u6709\u8D77\u59CB\u670D\u52D9\u6E05\u55AE\u7684\u6A94\u6848 (\u5FC5\u8981)\n
|
||||||
bootstrap.success=\u8a2d\u5b9a\u9023\u63a5\u57e0\u81f3 {0} \u4e26\u5f9e {1} \u8b80\u53d6\u670d\u52d9
|
bootstrap.success=\u8A2D\u5B9A\u9023\u63A5\u57E0\u81F3 {0} \u4E26\u5F9E {1} \u8B80\u53D6\u670D\u52D9
|
||||||
bootstrap.filenotreadable=\u6a94\u6848 {0} \u7121\u6cd5\u8b80\u53d6
|
bootstrap.filenotreadable=\u6A94\u6848 {0} \u7121\u6CD5\u8B80\u53D6
|
||||||
bootstrap.filenotfound=\u6a94\u6848 {0} \u672a\u627e\u5230
|
bootstrap.filenotfound=\u627E\u4E0D\u5230\u6A94\u6848 {0}
|
||||||
bootstrap.exception=\u5c07\u5c6c\u6027\u5132\u5b58\u81f3\u6a94\u6848 {0} \u6642\u767c\u751f\u7570\u5e38\uff1a\u7570\u5e38 {1}
|
bootstrap.exception=\u5C07\u5C6C\u6027\u5132\u5B58\u81F3\u6A94\u6848 {0} \u6642\u767C\u751F\u7570\u5E38\u72C0\u6CC1: \u7570\u5E38\u72C0\u6CC1 {1}
|
||||||
|
|
||||||
tnameserv.exception=\u958b\u555f {0} \u9023\u63a5\u57e0\u4e0a\u7684\u555f\u52d5\u7a0b\u5f0f\u670d\u52d9\u6642\uff0c\u767c\u751f\u7570\u5e38
|
tnameserv.exception=\u958B\u555F {0} \u9023\u63A5\u57E0\u4E0A\u7684\u555F\u52D5\u5B89\u88DD\u670D\u52D9\u6642\uFF0C\u767C\u751F\u7570\u5E38\u72C0\u6CC1
|
||||||
tnameserv.usage=\u8a66\u8457\u5229\u7528\u542b\u6709\u6307\u4ee4\u884c\u5f15\u6578\u7684\u4e0d\u540c\u9023\u63a5\u57e0 -ORBInitialPort <portno>
|
tnameserv.usage=\u5617\u8A66\u4EE5\u547D\u4EE4\u884C\u5F15\u6578\u4F86\u4F7F\u7528\u4E0D\u540C\u9023\u63A5\u57E0 -ORBInitialPort <portno>
|
||||||
tnameserv.invalidhostoption=ORBInitialHost \u4e0d\u662f NameService \u7684\u6709\u6548\u9078\u9805
|
tnameserv.invalidhostoption=ORBInitialHost \u4E0D\u662F NameService \u7684\u6709\u6548\u9078\u9805
|
||||||
tnameserv.orbinitialport0=ORBInitialPort 0 \u4e0d\u662f NameService \u7684\u6709\u6548\u9078\u9805
|
tnameserv.orbinitialport0=ORBInitialPort 0 \u4E0D\u662F NameService \u7684\u6709\u6548\u9078\u9805
|
||||||
tnameserv.hs1=\u8d77\u59cb\u547d\u540d\u5167\u6587\uff1a\n{0}
|
tnameserv.hs1=\u8D77\u59CB\u547D\u540D\u76F8\u95DC\u8CC7\u8A0A\u74B0\u5883: \n{0}
|
||||||
tnameserv.hs2=TransientNameServer: \u91dd\u5c0d\u8d77\u59cb\u7269\u4ef6\u53c3\u7167\uff0c\u8a2d\u5b9a\u9023\u63a5\u57e0\u81f3\uff1a{0}
|
tnameserv.hs2=TransientNameServer: \u91DD\u5C0D\u8D77\u59CB\u7269\u4EF6\u53C3\u7167\uFF0C\u8A2D\u5B9A\u9023\u63A5\u57E0\u81F3: {0}
|
||||||
tnameserv.hs3=\u5c31\u7dd2\u3002
|
tnameserv.hs3=\u5C31\u7DD2\u3002
|
||||||
|
|
||||||
orbd.commfailure=\n\u56e0\u70ba ORBinitialPort \u5728\u4f7f\u7528\u4e2d\uff0c\u6240\u4ee5\u7121\u6cd5\u555f\u52d5 ORBD\u3002
|
orbd.commfailure=\n\u56E0\u70BA ORBinitialPort \u5728\u4F7F\u7528\u4E2D\uFF0C\u6240\u4EE5\u7121\u6CD5\u555F\u52D5 ORBD\u3002
|
||||||
orbd.internalexception=\n\u56e0\u70ba\u5167\u90e8\u767c\u751f\u7570\u5e38\uff0c\u6240\u4ee5\u7121\u6cd5\u555f\u52d5 ORBD\u3002 \n\u53ef\u80fd\u7684\u539f\u56e0\uff1a \n1. \u6307\u5b9a\u7684 ORBInitialPort \u6216 ORBActivationPort \u5728\u4f7f\u7528\u4e2d\u3002 \n2. \u6c92\u6709\u5beb\u5165 orb.db \u7684\u8a31\u53ef\u6b0a\u3002
|
orbd.internalexception=\n\u56E0\u70BA\u5167\u90E8\u767C\u751F\u7570\u5E38\uFF0C\u6240\u4EE5\u7121\u6CD5\u555F\u52D5 ORBD\u3002 \n\u53EF\u80FD\u7684\u539F\u56E0: \n1. \u6307\u5B9A\u7684 ORBInitialPort \u6216 ORBActivationPort \u5728\u4F7F\u7528\u4E2D\u3002 \n2. \u6C92\u6709\u5BEB\u5165 orb.db \u7684\u6B0A\u9650\u3002
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2010 Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
|
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
;
|
;
|
||||||
; This code is free software; you can redistribute it and/or modify it
|
; This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
|
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
;
|
;
|
||||||
; This code is free software; you can redistribute it and/or modify it
|
; This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
|
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
;
|
;
|
||||||
; This code is free software; you can redistribute it and/or modify it
|
; This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
|
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
;
|
;
|
||||||
; This code is free software; you can redistribute it and/or modify it
|
; This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
|
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
;
|
;
|
||||||
; This code is free software; you can redistribute it and/or modify it
|
; This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
; Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
|
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
;
|
;
|
||||||
; This code is free software; you can redistribute it and/or modify it
|
; This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
|
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
;
|
;
|
||||||
; This code is free software; you can redistribute it and/or modify it
|
; This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
|
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
;
|
;
|
||||||
; This code is free software; you can redistribute it and/or modify it
|
; This code is free software; you can redistribute it and/or modify it
|
||||||
|
|||||||
@@ -64,97 +64,97 @@
|
|||||||
#
|
#
|
||||||
# Translator: Start Translating
|
# Translator: Start Translating
|
||||||
|
|
||||||
Compile.parsing=%0 \u3092\u69cb\u6587\u89e3\u6790\u4e2d
|
Compile.parsing=%0\u306E\u89E3\u6790\u4E2D
|
||||||
Compile.parseDone=\u5b8c\u4e86 - %0
|
Compile.parseDone=\u5B8C\u4E86 - %0
|
||||||
Compile.generating=%0 \u3092\u751f\u6210\u4e2d
|
Compile.generating=%0\u306E\u751F\u6210\u4E2D
|
||||||
Compile.genDone=\u5b8c\u4e86 - %0
|
Compile.genDone=\u5B8C\u4E86 - %0
|
||||||
Deprecated.keyword=\u8b66\u544a: \u30ad\u30fc\u30ef\u30fc\u30c9 `%0' \u306f\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
|
Deprecated.keyword=\u8B66\u544A: \u30AD\u30FC\u30EF\u30FC\u30C9`%0'\u306F\u63A8\u5968\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
|
||||||
EvaluationException.1=%0 \u6f14\u7b97\u5b50\u306e\u30aa\u30da\u30e9\u30f3\u30c9 %1 \u3068 %2 \u304c\u4e00\u81f4\u3057\u3066\u3044\u307e\u305b\u3093\u3002
|
EvaluationException.1=%0\u6F14\u7B97\u5B50\u306E\u30AA\u30DA\u30E9\u30F3\u30C9\u306B\u4E00\u8CAB\u6027\u304C\u3042\u308A\u307E\u305B\u3093: %1\u304A\u3088\u3073%2\u3002
|
||||||
EvaluationException.2=%0 \u6f14\u7b97\u5b50\u306e\u30aa\u30da\u30e9\u30f3\u30c9\u306f %1 \u3067\u306f\u306a\u304f\u6570\u5024\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002
|
EvaluationException.2=%0\u6F14\u7B97\u5B50\u306E\u30AA\u30DA\u30E9\u30F3\u30C9\u306F\u3001%1\u3067\u306F\u306A\u304F\u6570\u5024\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||||
EvaluationException.or=\u30d3\u30c3\u30c8\u5358\u4f4d\u306e\u8ad6\u7406\u548c
|
EvaluationException.or=\u30D3\u30C3\u30C8\u5358\u4F4D\u306EOR\u6F14\u7B97
|
||||||
EvaluationException.xor=\u30d3\u30c3\u30c8\u5358\u4f4d\u306e\u6392\u4ed6\u7684\u8ad6\u7406\u548c
|
EvaluationException.xor=\u30D3\u30C3\u30C8\u5358\u4F4D\u306EXOR\u6F14\u7B97
|
||||||
EvaluationException.and=\u30d3\u30c3\u30c8\u5358\u4f4d\u306e\u8ad6\u7406\u7a4d
|
EvaluationException.and=\u30D3\u30C3\u30C8\u5358\u4F4D\u306EAND\u6F14\u7B97
|
||||||
EvaluationException.plus=\u52a0\u7b97
|
EvaluationException.plus=\u52A0\u7B97
|
||||||
EvaluationException.minus=\u6e1b\u7b97
|
EvaluationException.minus=\u6E1B\u7B97
|
||||||
EvaluationException.left=\u5de6\u30b7\u30d5\u30c8
|
EvaluationException.left=\u5DE6\u30B7\u30D5\u30C8
|
||||||
EvaluationException.right=\u53f3\u30b7\u30d5\u30c8
|
EvaluationException.right=\u53F3\u30B7\u30D5\u30C8
|
||||||
EvaluationException.times=\u4e57\u7b97
|
EvaluationException.times=\u4E57\u7B97
|
||||||
EvaluationException.divide=\u9664\u7b97
|
EvaluationException.divide=\u9664\u7B97
|
||||||
EvaluationException.mod=\u30e2\u30b8\u30e5\u30ed
|
EvaluationException.mod=\u3079\u304D\u4E57
|
||||||
EvaluationException.pos=\u5358\u9805\u6b63\u6570
|
EvaluationException.pos=\u5358\u9805\u30D7\u30E9\u30B9
|
||||||
EvaluationException.neg=\u5358\u9805\u8ca0\u6570
|
EvaluationException.neg=\u5358\u9805\u30DE\u30A4\u30CA\u30B9
|
||||||
EvaluationException.not=\u30d3\u30c3\u30c8\u5358\u4f4d\u306e\u5426\u5b9a
|
EvaluationException.not=\u30D3\u30C3\u30C8\u5358\u4F4D\u306ENOT\u6F14\u7B97
|
||||||
EvaluationException.booleanNot=\u30d6\u30fc\u30eb\u306e\u5426\u5b9a
|
EvaluationException.booleanNot=boolean NOT
|
||||||
EvaluationException.booleanAnd=\u30d6\u30fc\u30eb\u306e\u8ad6\u7406\u7a4d
|
EvaluationException.booleanAnd=boolean AND
|
||||||
EvaluationException.booleanOr=\u30d6\u30fc\u30eb\u306e\u8ad6\u7406\u548c
|
EvaluationException.booleanOr=boolean OR
|
||||||
EvaluationException.equal=\u7b49\u4fa1
|
EvaluationException.equal=\u6B21\u3068\u7B49\u3057\u3044
|
||||||
EvaluationException.notEqual=\u4e0d\u7b49\u4fa1
|
EvaluationException.notEqual=\u6B21\u3068\u7B49\u3057\u304F\u306A\u3044
|
||||||
EvaluationException.greaterThan=\u5927\u304d\u3044
|
EvaluationException.greaterThan=\u304C\u6B21\u306E\u5024\u3088\u308A\u5927\u304D\u3044
|
||||||
EvaluationException.lessThan=\u5c0f\u3055\u3044
|
EvaluationException.lessThan=\u304C\u6B21\u306E\u5024\u3088\u308A\u5C0F\u3055\u3044
|
||||||
EvaluationException.greaterEqual=\u5927\u304d\u3044\u304b\u7b49\u3057\u3044
|
EvaluationException.greaterEqual=\u304C\u6B21\u306E\u5024\u4EE5\u4E0A
|
||||||
EvaluationException.lessEqual=\u5c0f\u3055\u3044\u304b\u7b49\u3057\u3044
|
EvaluationException.lessEqual=\u304C\u6B21\u306E\u5024\u4EE5\u4E0B
|
||||||
GenFileStream.1=%0 \u3092\u751f\u6210\u3067\u304d\u307e\u305b\u3093: %1
|
GenFileStream.1=%0\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: %1
|
||||||
InvalidArgument.1=\u4e0d\u6b63\u306a\u5f15\u6570: %0
|
InvalidArgument.1=\u5F15\u6570\u304C\u7121\u52B9\u3067\u3059: %0\u3002
|
||||||
InvalidArgument.2=IDL \u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
|
InvalidArgument.2=IDL\u30D5\u30A1\u30A4\u30EB\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
|
||||||
InvalidCharacter.1=%0 (%1 \u884c\u76ee): \u4e0d\u6b63\u306a\u6587\u5b57: %2 (ASCII %3).\n%4\n%5
|
InvalidCharacter.1=%0 (\u884C%1): \u6587\u5B57\u304C\u7121\u52B9\u3067\u3059: %2 (ASCII %3)\u3002\n%4\n%5
|
||||||
Migration.futureKeyword=\u8b66\u544a: \u8b58\u5225\u5b50 `%0' \u304c\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u885d\u7a81\u3057\u3066\u3044\u307e\u3059\u3002\u4eca\u5f8c\u3082\u4e92\u63db\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b\u306f\u62e1\u5f35\u8b58\u5225\u5b50\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
Migration.futureKeyword=\u8B66\u544A: \u8B58\u5225\u5B50`%0'\u304C\u30AD\u30FC\u30EF\u30FC\u30C9\u3068\u7AF6\u5408\u3057\u3066\u3044\u307E\u3059\u3002\u5C06\u6765\u306E\u4E92\u63DB\u6027\u306E\u305F\u3081\u306B\u3001\u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u305F\u8B58\u5225\u5B50\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||||
Migration.keywordCollision=\u8b66\u544a: \u8b58\u5225\u5b50 `%0' \u304c\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u885d\u7a81\u3057\u3066\u3044\u307e\u3059\u3002\u4eca\u5f8c\u3082\u4e92\u63db\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b\u306f\u62e1\u5f35\u8b58\u5225\u5b50\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
Migration.keywordCollision=\u8B66\u544A: \u8B58\u5225\u5B50`%0'\u304C\u30AD\u30FC\u30EF\u30FC\u30C9\u3068\u7AF6\u5408\u3057\u3066\u3044\u307E\u3059\u3002\u5C06\u6765\u306E\u4E92\u63DB\u6027\u306E\u305F\u3081\u306B\u3001\u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u305F\u8B58\u5225\u5B50\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||||
ParseException.abstractValueBox=%0 (%1 \u884c\u76ee): \u5024\u30dc\u30c3\u30af\u30b9\u3092 abstract \u3067\u5ba3\u8a00\u3067\u304d\u307e\u305b\u3093\u3002\n%2\n%3
|
ParseException.abstractValueBox=%0 (\u884C%1): \u5024\u30DC\u30C3\u30AF\u30B9\u306Fabstract\u3068\u3057\u3066\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\u3002\n%2\n%3
|
||||||
ParseException.alreadyDeclared=%0 (%1 \u884c\u76ee): %2 \u306f\u65e2\u306b\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n%3\n%4
|
ParseException.alreadyDeclared=%0 (\u884C%1): %2\u306F\u3059\u3067\u306B\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.declNotInSameFile=%0 (%1 \u884c\u76ee): %2 \u306f\u4ee5\u524d\u306b\u30d5\u30a1\u30a4\u30eb %3 \u306e\u524d\u65b9\u5ba3\u8a00\u306b\u5ba3\u8a00\u3055\u308c\u307e\u3057\u305f\u3002\n%4\n%5
|
ParseException.declNotInSameFile=%0 (\u884C%1): %2\u306F\u30D5\u30A1\u30A4\u30EB%3\u306Eforward\u5BA3\u8A00\u3067\u4EE5\u524D\u306B\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%4\n%5
|
||||||
ParseException.alreadyDerived=%0 (%1 \u884c\u76ee): %2 \u306f %3 \u306e\u89aa\u3068\u3057\u3066\u65e2\u306b\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n%4\n%5
|
ParseException.alreadyDerived=%0 (\u884C%1): %2\u306F%3\u306E\u89AA\u3068\u3057\u3066\u3059\u3067\u306B\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%4\n%5
|
||||||
ParseException.alreadyDefaulted=%0 (%1 \u884c\u76ee): \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5206\u5c90\u306f\u65e2\u306b\u691c\u51fa\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n%2\n%3
|
ParseException.alreadyDefaulted=%0 (\u884C%1): \u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u5206\u5C90\u306F\u3059\u3067\u306B\u691C\u51FA\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%2\n%3
|
||||||
ParseException.alreadyRaised=%0 (%1 \u884c\u76ee): %2 \u306f raises \u7bc0\u3067\u65e2\u306b\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n%3\n%4
|
ParseException.alreadyRaised=%0 (\u884C%1): %2\u306Fraises\u53E5\u3067\u3059\u3067\u306B\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.attributeNotType=%0 (%1 \u884c\u76ee): %2 \u306f\u5c5e\u6027\u3067\u3059\u3002\u578b\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.attributeNotType=%0 (\u884C%1): %2\u306F\u5C5E\u6027\u3067\u3059\u3002\u578B\u3068\u3057\u3066\u4F7F\u7528\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.badAbstract=%0 (%1 \u884c\u76ee): %2 \u306e\u524d\u65b9\u306e\u5ba3\u8a00\u3068\u5b9f\u969b\u306e\u5ba3\u8a00\u304c\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002\u4e00\u65b9\u306f abstract \u3067\u4ed6\u65b9\u306f\u305d\u308c\u3068\u7570\u306a\u308a\u307e\u3059\u3002\n%3\n%4
|
ParseException.badAbstract=%0 (\u884C%1): %2\u306Eforward\u5BA3\u8A00\u3068\u5B9F\u969B\u306E\u5BA3\u8A00\u306B\u4E00\u8CAB\u6027\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u4E00\u65B9\u306Fabstract\u3067\u3059\u304C\u3001\u3082\u3046\u4E00\u65B9\u306Fabstract\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.badCustom=%0 (%1 \u884c\u76ee): \u524d\u65b9\u5024\u5ba3\u8a00\u3092 custom \u3067\u5ba3\u8a00\u3067\u304d\u307e\u305b\u3093\u3002\n%2\n%3
|
ParseException.badCustom=%0 (\u884C%1): forward\u5024\u5BA3\u8A00\u306Fcustom\u3068\u3057\u3066\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\u3002\n%2\n%3
|
||||||
ParseException.badRepIDAlreadyAssigned=%0 (%1 \u884c\u76ee): \u578b %2 \u306f\u524d\u306e ID \u30d7\u30e9\u30b0\u30de\u6307\u793a\u306e\u30ea\u30dd\u30b8\u30c8\u30ea ID \u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u307e\u3059\u3002\n%3\n%4
|
ParseException.badRepIDAlreadyAssigned=%0 (\u884C%1): \u578B%2\u306B\u306F\u3001\u524D\u306EID\u30D7\u30E9\u30B0\u30DE\u30FB\u30C7\u30A3\u30EC\u30AF\u30C6\u30A3\u30D6\u306E\u30EA\u30DD\u30B8\u30C8\u30EAID\u304C\u3059\u3067\u306B\u5272\u308A\u5F53\u3066\u3089\u308C\u3066\u3044\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.badRepIDForm=%0 (%1 \u884c\u76ee): \u30ea\u30dd\u30b8\u30c8\u30ea ID '%2' \u306f '<format>:<string>' \u306e\u5f62\u5f0f\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.badRepIDForm=%0 (\u884C%1): \u30EA\u30DD\u30B8\u30C8\u30EAID '%2'\u306E\u5F62\u5F0F\u306F'<format>:<string>'\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.badRepIDPrefix=%0 (%1 \u884c\u76ee): \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 %2 \u306e\u30ea\u30dd\u30b8\u30c8\u30ea ID \u306e\u63a5\u982d\u8f9e\u306f '%4' \u3067\u306a\u304f `%3' \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\n%5\n%6
|
ParseException.badRepIDPrefix=%0 (\u884C%1): \u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9%2\u306B\u306F\u3001'%4'\u3067\u306F\u306A\u304F\u30EA\u30DD\u30B8\u30C8\u30EAID\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9`%3'\u304C\u5FC5\u8981\u3067\u3059\u3002\n%5\n%6
|
||||||
ParseException.badState=%0 (%1 \u884c\u76ee): %2 \u3092\u72b6\u614b\u3092\u6301\u3063\u305f\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u30022 \u3064\u4ee5\u4e0a\u306e\u72b6\u614b\u3092\u6301\u3063\u305f\u89aa\u304c\u3042\u308a\u307e\u3059\u3002\n%3\n%4
|
ParseException.badState=%0 (\u884C%1): %2\u306F\u30B9\u30C6\u30FC\u30C8\u30D5\u30EB\u30FB\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306B\u3067\u304D\u307E\u305B\u3093\u3002\u8907\u6570\u306E\u30B9\u30C6\u30FC\u30C8\u30D5\u30EB\u89AA\u304C\u3042\u308A\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.branchLabel=%0 (%1 \u884c\u76ee): case %2 \u306f\u65e2\u306b\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n%3\n%4
|
ParseException.branchLabel=%0 (\u884C%1): case %2\u306F\u3059\u3067\u306B\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.branchName=%0 (%1 \u884c\u76ee): %2 \u3068\u3044\u3046\u5206\u5c90\u306f\u65e2\u306b\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n%3\n%4
|
ParseException.branchName=%0 (\u884C%1): %2\u3068\u3044\u3046\u540D\u524D\u306E\u5206\u5C90\u306F\u3059\u3067\u306B\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.duplicateInit=%0 (%1 \u884c\u76ee): \u521d\u671f\u5316\u5b50\u306e\u30b7\u30b0\u30cb\u30c1\u30e3\u30fc\u304c\u524d\u306e\u521d\u671f\u5316\u5b50\u3068\u540c\u3058\u3067\u3059\u3002\n%2\n%3
|
ParseException.duplicateInit=%0 (\u884C%1): \u521D\u671F\u5316\u5B50\u306B\u306F\u524D\u306E\u521D\u671F\u5316\u5B50\u3068\u540C\u3058\u7F72\u540D\u304C\u3042\u308A\u307E\u3059\u3002\n%2\n%3
|
||||||
ParseException.duplicateState=%0 (%1 \u884c\u76ee): \u30c7\u30fc\u30bf\u30e1\u30f3\u30d0 %2 \u306e\u540d\u524d\u304c\u524d\u306e\u30c7\u30fc\u30bf\u30e1\u30f3\u30d0\u3068\u540c\u3058\u3067\u3059\u3002\n%3\n%4
|
ParseException.duplicateState=%0 (\u884C%1): \u30C7\u30FC\u30BF\u30FB\u30E1\u30F3\u30D0\u30FC%2\u306E\u540D\u524D\u304C\u524D\u306E\u30C7\u30FC\u30BF\u30FB\u30E1\u30F3\u30D0\u30FC\u3068\u540C\u3058\u3067\u3059\u3002\n%3\n%4
|
||||||
ParseException.elseNoIf=%0 (%1 \u884c\u76ee): #if \u3068\u30de\u30c3\u30c1\u30f3\u30b0\u3057\u306a\u3044 #else \u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\n%2\n%3
|
ParseException.elseNoIf=%0 (\u884C%1): \u4E00\u81F4\u3059\u308B#if\u304C\u306A\u3044#else\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F\u3002\n%2\n%3
|
||||||
ParseException.endNoIf=%0 (%1 \u884c\u76ee): #if \u3068\u30de\u30c3\u30c1\u30f3\u30b0\u3057\u306a\u3044 #endif \u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\n%2\n%3
|
ParseException.endNoIf=%0 (\u884C%1): \u4E00\u81F4\u3059\u308B#if\u304C\u306A\u3044#endif\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F\u3002\n%2\n%3
|
||||||
ParseException.evaluation=%0 (%1 \u884c\u76ee): %2\n%3\n%4
|
ParseException.evaluation=%0 (\u884C%1): %2\n%3\n%4
|
||||||
ParseException.forwardEntry=%0 (%1 \u884c\u76ee): %2 \u3078\u306e\u524d\u65b9\u53c2\u7167\u304c\u3042\u308a\u307e\u3057\u305f\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.forwardEntry=%0 (\u884C%1): %2\u3078\u306E\u524D\u65B9\u53C2\u7167\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.forwardedValueBox=%0 (%1 \u884c\u76ee): %2 \u306b\u524d\u65b9\u5ba3\u8a00\u304c\u3042\u308a\u307e\u3059\u3002\u5024\u30dc\u30c3\u30af\u30b9\u3092\u524d\u65b9\u5ba3\u8a00\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.forwardedValueBox=%0 (\u884C%1): %2\u306B\u306Fforward\u5BA3\u8A00\u304C\u3042\u308A\u307E\u3059\u3002\u5024\u30DC\u30C3\u30AF\u30B9\u306Fforward\u3068\u3057\u3066\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.forwardInheritance=%0 (%1 \u884c\u76ee): %3 \u306e\u4e0d\u5b8c\u5168\u306a\u524d\u65b9\u5ba3\u8a00\u3092 %2 \u304c\u7d99\u627f\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%4\n%5
|
ParseException.forwardInheritance=%0 (\u884C%1): %3\u306E\u4E0D\u5B8C\u5168\u306Aforward\u5BA3\u8A00\u304B\u3089\u306E%2\u306E\u7D99\u627F\u306F\u7121\u52B9\u3067\u3059\u3002\n%4\n%5
|
||||||
ParseException.generic=%0 (%1 \u884c\u76ee): %2\n%3\n%4
|
ParseException.generic=%0 (\u884C%1): %2\n%3\n%4
|
||||||
ParseException.illegalArray=%0 (%1 \u884c\u76ee): %2 \u306e\u914d\u5217\u306e\u578b\u304c\u4e0d\u6b63\u3067\u3059\u3002\n%3\n%4
|
ParseException.illegalArray=%0 (\u884C%1): \u914D\u5217\u306F%2\u306E\u6B63\u3057\u3044\u578B\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.illegalException=%0 (%1 \u884c\u76ee): %2 \u5185\u3067\u4f8b\u5916\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.illegalException=%0 (\u884C%1): \u4F8B\u5916\u3092%2s\u5185\u306B\u8868\u793A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.invalidConst1=%0 (%1 \u884c\u76ee): \u5b9a\u6570\u5f0f\u306e\u578b\u306f %3 \u3067\u306f\u306a\u304f %2 \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\n%4\n%5
|
ParseException.invalidConst1=%0 (\u884C%1): \u5B9A\u6570\u5F0F\u306F%3\u578B\u3067\u306F\u306A\u304F%2\u578B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n%4\n%5
|
||||||
ParseException.invalidConst2=%0 (%1 \u884c\u76ee): \u5b9a\u6570\u5f0f\u5185\u306e\u8b58\u5225\u5b50\u306f %2 \u3067\u306f\u306a\u304f\u5b9a\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.invalidConst2=%0 (\u884C%1): \u5B9A\u6570\u5F0F\u306E\u8B58\u5225\u5B50\u306F\u3001%2\u3067\u306F\u306A\u304F\u5B9A\u6570\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.keywordCollision=%0 (%1 \u884c\u76ee): \u8b58\u5225\u5b50 `%2' \u304c\u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u885d\u7a81\u3057\u3066\u3044\u307e\u3059\u3002\u62e1\u5f35\u8b58\u5225\u5b50\u3092\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n%3\n%4
|
ParseException.keywordCollision=%0 (\u884C%1): \u8B58\u5225\u5B50`%2'\u304C\u30AD\u30FC\u30EF\u30FC\u30C9\u3068\u7AF6\u5408\u3057\u3066\u3044\u307E\u3059\u3002\u5FC5\u8981\u306A\u5834\u5408\u306F\u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u305F\u8B58\u5225\u5B50\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n%3\n%4
|
||||||
ParseException.methodClash=%0 (%1 \u884c\u76ee): \u30e1\u30bd\u30c3\u30c9\u540d\u304c\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 %2 \u3067\u885d\u7a81\u3057\u3066\u3044\u307e\u3059: %3.\n%4\n%5
|
ParseException.methodClash=%0 (\u884C%1): \u30E1\u30BD\u30C3\u30C9\u540D\u304C\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9%2\u3067\u7AF6\u5408\u3057\u3066\u3044\u307E\u3059: %3\u3002\n%4\n%5
|
||||||
ParseException.moduleNotType=%0 (%1 \u884c\u76ee): %2 \u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3059\u3002\u578b\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.moduleNotType=%0 (\u884C%1): %2\u306F\u30E2\u30B8\u30E5\u30FC\u30EB\u3067\u3059\u3002\u578B\u3068\u3057\u3066\u4F7F\u7528\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.nestedValueBox=%0 (%1 \u884c\u76ee): \u5024\u30dc\u30c3\u30af\u30b9\u3092\u5165\u308c\u5b50\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%2\n%3
|
ParseException.nestedValueBox=%0 (\u884C%1): \u5024\u30DC\u30C3\u30AF\u30B9\u306F\u30CD\u30B9\u30C8\u3067\u304D\u307E\u305B\u3093\u3002\n%2\n%3
|
||||||
ParseException.noDefault=%0 (%1 \u884c\u76ee): \u8d77\u3053\u308a\u3046\u308b\u5168 case \u304c\u5b8c\u5168\u306b\u30ab\u30d0\u30fc\u3055\u308c\u3066\u3044\u306a\u3044\u9650\u308a\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5206\u5c90\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%2\n%3
|
ParseException.noDefault=%0 (\u884C%1): \u8003\u3048\u3089\u308C\u308B\u3059\u3079\u3066\u306Ecase\u304C\u5B8C\u5168\u306B\u9069\u7528\u3055\u308C\u308B\u5834\u5408\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u5206\u5C90\u306F\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093\u3002\n%2\n%3
|
||||||
ParseException.nonAbstractParent=%0 (%1 \u884c\u76ee): abstract \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 %2 \u306f\u975e abstract \u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 %3 \u3092\u7d99\u627f\u3067\u304d\u307e\u305b\u3093\u3002\n%4\n%5
|
ParseException.nonAbstractParent=%0 (\u884C%1): abstract\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9%2\u306F\u975Eabstract\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9%3\u304B\u3089\u7D99\u627F\u3067\u304D\u307E\u305B\u3093\u3002\n%4\n%5
|
||||||
ParseException.nonAbstractParent2=%0 (%1 \u884c\u76ee): abstract \u5024 %2 \u306f\u975e abstract \u5024 %3 \u3092\u7d99\u627f\u3067\u304d\u307e\u305b\u3093\u3002\n%4\n%5
|
ParseException.nonAbstractParent2=%0 (\u884C%1): abstract\u5024%2\u306F\u975Eabstract\u5024%3\u304B\u3089\u7D99\u627F\u3067\u304D\u307E\u305B\u3093\u3002\n%4\n%5
|
||||||
ParseException.nonAbstractParent3=%0 (%1 \u884c\u76ee): \u5024 %2 \u306f\u6307\u5b9a\u3055\u308c\u305f\u975e abstract \u5024 %3 \u3092\u7d99\u627f\u3067\u304d\u307e\u305b\u3093\u3002\n%4\n%5
|
ParseException.nonAbstractParent3=%0 (\u884C%1): \u5024%2\u306F\u6307\u5B9A\u3069\u304A\u308A\u306B\u975Eabstract\u5024%3\u304B\u3089\u7D99\u627F\u3067\u304D\u307E\u305B\u3093\u3002\n%4\n%5
|
||||||
ParseException.notANumber=%0 (%1 \u884c\u76ee): \u6570\u5024\u304c\u4e88\u671f\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002%2 \u306f\u4e0d\u6b63\u306a\u6570\u5024\u3067\u3059\u3002\n%3\n%4
|
ParseException.notANumber=%0 (\u884C%1): \u6570\u5024\u304C\u5FC5\u8981\u3067\u3059\u3002%2\u306F\u6709\u52B9\u306A\u6570\u5024\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.nothing=%0 \u306f\u7a7a\u3067\u3059\u3002\u30b3\u30f3\u30d1\u30a4\u30eb\u5bfe\u8c61\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
|
ParseException.nothing=%0\u306F\u7A7A\u3067\u3059\u3002\u30B3\u30F3\u30D1\u30A4\u30EB\u3059\u308B\u3082\u306E\u304C\u3042\u308A\u307E\u305B\u3093\u3002
|
||||||
ParseException.notPosInt=%0 (%1 \u884c\u76ee): %2 \u3067\u306f\u306a\u304f\u6b63\u306e\u6574\u6570\u5b9a\u6570\u304c\u4e88\u671f\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002\n%3\n%4
|
ParseException.notPosInt=%0 (\u884C%1): %2\u3067\u306F\u306A\u304F\u6B63\u306E\u6574\u6570\u306E\u5B9A\u6570\u304C\u5FC5\u8981\u3067\u3059\u3002\n%3\n%4
|
||||||
ParseException.oneway=%0 (%1 \u884c\u76ee): %2 \u306f\u7247\u65b9\u5411\u306b\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7247\u65b9\u5411\u30e1\u30bd\u30c3\u30c9\u306f\u3001void \u3092\u8fd4\u3059\u3053\u3068\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u5185\u3067 1 \u3064\u3060\u3051\u3067\u3042\u308b\u3053\u3068\u3001\u4f8b\u5916\u3092\u751f\u6210\u3057\u306a\u3044\u3053\u3068\u304c\u8981\u6c42\u3055\u308c\u307e\u3059\u3002\n%3\n%4
|
ParseException.oneway=%0 (\u884C%1): %2\u306Foneway\u306B\u306A\u308B\u3088\u3046\u306B\u5BA3\u8A00\u3055\u308C\u307E\u3059\u3002oneway\u30E1\u30BD\u30C3\u30C9\u306F\u3001void\u3092\u8FD4\u3057\u3001\u30D1\u30E9\u30E1\u30FC\u30BF\u5185\u3067\u306E\u307F\u4F7F\u7528\u3057\u3001\u4F8B\u5916\u3092\u767A\u751F\u3057\u306A\u3044\u3088\u3046\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n%3\n%4
|
||||||
ParseException.operationNotType=%0 (%1 \u884c\u76ee): %2 \u306f\u6f14\u7b97\u5b50\u3067\u3059\u3002\u578b\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.operationNotType=%0 (\u884C%1): %2\u306F\u64CD\u4F5C\u3067\u3059\u3002\u578B\u3068\u3057\u3066\u4F7F\u7528\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.outOfRange=%0 (%1 \u884c\u76ee): \u5b9a\u6570\u5f0f\u306e\u5024 %2 \u306f\u578b %3 \u306e\u7bc4\u56f2\u5916\u3067\u3059\u3002\n%4\n%5
|
ParseException.outOfRange=%0 (\u884C%1): \u5B9A\u6570\u5F0F\u306E\u5024%2\u304C\u578B%3\u306E\u7BC4\u56F2\u3092\u8D85\u3048\u3066\u3044\u307E\u3059\u3002\n%4\n%5
|
||||||
ParseException.recursive=%0 (%1 \u884c\u76ee): \u6b63\u5f53\u306a\u518d\u5e30\u5b9a\u7fa9\u306f\u6b21\u306e\u3082\u306e\u3060\u3051\u3067\u3059: sequence<%2> %3.\n%4\n%5
|
ParseException.recursive=%0 (\u884C%1): \u552F\u4E00\u306E\u6B63\u3057\u3044\u518D\u5E30\u7684\u5B9A\u7FA9\u306F\u6B21\u306E\u3068\u304A\u308A\u3067\u3059: \u30B7\u30FC\u30B1\u30F3\u30B9<%2> %3\u3002\n%4\n%5
|
||||||
ParseException.selfInherit=%0 (%1 \u884c\u76ee): %2 \u306f\u81ea\u8eab\u3092\u7d99\u627f\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%3\n%4
|
ParseException.selfInherit=%0 (\u884C%1): %2\u3092\u305D\u308C\u81EA\u4F53\u304B\u3089\u7D99\u627F\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n%3\n%4
|
||||||
ParseException.stringTooLong=%0 (%1 \u884c\u76ee): "%2" \u306f %3 \u6587\u5b57\u4ee5\u4e0a\u306e\u9577\u3055\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n%4\n%5
|
ParseException.stringTooLong=%0 (\u884C%1): "%2"\u306F%3\u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n%4\n%5
|
||||||
ParseException.syntax1=%0 (%1 \u884c\u76ee): `%2' \u304c\u4e88\u671f\u3055\u308c `%3' \u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\n%4\n%5
|
ParseException.syntax1=%0 (\u884C%1): `%2'\u304C\u5FC5\u8981\u3067\u3059\u304C\u3001`%3'\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F\u3002\n%4\n%5
|
||||||
ParseException.syntax2=%0 (%1 \u884c\u76ee): %2 \u306e 1 \u3064\u304c\u4e88\u671f\u3055\u308c `%3'\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002\n%4\n%5
|
ParseException.syntax2=%0 (\u884C%1): %2\u306E1\u3064\u304C\u5FC5\u8981\u3067\u3059\u304C\u3001`%3'\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F\u3002\n%4\n%5
|
||||||
ParseException.unclosed=%0: \u30b3\u30e1\u30f3\u30c8\u5185\u306b\u4e88\u60f3\u5916\u306e EOF \u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002
|
ParseException.unclosed=%0: \u30B3\u30E1\u30F3\u30C8\u3067\u4E88\u671F\u3057\u306A\u3044EOF\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\u3002
|
||||||
ParseException.undeclaredType=%0 (%1 \u884c\u76ee): %2 \u306f\u5ba3\u8a00\u3055\u308c\u3066\u3044\u306a\u3044\u578b\u3067\u3059\u3002\n%3\n%4
|
ParseException.undeclaredType=%0 (\u884C%1): %2\u306F\u5BA3\u8A00\u3055\u308C\u3066\u3044\u306A\u3044\u578B\u3067\u3059\u3002\n%3\n%4
|
||||||
ParseException.warning=%0 (%1 \u884c\u76ee): %2\n%3\n%4
|
ParseException.warning=%0 (\u884C%1): %2\n%3\n%4
|
||||||
ParseException.constExprType=%0 (%1 \u884c\u76ee): \u5b9a\u6570\u5f0f\u306e\u578b\u306f %2 \u3067\u3059\u304c\u3001%3 \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\n%4\n%5
|
ParseException.constExprType=%0 (\u884C%1): \u5B9A\u6570\u5F0F\u306E\u578B\u306F%2\u3067\u3059\u304C\u3001%3\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n%4\n%5
|
||||||
ParseException.wrongType=%0 (%1 \u884c\u76ee): %2 \u306e\u578b\u306f %3 \u3067\u3059\u304c %4 \u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\n%5\n%6
|
ParseException.wrongType=%0 (\u884C%1): %2\u306E\u578B\u306F%3\u3067\u3059\u304C\u3001%4\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n%5\n%6
|
||||||
ParseException.illegalIncompleteTypeReference=%0 (%1 \u884c\u76ee): \u578b %2 \u306e\u4e0d\u5b8c\u5168\u306a\u524d\u65b9\u5ba3\u8a00\u3078\u306e\u4e0d\u6b63\u306a\u53c2\u7167\u3067\u3059\u3002\n%3\n%4
|
ParseException.illegalIncompleteTypeReference=%0 (\u884C%1): %2\u578B\u306E\u4E0D\u5B8C\u5168\u306Aforward\u5BA3\u8A00\u3078\u306E\u7121\u52B9\u306A\u53C2\u7167\u3067\u3059\u3002\n%3\n%4
|
||||||
Preprocessor.unknown=`%0'\u306f\u672a\u77e5\u306e\u30d7\u30ea\u30d7\u30ed\u30bb\u30c3\u30b5\u6307\u793a\u3067\u3059\u3002\u884c\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
|
Preprocessor.unknown=\u4E0D\u660E\u306A\u30D7\u30EA\u30D7\u30ED\u30BB\u30C3\u30B5\u30FB\u30C7\u30A3\u30EC\u30AF\u30C6\u30A3\u30D6`%0'\u3067\u3059\u3002\u884C\u306F\u7121\u8996\u3055\u308C\u307E\u3057\u305F\u3002
|
||||||
Preprocessor.unknownPragma=`%0'\u306f\u672a\u77e5\u306e\u30d7\u30e9\u30b0\u30de\u3067\u3059\u3002\u884c\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
|
Preprocessor.unknownPragma=\u4E0D\u660E\u306A\u30D7\u30E9\u30B0\u30DE`%0'\u3067\u3059\u3002\u884C\u306F\u7121\u8996\u3055\u308C\u307E\u3057\u305F\u3002
|
||||||
Preprocessor.undefinedName=%1 \u306f\u30d7\u30e9\u30b0\u30de %0 \u306e\u672a\u5b9a\u7fa9\u306e\u578b\u540d\u3067\u3059\u3002\u884c\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002
|
Preprocessor.undefinedName=\u30D7\u30E9\u30B0\u30DE%0\u306E\u578B\u540D\u304C\u672A\u5B9A\u7FA9\u3067\u3059: %1\u3002\u884C\u306F\u7121\u8996\u3055\u308C\u307E\u3057\u305F\u3002
|
||||||
Token.boolLit=<boolean literal>
|
Token.boolLit=<boolean literal>
|
||||||
Token.charLit=<character literal>
|
Token.charLit=<character literal>
|
||||||
Token.intLit=<integer literal>
|
Token.intLit=<integer literal>
|
||||||
@@ -164,32 +164,14 @@ Token.literal=<literal>
|
|||||||
Token.identifier=<identifier>
|
Token.identifier=<identifier>
|
||||||
Token.endOfFile=EOF
|
Token.endOfFile=EOF
|
||||||
Token.unknown=?
|
Token.unknown=?
|
||||||
Util.cantCreatePkg=\u30d1\u30c3\u30b1\u30fc\u30b8 %0 \u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002
|
Util.cantCreatePkg=\u30D1\u30C3\u30B1\u30FC\u30B8%0\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3002
|
||||||
Version.product=IDL Parser Framework, \u30d0\u30fc\u30b8\u30e7\u30f3 "%0"
|
Version.product=IDL\u30D1\u30FC\u30B5\u30FC\u30FB\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u3001\u30D0\u30FC\u30B8\u30E7\u30F3"%0"
|
||||||
Version.number=3.0
|
Version.number=3.2
|
||||||
default=\u30a8\u30e9\u30fc! \u5b58\u5728\u3057\u306a\u3044\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u3002\u30e1\u30c3\u30bb\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u306b\u30ad\u30fc\u304c\u3042\u308a\u307e\u305b\u3093: %0.
|
default=\u30A8\u30E9\u30FC\u3002\u5B58\u5728\u3057\u306A\u3044\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u30EA\u30AF\u30A8\u30B9\u30C8\u3055\u308C\u307E\u3057\u305F\u3002\u30E1\u30C3\u30BB\u30FC\u30B8\u30FB\u30D5\u30A1\u30A4\u30EB\u306B\u30AD\u30FC\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u305B\u3093: %0\u3002
|
||||||
|
|
||||||
# Translator: In the list of options below, do not translate:
|
# Translator: In the list of options below, do not translate:
|
||||||
# -i, -d, -keep, -emitAll, -noWarn, -v, -verbose, -version, #define
|
# -i, -d, -keep, -emitAll, -noWarn, -v, -verbose, -version, #define
|
||||||
# Do not translate the string "java com.sun.tools.corba.se.idl.Compile"
|
# Do not translate the string "java com.sun.tools.corba.se.idl.Compile"
|
||||||
|
|
||||||
usage=\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u4f7f\u3044\u65b9:\n\
|
usage=\u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u4F7F\u7528\u65B9\u6CD5:\n\ java com.sun.tools.corba.se.idl.Compile [options] <idl file>\n<idl file>\u306FIDL\u5B9A\u7FA9\u3092\u542B\u3080\u30D5\u30A1\u30A4\u30EB\u306E\u540D\u524D\u3067\u3001\n[options]\u306F\u6B21\u306B\u30EA\u30B9\u30C8\u3059\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u7D44\u5408\u305B\u3067\u3059\u3002\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\n\u7701\u7565\u53EF\u80FD\u3067\u3001\u4EFB\u610F\u306E\u9806\u5E8F\u3067\u8868\u793A\u3055\u308C\u307E\u3059\u3002<idl file>\u306F\u5FC5\u9808\u3067\u3001\n\u6700\u5F8C\u306B\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n\ \n\u30AA\u30D7\u30B7\u30E7\u30F3:\n-d <symbol> IDL\u30D5\u30A1\u30A4\u30EB\u306E\u6B21\u306E\u884C\u3068\n\ \u540C\u3058\u3067\u3059: #define <symbol>\n-emitAll #included\u30D5\u30A1\u30A4\u30EB\u3067\u898B\u3064\u304B\u3063\u305F\u30BF\u30A4\u30D7\u3092\u542B\u3080\u3001\u3059\u3079\u3066\u306E\u30BF\u30A4\u30D7\u3092\n\ \u767A\u884C\u3057\u307E\u3059\u3002\n-i <include path> \u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u306F\u3001\u73FE\u5728\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30A4\u30F3\u30AF\u30EB\u30FC\u30C9\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\n\ \u30B9\u30AD\u30E3\u30F3\u3055\u308C\u307E\u3059\u3002\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u5225\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u8FFD\u52A0\u3057\u307E\u3059\u3002\n-keep \u751F\u6210\u3055\u308C\u308B\u30D5\u30A1\u30A4\u30EB\u304C\u3059\u3067\u306B\u5B58\u5728\u3059\u308B\u5834\u5408\u306F\u3001\u4E0A\u66F8\u304D\n\ \u3057\u307E\u305B\u3093\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u306F\u4E0A\u66F8\u304D\u3055\u308C\u307E\u3059\u3002\n-noWarn \u8B66\u544A\u3092\u51FA\u3055\u306A\u3044\u3088\u3046\u306B\u3057\u307E\u3059\u3002\n-v, -verbose \u8A73\u7D30\u30E2\u30FC\u30C9\u3002\n-version \u30D0\u30FC\u30B8\u30E7\u30F3\u756A\u53F7\u3092\u8868\u793A\u3057\u307E\u3059\u3002\n
|
||||||
\ java com.sun.tools.corba.se.idl.Compile [options] <idl file>\n\
|
|
||||||
<idl file> \u306f IDL \u5b9a\u7fa9\u304c\u683c\u7d0d\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u540d\u524d\u3067\u3059\u3002\n\
|
|
||||||
[options] \u306f\u4ee5\u4e0b\u306b\u793a\u3059\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u3059\u3002\n\
|
|
||||||
\u3053\u308c\u3089\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u7701\u7565\u53ef\u80fd\u3067\u3001\u4efb\u610f\u306e\u9806\u5e8f\u3067\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\n\
|
|
||||||
\u305f\u3060\u3057 <idl file> \u306f\u5fc5\u9808\u3067\u3001\u6700\u5f8c\u306b\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n\
|
|
||||||
\ \n\
|
|
||||||
\u30aa\u30d7\u30b7\u30e7\u30f3:\n\
|
|
||||||
-d <symbol> IDL \u30d5\u30a1\u30a4\u30eb\u5185\u306e\u6b21\u306e\u884c\u3068\u7b49\u4fa1:\n\
|
|
||||||
\ #define <symbol>\n\
|
|
||||||
-emitAll #included \u30d5\u30a1\u30a4\u30eb\u5185\u306e\u3082\u306e\u3092\u542b\u3080\u5168\u578b\u3092\n\
|
|
||||||
\ \u751f\u6210\u3059\u308b\n\
|
|
||||||
-i <include path> \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u3092\u691c\u7d22\n\
|
|
||||||
\ \u3059\u308b\u3002\u305d\u308c\u4ee5\u5916\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u8ffd\u52a0\u3059\u308b\n\
|
|
||||||
-keep \u751f\u6210\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u304c\u3059\u3067\u306b\u5b58\u5728\u3059\u308b\u5834\u5408\u3001\u65e2\u5b58\u306e\u30d5\u30a1\u30a4\u30eb\u3092\n\
|
|
||||||
\ \u4e0a\u66f8\u304d\u3057\u306a\u3044\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u4e0a\u66f8\u304d\u3059\u308b\n\
|
|
||||||
-noWarn \u8b66\u544a\u3092\u751f\u6210\u3057\u306a\u3044\n\
|
|
||||||
-v, -verbose \u8a73\u7d30\u30e2\u30fc\u30c9\n\
|
|
||||||
-version \u30d0\u30fc\u30b8\u30e7\u30f3\u756a\u53f7\u3092\u8868\u793a\u3059\u308b\n
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -64,132 +64,114 @@
|
|||||||
#
|
#
|
||||||
# Translator: Start Translating
|
# Translator: Start Translating
|
||||||
|
|
||||||
Compile.parsing=\u6b63\u5728\u89e3\u6790 %0
|
Compile.parsing=\u6B63\u5728\u5BF9 %0 \u8FDB\u884C\u8BED\u6CD5\u5206\u6790
|
||||||
Compile.parseDone=\u5b8c\u6210--%0
|
Compile.parseDone=\u5B8C\u6210 - %0
|
||||||
Compile.generating=\u6b63\u5728\u751f\u6210 %0
|
Compile.generating=\u6B63\u5728\u751F\u6210 %0
|
||||||
Compile.genDone=\u5b8c\u6210--%0
|
Compile.genDone=\u5B8C\u6210 - %0
|
||||||
Deprecated.keyword=\u8b66\u544a\uff1a\u5173\u952e\u5b57 `%0' \u5df2\u8fc7\u65f6\u3002
|
Deprecated.keyword=\u8B66\u544A: \u5173\u952E\u5B57 `%0' \u5DF2\u8FC7\u65F6\u3002
|
||||||
EvaluationException.1=%0 \u8fd0\u7b97\u7b26\u7684\u64cd\u4f5c\u6570\u4e0d\u4e00\u81f4\uff1a%1 \u548c %2\u3002
|
EvaluationException.1=%0 \u8FD0\u7B97\u7B26\u7684\u64CD\u4F5C\u6570\u4E0D\u4E00\u81F4: %1 \u548C %2\u3002
|
||||||
EvaluationException.2=%0 \u8fd0\u7b97\u7b26\u7684\u64cd\u4f5c\u6570\u5fc5\u987b\u4e3a\u6570\u5b57\uff0c\u800c\u975e %1\u3002
|
EvaluationException.2=%0 \u8FD0\u7B97\u7B26\u7684\u64CD\u4F5C\u6570\u5FC5\u987B\u662F\u6570\u5B57, \u800C\u4E0D\u662F %1\u3002
|
||||||
EvaluationException.or=\u6309\u4f4d or
|
EvaluationException.or=\u6309\u4F4D\u6216
|
||||||
EvaluationException.xor=\u6309\u4f4d xor
|
EvaluationException.xor=\u6309\u4F4D\u5F02\u6216
|
||||||
EvaluationException.and=\u6309\u4f4d and
|
EvaluationException.and=\u6309\u4F4D\u4E0E
|
||||||
EvaluationException.plus=\u52a0
|
EvaluationException.plus=\u6DFB\u52A0
|
||||||
EvaluationException.minus=\u51cf
|
EvaluationException.minus=\u51CF\u6CD5
|
||||||
EvaluationException.left=\u5411\u5de6\u79fb\u4f4d
|
EvaluationException.left=\u5411\u5DE6\u79FB\u4F4D
|
||||||
EvaluationException.right=\u5411\u53f3\u79fb\u4f4d
|
EvaluationException.right=\u5411\u53F3\u79FB\u4F4D
|
||||||
EvaluationException.times=\u4e58
|
EvaluationException.times=\u4E58\u6CD5
|
||||||
EvaluationException.divide=\u9664
|
EvaluationException.divide=\u9664\u6CD5
|
||||||
EvaluationException.mod=\u5efa\u6a21
|
EvaluationException.mod=\u53D6\u6A21
|
||||||
EvaluationException.pos=\u4e00\u5143\u6b63\u6570
|
EvaluationException.pos=\u4E00\u5143\u6B63\u6570
|
||||||
EvaluationException.neg=\u4e00\u5143\u8d1f\u6570
|
EvaluationException.neg=\u4E00\u5143\u8D1F\u6570
|
||||||
EvaluationException.not=\u6309\u4f4d not
|
EvaluationException.not=\u6309\u4F4D\u975E
|
||||||
EvaluationException.booleanNot=\u5e03\u5c14\u503c not
|
EvaluationException.booleanNot=\u5E03\u5C14\u975E
|
||||||
EvaluationException.booleanAnd=\u5e03\u5c14\u503c and
|
EvaluationException.booleanAnd=\u5E03\u5C14\u4E0E
|
||||||
EvaluationException.booleanOr=\u5e03\u5c14\u503c or
|
EvaluationException.booleanOr=\u5E03\u5C14\u6216
|
||||||
EvaluationException.equal=\u7b49\u4e8e
|
EvaluationException.equal=\u7B49\u4E8E
|
||||||
EvaluationException.notEqual=\u4e0d\u7b49\u4e8e
|
EvaluationException.notEqual=\u4E0D\u7B49\u4E8E
|
||||||
EvaluationException.greaterThan=\u5927\u4e8e
|
EvaluationException.greaterThan=\u5927\u4E8E
|
||||||
EvaluationException.lessThan=\u5c0f\u4e8e
|
EvaluationException.lessThan=\u5C0F\u4E8E
|
||||||
EvaluationException.greaterEqual=\u5927\u4e8e\u6216\u7b49\u4e8e
|
EvaluationException.greaterEqual=\u5927\u4E8E\u7B49\u4E8E
|
||||||
EvaluationException.lessEqual=\u5c0f\u4e8e\u6216\u7b49\u4e8e
|
EvaluationException.lessEqual=\u5C0F\u4E8E\u7B49\u4E8E
|
||||||
GenFileStream.1=\u65e0\u6cd5\u751f\u6210 {0}\uff1a%1
|
GenFileStream.1=\u65E0\u6CD5\u751F\u6210%0: %1
|
||||||
InvalidArgument.1=\u53c2\u6570\u65e0\u6548\uff1a%0\u3002
|
InvalidArgument.1=\u53C2\u6570\u65E0\u6548: %0\u3002
|
||||||
InvalidArgument.2=\u672a\u6307\u5b9a\u4efb\u4f55 IDL \u6587\u4ef6\u3002
|
InvalidArgument.2=\u672A\u6307\u5B9A IDL \u6587\u4EF6\u3002
|
||||||
InvalidCharacter.1=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5b57\u7b26\u65e0\u6548\uff1a%2 (ASCII %3)\u3002\n%4\n%5
|
InvalidCharacter.1=%0 (\u884C %1): \u5B57\u7B26\u65E0\u6548: %2 (ASCII %3)\u3002\n%4\n%5
|
||||||
Migration.futureKeyword=\u8b66\u544a\uff1a\u6807\u8bc6\u7b26 `%0' \u4e0e\u5173\u952e\u5b57\u51b2\u7a81\uff0c\u8bf7\u4f7f\u7528\u6362\u7801\u7684\u6807\u8bc6\u7b26\u786e\u4fdd\u4ee5\u540e\u7684\u517c\u5bb9\u6027\u3002
|
Migration.futureKeyword=\u8B66\u544A: \u6807\u8BC6\u7B26 `%0' \u4E0E\u5173\u952E\u5B57\u51B2\u7A81; \u8BF7\u4F7F\u7528\u8F6C\u4E49\u6807\u8BC6\u7B26\u4EE5\u786E\u4FDD\u5C06\u6765\u517C\u5BB9\u3002
|
||||||
Migration.keywordCollision=\u8b66\u544a\uff1a\u6807\u8bc6\u7b26 `%0' \u4e0e\u5173\u952e\u5b57\u51b2\u7a81\uff0c\u8bf7\u4f7f\u7528\u6362\u7801\u7684\u6807\u8bc6\u7b26\u786e\u4fdd\u4ee5\u540e\u7684\u517c\u5bb9\u6027\u3002
|
Migration.keywordCollision=\u8B66\u544A: \u6807\u8BC6\u7B26 `%0' \u4E0E\u5173\u952E\u5B57\u51B2\u7A81; \u8BF7\u4F7F\u7528\u8F6C\u4E49\u6807\u8BC6\u7B26\u4EE5\u786E\u4FDD\u5C06\u6765\u517C\u5BB9\u3002
|
||||||
ParseException.abstractValueBox=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u65e0\u6cd5\u5c06\u503c\u6846\u58f0\u660e\u4e3a\u62bd\u8c61\u3002\n%2\n%3
|
ParseException.abstractValueBox=%0 (\u884C %1): \u4E0D\u80FD\u5C06\u503C\u6846\u58F0\u660E\u4E3A\u62BD\u8C61\u3002\n%2\n%3
|
||||||
ParseException.alreadyDeclared=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5df2\u58f0\u660e %2\u3002\n%3\n%4
|
ParseException.alreadyDeclared=%0 (\u884C %1): %2\u5DF2\u58F0\u660E\u3002\n%3\n%4
|
||||||
ParseException.declNotInSameFile=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u4ee5\u524d\u5df2\u5728\u6587\u4ef6 %3 \u7684\u5411\u524d\u58f0\u660e\u4e2d\u58f0\u660e\u4e86 %2\u3002\n%4\n%5
|
ParseException.declNotInSameFile=%0 (\u884C %1): %2\u4EE5\u524D\u66FE\u5728\u6587\u4EF6%3\u7684\u524D\u5411\u58F0\u660E\u4E2D\u58F0\u660E\u3002\n%4\n%5
|
||||||
ParseException.alreadyDerived=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5df2\u5c06 %2 \u58f0\u660e\u4e3a %3 \u7684\u7236\u9879\u3002\n%4\n%5
|
ParseException.alreadyDerived=%0 (\u884C %1): %2\u5DF2\u58F0\u660E\u4E3A%3\u7684\u7236\u7EA7\u3002\n%4\n%5
|
||||||
ParseException.alreadyDefaulted=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u9047\u5230\u9ed8\u8ba4\u5206\u652f\u3002\n%2\n%3
|
ParseException.alreadyDefaulted=%0 (\u884C %1): \u5DF2\u9047\u5230\u9ED8\u8BA4\u5206\u652F\u3002\n%2\n%3
|
||||||
ParseException.alreadyRaised=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5df2\u5728 raises \u5b50\u53e5\u4e2d\u6307\u5b9a\u4e86 %2\u3002\n%3\n%4
|
ParseException.alreadyRaised=%0 (\u884C %1): %2\u5DF2\u5728 raise \u5B50\u53E5\u4E2D\u6307\u5B9A\u3002\n%3\n%4
|
||||||
ParseException.attributeNotType=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u4e3a\u5c5e\u6027\u3002\u4e0d\u80fd\u5c06\u5176\u7528\u4f5c\u7c7b\u578b\u3002\n%3\n%4
|
ParseException.attributeNotType=%0 (\u884C %1): %2 \u662F\u5C5E\u6027\u3002\u4E0D\u80FD\u5C06\u5176\u7528\u4F5C\u7C7B\u578B\u3002\n%3\n%4
|
||||||
ParseException.badAbstract=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u7684\u5411\u524d\u548c\u5b9e\u9645\u58f0\u660e\u4e0d\u4e00\u81f4\u3002\u5176\u4e2d\u4e00\u4e2a\u662f\u62bd\u8c61\u58f0\u660e\uff0c\u800c\u53e6\u4e00\u4e2a\u5374\u4e0d\u662f\u3002\n%3\n%4
|
ParseException.badAbstract=%0 (\u884C %1): %2\u7684\u524D\u5411\u58F0\u660E\u548C\u5B9E\u9645\u58F0\u660E\u4E0D\u4E00\u81F4\u3002\u4E00\u4E2A\u662F\u62BD\u8C61\u7684, \u800C\u53E6\u4E00\u4E2A\u4E0D\u662F\u62BD\u8C61\u7684\u3002\n%3\n%4
|
||||||
ParseException.badCustom=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u65e0\u6cd5\u81ea\u5b9a\u4e49\u58f0\u660e\u5411\u524d\u503c\u58f0\u660e\u3002\n%2\n%3
|
ParseException.badCustom=%0 (\u884C %1): \u65E0\u6CD5\u5C06\u524D\u5411\u503C\u58F0\u660E\u58F0\u660E\u4E3A\u5B9A\u5236\u3002\n%2\n%3
|
||||||
ParseException.badRepIDAlreadyAssigned=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5728\u4ee5\u524d\u7684 ID pragma \u6307\u4ee4\u4e2d\u5df2\u5411\u7c7b\u578b %2 \u6307\u5b9a\u4e86\u7cfb\u7edf\u4fe1\u606f\u5e93 ID\u3002\n%3\n%4
|
ParseException.badRepIDAlreadyAssigned=%0 (\u884C %1): \u5DF2\u5728\u4E0A\u4E00\u4E2A ID \u7F16\u8BD1\u6307\u793A\u6307\u4EE4\u4E2D\u4E3A\u7C7B\u578B%2\u5206\u914D\u4E86\u8D44\u6599\u6863\u6848\u5E93 ID\u3002\n%3\n%4
|
||||||
ParseException.badRepIDForm=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u7cfb\u7edf\u4fe1\u606f\u5e93 ID '%2' \u7684\u683c\u5f0f\u5e94\u4e3a '<\u683c\u5f0f>:<\u5b57\u7b26\u4e32>'\u3002\n%3\n%4
|
ParseException.badRepIDForm=%0 (\u884C %1): \u8D44\u6599\u6863\u6848\u5E93 ID '%2' \u7684\u683C\u5F0F\u5E94\u4E3A '<format>:<string>'\u3002\n%3\n%4
|
||||||
ParseException.badRepIDPrefix=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u63a5\u53e3 %2 \u7684\u7cfb\u7edf\u4fe1\u606f\u5e93 ID \u524d\u7f00\u5e94\u4e3a `%3' \u800c\u975e '%4'\u3002\n%5\n%6
|
ParseException.badRepIDPrefix=%0 (\u884C %1): \u63A5\u53E3 %2 \u7684\u8D44\u6599\u6863\u6848\u5E93 ID \u524D\u7F00\u5E94\u4E3A `%3', \u800C\u975E '%4'\u3002\n%5\n%6
|
||||||
ParseException.badState=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u4e0d\u80fd\u4e3a\u6709\u72b6\u6001\u63a5\u53e3\uff1b\u5b83\u5177\u6709\u591a\u4e2a\u6709\u72b6\u6001\u7236\u63a5\u53e3\u3002\n%3\n%4
|
ParseException.badState=%0 (\u884C %1): %2 \u4E0D\u80FD\u662F\u6709\u72B6\u6001\u63A5\u53E3; \u5B83\u5305\u542B\u591A\u4E2A\u6709\u72B6\u6001\u7236\u7EA7\u3002\n%3\n%4
|
||||||
ParseException.branchLabel=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5df2\u58f0\u660e\u6761\u4ef6 %2\u3002\n%3\n%4
|
ParseException.branchLabel=%0 (\u884C %1): case %2\u5DF2\u58F0\u660E\u3002\n%3\n%4
|
||||||
ParseException.branchName=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5df2\u58f0\u660e\u540d\u4e3a %2 \u7684\u5206\u652f\u3002\n%3\n%4
|
ParseException.branchName=%0 (\u884C %1): \u540D\u4E3A%2\u7684\u5206\u652F\u5DF2\u58F0\u660E\u3002\n%3\n%4
|
||||||
ParseException.duplicateInit=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u521d\u59cb\u5316\u7a0b\u5e8f\u4e0e\u4ee5\u524d\u7684\u521d\u59cb\u5316\u7a0b\u5e8f\u5177\u6709\u76f8\u540c\u7684\u7b7e\u540d\u3002\n%2\n%3
|
ParseException.duplicateInit=%0 (\u884C %1): \u67D0\u4E2A\u521D\u59CB\u5316\u7A0B\u5E8F\u4E0E\u4E0A\u4E00\u4E2A\u521D\u59CB\u5316\u7A0B\u5E8F\u5177\u6709\u76F8\u540C\u7684\u7B7E\u540D\u3002\n%2\n%3
|
||||||
ParseException.duplicateState=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u6570\u636e\u6210\u5458 %2 \u4e0e\u4ee5\u524d\u7684\u6570\u636e\u6210\u5458\u5177\u6709\u76f8\u540c\u7684\u540d\u79f0\u3002\n%3\n%4
|
ParseException.duplicateState=%0 (\u884C %1): \u6570\u636E\u6210\u5458 %2 \u4E0E\u4E0A\u4E00\u4E2A\u6570\u636E\u6210\u5458\u5177\u6709\u76F8\u540C\u7684\u540D\u79F0\u3002\n%3\n%4
|
||||||
ParseException.elseNoIf=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u9047\u5230\u7684 #else \u6ca1\u6709\u5339\u914d\u7684 #if\u3002\n%2\n%3
|
ParseException.elseNoIf=%0 (\u884C %1): \u9047\u5230\u4E86 #else, \u4F46\u6CA1\u6709\u5339\u914D\u7684 #if\u3002\n%2\n%3
|
||||||
ParseException.endNoIf=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u9047\u5230\u7684 #endif \u6ca1\u6709\u5339\u914d\u7684 #if\u3002\n%2\n%3
|
ParseException.endNoIf=%0 (\u884C %1): \u9047\u5230\u4E86 #endif, \u4F46\u6CA1\u6709\u5339\u914D\u7684 #if\u3002\n%2\n%3
|
||||||
ParseException.evaluation=%0\uff08\u7b2c %1 \u884c\uff09\uff1a %2\n%3\n%4
|
ParseException.evaluation=%0 (\u884C %1): %2\n%3\n%4
|
||||||
ParseException.forwardEntry=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5b58\u5728\u5bf9 %2 \u7684\u5411\u524d\u5f15\u7528\uff0c\u4f46\u5c1a\u672a\u8fdb\u884c\u5b9a\u4e49\u3002\n%3\n%4
|
ParseException.forwardEntry=%0 (\u884C %1): \u5B58\u5728\u9488\u5BF9%2\u7684\u524D\u5411\u5F15\u7528, \u4F46\u5B83\u5C1A\u672A\u5B9A\u4E49\u3002\n%3\n%4
|
||||||
ParseException.forwardedValueBox=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u5177\u6709\u5411\u524d\u58f0\u660e\u3002\u65e0\u6cd5\u5411\u524d\u58f0\u660e\u503c\u6846\u3002\n%3\n%4
|
ParseException.forwardedValueBox=%0 (\u884C %1): %2 \u5177\u6709\u524D\u5411\u58F0\u660E\u3002\u4E0D\u80FD\u5BF9\u503C\u6846\u8FDB\u884C\u524D\u5411\u58F0\u660E\u3002\n%3\n%4
|
||||||
ParseException.forwardInheritance=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u4ece %3 \u7684\u4e0d\u5b8c\u6574\u7684\u5411\u524d\u58f0\u660e\u8fdb\u884c\u7ee7\u627f\u662f\u975e\u6cd5\u7684\u3002\n%4\n%5
|
ParseException.forwardInheritance=%0 (\u884C %1): \u5BF9\u4E8E%2, \u4ECE%3\u7684\u4E0D\u5B8C\u6574\u524D\u5411\u58F0\u660E\u8FDB\u884C\u7EE7\u627F\u662F\u975E\u6CD5\u7684\u3002\n%4\n%5
|
||||||
ParseException.generic=%0\uff08\u7b2c %1 \u884c\uff09\uff1a %2\n%3\n%4
|
ParseException.generic=%0 (\u884C %1): %2\n%3\n%4
|
||||||
ParseException.illegalArray=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u4e2d\u7684\u6570\u7ec4\u7684\u7c7b\u578b\u4e0d\u5408\u6cd5\u3002\n%3\n%4
|
ParseException.illegalArray=%0 (\u884C %1): %2\u4E2D\u67D0\u4E2A\u6570\u7EC4\u7684\u7C7B\u578B\u975E\u6CD5\u3002\n%3\n%4
|
||||||
ParseException.illegalException=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5f02\u5e38\u4e0d\u80fd\u663e\u793a\u5728 %2 \u4e2d\u3002\n%3\n%4
|
ParseException.illegalException=%0 (\u884C %1): %2s \u4E2D\u4E0D\u80FD\u51FA\u73B0\u5F02\u5E38\u9519\u8BEF\u3002\n%3\n%4
|
||||||
ParseException.invalidConst1=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5e38\u91cf\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u5fc5\u987b\u4e3a %2\uff0c\u800c\u4e0d\u80fd\u4e3a %3\u3002\n%4\n%5
|
ParseException.invalidConst1=%0 (\u884C %1): \u5E38\u91CF\u8868\u8FBE\u5F0F\u7684\u7C7B\u578B\u5FC5\u987B\u662F%2, \u800C\u4E0D\u80FD\u662F%3\u3002\n%4\n%5
|
||||||
ParseException.invalidConst2=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5e38\u91cf\u8868\u8fbe\u5f0f\u4e2d\u7684\u6807\u8bc6\u7b26\u5fc5\u987b\u4e3a\u5e38\u91cf\uff0c\u800c\u4e0d\u80fd\u4e3a %2\u3002\n%3\n%4
|
ParseException.invalidConst2=%0 (\u884C %1): \u5E38\u91CF\u8868\u8FBE\u5F0F\u4E2D\u7684\u6807\u8BC6\u7B26\u5FC5\u987B\u662F\u5E38\u91CF, \u800C\u4E0D\u80FD\u662F%2\u3002\n%3\n%4
|
||||||
ParseException.keywordCollision=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u6807\u8bc6\u7b26 `%2' \u4e0e\u5173\u952e\u5b57\u51b2\u7a81\uff1b\u5982\u679c\u9700\u8981\uff0c\u8bf7\u4f7f\u7528\u6362\u7801\u7684\u6807\u8bc6\u7b26\u3002\n%3\n%4
|
ParseException.keywordCollision=%0 (\u884C %1): \u6807\u8BC6\u7B26 `%2' \u4E0E\u5173\u952E\u5B57\u51B2\u7A81; \u5982\u6709\u5FC5\u8981, \u8BF7\u4F7F\u7528\u8F6C\u4E49\u6807\u8BC6\u7B26\u3002\n%3\n%4
|
||||||
ParseException.methodClash=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u63a5\u53e3 %2 \u4e2d\u7684\u65b9\u6cd5\u540d\u51b2\u7a81\uff1a%3\u3002\n%4\n%5
|
ParseException.methodClash=%0 (\u884C %1): \u63A5\u53E3 %2 \u4E2D\u7684\u65B9\u6CD5\u540D\u51B2\u7A81: %3\u3002\n%4\n%5
|
||||||
ParseException.moduleNotType=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u4e3a\u6a21\u5757\u3002\u4e0d\u80fd\u5c06\u5176\u7528\u4f5c\u7c7b\u578b\u3002\n%3\n%4
|
ParseException.moduleNotType=%0 (\u884C %1): %2 \u662F\u6A21\u5757\u3002\u4E0D\u80FD\u5C06\u5176\u7528\u4F5C\u7C7B\u578B\u3002\n%3\n%4
|
||||||
ParseException.nestedValueBox=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u503c\u6846\u4e0d\u80fd\u5d4c\u5957\u3002\n%2\n%3
|
ParseException.nestedValueBox=%0 (\u884C %1): \u503C\u6846\u4E0D\u80FD\u5D4C\u5957\u3002\n%2\n%3
|
||||||
ParseException.noDefault=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u6ee1\u8db3\u6240\u6709\u53ef\u80fd\u60c5\u51b5\u65f6\uff0c\u4e0d\u5141\u8bb8\u4f7f\u7528\u9ed8\u8ba4\u5206\u652f\u3002\n%2\n%3
|
ParseException.noDefault=%0 (\u884C %1): \u5F53\u5B8C\u5168\u6D89\u53CA\u6240\u6709\u53EF\u80FD\u7684 case \u65F6, \u4E0D\u5141\u8BB8\u4F7F\u7528\u9ED8\u8BA4\u5206\u652F\u3002\n%2\n%3
|
||||||
ParseException.nonAbstractParent=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u62bd\u8c61\u63a5\u53e3 %2 \u4e0d\u80fd\u4ece\u975e\u62bd\u8c61\u63a5\u53e3 %3 \u8fdb\u884c\u7ee7\u627f\u3002\n%4\n%5
|
ParseException.nonAbstractParent=%0 (\u884C %1): \u62BD\u8C61\u63A5\u53E3 %2 \u4E0D\u80FD\u4ECE\u975E\u62BD\u8C61\u63A5\u53E3 %3 \u7EE7\u627F\u3002\n%4\n%5
|
||||||
ParseException.nonAbstractParent2=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u62bd\u8c61\u503c %2 \u4e0d\u80fd\u4ece\u975e\u62bd\u8c61\u503c %3 \u8fdb\u884c\u7ee7\u627f\u3002\n%4\n%5
|
ParseException.nonAbstractParent2=%0 (\u884C %1): \u62BD\u8C61\u503C %2 \u4E0D\u80FD\u4ECE\u975E\u62BD\u8C61\u503C %3 \u7EE7\u627F\u3002\n%4\n%5
|
||||||
ParseException.nonAbstractParent3=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u503c %2 \u65e0\u6cd5\u6309\u6307\u5b9a\u7684\u90a3\u6837\u4ece\u975e\u62bd\u8c61\u503c %3 \u8fdb\u884c\u7ee7\u627f\u3002\n%4\n%5
|
ParseException.nonAbstractParent3=%0 (\u884C %1): \u503C %2 \u4E0D\u80FD\u6839\u636E\u6307\u5B9A\u4ECE\u975E\u62BD\u8C61\u503C %3 \u7EE7\u627F\u3002\n%4\n%5
|
||||||
ParseException.notANumber=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u9700\u8981\u6570\u5b57\u3002%2 \u4e0d\u662f\u6709\u6548\u6570\u5b57\u3002\n%3\n%4
|
ParseException.notANumber=%0 (\u884C %1): \u5E94\u4E3A\u6570\u5B57\u3002%2\u4E0D\u662F\u6709\u6548\u7684\u6570\u5B57\u3002\n%3\n%4
|
||||||
ParseException.nothing=%0 \u4e3a\u7a7a\u3002\u65e0\u7f16\u8bd1\u5185\u5bb9\u3002
|
ParseException.nothing=%0\u4E3A\u7A7A\u3002\u6CA1\u6709\u8981\u7F16\u8BD1\u7684\u5BF9\u8C61\u3002
|
||||||
ParseException.notPosInt=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u9700\u8981\u6b63\u6574\u6570\u5e38\u91cf\uff0c\u800c\u4e0d\u662f %2\u3002\n%3\n%4
|
ParseException.notPosInt=%0 (\u884C %1): \u5E94\u4E3A\u6B63\u6574\u6570\u5E38\u91CF, \u800C\u975E%2\u3002\n%3\n%4
|
||||||
ParseException.oneway=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5c06 %2 \u58f0\u660e\u4e3a oneway\u3002Oneway \u65b9\u6cd5\u5fc5\u987b\uff1a\u8fd4\u56de void\uff1b\u4ec5\u5728\u53c2\u6570\u4e2d\u624d\u6709\uff1b\u4e0d\u4f1a\u51fa\u73b0\u4efb\u4f55\u5f02\u5e38\u3002\n%3\n%4
|
ParseException.oneway=%0 (\u884C %1): %2\u5DF2\u58F0\u660E\u4E3A\u5355\u5411\u3002\u5355\u5411\u65B9\u6CD5\u5FC5\u987B: \u8FD4\u56DE\u7A7A\u503C; \u53EA\u6709 in \u53C2\u6570; \u4E0D\u5F15\u53D1\u5F02\u5E38\u9519\u8BEF\u3002\n%3\n%4
|
||||||
ParseException.operationNotType=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u4e3a\u64cd\u4f5c\u3002\u4e0d\u80fd\u5c06\u5176\u7528\u4f5c\u7c7b\u578b\u3002\n%3\n%4
|
ParseException.operationNotType=%0 (\u884C %1): %2\u662F\u8FD0\u7B97\u3002\u4E0D\u80FD\u5C06\u5176\u7528\u4F5C\u7C7B\u578B\u3002\n%3\n%4
|
||||||
ParseException.outOfRange=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5e38\u91cf\u8868\u8fbe\u5f0f\u7684\u503c %2 \u8d85\u51fa\u4e86\u7c7b\u578b %3 \u7684\u8303\u56f4\u3002\n%4\n%5
|
ParseException.outOfRange=%0 (\u884C %1): \u5E38\u91CF\u8868\u8FBE\u5F0F %2 \u7684\u503C\u8D85\u51FA\u4E86\u7C7B\u578B%3\u7684\u8303\u56F4\u3002\n%4\n%5
|
||||||
ParseException.recursive=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u552f\u4e00\u7684\u5408\u6cd5\u9012\u5f52\u5b9a\u4e49\u4e3a\uff1asequence<%2> %3\u3002\n%4\n%5
|
ParseException.recursive=%0 (\u884C %1): \u552F\u4E00\u7684\u5408\u6CD5\u9012\u5F52\u5B9A\u4E49\u662F: sequence<%2> %3\u3002\n%4\n%5
|
||||||
ParseException.selfInherit=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u4e0d\u80fd\u4ece\u5176\u672c\u8eab\u8fdb\u884c\u7ee7\u627f\u3002\n%3\n%4
|
ParseException.selfInherit=%0 (\u884C %1): %2 \u4E0D\u80FD\u4ECE\u81EA\u8EAB\u7EE7\u627F\u3002\n%3\n%4
|
||||||
ParseException.stringTooLong=%0\uff08\u7b2c %1 \u884c\uff09\uff1a"%2" \u7684\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc7 %3 \u4e2a\u5b57\u7b26\u3002\n%4\n%5
|
ParseException.stringTooLong=%0 (\u884C %1): "%2" \u7684\u957F\u5EA6\u4E0D\u80FD\u8D85\u8FC7 %3 \u4E2A\u5B57\u7B26\u3002\n%4\n%5
|
||||||
ParseException.syntax1=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u9700\u8981 `%2'\uff0c\u800c\u9047\u5230 `%3'\u3002\n%4\n%5
|
ParseException.syntax1=%0 (\u884C %1): \u5E94\u4E3A `%2'; \u4F46\u9047\u5230 `%3'\u3002\n%4\n%5
|
||||||
ParseException.syntax2=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u9700\u8981\u5176\u4e2d\u4e00\u4e2a `%2'\uff0c\u800c\u9047\u5230 `%3'\u3002\n%4\n%5
|
ParseException.syntax2=%0 (\u884C %1): \u5E94\u4E3A %2 \u4E4B\u4E00; \u4F46\u9047\u5230 `%3'\u3002\n%4\n%5
|
||||||
ParseException.unclosed=%0\uff1a\u5728\u6ce8\u91ca\u4e2d\u9047\u5230\u610f\u5916\u7684\u6587\u4ef6\u7ed3\u5c3e\u3002
|
ParseException.unclosed=%0: \u5728\u6CE8\u91CA\u4E2D\u9047\u5230\u610F\u5916\u7684\u6587\u4EF6\u7ED3\u5C3E\u3002
|
||||||
ParseException.undeclaredType=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u662f\u672a\u58f0\u660e\u7684\u7c7b\u578b\u3002\n%3\n%4
|
ParseException.undeclaredType=%0 (\u884C %1): %2 \u662F\u672A\u58F0\u660E\u7684\u7C7B\u578B\u3002\n%3\n%4
|
||||||
ParseException.warning=%0\uff08\u7b2c %1 \u884c\uff09\uff1a %2\n%3\n%4
|
ParseException.warning=%0 (\u884C %1): %2\n%3\n%4
|
||||||
ParseException.constExprType=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5e38\u91cf\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u4e3a %2\uff0c\u4f46\u662f\u5b83\u5e94\u8be5\u4e3a %3\u3002\n%4\n%5
|
ParseException.constExprType=%0 (\u884C %1): \u5E38\u91CF\u8868\u8FBE\u5F0F\u7684\u7C7B\u578B\u4E3A %2, \u4F46\u5E94\u4E3A %3\u3002\n%4\n%5
|
||||||
ParseException.wrongType=%0\uff08\u7b2c %1 \u884c\uff09\uff1a%2 \u7684\u7c7b\u578b\u4e3a %3\uff0c\u4f46\u662f\u5b83\u5e94\u8be5\u4e3a %4\u3002\n%5\n%6
|
ParseException.wrongType=%0 (\u884C %1): %2\u7684\u7C7B\u578B\u4E3A%3, \u4F46\u5E94\u4E3A%4\u3002\n%5\n%6
|
||||||
ParseException.illegalIncompleteTypeReference=%0\uff08\u7b2c %1 \u884c\uff09\uff1a\u5bf9\u7c7b\u578b %2 \u7684\u4e0d\u5b8c\u6574\u5411\u524d\u58f0\u660e\u7684\u5f15\u7528\u975e\u6cd5\u3002\n%3\n%4
|
ParseException.illegalIncompleteTypeReference=%0 (\u884C %1): \u5BF9\u7C7B\u578B%2\u7684\u4E0D\u5B8C\u6574\u524D\u5411\u58F0\u660E\u7684\u5F15\u7528\u975E\u6CD5\u3002\n%3\n%4
|
||||||
Preprocessor.unknown=\u672a\u77e5\u9884\u5904\u7406\u7a0b\u5e8f\u6307\u4ee4 `%0'\u3002\u5ffd\u7565\u884c\u3002
|
Preprocessor.unknown=\u672A\u77E5\u7684\u9884\u5904\u7406\u7A0B\u5E8F\u6307\u4EE4 `%0'\u3002\u5DF2\u5FFD\u7565\u884C\u3002
|
||||||
Preprocessor.unknownPragma=\u672a\u77e5 pragma `%0'\u3002\u5ffd\u7565\u884c\u3002
|
Preprocessor.unknownPragma=\u672A\u77E5\u7684\u7F16\u8BD1\u6307\u793A\u6307\u4EE4 `%0'\u3002\u5DF2\u5FFD\u7565\u884C\u3002
|
||||||
Preprocessor.undefinedName=pragma %0 \u7684\u672a\u5b9a\u4e49\u7c7b\u578b\u540d\uff1a%1\u3002 \u5ffd\u7565\u884c\u3002
|
Preprocessor.undefinedName=\u7F16\u8BD1\u6307\u793A %0 \u7684\u672A\u5B9A\u4E49\u7C7B\u578B\u540D: %1\u3002\u5DF2\u5FFD\u7565\u884C\u3002
|
||||||
Token.boolLit=<\u5e03\u5c14\u503c\u5b57\u9762\u503c>
|
Token.boolLit=<\u5E03\u5C14\u6587\u5B57>
|
||||||
Token.charLit=<\u5b57\u7b26\u5b57\u9762\u503c>
|
Token.charLit=<\u5B57\u7B26\u6587\u5B57>
|
||||||
Token.intLit=<\u6574\u578b\u5b57\u9762\u503c>
|
Token.intLit=<\u6574\u578B\u6587\u5B57>
|
||||||
Token.floatLit=<\u6d6e\u70b9\u5b57\u9762\u503c>
|
Token.floatLit=<\u6D6E\u70B9\u6587\u5B57>
|
||||||
Token.stringLit=<\u5b57\u7b26\u4e32\u5b57\u9762\u503c>
|
Token.stringLit=<\u5B57\u7B26\u4E32\u6587\u5B57>
|
||||||
Token.literal=<\u5b57\u9762\u503c>
|
Token.literal=<\u6587\u5B57>
|
||||||
Token.identifier=<\u6807\u8bc6\u7b26>
|
Token.identifier=<\u6807\u8BC6\u7B26>
|
||||||
Token.endOfFile=EOF
|
Token.endOfFile=EOF
|
||||||
Token.unknown=?
|
Token.unknown=?
|
||||||
Util.cantCreatePkg=\u65e0\u6cd5\u521b\u5efa\u8f6f\u4ef6\u5305 %0\u3002
|
Util.cantCreatePkg=\u65E0\u6CD5\u521B\u5EFA\u7A0B\u5E8F\u5305%0\u3002
|
||||||
Version.product=IDL Parser Framework\uff0c\u7248\u672c "%0"
|
Version.product=IDL \u8BED\u6CD5\u5206\u6790\u5668\u6846\u67B6, \u7248\u672C "%0"
|
||||||
Version.number=3.2
|
Version.number=3.2
|
||||||
default=\u9519\u8bef\uff01\u8bf7\u6c42\u7684\u6d88\u606f\u4e0d\u5b58\u5728\u3002\u6d88\u606f\u6587\u4ef6\u4e0d\u5305\u542b\u5bc6\u94a5\uff1a%0\u3002
|
default=\u9519\u8BEF! \u8BF7\u6C42\u4E86\u4E0D\u5B58\u5728\u7684\u6D88\u606F\u3002\u6D88\u606F\u6587\u4EF6\u672A\u5305\u542B\u5173\u952E\u5B57: %0\u3002
|
||||||
|
|
||||||
# Translator: In the list of options below, do not translate:
|
# Translator: In the list of options below, do not translate:
|
||||||
# -i, -d, -keep, -emitAll, -noWarn, -v, -verbose, -version, #define
|
# -i, -d, -keep, -emitAll, -noWarn, -v, -verbose, -version, #define
|
||||||
# Do not translate the string "java com.sun.tools.corba.se.idl.Compile"
|
# Do not translate the string "java com.sun.tools.corba.se.idl.Compile"
|
||||||
|
|
||||||
usage=\u7f16\u8bd1\u5668\u7528\u6cd5\uff1a\n\
|
usage=\u7F16\u8BD1\u5668\u7528\u6CD5:\n\ java com.sun.tools.corba.se.idl.Compile [\u9009\u9879] <idl \u6587\u4EF6>\n\u5176\u4E2D, <idl \u6587\u4EF6> \u662F\u5305\u542B IDL \u5B9A\u4E49\u7684\u6587\u4EF6\u7684\u540D\u79F0, \u800C\n[\u9009\u9879] \u662F\u4E0B\u5217\u9009\u9879\u7684\u4EFB\u610F\u7EC4\u5408\u3002\u8FD9\u4E9B\u9009\u9879\n\u662F\u53EF\u9009\u7684, \u5E76\u4E14\u663E\u793A\u987A\u5E8F\u5E76\u4E0D\u56FA\u5B9A; <idl \u6587\u4EF6> \u662F\u5FC5\u9700\u7684\n\u5E76\u4E14\u5FC5\u987B\u663E\u793A\u5728\u6700\u540E\u3002\n\ \n\u9009\u9879:\n-d <\u7B26\u53F7> \u8FD9\u7B49\u540C\u4E8E IDL \u6587\u4EF6\u4E2D\u7684\n\ \u4E0B\u9762\u4E00\u884C: #define <\u7B26\u53F7>\n-emitAll \u53D1\u51FA\u6240\u6709\u7C7B\u578B, \u5305\u62EC\u5728 #included\n\ \u6587\u4EF6\u4E2D\u627E\u5230\u7684\u7C7B\u578B\u3002\n-i <\u5305\u542B\u8DEF\u5F84> \u9ED8\u8BA4\u60C5\u51B5\u4E0B, \u5C06\u5728\u5F53\u524D\u76EE\u5F55\u4E2D\u626B\u63CF\n\ \u5305\u542B\u7684\u6587\u4EF6\u3002\u6B64\u9009\u9879\u5C06\u6DFB\u52A0\u53E6\u4E00\u4E2A\u76EE\u5F55\u3002\n-keep \u5982\u679C\u8981\u751F\u6210\u7684\u6587\u4EF6\u5DF2\u5B58\u5728, \u8BF7\u4E0D\u8981\n\ \u8986\u76D6\u5B83\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4F1A\u8986\u76D6\u5B83\u3002\n-noWarn \u9690\u85CF\u8B66\u544A\u3002\n-v, -verbose \u8BE6\u7EC6\u6A21\u5F0F\u3002\n-version \u663E\u793A\u7248\u672C\u53F7\u3002\n
|
||||||
\ java com.sun.tools.corba.se.idl.Compile [\u9009\u9879] <idl \u6587\u4ef6>\n\
|
|
||||||
\u5176\u4e2d\uff0c<idl \u6587\u4ef6> \u662f\u5305\u542b IDL \u5b9a\u4e49\u7684\u6587\u4ef6\u7684\u540d\u79f0\uff0c\u800c\n\
|
|
||||||
[\u9009\u9879] \u662f\u4ee5\u4e0b\u6240\u5217\u9009\u9879\u7684\u4efb\u4e00\u7ec4\u5408\u3002\u8fd9\u4e9b\u9009\u9879\n\
|
|
||||||
\u662f\u53ef\u9009\u7684\u5e76\u4e14\u53ef\u4ee5\u4ee5\u4efb\u610f\u987a\u5e8f\u663e\u793a\uff1b<idl \u6587\u4ef6> \u662f\u5fc5\u987b\u7684\u5e76\u4e14\n\
|
|
||||||
\u5fc5\u987b\u663e\u793a\u5728\u6700\u540e\u3002\n\
|
|
||||||
\ \n\
|
|
||||||
\u9009\u9879\uff1a\n\
|
|
||||||
-d <\u7b26\u53f7> \u7b49\u4ef7\u4e8e IDL \u6587\u4ef6\u4e2d\u7684\u4ee5\u4e0b\u884c\uff1a\n\
|
|
||||||
\ #define <\u7b26\u53f7>\n\
|
|
||||||
-emitAll \u53d1\u51fa\u6240\u6709\u7c7b\u578b\uff0c\u5305\u62ec\u5728 #included\n\
|
|
||||||
\ \u6587\u4ef6\u4e2d\u627e\u5230\u7684\u90a3\u4e9b\u7c7b\u578b\u3002\n\
|
|
||||||
-i <\u5305\u62ec\u8def\u5f84> \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u641c\u7d22\u5f53\u524d\u76ee\u5f55\u4ee5\u83b7\u5f97\u5176\u6240\u5305\u542b\u7684\u6587\u4ef6\u3002\n\
|
|
||||||
\ \u6b64\u9009\u9879\u5c06\u6dfb\u52a0\u5176\u4ed6\u76ee\u5f55\u3002\n\
|
|
||||||
-keep \u5982\u679c\u8981\u751f\u6210\u7684\u6587\u4ef6\u5df2\u5b58\u5728\uff0c\u5219\u4e0d\n\
|
|
||||||
\ \u8986\u76d6\u5b83\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4f1a\u8986\u76d6\u8be5\u6587\u4ef6\u3002\n\
|
|
||||||
-noWarn \u6291\u5236\u8b66\u544a\u3002\n\
|
|
||||||
-v, -verbose \u8be6\u7ec6\u6a21\u5f0f\u3002\n\
|
|
||||||
-version \u663e\u793a\u7248\u672c\u53f7\u3002\n
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -51,61 +51,18 @@
|
|||||||
#
|
#
|
||||||
# Translator: Start Translating
|
# Translator: Start Translating
|
||||||
#
|
#
|
||||||
toJavaProlog1=\u7531 %0 \u751f\u6210
|
toJavaProlog1=\u7531%0\u751F\u6210
|
||||||
toJavaProlog2=\u6765\u81ea %0
|
toJavaProlog2=\u4ECE%0
|
||||||
PreEmit.indeterminateTypeInfo=\u65e0\u6cd5\u786e\u5b9a %0 \u7684\u7c7b\u578b\u4fe1\u606f\u3002
|
PreEmit.indeterminateTypeInfo=\u65E0\u6CD5\u786E\u5B9A%0\u7684\u7C7B\u578B\u4FE1\u606F\u3002
|
||||||
InterfaceGen.noImpl=\u672a\u627e\u5230 %0 \u7684\u672c\u5730\u5b9e\u73b0\u3002
|
InterfaceGen.noImpl=\u627E\u4E0D\u5230%0\u7684\u672C\u5730\u5B9E\u73B0\u3002
|
||||||
Version.product=IDL-to-Java \u7f16\u8bd1\u5668\uff08\u53ef\u79fb\u690d\uff09\uff0c\u7248\u672c "%0"
|
Version.product=IDL-to-Java \u7F16\u8BD1\u5668 (\u53EF\u79FB\u690D), \u7248\u672C "%0"
|
||||||
Version.number=3.2
|
Version.number=3.2
|
||||||
NameModifier.TooManyPercent=\u6a21\u5f0f\u5305\u542b\u591a\u4e2a\u767e\u5206\u6bd4\u5b57\u7b26
|
NameModifier.TooManyPercent=\u6A21\u5F0F\u4E2D\u5305\u542B\u591A\u4E2A\u767E\u5206\u6BD4\u5B57\u7B26
|
||||||
NameModifier.NoPercent=\u6a21\u5f0f\u4e0d\u5305\u542b\u4efb\u4f55\u767e\u5206\u6bd4\u5b57\u7b26
|
NameModifier.NoPercent=\u6A21\u5F0F\u4E2D\u4E0D\u5305\u542B\u767E\u5206\u6BD4\u5B57\u7B26
|
||||||
NameModifier.InvalidChar=\u6a21\u5f0f\u5305\u542b\u65e0\u6548\u5b57\u7b26 %0
|
NameModifier.InvalidChar=\u6A21\u5F0F\u4E2D\u5305\u542B\u65E0\u6548\u5B57\u7B26 %0
|
||||||
#
|
#
|
||||||
# Translator: In the list of options below, do not translate:
|
# Translator: In the list of options below, do not translate:
|
||||||
# -d, -emitAll, -f, -i, -keep, -m, -sep, -pkgPrefix, -td, -v, -verbose, -version, -implbase
|
# -d, -emitAll, -f, -i, -keep, -m, -sep, -pkgPrefix, -td, -v, -verbose, -version, -implbase
|
||||||
# Do not translate the string "java com.sun.tools.corba.se.idl.toJavaPortable.Compile"
|
# Do not translate the string "java com.sun.tools.corba.se.idl.toJavaPortable.Compile"
|
||||||
#
|
#
|
||||||
usage=\u7f16\u8bd1\u5668\u7528\u6cd5\uff1a\n\
|
usage=\u7F16\u8BD1\u5668\u7528\u6CD5:\n\n\ java com.sun.tools.corba.se.idl.toJavaPortable.Compile [\u9009\u9879] <idl \u6587\u4EF6>\n\n\u5176\u4E2D, <idl \u6587\u4EF6> \u662F\u5305\u542B IDL \u5B9A\u4E49\u7684\u6587\u4EF6\u7684\u540D\u79F0, \u800C\n[\u9009\u9879] \u662F\u4E0B\u5217\u9009\u9879\u7684\u4EFB\u610F\u7EC4\u5408\u3002\u9009\u9879\n\u662F\u53EF\u9009\u7684, \u5E76\u4E14\u663E\u793A\u987A\u5E8F\u5E76\u4E0D\u56FA\u5B9A; <idl \u6587\u4EF6> \u662F\u5FC5\u9700\u7684,\n\u5E76\u4E14\u5FC5\u987B\u663E\u793A\u5728\u6700\u540E\u3002\n\ \n\u9009\u9879:\n-d <\u7B26\u53F7> \u8FD9\u7B49\u540C\u4E8E IDL \u6587\u4EF6\u4E2D\u7684\n\ \u4E0B\u9762\u4E00\u884C: #define <\u7B26\u53F7>\n-emitAll \u53D1\u51FA\u6240\u6709\u7C7B\u578B, \u5305\u62EC\u5728 #included \u6587\u4EF6\u4E2D\u627E\u5230\u7684\u7C7B\u578B\u3002\n-f<side> \u5B9A\u4E49\u8981\u53D1\u51FA\u54EA\u4E9B\u7ED1\u5B9A\u3002<side> \u662F client,\n\ server, all, serverTIE, allTIE \u4E4B\u4E00\u3002serverTIE \u548C allTIE\n\ \u5BFC\u81F4\u53D1\u51FA\u59D4\u6D3E\u6A21\u578B\u9AA8\u67B6\u3002\u5982\u679C\u672A\u4F7F\u7528\n\ \u6B64\u6807\u8BB0, \u5C06\u5047\u5B9A\u4E3A -fclient\u3002\n-i <\u5305\u542B\u8DEF\u5F84> \u9ED8\u8BA4\u60C5\u51B5\u4E0B, \u5C06\u5728\u5F53\u524D\u76EE\u5F55\u4E2D\u626B\u63CF\n\ \u5305\u542B\u7684\u6587\u4EF6\u3002\u6B64\u9009\u9879\u5C06\u6DFB\u52A0\u53E6\u4E00\u4E2A\u76EE\u5F55\u3002\n-keep \u5982\u679C\u8981\u751F\u6210\u7684\u6587\u4EF6\u5DF2\u5B58\u5728, \u8BF7\u4E0D\u8981\n\ \u8986\u76D6\u5B83\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4F1A\u8986\u76D6\u5B83\u3002\n-noWarn \u9690\u85CF\u8B66\u544A\u3002\n-oldImplBase \u751F\u6210\u4E0E\u65E7\u7248 (1.4 \u7248\u4E4B\u524D) JDK ORB \u517C\u5BB9\u7684\u9AA8\u67B6\u3002\n-pkgPrefix <t> <\u524D\u7F00> \u5F53\u5728\u6587\u4EF6\u8303\u56F4\u5185\u9047\u5230\u7C7B\u578B\u6216\u6A21\u5757\u540D <t> \u65F6,\n\ \u5728\u4E3A <t> \u751F\u6210\u7684\u6240\u6709\u6587\u4EF6\u7684 Java \u7A0B\u5E8F\u5305\u540D\u524D\n\ \u6DFB\u52A0 <\u524D\u7F00>\u3002\n-pkgTranslate <t> <pkg> \u5F53\u9047\u5230\u7C7B\u578B\u6216\u6A21\u5757\u540D <t> \u65F6, \u5728\n\ \u751F\u6210\u7684 Java \u7A0B\u5E8F\u5305\u4E2D\u5C06\u5176\u66FF\u6362\u4E3A <pkg>\u3002\u8BF7\u6CE8\u610F, \n\ \u5C06\u9996\u5148\u8FDB\u884C pkgPrefix \u66F4\u6539\u3002<t> \u5FC5\u987B\u4E0E\n\ \u5B8C\u6574\u7A0B\u5E8F\u5305\u540D\u5B8C\u5168\u5339\u914D\u3002\u53E6\u5916, <t> \u4E0D\u80FD\u4E3A\n\ org, org.omg \u6216 org.omg \u7684\u4EFB\u4F55\u5B50\u7A0B\u5E8F\u5305\u3002\n-skeletonName <xxx%yyy> \u6839\u636E\u6A21\u5F0F\u547D\u540D\u9AA8\u67B6\u3002\n\ \u9ED8\u8BA4\u503C\u4E3A:\n\ %POA \u8868\u793A POA \u57FA\u7C7B (-fserver \u6216 -fall) \n\ _%ImplBase \u8868\u793A oldImplBase \u57FA\u7C7B\n\ (-oldImplBase \u548C (-fserver \u6216 -fall))\u3002\n-td <dir> \u4F7F\u7528 <dir> \u8868\u793A\u8F93\u51FA\u76EE\u5F55\u4EE5\u4EE3\u66FF\n\ \u5F53\u524D\u76EE\u5F55\u3002\n-tieName <xxx%yyy> \u6839\u636E\u6A21\u5F0F\u547D\u540D tie\u3002\u9ED8\u8BA4\u503C\u4E3A:\n\ %POATie \u8868\u793A POA tie (-fserverTie \u6216 -fallTie) \n\ %_Tie \u8868\u793A oldImplBase tie\n\ (-oldImplBase \u548C (-fserverTie \u6216 -fallTie))\u3002\n-v, -verbose \u8BE6\u7EC6\u6A21\u5F0F\u3002\n-version \u663E\u793A\u7248\u672C\u53F7\u5E76\u9000\u51FA\u3002\n
|
||||||
\n\
|
|
||||||
\ java com.sun.tools.corba.se.idl.toJavaPortable.Compile [\u9009\u9879] <idl \u6587\u4ef6>\n\
|
|
||||||
\n\
|
|
||||||
\u5176\u4e2d\uff0c<idl \u6587\u4ef6> \u662f\u5305\u542b IDL \u5b9a\u4e49\u7684\u6587\u4ef6\u7684\u540d\u79f0\uff0c\u800c\n\
|
|
||||||
[\u9009\u9879] \u662f\u4ee5\u4e0b\u6240\u5217\u9009\u9879\u7684\u4efb\u4e00\u7ec4\u5408\u3002\u8fd9\u4e9b\u9009\u9879\u662f\u53ef\u9009\u7684\n\
|
|
||||||
\u5e76\u4e14\u53ef\u4ee5\u4ee5\u4efb\u610f\u987a\u5e8f\u663e\u793a\uff1b<idl \u6587\u4ef6> \u662f\u5fc5\u987b\u7684\u5e76\u4e14\n\
|
|
||||||
\u5fc5\u987b\u663e\u793a\u5728\u6700\u540e\u3002\n\
|
|
||||||
\ \n\
|
|
||||||
\u9009\u9879\uff1a\n\
|
|
||||||
-d <\u7b26\u53f7> \u7b49\u4ef7\u4e8e IDL \u6587\u4ef6\u4e2d\u7684\u4ee5\u4e0b\u884c\uff1a\n\
|
|
||||||
\ #define <\u7b26\u53f7>\n\
|
|
||||||
-emitAll \u53d1\u51fa\u6240\u6709\u7c7b\u578b\uff0c\u5305\u62ec\u5728 #included \u6587\u4ef6\u4e2d\u627e\u5230\u7684\u90a3\u4e9b\u7c7b\u578b\u3002\n\
|
|
||||||
-f<\u7aef> \u5b9a\u4e49\u8981\u53d1\u51fa\u7684\u7ed1\u5b9a\u3002 <\u7aef> \u662f client\u3001\n\
|
|
||||||
\ server\u3001all\u3001serverTIE \u548c allTIE \u4e2d\u4e4b\u4e00\u3002 serverTIE \u548c allTIE\n\
|
|
||||||
\ \u5c06\u5bfc\u81f4\u53d1\u51fa\u59d4\u6258\u6a21\u578b\u6846\u67b6\u3002\u5982\u679c\u672a\u4f7f\u7528\u6b64\n\
|
|
||||||
\ \u6807\u5fd7\uff0c\u5219\u5047\u8bbe\u4e3a -fclient\u3002\n\
|
|
||||||
-i <\u5305\u62ec\u8def\u5f84> \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u641c\u7d22\u5f53\u524d\u76ee\u5f55\u4ee5\u83b7\u5f97\u5176\u6240\u5305\u542b\u7684\u6587\u4ef6\u3002\n\
|
|
||||||
\ \u6b64\u9009\u9879\u5c06\u6dfb\u52a0\u5176\u4ed6\u76ee\u5f55\u3002\n\
|
|
||||||
-keep \u5982\u679c\u8981\u751f\u6210\u7684\u6587\u4ef6\u5df2\u5b58\u5728\uff0c\u5219\u4e0d\n\
|
|
||||||
\ \u8986\u76d6\u5b83\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4f1a\u8986\u76d6\u8be5\u6587\u4ef6\u3002\n\
|
|
||||||
-noWarn \u6291\u5236\u8b66\u544a\u3002\n\
|
|
||||||
-oldImplBase \u751f\u6210\u4e0e\u65e7\uff081.4 \u7248\u4e4b\u524d\uff09JDK ORB \u517c\u5bb9\u7684\u6846\u67b6\u3002\n\
|
|
||||||
-pkgPrefix <t> <\u524d\u7f00> \u5728\u6587\u4ef6\u8303\u56f4\u5185\u9047\u5230\u7c7b\u578b\u6216\u6a21\u5757\u540d\u79f0 <t> \u65f6\uff0c\n\
|
|
||||||
\ \u5c06\u4e3a\u9488\u5bf9 <t> \u6240\u751f\u6210\u7684\u6240\u6709\u6587\u4ef6\u7684 Java \u8f6f\u4ef6\u5305\u540d\u79f0\n\
|
|
||||||
\ \u9644\u52a0 <\u524d\u7f00>\u3002\n\
|
|
||||||
-pkgTranslate <t> <pkg> \u5728\u9047\u5230\u7c7b\u578b\u6216\u6a21\u5757\u540d\u79f0 <t> \u65f6\uff0c\n\
|
|
||||||
\ \u5219\u5728\u751f\u6210\u7684 java \u8f6f\u4ef6\u5305\u4e2d\u4ee5 <pkg> \u5c06\u5176\u66ff\u6362\u3002\u8bf7\u6ce8\u610f\uff0c\n\
|
|
||||||
\ \u9996\u5148\u8fdb\u884c pkgPrefix \u66f4\u6539\u3002 <t> \u5fc5\u987b\u4e0e\u5b8c\u6574\u7684\n\
|
|
||||||
\ \u7684\u8f6f\u4ef6\u5305\u540d\u79f0\u5b8c\u5168\u4e00\u81f4\u3002\u53e6\u5916\uff0c<t> \u4e0d\u80fd\u4e3a\n\
|
|
||||||
\ org\u3001org.omg \u6216 org.omg \u7684\u4efb\u4f55\u5b50\u5305\u3002\n\
|
|
||||||
-skeletonName <xxx%yyy> \u6839\u636e\u6a21\u5f0f\u547d\u540d\u6846\u67b6\u3002\n\
|
|
||||||
\ \u9ed8\u8ba4\u503c\u4e3a\uff1a\n\
|
|
||||||
\ \u9002\u7528\u4e8e POA \u57fa\u7c7b\uff08-fserver \u6216 -fall\uff09\u7684 %POA\n\
|
|
||||||
\ \u9002\u7528\u4e8e oldImplBase \u57fa\u7c7b\n\
|
|
||||||
\ \uff08-oldImplBase \u548c [-fserver \u6216 -fall]\uff09\u7684 \uff05ImplBase\u3002\n\
|
|
||||||
-td <\u76ee\u5f55> \u5c06 <\u76ee\u5f55> \u800c\u975e\n\
|
|
||||||
\ \u5f53\u524d\u76ee\u5f55\u7528\u4f5c\u8f93\u51fa\u76ee\u5f55\u3002\n\
|
|
||||||
-tieName <xxx%yyy> \u6839\u636e\u6a21\u5f0f\u547d\u540d tie\u3002\u9ed8\u8ba4\u503c\u4e3a\uff1a\n\
|
|
||||||
\ \u9002\u7528\u4e8e POA tie\uff08-fserverTie \u6216 -fallTie\uff09\u7684 %POATie\n\
|
|
||||||
\ \u9002\u7528\u4e8e oldImplBase tie\n\
|
|
||||||
\ \uff08-oldImplBase \u548c [-fserverTie \u6216 -fallTie]\uff09\u7684 \uff05_Tie\u3002\n\
|
|
||||||
-v, -verbose \u8be6\u7ec6\u6a21\u5f0f\u3002\n\
|
|
||||||
-version \u663e\u793a\u7248\u672c\u53f7\u5e76\u9000\u51fa\u3002\n
|
|
||||||
|
|||||||
@@ -5,3 +5,4 @@
|
|||||||
^src/share/tools/IdealGraphVisualizer/[a-zA-Z0-9]*/build/
|
^src/share/tools/IdealGraphVisualizer/[a-zA-Z0-9]*/build/
|
||||||
^src/share/tools/IdealGraphVisualizer/build/
|
^src/share/tools/IdealGraphVisualizer/build/
|
||||||
^src/share/tools/IdealGraphVisualizer/dist/
|
^src/share/tools/IdealGraphVisualizer/dist/
|
||||||
|
^.hgtip
|
||||||
|
|||||||
@@ -140,3 +140,54 @@ f5603a6e50422046ebc0d2f1671d55cb8f1bf1e9 jdk7-b120
|
|||||||
9669f9b284108a9ee0a0ccbe215c37a130c9dcf5 hs20-b04
|
9669f9b284108a9ee0a0ccbe215c37a130c9dcf5 hs20-b04
|
||||||
0a8e0d4345b37b71ec49dda08ee03b68c4f1b592 jdk7-b124
|
0a8e0d4345b37b71ec49dda08ee03b68c4f1b592 jdk7-b124
|
||||||
0a8e0d4345b37b71ec49dda08ee03b68c4f1b592 hs20-b05
|
0a8e0d4345b37b71ec49dda08ee03b68c4f1b592 hs20-b05
|
||||||
|
e24ab3fa6aafad3efabbe7dba9918c5f461a20b1 jdk7-b125
|
||||||
|
4c851c931d001a882cab809aaf3a55371b919244 jdk7-b126
|
||||||
|
e24ab3fa6aafad3efabbe7dba9918c5f461a20b1 hs20-b06
|
||||||
|
d535bf4c12355a2897e918da9f8910c0aceec4fb hs20-b07
|
||||||
|
102466e70debc4b907afbd7624e34ddb1aafee9f jdk7-b127
|
||||||
|
9a5762f448595794d449a8e17342abd81a3fadaf jdk7-b128
|
||||||
|
ae4b185f2ed14af7bab610738c333840598cdcc4 jdk7-b129
|
||||||
|
ae4b185f2ed14af7bab610738c333840598cdcc4 hs21-b01
|
||||||
|
e9aa2ca89ad6c53420623d579765f9706ec523d7 jdk7-b130
|
||||||
|
0aa3b49089112d5faa77902ad680c582ab53f651 jdk7-b131
|
||||||
|
e9aa2ca89ad6c53420623d579765f9706ec523d7 hs21-b02
|
||||||
|
0e531ab5ba04967a0e9aa6aef65e6eb3a0dcf632 jdk7-b132
|
||||||
|
a8d643a4db47c7b58e0bcb49c77b5c3610de86a8 hs21-b03
|
||||||
|
1b3a350709e4325d759bb453ff3fb6a463270488 jdk7-b133
|
||||||
|
447e6faab4a8755d4860c2366630729dbaec111c jdk7-b134
|
||||||
|
3c76374706ea8a77e15aec8310e831e5734f8775 hs21-b04
|
||||||
|
b898f0fc3cedc972d884d31a751afd75969531cf jdk7-b135
|
||||||
|
b898f0fc3cedc972d884d31a751afd75969531cf hs21-b05
|
||||||
|
bd586e392d93b7ed7a1636dcc8da2b6a4203a102 jdk7-b136
|
||||||
|
bd586e392d93b7ed7a1636dcc8da2b6a4203a102 hs21-b06
|
||||||
|
2dbcb4a4d8dace5fe78ceb563b134f1fb296cd8f jdk7-b137
|
||||||
|
2dbcb4a4d8dace5fe78ceb563b134f1fb296cd8f hs21-b07
|
||||||
|
0930dc920c185afbf40fed9a655290b8e5b16783 jdk7-b138
|
||||||
|
0930dc920c185afbf40fed9a655290b8e5b16783 hs21-b08
|
||||||
|
611e19a16519d6fb5deea9ab565336e6e6ee475d jdk7-b139
|
||||||
|
611e19a16519d6fb5deea9ab565336e6e6ee475d hs21-b09
|
||||||
|
d283b82966712b353fa307845a1316da42a355f4 jdk7-b140
|
||||||
|
d283b82966712b353fa307845a1316da42a355f4 hs21-b10
|
||||||
|
5d07913abd59261c77f24cc04a759cb75d804099 jdk7-b141
|
||||||
|
3aea9e9feb073f5500e031be6186666bcae89aa2 hs21-b11
|
||||||
|
9ad1548c6b63d596c411afc35147ffd5254426d9 jdk7-b142
|
||||||
|
9ad1548c6b63d596c411afc35147ffd5254426d9 hs21-b12
|
||||||
|
c149193c768b8b7233da4c3a3fdc0756b975848e hs21-b13
|
||||||
|
c149193c768b8b7233da4c3a3fdc0756b975848e jdk7-b143
|
||||||
|
0cc8a70952c368e06de2adab1f2649a408f5e577 jdk8-b01
|
||||||
|
31e253c1da429124bb87570ab095d9bc89850d0a jdk8-b02
|
||||||
|
3a2fb61165dfc72e398179a2796d740c8da5b8c0 jdk8-b03
|
||||||
|
0fa3ace511fe98fe948e751531f3e2b7c60c8376 jdk8-b04
|
||||||
|
dce7d24674f4d0bed00de24f00119057fdce7cfb jdk8-b05
|
||||||
|
0db80d8e77fccddf5e6fa49963226b54ac7d0f62 jdk8-b06
|
||||||
|
3f0cf875af83f55ec5e1a5cea80455315f9322a2 jdk8-b07
|
||||||
|
0cc8a70952c368e06de2adab1f2649a408f5e577 hs22-b01
|
||||||
|
7c29742c41b44fb0cd5a13c7ac8834f3f2ca649e hs22-b02
|
||||||
|
3a2fb61165dfc72e398179a2796d740c8da5b8c0 hs22-b03
|
||||||
|
ce9bde819dcba4a5d2822229d9183e69c74326ca hs22-b04
|
||||||
|
513a84dd0f8b56dc0836b4e0bdd5dd0a778fc634 hs22-b05
|
||||||
|
650d15d8f37255d3b805aa00c5bd1c30984b203d hs22-b06
|
||||||
|
da883b9e6d3788057f9577e72712998ed82c9b7e hs23-b01
|
||||||
|
49ed7eacfd16616166ff066493143889741097af jdk8-b08
|
||||||
|
7c20d272643f47195478708eff593a9cce40fec4 jdk8-b09
|
||||||
|
e4f412d2b75d2c797acff965aa2c420e3d358f09 hs23-b02
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
project=jdk7
|
project=jdk8
|
||||||
|
|||||||
@@ -325,11 +325,11 @@ License instead of this License.
|
|||||||
|
|
||||||
"CLASSPATH" EXCEPTION TO THE GPL
|
"CLASSPATH" EXCEPTION TO THE GPL
|
||||||
|
|
||||||
Certain source files distributed by Oracle and/or its affiliates, are subject to
|
Certain source files distributed by Oracle America and/or its affiliates are
|
||||||
the following clarification and special exception to the GPL, but only where
|
subject to the following clarification and special exception to the GPL, but
|
||||||
Oracle has expressly included in the particular source file's header the words
|
only where Oracle has expressly included in the particular source file's header
|
||||||
"Oracle designates this particular file as subject to the "Classpath" exception
|
the words "Oracle designates this particular file as subject to the "Classpath"
|
||||||
as provided by Oracle in the LICENSE file that accompanied this code."
|
exception as provided by Oracle in the LICENSE file that accompanied this code."
|
||||||
|
|
||||||
Linking this library statically or dynamically with other modules is making
|
Linking this library statically or dynamically with other modules is making
|
||||||
a combined work based on this library. Thus, the terms and conditions of
|
a combined work based on this library. Thus, the terms and conditions of
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -48,17 +48,18 @@ sun.jvm.hotspot.asm.x86 \
|
|||||||
sun.jvm.hotspot.bugspot \
|
sun.jvm.hotspot.bugspot \
|
||||||
sun.jvm.hotspot.bugspot.tree \
|
sun.jvm.hotspot.bugspot.tree \
|
||||||
sun.jvm.hotspot.c1 \
|
sun.jvm.hotspot.c1 \
|
||||||
|
sun.jvm.hotspot.ci \
|
||||||
sun.jvm.hotspot.code \
|
sun.jvm.hotspot.code \
|
||||||
sun.jvm.hotspot.compiler \
|
sun.jvm.hotspot.compiler \
|
||||||
sun.jvm.hotspot.debugger \
|
sun.jvm.hotspot.debugger \
|
||||||
sun.jvm.hotspot.debugger.amd64 \
|
sun.jvm.hotspot.debugger.amd64 \
|
||||||
|
sun.jvm.hotspot.debugger.bsd \
|
||||||
|
sun.jvm.hotspot.debugger.bsd.amd64 \
|
||||||
|
sun.jvm.hotspot.debugger.bsd.x86 \
|
||||||
sun.jvm.hotspot.debugger.cdbg \
|
sun.jvm.hotspot.debugger.cdbg \
|
||||||
sun.jvm.hotspot.debugger.cdbg.basic \
|
sun.jvm.hotspot.debugger.cdbg.basic \
|
||||||
sun.jvm.hotspot.debugger.cdbg.basic.amd64 \
|
sun.jvm.hotspot.debugger.cdbg.basic.amd64 \
|
||||||
sun.jvm.hotspot.debugger.cdbg.basic.x86 \
|
sun.jvm.hotspot.debugger.cdbg.basic.x86 \
|
||||||
sun.jvm.hotspot.debugger.dbx \
|
|
||||||
sun.jvm.hotspot.debugger.dbx.sparc \
|
|
||||||
sun.jvm.hotspot.debugger.dbx.x86 \
|
|
||||||
sun.jvm.hotspot.debugger.dummy \
|
sun.jvm.hotspot.debugger.dummy \
|
||||||
sun.jvm.hotspot.debugger.ia64 \
|
sun.jvm.hotspot.debugger.ia64 \
|
||||||
sun.jvm.hotspot.debugger.linux \
|
sun.jvm.hotspot.debugger.linux \
|
||||||
@@ -76,7 +77,6 @@ sun.jvm.hotspot.debugger.remote.amd64 \
|
|||||||
sun.jvm.hotspot.debugger.remote.sparc \
|
sun.jvm.hotspot.debugger.remote.sparc \
|
||||||
sun.jvm.hotspot.debugger.remote.x86 \
|
sun.jvm.hotspot.debugger.remote.x86 \
|
||||||
sun.jvm.hotspot.debugger.sparc \
|
sun.jvm.hotspot.debugger.sparc \
|
||||||
sun.jvm.hotspot.debugger.win32 \
|
|
||||||
sun.jvm.hotspot.debugger.win32.coff \
|
sun.jvm.hotspot.debugger.win32.coff \
|
||||||
sun.jvm.hotspot.debugger.windbg \
|
sun.jvm.hotspot.debugger.windbg \
|
||||||
sun.jvm.hotspot.debugger.windbg.amd64 \
|
sun.jvm.hotspot.debugger.windbg.amd64 \
|
||||||
@@ -84,6 +84,7 @@ sun.jvm.hotspot.debugger.windbg.ia64 \
|
|||||||
sun.jvm.hotspot.debugger.windbg.x86 \
|
sun.jvm.hotspot.debugger.windbg.x86 \
|
||||||
sun.jvm.hotspot.debugger.x86 \
|
sun.jvm.hotspot.debugger.x86 \
|
||||||
sun.jvm.hotspot.gc_implementation \
|
sun.jvm.hotspot.gc_implementation \
|
||||||
|
sun.jvm.hotspot.gc_implementation.g1 \
|
||||||
sun.jvm.hotspot.gc_implementation.parallelScavenge \
|
sun.jvm.hotspot.gc_implementation.parallelScavenge \
|
||||||
sun.jvm.hotspot.gc_implementation.shared \
|
sun.jvm.hotspot.gc_implementation.shared \
|
||||||
sun.jvm.hotspot.gc_interface \
|
sun.jvm.hotspot.gc_interface \
|
||||||
@@ -91,9 +92,14 @@ sun.jvm.hotspot.interpreter \
|
|||||||
sun.jvm.hotspot.jdi \
|
sun.jvm.hotspot.jdi \
|
||||||
sun.jvm.hotspot.livejvm \
|
sun.jvm.hotspot.livejvm \
|
||||||
sun.jvm.hotspot.memory \
|
sun.jvm.hotspot.memory \
|
||||||
|
sun.jvm.hotspot.opto \
|
||||||
sun.jvm.hotspot.oops \
|
sun.jvm.hotspot.oops \
|
||||||
|
sun.jvm.hotspot.prims \
|
||||||
sun.jvm.hotspot.runtime \
|
sun.jvm.hotspot.runtime \
|
||||||
sun.jvm.hotspot.runtime.amd64 \
|
sun.jvm.hotspot.runtime.amd64 \
|
||||||
|
sun.jvm.hotspot.runtime.bsd \
|
||||||
|
sun.jvm.hotspot.runtime.bsd_amd64 \
|
||||||
|
sun.jvm.hotspot.runtime.bsd_x86 \
|
||||||
sun.jvm.hotspot.runtime.ia64 \
|
sun.jvm.hotspot.runtime.ia64 \
|
||||||
sun.jvm.hotspot.runtime.linux \
|
sun.jvm.hotspot.runtime.linux \
|
||||||
sun.jvm.hotspot.runtime.linux_amd64 \
|
sun.jvm.hotspot.runtime.linux_amd64 \
|
||||||
@@ -139,17 +145,18 @@ sun/jvm/hotspot/asm/x86/*.java \
|
|||||||
sun/jvm/hotspot/bugspot/*.java \
|
sun/jvm/hotspot/bugspot/*.java \
|
||||||
sun/jvm/hotspot/bugspot/tree/*.java \
|
sun/jvm/hotspot/bugspot/tree/*.java \
|
||||||
sun/jvm/hotspot/c1/*.java \
|
sun/jvm/hotspot/c1/*.java \
|
||||||
|
sun/jvm/hotspot/ci/*.java \
|
||||||
sun/jvm/hotspot/code/*.java \
|
sun/jvm/hotspot/code/*.java \
|
||||||
sun/jvm/hotspot/compiler/*.java \
|
sun/jvm/hotspot/compiler/*.java \
|
||||||
sun/jvm/hotspot/debugger/*.java \
|
sun/jvm/hotspot/debugger/*.java \
|
||||||
sun/jvm/hotspot/debugger/amd64/*.java \
|
sun/jvm/hotspot/debugger/amd64/*.java \
|
||||||
|
sun/jvm/hotspot/debugger/bsd/*.java \
|
||||||
|
sun/jvm/hotspot/debugger/bsd/amd64/*.java \
|
||||||
|
sun/jvm/hotspot/debugger/bsd/x86/*.java \
|
||||||
sun/jvm/hotspot/debugger/cdbg/*.java \
|
sun/jvm/hotspot/debugger/cdbg/*.java \
|
||||||
sun/jvm/hotspot/debugger/cdbg/basic/*.java \
|
sun/jvm/hotspot/debugger/cdbg/basic/*.java \
|
||||||
sun/jvm/hotspot/debugger/cdbg/basic/amd64/*.java \
|
sun/jvm/hotspot/debugger/cdbg/basic/amd64/*.java \
|
||||||
sun/jvm/hotspot/debugger/cdbg/basic/x86/*.java \
|
sun/jvm/hotspot/debugger/cdbg/basic/x86/*.java \
|
||||||
sun/jvm/hotspot/debugger/dbx/*.java \
|
|
||||||
sun/jvm/hotspot/debugger/dbx/sparc/*.java \
|
|
||||||
sun/jvm/hotspot/debugger/dbx/x86/*.java \
|
|
||||||
sun/jvm/hotspot/debugger/dummy/*.java \
|
sun/jvm/hotspot/debugger/dummy/*.java \
|
||||||
sun/jvm/hotspot/debugger/ia64/*.java \
|
sun/jvm/hotspot/debugger/ia64/*.java \
|
||||||
sun/jvm/hotspot/debugger/linux/*.java \
|
sun/jvm/hotspot/debugger/linux/*.java \
|
||||||
@@ -165,19 +172,26 @@ sun/jvm/hotspot/debugger/remote/amd64/*.java \
|
|||||||
sun/jvm/hotspot/debugger/remote/sparc/*.java \
|
sun/jvm/hotspot/debugger/remote/sparc/*.java \
|
||||||
sun/jvm/hotspot/debugger/remote/x86/*.java \
|
sun/jvm/hotspot/debugger/remote/x86/*.java \
|
||||||
sun/jvm/hotspot/debugger/sparc/*.java \
|
sun/jvm/hotspot/debugger/sparc/*.java \
|
||||||
sun/jvm/hotspot/debugger/win32/*.java \
|
|
||||||
sun/jvm/hotspot/debugger/win32/coff/*.java \
|
sun/jvm/hotspot/debugger/win32/coff/*.java \
|
||||||
sun/jvm/hotspot/debugger/windbg/*.java \
|
sun/jvm/hotspot/debugger/windbg/*.java \
|
||||||
sun/jvm/hotspot/debugger/windbg/ia64/*.java \
|
sun/jvm/hotspot/debugger/windbg/ia64/*.java \
|
||||||
sun/jvm/hotspot/debugger/windbg/x86/*.java \
|
sun/jvm/hotspot/debugger/windbg/x86/*.java \
|
||||||
sun/jvm/hotspot/debugger/x86/*.java \
|
sun/jvm/hotspot/debugger/x86/*.java \
|
||||||
|
sun/jvm/hotspot/gc_implementation/g1/*.java \
|
||||||
|
sun/jvm/hotspot/gc_implementation/parallelScavenge/*.java \
|
||||||
|
sun/jvm/hotspot/gc_implementation/shared/*.java \
|
||||||
sun/jvm/hotspot/interpreter/*.java \
|
sun/jvm/hotspot/interpreter/*.java \
|
||||||
sun/jvm/hotspot/jdi/*.java \
|
sun/jvm/hotspot/jdi/*.java \
|
||||||
sun/jvm/hotspot/livejvm/*.java \
|
sun/jvm/hotspot/livejvm/*.java \
|
||||||
sun/jvm/hotspot/memory/*.java \
|
sun/jvm/hotspot/memory/*.java \
|
||||||
sun/jvm/hotspot/oops/*.java \
|
sun/jvm/hotspot/oops/*.java \
|
||||||
|
sun/jvm/hotspot/opto/*.java \
|
||||||
|
sun/jvm/hotspot/prims/*.java \
|
||||||
sun/jvm/hotspot/runtime/*.java \
|
sun/jvm/hotspot/runtime/*.java \
|
||||||
sun/jvm/hotspot/runtime/amd64/*.java \
|
sun/jvm/hotspot/runtime/amd64/*.java \
|
||||||
|
sun/jvm/hotspot/runtime/bsd/*.java \
|
||||||
|
sun/jvm/hotspot/runtime/bsd_amd64/*.java \
|
||||||
|
sun/jvm/hotspot/runtime/bsd_x86/*.java \
|
||||||
sun/jvm/hotspot/runtime/ia64/*.java \
|
sun/jvm/hotspot/runtime/ia64/*.java \
|
||||||
sun/jvm/hotspot/runtime/linux/*.java \
|
sun/jvm/hotspot/runtime/linux/*.java \
|
||||||
sun/jvm/hotspot/runtime/linux_amd64/*.java \
|
sun/jvm/hotspot/runtime/linux_amd64/*.java \
|
||||||
@@ -257,7 +271,7 @@ RMIC = $(JDK_HOME)/bin/rmic
|
|||||||
all: filelist
|
all: filelist
|
||||||
@mkdir -p $(OUTPUT_DIR)
|
@mkdir -p $(OUTPUT_DIR)
|
||||||
@echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES)
|
@echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES)
|
||||||
$(JAVAC) -source 1.4 -classpath $(CLASSPATH) -deprecation -sourcepath $(SRC_DIR) -g -d $(OUTPUT_DIR) @filelist
|
$(JAVAC) -classpath $(CLASSPATH) -deprecation -sourcepath $(SRC_DIR) -g -d $(OUTPUT_DIR) @filelist
|
||||||
$(RMIC) -classpath $(OUTPUT_DIR) -d $(OUTPUT_DIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer
|
$(RMIC) -classpath $(OUTPUT_DIR) -d $(OUTPUT_DIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer
|
||||||
rm -f $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql/sa.js
|
rm -f $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql/sa.js
|
||||||
cp $(SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql
|
cp $(SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql
|
||||||
@@ -269,7 +283,7 @@ all: filelist
|
|||||||
allprof: filelist
|
allprof: filelist
|
||||||
@mkdir -p $(OUTPUT_DIR)
|
@mkdir -p $(OUTPUT_DIR)
|
||||||
@echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES)
|
@echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES)
|
||||||
$(JAVAC) -source 1.4 -J-Xprof -classpath $(CLASSPATH) -deprecation -sourcepath $(SRC_DIR) -g -d $(OUTPUT_DIR) @filelist
|
$(JAVAC) -J-Xprof -classpath $(CLASSPATH) -deprecation -sourcepath $(SRC_DIR) -g -d $(OUTPUT_DIR) @filelist
|
||||||
$(RMIC) -classpath $(OUTPUT_DIR) -d $(OUTPUT_DIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer
|
$(RMIC) -classpath $(OUTPUT_DIR) -d $(OUTPUT_DIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer
|
||||||
rm -f $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql/sa.js
|
rm -f $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql/sa.js
|
||||||
cp $(SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql
|
cp $(SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql
|
||||||
|
|||||||
@@ -70,6 +70,14 @@ fi
|
|||||||
|
|
||||||
SA_CLASSPATH=$STARTDIR/../build/classes:$STARTDIR/../src/share/lib/js.jar:$STARTDIR/sa.jar:$STARTDIR/lib/js.jar
|
SA_CLASSPATH=$STARTDIR/../build/classes:$STARTDIR/../src/share/lib/js.jar:$STARTDIR/sa.jar:$STARTDIR/lib/js.jar
|
||||||
|
|
||||||
|
if [ ! -z "$SA_TYPEDB" ]; then
|
||||||
|
if [ ! -f $SA_TYPEDB ]; then
|
||||||
|
echo "$SA_TYPEDB is unreadable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
OPTIONS="-Dsun.jvm.hotspot.typedb=$SA_TYPEDB ${OPTIONS}"
|
||||||
|
fi
|
||||||
|
|
||||||
OPTIONS="-Djava.system.class.loader=sun.jvm.hotspot.SALauncherLoader ${OPTIONS}"
|
OPTIONS="-Djava.system.class.loader=sun.jvm.hotspot.SALauncherLoader ${OPTIONS}"
|
||||||
|
|
||||||
SA_JAVA_CMD="$SA_PREFIX_CMD $SA_JAVA -showversion ${OPTIONS} -cp $SA_CLASSPATH $SA_OPTIONS"
|
SA_JAVA_CMD="$SA_PREFIX_CMD $SA_JAVA -showversion ${OPTIONS} -cp $SA_CLASSPATH $SA_OPTIONS"
|
||||||
|
|||||||
@@ -67,6 +67,14 @@ fi
|
|||||||
|
|
||||||
SA_CLASSPATH=$STARTDIR/../build/classes:$STARTDIR/../src/share/lib/js.jar:$STARTDIR/sa.jar::$STARTDIR/lib/js.jar
|
SA_CLASSPATH=$STARTDIR/../build/classes:$STARTDIR/../src/share/lib/js.jar:$STARTDIR/sa.jar::$STARTDIR/lib/js.jar
|
||||||
|
|
||||||
|
if [ ! -z "$SA_TYPEDB" ]; then
|
||||||
|
if [ ! -f $SA_TYPEDB ]; then
|
||||||
|
echo "$SA_TYPEDB is unreadable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
OPTIONS="-Dsun.jvm.hotspot.typedb=$SA_TYPEDB ${OPTIONS}"
|
||||||
|
fi
|
||||||
|
|
||||||
OPTIONS="-Djava.system.class.loader=sun.jvm.hotspot.SALauncherLoader ${OPTIONS}"
|
OPTIONS="-Djava.system.class.loader=sun.jvm.hotspot.SALauncherLoader ${OPTIONS}"
|
||||||
|
|
||||||
SA_JAVA_CMD="$SA_PREFIX_CMD $SA_JAVA -d64 -showversion ${OPTIONS} -cp $SA_CLASSPATH $SA_OPTIONS"
|
SA_JAVA_CMD="$SA_PREFIX_CMD $SA_JAVA -d64 -showversion ${OPTIONS} -cp $SA_CLASSPATH $SA_OPTIONS"
|
||||||
|
|||||||
413
hotspot/agent/src/os/bsd/BsdDebuggerLocal.c
Normal file
413
hotspot/agent/src/os/bsd/BsdDebuggerLocal.c
Normal file
@@ -0,0 +1,413 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <jni.h>
|
||||||
|
#include "libproc.h"
|
||||||
|
|
||||||
|
#if defined(x86_64) && !defined(amd64)
|
||||||
|
#define amd64 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef i386
|
||||||
|
#include "sun_jvm_hotspot_debugger_x86_X86ThreadContext.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef amd64
|
||||||
|
#include "sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(sparc) || defined(sparcv9)
|
||||||
|
#include "sun_jvm_hotspot_debugger_sparc_SPARCThreadContext.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static jfieldID p_ps_prochandle_ID = 0;
|
||||||
|
static jfieldID threadList_ID = 0;
|
||||||
|
static jfieldID loadObjectList_ID = 0;
|
||||||
|
|
||||||
|
static jmethodID createClosestSymbol_ID = 0;
|
||||||
|
static jmethodID createLoadObject_ID = 0;
|
||||||
|
static jmethodID getThreadForThreadId_ID = 0;
|
||||||
|
static jmethodID listAdd_ID = 0;
|
||||||
|
|
||||||
|
#define CHECK_EXCEPTION_(value) if ((*env)->ExceptionOccurred(env)) { return value; }
|
||||||
|
#define CHECK_EXCEPTION if ((*env)->ExceptionOccurred(env)) { return;}
|
||||||
|
#define THROW_NEW_DEBUGGER_EXCEPTION_(str, value) { throw_new_debugger_exception(env, str); return value; }
|
||||||
|
#define THROW_NEW_DEBUGGER_EXCEPTION(str) { throw_new_debugger_exception(env, str); return;}
|
||||||
|
|
||||||
|
static void throw_new_debugger_exception(JNIEnv* env, const char* errMsg) {
|
||||||
|
(*env)->ThrowNew(env, (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"), errMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct ps_prochandle* get_proc_handle(JNIEnv* env, jobject this_obj) {
|
||||||
|
jlong ptr = (*env)->GetLongField(env, this_obj, p_ps_prochandle_ID);
|
||||||
|
return (struct ps_prochandle*)(intptr_t)ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: init0
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_init0
|
||||||
|
(JNIEnv *env, jclass cls) {
|
||||||
|
jclass listClass;
|
||||||
|
|
||||||
|
if (init_libproc(getenv("LIBSAPROC_DEBUG") != NULL) != true) {
|
||||||
|
THROW_NEW_DEBUGGER_EXCEPTION("can't initialize libproc");
|
||||||
|
}
|
||||||
|
|
||||||
|
// fields we use
|
||||||
|
p_ps_prochandle_ID = (*env)->GetFieldID(env, cls, "p_ps_prochandle", "J");
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
threadList_ID = (*env)->GetFieldID(env, cls, "threadList", "Ljava/util/List;");
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
loadObjectList_ID = (*env)->GetFieldID(env, cls, "loadObjectList", "Ljava/util/List;");
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
|
||||||
|
// methods we use
|
||||||
|
createClosestSymbol_ID = (*env)->GetMethodID(env, cls, "createClosestSymbol",
|
||||||
|
"(Ljava/lang/String;J)Lsun/jvm/hotspot/debugger/cdbg/ClosestSymbol;");
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
createLoadObject_ID = (*env)->GetMethodID(env, cls, "createLoadObject",
|
||||||
|
"(Ljava/lang/String;JJ)Lsun/jvm/hotspot/debugger/cdbg/LoadObject;");
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
getThreadForThreadId_ID = (*env)->GetMethodID(env, cls, "getThreadForThreadId",
|
||||||
|
"(J)Lsun/jvm/hotspot/debugger/ThreadProxy;");
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
// java.util.List method we call
|
||||||
|
listClass = (*env)->FindClass(env, "java/util/List");
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
listAdd_ID = (*env)->GetMethodID(env, listClass, "add", "(Ljava/lang/Object;)Z");
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getAddressSize
|
||||||
|
(JNIEnv *env, jclass cls)
|
||||||
|
{
|
||||||
|
#ifdef _LP64
|
||||||
|
return 8;
|
||||||
|
#else
|
||||||
|
return 4;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void fillThreadsAndLoadObjects(JNIEnv* env, jobject this_obj, struct ps_prochandle* ph) {
|
||||||
|
int n = 0, i = 0;
|
||||||
|
|
||||||
|
// add threads
|
||||||
|
n = get_num_threads(ph);
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
jobject thread;
|
||||||
|
jobject threadList;
|
||||||
|
lwpid_t lwpid;
|
||||||
|
|
||||||
|
lwpid = get_lwp_id(ph, i);
|
||||||
|
thread = (*env)->CallObjectMethod(env, this_obj, getThreadForThreadId_ID,
|
||||||
|
(jlong)lwpid);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
threadList = (*env)->GetObjectField(env, this_obj, threadList_ID);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
(*env)->CallBooleanMethod(env, threadList, listAdd_ID, thread);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add load objects
|
||||||
|
n = get_num_libs(ph);
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
uintptr_t base;
|
||||||
|
const char* name;
|
||||||
|
jobject loadObject;
|
||||||
|
jobject loadObjectList;
|
||||||
|
|
||||||
|
base = get_lib_base(ph, i);
|
||||||
|
name = get_lib_name(ph, i);
|
||||||
|
loadObject = (*env)->CallObjectMethod(env, this_obj, createLoadObject_ID,
|
||||||
|
(*env)->NewStringUTF(env, name), (jlong)0, (jlong)base);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
loadObjectList = (*env)->GetObjectField(env, this_obj, loadObjectList_ID);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
(*env)->CallBooleanMethod(env, loadObjectList, listAdd_ID, loadObject);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: attach0
|
||||||
|
* Signature: (I)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__I
|
||||||
|
(JNIEnv *env, jobject this_obj, jint jpid) {
|
||||||
|
|
||||||
|
struct ps_prochandle* ph;
|
||||||
|
if ( (ph = Pgrab(jpid)) == NULL) {
|
||||||
|
THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the process");
|
||||||
|
}
|
||||||
|
(*env)->SetLongField(env, this_obj, p_ps_prochandle_ID, (jlong)(intptr_t)ph);
|
||||||
|
fillThreadsAndLoadObjects(env, this_obj, ph);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: attach0
|
||||||
|
* Signature: (Ljava/lang/String;Ljava/lang/String;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__Ljava_lang_String_2Ljava_lang_String_2
|
||||||
|
(JNIEnv *env, jobject this_obj, jstring execName, jstring coreName) {
|
||||||
|
const char *execName_cstr;
|
||||||
|
const char *coreName_cstr;
|
||||||
|
jboolean isCopy;
|
||||||
|
struct ps_prochandle* ph;
|
||||||
|
|
||||||
|
execName_cstr = (*env)->GetStringUTFChars(env, execName, &isCopy);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
coreName_cstr = (*env)->GetStringUTFChars(env, coreName, &isCopy);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
|
||||||
|
if ( (ph = Pgrab_core(execName_cstr, coreName_cstr)) == NULL) {
|
||||||
|
(*env)->ReleaseStringUTFChars(env, execName, execName_cstr);
|
||||||
|
(*env)->ReleaseStringUTFChars(env, coreName, coreName_cstr);
|
||||||
|
THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the core file");
|
||||||
|
}
|
||||||
|
(*env)->SetLongField(env, this_obj, p_ps_prochandle_ID, (jlong)(intptr_t)ph);
|
||||||
|
(*env)->ReleaseStringUTFChars(env, execName, execName_cstr);
|
||||||
|
(*env)->ReleaseStringUTFChars(env, coreName, coreName_cstr);
|
||||||
|
fillThreadsAndLoadObjects(env, this_obj, ph);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: detach0
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_detach0
|
||||||
|
(JNIEnv *env, jobject this_obj) {
|
||||||
|
struct ps_prochandle* ph = get_proc_handle(env, this_obj);
|
||||||
|
if (ph != NULL) {
|
||||||
|
Prelease(ph);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: lookupByName0
|
||||||
|
* Signature: (Ljava/lang/String;Ljava/lang/String;)J
|
||||||
|
*/
|
||||||
|
JNIEXPORT jlong JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByName0
|
||||||
|
(JNIEnv *env, jobject this_obj, jstring objectName, jstring symbolName) {
|
||||||
|
const char *objectName_cstr, *symbolName_cstr;
|
||||||
|
jlong addr;
|
||||||
|
jboolean isCopy;
|
||||||
|
struct ps_prochandle* ph = get_proc_handle(env, this_obj);
|
||||||
|
|
||||||
|
objectName_cstr = NULL;
|
||||||
|
if (objectName != NULL) {
|
||||||
|
objectName_cstr = (*env)->GetStringUTFChars(env, objectName, &isCopy);
|
||||||
|
CHECK_EXCEPTION_(0);
|
||||||
|
}
|
||||||
|
symbolName_cstr = (*env)->GetStringUTFChars(env, symbolName, &isCopy);
|
||||||
|
CHECK_EXCEPTION_(0);
|
||||||
|
|
||||||
|
addr = (jlong) lookup_symbol(ph, objectName_cstr, symbolName_cstr);
|
||||||
|
|
||||||
|
if (objectName_cstr != NULL) {
|
||||||
|
(*env)->ReleaseStringUTFChars(env, objectName, objectName_cstr);
|
||||||
|
}
|
||||||
|
(*env)->ReleaseStringUTFChars(env, symbolName, symbolName_cstr);
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: lookupByAddress0
|
||||||
|
* Signature: (J)Lsun/jvm/hotspot/debugger/cdbg/ClosestSymbol;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByAddress0
|
||||||
|
(JNIEnv *env, jobject this_obj, jlong addr) {
|
||||||
|
uintptr_t offset;
|
||||||
|
const char* sym = NULL;
|
||||||
|
|
||||||
|
struct ps_prochandle* ph = get_proc_handle(env, this_obj);
|
||||||
|
sym = symbol_for_pc(ph, (uintptr_t) addr, &offset);
|
||||||
|
if (sym == NULL) return 0;
|
||||||
|
return (*env)->CallObjectMethod(env, this_obj, createClosestSymbol_ID,
|
||||||
|
(*env)->NewStringUTF(env, sym), (jlong)offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: readBytesFromProcess0
|
||||||
|
* Signature: (JJ)Lsun/jvm/hotspot/debugger/ReadResult;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jbyteArray JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_readBytesFromProcess0
|
||||||
|
(JNIEnv *env, jobject this_obj, jlong addr, jlong numBytes) {
|
||||||
|
|
||||||
|
jboolean isCopy;
|
||||||
|
jbyteArray array;
|
||||||
|
jbyte *bufPtr;
|
||||||
|
ps_err_e err;
|
||||||
|
|
||||||
|
array = (*env)->NewByteArray(env, numBytes);
|
||||||
|
CHECK_EXCEPTION_(0);
|
||||||
|
bufPtr = (*env)->GetByteArrayElements(env, array, &isCopy);
|
||||||
|
CHECK_EXCEPTION_(0);
|
||||||
|
|
||||||
|
err = ps_pread(get_proc_handle(env, this_obj), (psaddr_t) (uintptr_t)addr, bufPtr, numBytes);
|
||||||
|
(*env)->ReleaseByteArrayElements(env, array, bufPtr, 0);
|
||||||
|
return (err == PS_OK)? array : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getThreadIntegerRegisterSet0
|
||||||
|
(JNIEnv *env, jobject this_obj, jint lwp_id) {
|
||||||
|
|
||||||
|
struct reg gregs;
|
||||||
|
jboolean isCopy;
|
||||||
|
jlongArray array;
|
||||||
|
jlong *regs;
|
||||||
|
|
||||||
|
struct ps_prochandle* ph = get_proc_handle(env, this_obj);
|
||||||
|
if (get_lwp_regs(ph, lwp_id, &gregs) != true) {
|
||||||
|
THROW_NEW_DEBUGGER_EXCEPTION_("get_thread_regs failed for a lwp", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef NPRGREG
|
||||||
|
#ifdef i386
|
||||||
|
#define NPRGREG sun_jvm_hotspot_debugger_x86_X86ThreadContext_NPRGREG
|
||||||
|
#endif
|
||||||
|
#ifdef ia64
|
||||||
|
#define NPRGREG IA64_REG_COUNT
|
||||||
|
#endif
|
||||||
|
#ifdef amd64
|
||||||
|
#define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
|
||||||
|
#endif
|
||||||
|
#if defined(sparc) || defined(sparcv9)
|
||||||
|
#define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
array = (*env)->NewLongArray(env, NPRGREG);
|
||||||
|
CHECK_EXCEPTION_(0);
|
||||||
|
regs = (*env)->GetLongArrayElements(env, array, &isCopy);
|
||||||
|
|
||||||
|
#undef REG_INDEX
|
||||||
|
|
||||||
|
#ifdef i386
|
||||||
|
#define REG_INDEX(reg) sun_jvm_hotspot_debugger_x86_X86ThreadContext_##reg
|
||||||
|
|
||||||
|
regs[REG_INDEX(GS)] = (uintptr_t) gregs.r_gs;
|
||||||
|
regs[REG_INDEX(FS)] = (uintptr_t) gregs.r_fs;
|
||||||
|
regs[REG_INDEX(ES)] = (uintptr_t) gregs.r_es;
|
||||||
|
regs[REG_INDEX(DS)] = (uintptr_t) gregs.r_ds;
|
||||||
|
regs[REG_INDEX(EDI)] = (uintptr_t) gregs.r_edi;
|
||||||
|
regs[REG_INDEX(ESI)] = (uintptr_t) gregs.r_esi;
|
||||||
|
regs[REG_INDEX(FP)] = (uintptr_t) gregs.r_ebp;
|
||||||
|
regs[REG_INDEX(SP)] = (uintptr_t) gregs.r_isp;
|
||||||
|
regs[REG_INDEX(EBX)] = (uintptr_t) gregs.r_ebx;
|
||||||
|
regs[REG_INDEX(EDX)] = (uintptr_t) gregs.r_edx;
|
||||||
|
regs[REG_INDEX(ECX)] = (uintptr_t) gregs.r_ecx;
|
||||||
|
regs[REG_INDEX(EAX)] = (uintptr_t) gregs.r_eax;
|
||||||
|
regs[REG_INDEX(PC)] = (uintptr_t) gregs.r_eip;
|
||||||
|
regs[REG_INDEX(CS)] = (uintptr_t) gregs.r_cs;
|
||||||
|
regs[REG_INDEX(SS)] = (uintptr_t) gregs.r_ss;
|
||||||
|
|
||||||
|
#endif /* i386 */
|
||||||
|
|
||||||
|
#if ia64
|
||||||
|
regs = (*env)->GetLongArrayElements(env, array, &isCopy);
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < NPRGREG; i++ ) {
|
||||||
|
regs[i] = 0xDEADDEAD;
|
||||||
|
}
|
||||||
|
#endif /* ia64 */
|
||||||
|
|
||||||
|
#ifdef amd64
|
||||||
|
#define REG_INDEX(reg) sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_##reg
|
||||||
|
|
||||||
|
regs[REG_INDEX(R15)] = gregs.r_r15;
|
||||||
|
regs[REG_INDEX(R14)] = gregs.r_r14;
|
||||||
|
regs[REG_INDEX(R13)] = gregs.r_r13;
|
||||||
|
regs[REG_INDEX(R12)] = gregs.r_r12;
|
||||||
|
regs[REG_INDEX(RBP)] = gregs.r_rbp;
|
||||||
|
regs[REG_INDEX(RBX)] = gregs.r_rbx;
|
||||||
|
regs[REG_INDEX(R11)] = gregs.r_r11;
|
||||||
|
regs[REG_INDEX(R10)] = gregs.r_r10;
|
||||||
|
regs[REG_INDEX(R9)] = gregs.r_r9;
|
||||||
|
regs[REG_INDEX(R8)] = gregs.r_r8;
|
||||||
|
regs[REG_INDEX(RAX)] = gregs.r_rax;
|
||||||
|
regs[REG_INDEX(RCX)] = gregs.r_rcx;
|
||||||
|
regs[REG_INDEX(RDX)] = gregs.r_rdx;
|
||||||
|
regs[REG_INDEX(RSI)] = gregs.r_rsi;
|
||||||
|
regs[REG_INDEX(RDI)] = gregs.r_rdi;
|
||||||
|
regs[REG_INDEX(RIP)] = gregs.r_rip;
|
||||||
|
regs[REG_INDEX(CS)] = gregs.r_cs;
|
||||||
|
regs[REG_INDEX(RSP)] = gregs.r_rsp;
|
||||||
|
regs[REG_INDEX(SS)] = gregs.r_ss;
|
||||||
|
// regs[REG_INDEX(FSBASE)] = gregs.fs_base;
|
||||||
|
// regs[REG_INDEX(GSBASE)] = gregs.gs_base;
|
||||||
|
// regs[REG_INDEX(DS)] = gregs.ds;
|
||||||
|
// regs[REG_INDEX(ES)] = gregs.es;
|
||||||
|
// regs[REG_INDEX(FS)] = gregs.fs;
|
||||||
|
// regs[REG_INDEX(GS)] = gregs.gs;
|
||||||
|
|
||||||
|
#endif /* amd64 */
|
||||||
|
|
||||||
|
#if defined(sparc) || defined(sparcv9)
|
||||||
|
|
||||||
|
#define REG_INDEX(reg) sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_##reg
|
||||||
|
|
||||||
|
#ifdef _LP64
|
||||||
|
regs[REG_INDEX(R_PSR)] = gregs.tstate;
|
||||||
|
regs[REG_INDEX(R_PC)] = gregs.tpc;
|
||||||
|
regs[REG_INDEX(R_nPC)] = gregs.tnpc;
|
||||||
|
regs[REG_INDEX(R_Y)] = gregs.y;
|
||||||
|
#else
|
||||||
|
regs[REG_INDEX(R_PSR)] = gregs.psr;
|
||||||
|
regs[REG_INDEX(R_PC)] = gregs.pc;
|
||||||
|
regs[REG_INDEX(R_nPC)] = gregs.npc;
|
||||||
|
regs[REG_INDEX(R_Y)] = gregs.y;
|
||||||
|
#endif
|
||||||
|
regs[REG_INDEX(R_G0)] = 0 ;
|
||||||
|
regs[REG_INDEX(R_G1)] = gregs.u_regs[0];
|
||||||
|
regs[REG_INDEX(R_G2)] = gregs.u_regs[1];
|
||||||
|
regs[REG_INDEX(R_G3)] = gregs.u_regs[2];
|
||||||
|
regs[REG_INDEX(R_G4)] = gregs.u_regs[3];
|
||||||
|
regs[REG_INDEX(R_G5)] = gregs.u_regs[4];
|
||||||
|
regs[REG_INDEX(R_G6)] = gregs.u_regs[5];
|
||||||
|
regs[REG_INDEX(R_G7)] = gregs.u_regs[6];
|
||||||
|
regs[REG_INDEX(R_O0)] = gregs.u_regs[7];
|
||||||
|
regs[REG_INDEX(R_O1)] = gregs.u_regs[8];
|
||||||
|
regs[REG_INDEX(R_O2)] = gregs.u_regs[ 9];
|
||||||
|
regs[REG_INDEX(R_O3)] = gregs.u_regs[10];
|
||||||
|
regs[REG_INDEX(R_O4)] = gregs.u_regs[11];
|
||||||
|
regs[REG_INDEX(R_O5)] = gregs.u_regs[12];
|
||||||
|
regs[REG_INDEX(R_O6)] = gregs.u_regs[13];
|
||||||
|
regs[REG_INDEX(R_O7)] = gregs.u_regs[14];
|
||||||
|
#endif /* sparc */
|
||||||
|
|
||||||
|
|
||||||
|
(*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
|
||||||
|
return array;
|
||||||
|
}
|
||||||
78
hotspot/agent/src/os/bsd/Makefile
Normal file
78
hotspot/agent/src/os/bsd/Makefile
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
#
|
||||||
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License version 2 only, as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
ARCH := $(shell if ([ `uname -m` = "ia64" ]) ; then echo ia64 ; elif ([ `uname -m` = "amd64" ]) ; then echo amd64; elif ([ `uname -m` = "sparc64" ]) ; then echo sparc; else echo i386 ; fi )
|
||||||
|
GCC = gcc
|
||||||
|
|
||||||
|
JAVAH = ${JAVA_HOME}/bin/javah
|
||||||
|
|
||||||
|
SOURCES = salibelf.c \
|
||||||
|
symtab.c \
|
||||||
|
libproc_impl.c \
|
||||||
|
ps_proc.c \
|
||||||
|
ps_core.c \
|
||||||
|
hsearch_r.c \
|
||||||
|
BsdDebuggerLocal.c
|
||||||
|
|
||||||
|
INCLUDES = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/$(shell uname -s | tr "[:upper:]" "[:lower:]")
|
||||||
|
|
||||||
|
OBJS = $(SOURCES:.c=.o)
|
||||||
|
|
||||||
|
LIBS = -lutil -lthread_db
|
||||||
|
|
||||||
|
CFLAGS = -c -fPIC -g -Wall -D_ALLBSD_SOURCE -D_GNU_SOURCE -D$(ARCH) $(INCLUDES)
|
||||||
|
|
||||||
|
LIBSA = $(ARCH)/libsaproc.so
|
||||||
|
|
||||||
|
all: $(LIBSA)
|
||||||
|
|
||||||
|
BsdDebuggerLocal.o: BsdDebuggerLocal.c
|
||||||
|
$(JAVAH) -jni -classpath ../../../../../build/bsd-i586/hotspot/outputdir/bsd_i486_compiler2/generated/saclasses \
|
||||||
|
sun.jvm.hotspot.debugger.x86.X86ThreadContext \
|
||||||
|
sun.jvm.hotspot.debugger.amd64.AMD64ThreadContext
|
||||||
|
$(GCC) $(CFLAGS) $<
|
||||||
|
|
||||||
|
.c.obj:
|
||||||
|
$(GCC) $(CFLAGS)
|
||||||
|
|
||||||
|
ifndef LDNOMAP
|
||||||
|
LFLAGS_LIBSA = -Xlinker --version-script=mapfile
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(LIBSA): $(OBJS) mapfile
|
||||||
|
if [ ! -d $(ARCH) ] ; then mkdir $(ARCH) ; fi
|
||||||
|
$(GCC) -shared $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS)
|
||||||
|
|
||||||
|
test.o: $(LIBSA) test.c
|
||||||
|
$(GCC) -c -o test.o -g -D_GNU_SOURCE -D$(ARCH) $(INCLUDES) test.c
|
||||||
|
|
||||||
|
test: test.o
|
||||||
|
$(GCC) -o test test.o -L$(ARCH) -lsaproc $(LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(LIBSA)
|
||||||
|
rm -f $(OBJS)
|
||||||
|
rm -f test.o
|
||||||
|
-rmdir $(ARCH)
|
||||||
|
|
||||||
120
hotspot/agent/src/os/bsd/StubDebuggerLocal.c
Normal file
120
hotspot/agent/src/os/bsd/StubDebuggerLocal.c
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <jni.h>
|
||||||
|
|
||||||
|
#define CHECK_EXCEPTION_(value) if ((*env)->ExceptionOccurred(env)) { return value; }
|
||||||
|
#define CHECK_EXCEPTION if ((*env)->ExceptionOccurred(env)) { return;}
|
||||||
|
#define THROW_NEW_DEBUGGER_EXCEPTION_(str, value) { throw_new_debugger_exception(env, str); return value; }
|
||||||
|
#define THROW_NEW_DEBUGGER_EXCEPTION(str) { throw_new_debugger_exception(env, str); return;}
|
||||||
|
|
||||||
|
static void throw_new_debugger_exception(JNIEnv* env, const char* errMsg) {
|
||||||
|
(*env)->ThrowNew(env, (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"), errMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: init0
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_init0
|
||||||
|
(JNIEnv *env, jclass cls) {
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getAddressSize
|
||||||
|
(JNIEnv *env, jclass cls)
|
||||||
|
{
|
||||||
|
#ifdef _LP64
|
||||||
|
return 8;
|
||||||
|
#else
|
||||||
|
return 4;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: attach0
|
||||||
|
* Signature: (I)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__I
|
||||||
|
(JNIEnv *env, jobject this_obj, jint jpid) {
|
||||||
|
|
||||||
|
THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the process");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: attach0
|
||||||
|
* Signature: (Ljava/lang/String;Ljava/lang/String;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__Ljava_lang_String_2Ljava_lang_String_2
|
||||||
|
(JNIEnv *env, jobject this_obj, jstring execName, jstring coreName) {
|
||||||
|
THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the core file");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: detach0
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_detach0
|
||||||
|
(JNIEnv *env, jobject this_obj) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: lookupByName0
|
||||||
|
* Signature: (Ljava/lang/String;Ljava/lang/String;)J
|
||||||
|
*/
|
||||||
|
JNIEXPORT jlong JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByName0
|
||||||
|
(JNIEnv *env, jobject this_obj, jstring objectName, jstring symbolName) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: lookupByAddress0
|
||||||
|
* Signature: (J)Lsun/jvm/hotspot/debugger/cdbg/ClosestSymbol;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByAddress0
|
||||||
|
(JNIEnv *env, jobject this_obj, jlong addr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
|
||||||
|
* Method: readBytesFromProcess0
|
||||||
|
* Signature: (JJ)Lsun/jvm/hotspot/debugger/ReadResult;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jbyteArray JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_readBytesFromProcess0
|
||||||
|
(JNIEnv *env, jobject this_obj, jlong addr, jlong numBytes) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getThreadIntegerRegisterSet0
|
||||||
|
(JNIEnv *env, jobject this_obj, jint lwp_id) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -22,34 +22,37 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _PROCLIST_
|
#ifndef _ELFMACROS_H_
|
||||||
#define _PROCLIST_
|
#define _ELFMACROS_H_
|
||||||
|
|
||||||
#include <windows.h>
|
#define ELF_NHDR Elf_Note
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
class ProcEntry {
|
#if defined(_LP64)
|
||||||
public:
|
#define ELF_EHDR Elf64_Ehdr
|
||||||
/** name may not be NULL */
|
#define ELF_SHDR Elf64_Shdr
|
||||||
ProcEntry(ULONG pid, USHORT nameLength, wchar_t* name);
|
#define ELF_PHDR Elf64_Phdr
|
||||||
ProcEntry(ULONG pid, USHORT nameLength, char* name);
|
#define ELF_SYM Elf64_Sym
|
||||||
~ProcEntry();
|
#define ELF_DYN Elf64_Dyn
|
||||||
ProcEntry(const ProcEntry& arg);
|
#define ELF_ADDR Elf64_Addr
|
||||||
ProcEntry& operator=(const ProcEntry& arg);
|
|
||||||
|
|
||||||
ULONG getPid();
|
#ifndef ELF_ST_TYPE
|
||||||
/** Returns number of WCHAR characters in getName() */
|
#define ELF_ST_TYPE ELF64_ST_TYPE
|
||||||
USHORT getNameLength();
|
#endif
|
||||||
WCHAR* getName();
|
|
||||||
|
|
||||||
private:
|
#else
|
||||||
ULONG pid;
|
|
||||||
USHORT nameLength;
|
|
||||||
WCHAR* name;
|
|
||||||
void copyFrom(const ProcEntry& arg);
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::vector<ProcEntry> ProcEntryList;
|
#define ELF_EHDR Elf32_Ehdr
|
||||||
void procList(ProcEntryList& processes);
|
#define ELF_SHDR Elf32_Shdr
|
||||||
|
#define ELF_PHDR Elf32_Phdr
|
||||||
|
#define ELF_SYM Elf32_Sym
|
||||||
|
#define ELF_DYN Elf32_Dyn
|
||||||
|
#define ELF_ADDR Elf32_Addr
|
||||||
|
|
||||||
#endif // #defined _PROCLIST_
|
#ifndef ELF_ST_TYPE
|
||||||
|
#define ELF_ST_TYPE ELF32_ST_TYPE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _ELFMACROS_H_ */
|
||||||
127
hotspot/agent/src/os/bsd/libproc.h
Normal file
127
hotspot/agent/src/os/bsd/libproc.h
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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 _LIBPROC_H_
|
||||||
|
#define _LIBPROC_H_
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <machine/reg.h>
|
||||||
|
#include <proc_service.h>
|
||||||
|
|
||||||
|
#if defined(sparc) || defined(sparcv9)
|
||||||
|
/*
|
||||||
|
If _LP64 is defined ptrace.h should be taken from /usr/include/asm-sparc64
|
||||||
|
otherwise it should be from /usr/include/asm-sparc
|
||||||
|
These two files define pt_regs structure differently
|
||||||
|
*/
|
||||||
|
#ifdef _LP64
|
||||||
|
#include "asm-sparc64/ptrace.h"
|
||||||
|
#else
|
||||||
|
#include "asm-sparc/ptrace.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif //sparc or sparcv9
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
|
||||||
|
0. This is very minimal subset of Solaris libproc just enough for current application.
|
||||||
|
Please note that the bulk of the functionality is from proc_service interface. This
|
||||||
|
adds Pgrab__ and some missing stuff. We hide the difference b/w live process and core
|
||||||
|
file by this interface.
|
||||||
|
|
||||||
|
1. pthread_id is unique. We store this in OSThread::_pthread_id in JVM code.
|
||||||
|
|
||||||
|
2. All threads see the same pid when they call getpid().
|
||||||
|
We used to save the result of ::getpid() call in OSThread::_thread_id.
|
||||||
|
Because gettid returns actual pid of thread (lwp id), this is
|
||||||
|
unique again. We therefore use OSThread::_thread_id as unique identifier.
|
||||||
|
|
||||||
|
3. There is a unique LWP id under both thread libraries. libthread_db maps pthread_id
|
||||||
|
to its underlying lwp_id under both the thread libraries. thread_info.lwp_id stores
|
||||||
|
lwp_id of the thread. The lwp id is nothing but the actual pid of clone'd processes. But
|
||||||
|
unfortunately libthread_db does not work very well for core dumps. So, we get pthread_id
|
||||||
|
only for processes. For core dumps, we don't use libthread_db at all (like gdb).
|
||||||
|
|
||||||
|
4. ptrace operates on this LWP id under both the thread libraries. When we say 'pid' for
|
||||||
|
ptrace call, we refer to lwp_id of the thread.
|
||||||
|
|
||||||
|
5. for core file, we parse ELF files and read data from them. For processes we use
|
||||||
|
combination of ptrace and /proc calls.
|
||||||
|
|
||||||
|
*************************************************************************************/
|
||||||
|
|
||||||
|
// This C bool type must be int for compatibility with BSD calls and
|
||||||
|
// it would be a mistake to equivalence it to C++ bool on many platforms
|
||||||
|
|
||||||
|
typedef int bool;
|
||||||
|
#define true 1
|
||||||
|
#define false 0
|
||||||
|
|
||||||
|
struct ps_prochandle;
|
||||||
|
|
||||||
|
// attach to a process
|
||||||
|
struct ps_prochandle* Pgrab(pid_t pid);
|
||||||
|
|
||||||
|
// attach to a core dump
|
||||||
|
struct ps_prochandle* Pgrab_core(const char* execfile, const char* corefile);
|
||||||
|
|
||||||
|
// release a process or core
|
||||||
|
void Prelease(struct ps_prochandle* ph);
|
||||||
|
|
||||||
|
// functions not directly available in Solaris libproc
|
||||||
|
|
||||||
|
// initialize libproc (call this only once per app)
|
||||||
|
// pass true to make library verbose
|
||||||
|
bool init_libproc(bool verbose);
|
||||||
|
|
||||||
|
// get number of threads
|
||||||
|
int get_num_threads(struct ps_prochandle* ph);
|
||||||
|
|
||||||
|
// get lwp_id of n'th thread
|
||||||
|
lwpid_t get_lwp_id(struct ps_prochandle* ph, int index);
|
||||||
|
|
||||||
|
// get regs for a given lwp
|
||||||
|
bool get_lwp_regs(struct ps_prochandle* ph, lwpid_t lid, struct reg* regs);
|
||||||
|
|
||||||
|
// get number of shared objects
|
||||||
|
int get_num_libs(struct ps_prochandle* ph);
|
||||||
|
|
||||||
|
// get name of n'th lib
|
||||||
|
const char* get_lib_name(struct ps_prochandle* ph, int index);
|
||||||
|
|
||||||
|
// get base of lib
|
||||||
|
uintptr_t get_lib_base(struct ps_prochandle* ph, int index);
|
||||||
|
|
||||||
|
// returns true if given library is found in lib list
|
||||||
|
bool find_lib(struct ps_prochandle* ph, const char *lib_name);
|
||||||
|
|
||||||
|
// symbol lookup
|
||||||
|
uintptr_t lookup_symbol(struct ps_prochandle* ph, const char* object_name,
|
||||||
|
const char* sym_name);
|
||||||
|
|
||||||
|
// address->nearest symbol lookup. return NULL for no symbol
|
||||||
|
const char* symbol_for_pc(struct ps_prochandle* ph, uintptr_t addr, uintptr_t* poffset);
|
||||||
|
|
||||||
|
#endif //__LIBPROC_H_
|
||||||
452
hotspot/agent/src/os/bsd/libproc_impl.c
Normal file
452
hotspot/agent/src/os/bsd/libproc_impl.c
Normal file
@@ -0,0 +1,452 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <thread_db.h>
|
||||||
|
#include "libproc_impl.h"
|
||||||
|
|
||||||
|
static const char* alt_root = NULL;
|
||||||
|
static int alt_root_len = -1;
|
||||||
|
|
||||||
|
#define SA_ALTROOT "SA_ALTROOT"
|
||||||
|
|
||||||
|
static void init_alt_root() {
|
||||||
|
if (alt_root_len == -1) {
|
||||||
|
alt_root = getenv(SA_ALTROOT);
|
||||||
|
if (alt_root) {
|
||||||
|
alt_root_len = strlen(alt_root);
|
||||||
|
} else {
|
||||||
|
alt_root_len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int pathmap_open(const char* name) {
|
||||||
|
int fd;
|
||||||
|
char alt_path[PATH_MAX + 1];
|
||||||
|
|
||||||
|
init_alt_root();
|
||||||
|
fd = open(name, O_RDONLY);
|
||||||
|
if (fd >= 0) {
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alt_root_len > 0) {
|
||||||
|
strcpy(alt_path, alt_root);
|
||||||
|
strcat(alt_path, name);
|
||||||
|
fd = open(alt_path, O_RDONLY);
|
||||||
|
if (fd >= 0) {
|
||||||
|
print_debug("path %s substituted for %s\n", alt_path, name);
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strrchr(name, '/')) {
|
||||||
|
strcpy(alt_path, alt_root);
|
||||||
|
strcat(alt_path, strrchr(name, '/'));
|
||||||
|
fd = open(alt_path, O_RDONLY);
|
||||||
|
if (fd >= 0) {
|
||||||
|
print_debug("path %s substituted for %s\n", alt_path, name);
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool _libsaproc_debug;
|
||||||
|
|
||||||
|
void print_debug(const char* format,...) {
|
||||||
|
if (_libsaproc_debug) {
|
||||||
|
va_list alist;
|
||||||
|
|
||||||
|
va_start(alist, format);
|
||||||
|
fputs("libsaproc DEBUG: ", stderr);
|
||||||
|
vfprintf(stderr, format, alist);
|
||||||
|
va_end(alist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_debug() {
|
||||||
|
return _libsaproc_debug;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize libproc
|
||||||
|
bool init_libproc(bool debug) {
|
||||||
|
// init debug mode
|
||||||
|
_libsaproc_debug = debug;
|
||||||
|
|
||||||
|
// initialize the thread_db library
|
||||||
|
if (td_init() != TD_OK) {
|
||||||
|
print_debug("libthread_db's td_init failed\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void destroy_lib_info(struct ps_prochandle* ph) {
|
||||||
|
lib_info* lib = ph->libs;
|
||||||
|
while (lib) {
|
||||||
|
lib_info *next = lib->next;
|
||||||
|
if (lib->symtab) {
|
||||||
|
destroy_symtab(lib->symtab);
|
||||||
|
}
|
||||||
|
free(lib);
|
||||||
|
lib = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void destroy_thread_info(struct ps_prochandle* ph) {
|
||||||
|
thread_info* thr = ph->threads;
|
||||||
|
while (thr) {
|
||||||
|
thread_info *next = thr->next;
|
||||||
|
free(thr);
|
||||||
|
thr = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ps_prochandle cleanup
|
||||||
|
|
||||||
|
// ps_prochandle cleanup
|
||||||
|
void Prelease(struct ps_prochandle* ph) {
|
||||||
|
// do the "derived class" clean-up first
|
||||||
|
ph->ops->release(ph);
|
||||||
|
destroy_lib_info(ph);
|
||||||
|
destroy_thread_info(ph);
|
||||||
|
free(ph);
|
||||||
|
}
|
||||||
|
|
||||||
|
lib_info* add_lib_info(struct ps_prochandle* ph, const char* libname, uintptr_t base) {
|
||||||
|
return add_lib_info_fd(ph, libname, -1, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
lib_info* add_lib_info_fd(struct ps_prochandle* ph, const char* libname, int fd, uintptr_t base) {
|
||||||
|
lib_info* newlib;
|
||||||
|
|
||||||
|
if ( (newlib = (lib_info*) calloc(1, sizeof(struct lib_info))) == NULL) {
|
||||||
|
print_debug("can't allocate memory for lib_info\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
strncpy(newlib->name, libname, sizeof(newlib->name));
|
||||||
|
newlib->base = base;
|
||||||
|
|
||||||
|
if (fd == -1) {
|
||||||
|
if ( (newlib->fd = pathmap_open(newlib->name)) < 0) {
|
||||||
|
print_debug("can't open shared object %s\n", newlib->name);
|
||||||
|
free(newlib);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newlib->fd = fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check whether we have got an ELF file. /proc/<pid>/map
|
||||||
|
// gives out all file mappings and not just shared objects
|
||||||
|
if (is_elf_file(newlib->fd) == false) {
|
||||||
|
close(newlib->fd);
|
||||||
|
free(newlib);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
newlib->symtab = build_symtab(newlib->fd);
|
||||||
|
if (newlib->symtab == NULL) {
|
||||||
|
print_debug("symbol table build failed for %s\n", newlib->name);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print_debug("built symbol table for %s\n", newlib->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// even if symbol table building fails, we add the lib_info.
|
||||||
|
// This is because we may need to read from the ELF file for core file
|
||||||
|
// address read functionality. lookup_symbol checks for NULL symtab.
|
||||||
|
if (ph->libs) {
|
||||||
|
ph->lib_tail->next = newlib;
|
||||||
|
ph->lib_tail = newlib;
|
||||||
|
} else {
|
||||||
|
ph->libs = ph->lib_tail = newlib;
|
||||||
|
}
|
||||||
|
ph->num_libs++;
|
||||||
|
|
||||||
|
return newlib;
|
||||||
|
}
|
||||||
|
|
||||||
|
// lookup for a specific symbol
|
||||||
|
uintptr_t lookup_symbol(struct ps_prochandle* ph, const char* object_name,
|
||||||
|
const char* sym_name) {
|
||||||
|
// ignore object_name. search in all libraries
|
||||||
|
// FIXME: what should we do with object_name?? The library names are obtained
|
||||||
|
// by parsing /proc/<pid>/maps, which may not be the same as object_name.
|
||||||
|
// What we need is a utility to map object_name to real file name, something
|
||||||
|
// dlopen() does by looking at LD_LIBRARY_PATH and /etc/ld.so.cache. For
|
||||||
|
// now, we just ignore object_name and do a global search for the symbol.
|
||||||
|
|
||||||
|
lib_info* lib = ph->libs;
|
||||||
|
while (lib) {
|
||||||
|
if (lib->symtab) {
|
||||||
|
uintptr_t res = search_symbol(lib->symtab, lib->base, sym_name, NULL);
|
||||||
|
if (res) return res;
|
||||||
|
}
|
||||||
|
lib = lib->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
print_debug("lookup failed for symbol '%s' in obj '%s'\n",
|
||||||
|
sym_name, object_name);
|
||||||
|
return (uintptr_t) NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* symbol_for_pc(struct ps_prochandle* ph, uintptr_t addr, uintptr_t* poffset) {
|
||||||
|
const char* res = NULL;
|
||||||
|
lib_info* lib = ph->libs;
|
||||||
|
while (lib) {
|
||||||
|
if (lib->symtab && addr >= lib->base) {
|
||||||
|
res = nearest_symbol(lib->symtab, addr - lib->base, poffset);
|
||||||
|
if (res) return res;
|
||||||
|
}
|
||||||
|
lib = lib->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add a thread to ps_prochandle
|
||||||
|
thread_info* add_thread_info(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id) {
|
||||||
|
thread_info* newthr;
|
||||||
|
if ( (newthr = (thread_info*) calloc(1, sizeof(thread_info))) == NULL) {
|
||||||
|
print_debug("can't allocate memory for thread_info\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize thread info
|
||||||
|
newthr->pthread_id = pthread_id;
|
||||||
|
newthr->lwp_id = lwp_id;
|
||||||
|
|
||||||
|
// add new thread to the list
|
||||||
|
newthr->next = ph->threads;
|
||||||
|
ph->threads = newthr;
|
||||||
|
ph->num_threads++;
|
||||||
|
return newthr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// struct used for client data from thread_db callback
|
||||||
|
struct thread_db_client_data {
|
||||||
|
struct ps_prochandle* ph;
|
||||||
|
thread_info_callback callback;
|
||||||
|
};
|
||||||
|
|
||||||
|
// callback function for libthread_db
|
||||||
|
static int thread_db_callback(const td_thrhandle_t *th_p, void *data) {
|
||||||
|
struct thread_db_client_data* ptr = (struct thread_db_client_data*) data;
|
||||||
|
td_thrinfo_t ti;
|
||||||
|
td_err_e err;
|
||||||
|
|
||||||
|
memset(&ti, 0, sizeof(ti));
|
||||||
|
err = td_thr_get_info(th_p, &ti);
|
||||||
|
if (err != TD_OK) {
|
||||||
|
print_debug("libthread_db : td_thr_get_info failed, can't get thread info\n");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
print_debug("thread_db : pthread %d (lwp %d)\n", ti.ti_tid, ti.ti_lid);
|
||||||
|
|
||||||
|
if (ptr->callback(ptr->ph, (pthread_t)ti.ti_tid, ti.ti_lid) != true)
|
||||||
|
return TD_ERR;
|
||||||
|
|
||||||
|
return TD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read thread_info using libthread_db
|
||||||
|
bool read_thread_info(struct ps_prochandle* ph, thread_info_callback cb) {
|
||||||
|
struct thread_db_client_data mydata;
|
||||||
|
td_thragent_t* thread_agent = NULL;
|
||||||
|
if (td_ta_new(ph, &thread_agent) != TD_OK) {
|
||||||
|
print_debug("can't create libthread_db agent\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mydata.ph = ph;
|
||||||
|
mydata.callback = cb;
|
||||||
|
|
||||||
|
// we use libthread_db iterator to iterate thru list of threads.
|
||||||
|
if (td_ta_thr_iter(thread_agent, thread_db_callback, &mydata,
|
||||||
|
TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY,
|
||||||
|
TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS) != TD_OK) {
|
||||||
|
td_ta_delete(thread_agent);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete thread agent
|
||||||
|
td_ta_delete(thread_agent);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get number of threads
|
||||||
|
int get_num_threads(struct ps_prochandle* ph) {
|
||||||
|
return ph->num_threads;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get lwp_id of n'th thread
|
||||||
|
lwpid_t get_lwp_id(struct ps_prochandle* ph, int index) {
|
||||||
|
int count = 0;
|
||||||
|
thread_info* thr = ph->threads;
|
||||||
|
while (thr) {
|
||||||
|
if (count == index) {
|
||||||
|
return thr->lwp_id;
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
thr = thr->next;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get regs for a given lwp
|
||||||
|
bool get_lwp_regs(struct ps_prochandle* ph, lwpid_t lwp_id, struct reg* regs) {
|
||||||
|
return ph->ops->get_lwp_regs(ph, lwp_id, regs);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get number of shared objects
|
||||||
|
int get_num_libs(struct ps_prochandle* ph) {
|
||||||
|
return ph->num_libs;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get name of n'th solib
|
||||||
|
const char* get_lib_name(struct ps_prochandle* ph, int index) {
|
||||||
|
int count = 0;
|
||||||
|
lib_info* lib = ph->libs;
|
||||||
|
while (lib) {
|
||||||
|
if (count == index) {
|
||||||
|
return lib->name;
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
lib = lib->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get base address of a lib
|
||||||
|
uintptr_t get_lib_base(struct ps_prochandle* ph, int index) {
|
||||||
|
int count = 0;
|
||||||
|
lib_info* lib = ph->libs;
|
||||||
|
while (lib) {
|
||||||
|
if (count == index) {
|
||||||
|
return lib->base;
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
lib = lib->next;
|
||||||
|
}
|
||||||
|
return (uintptr_t)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool find_lib(struct ps_prochandle* ph, const char *lib_name) {
|
||||||
|
lib_info *p = ph->libs;
|
||||||
|
while (p) {
|
||||||
|
if (strcmp(p->name, lib_name) == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
p = p->next;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
// proc service functions
|
||||||
|
|
||||||
|
// ps_pglobal_lookup() looks up the symbol sym_name in the symbol table
|
||||||
|
// of the load object object_name in the target process identified by ph.
|
||||||
|
// It returns the symbol's value as an address in the target process in
|
||||||
|
// *sym_addr.
|
||||||
|
|
||||||
|
ps_err_e ps_pglobal_lookup(struct ps_prochandle *ph, const char *object_name,
|
||||||
|
const char *sym_name, psaddr_t *sym_addr) {
|
||||||
|
*sym_addr = (psaddr_t) lookup_symbol(ph, object_name, sym_name);
|
||||||
|
return (*sym_addr ? PS_OK : PS_NOSYM);
|
||||||
|
}
|
||||||
|
|
||||||
|
// read "size" bytes info "buf" from address "addr"
|
||||||
|
ps_err_e ps_pread(struct ps_prochandle *ph, psaddr_t addr,
|
||||||
|
void *buf, size_t size) {
|
||||||
|
return ph->ops->p_pread(ph, (uintptr_t) addr, buf, size)? PS_OK: PS_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// write "size" bytes of data to debuggee at address "addr"
|
||||||
|
ps_err_e ps_pwrite(struct ps_prochandle *ph, psaddr_t addr,
|
||||||
|
const void *buf, size_t size) {
|
||||||
|
return ph->ops->p_pwrite(ph, (uintptr_t)addr, buf, size)? PS_OK: PS_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fill in ptrace_lwpinfo for lid
|
||||||
|
ps_err_e ps_linfo(struct ps_prochandle *ph, lwpid_t lwp_id, void *linfo) {
|
||||||
|
return ph->ops->get_lwp_info(ph, lwp_id, linfo)? PS_OK: PS_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// needed for when libthread_db is compiled with TD_DEBUG defined
|
||||||
|
void
|
||||||
|
ps_plog (const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list alist;
|
||||||
|
|
||||||
|
va_start(alist, format);
|
||||||
|
vfprintf(stderr, format, alist);
|
||||||
|
va_end(alist);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Functions below this point are not yet implemented. They are here only
|
||||||
|
// to make the linker happy.
|
||||||
|
|
||||||
|
ps_err_e ps_lsetfpregs(struct ps_prochandle *ph, lwpid_t lid, const prfpregset_t *fpregs) {
|
||||||
|
print_debug("ps_lsetfpregs not implemented\n");
|
||||||
|
return PS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ps_err_e ps_lsetregs(struct ps_prochandle *ph, lwpid_t lid, const prgregset_t gregset) {
|
||||||
|
print_debug("ps_lsetregs not implemented\n");
|
||||||
|
return PS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ps_err_e ps_lgetfpregs(struct ps_prochandle *ph, lwpid_t lid, prfpregset_t *fpregs) {
|
||||||
|
print_debug("ps_lgetfpregs not implemented\n");
|
||||||
|
return PS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ps_err_e ps_lgetregs(struct ps_prochandle *ph, lwpid_t lid, prgregset_t gregset) {
|
||||||
|
print_debug("ps_lgetfpregs not implemented\n");
|
||||||
|
return PS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ps_err_e ps_lstop(struct ps_prochandle *ph, lwpid_t lid) {
|
||||||
|
print_debug("ps_lstop not implemented\n");
|
||||||
|
return PS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ps_err_e ps_pcontinue(struct ps_prochandle *ph) {
|
||||||
|
print_debug("ps_pcontinue not implemented\n");
|
||||||
|
return PS_OK;
|
||||||
|
}
|
||||||
130
hotspot/agent/src/os/bsd/libproc_impl.h
Normal file
130
hotspot/agent/src/os/bsd/libproc_impl.h
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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 _LIBPROC_IMPL_H_
|
||||||
|
#define _LIBPROC_IMPL_H_
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include "libproc.h"
|
||||||
|
#include "symtab.h"
|
||||||
|
|
||||||
|
// data structures in this file mimic those of Solaris 8.0 - libproc's Pcontrol.h
|
||||||
|
|
||||||
|
#define BUF_SIZE (PATH_MAX + NAME_MAX + 1)
|
||||||
|
|
||||||
|
// list of shared objects
|
||||||
|
typedef struct lib_info {
|
||||||
|
char name[BUF_SIZE];
|
||||||
|
uintptr_t base;
|
||||||
|
struct symtab* symtab;
|
||||||
|
int fd; // file descriptor for lib
|
||||||
|
struct lib_info* next;
|
||||||
|
} lib_info;
|
||||||
|
|
||||||
|
// list of threads
|
||||||
|
typedef struct thread_info {
|
||||||
|
lwpid_t lwp_id;
|
||||||
|
pthread_t pthread_id; // not used cores, always -1
|
||||||
|
struct reg regs; // not for process, core uses for caching regset
|
||||||
|
struct thread_info* next;
|
||||||
|
} thread_info;
|
||||||
|
|
||||||
|
// list of virtual memory maps
|
||||||
|
typedef struct map_info {
|
||||||
|
int fd; // file descriptor
|
||||||
|
off_t offset; // file offset of this mapping
|
||||||
|
uintptr_t vaddr; // starting virtual address
|
||||||
|
size_t memsz; // size of the mapping
|
||||||
|
struct map_info* next;
|
||||||
|
} map_info;
|
||||||
|
|
||||||
|
// vtable for ps_prochandle
|
||||||
|
typedef struct ps_prochandle_ops {
|
||||||
|
// "derived class" clean-up
|
||||||
|
void (*release)(struct ps_prochandle* ph);
|
||||||
|
// read from debuggee
|
||||||
|
bool (*p_pread)(struct ps_prochandle *ph,
|
||||||
|
uintptr_t addr, char *buf, size_t size);
|
||||||
|
// write into debuggee
|
||||||
|
bool (*p_pwrite)(struct ps_prochandle *ph,
|
||||||
|
uintptr_t addr, const char *buf , size_t size);
|
||||||
|
// get integer regset of a thread
|
||||||
|
bool (*get_lwp_regs)(struct ps_prochandle* ph, lwpid_t lwp_id, struct reg* regs);
|
||||||
|
// get info on thread
|
||||||
|
bool (*get_lwp_info)(struct ps_prochandle *ph, lwpid_t lwp_id, void *linfo);
|
||||||
|
} ps_prochandle_ops;
|
||||||
|
|
||||||
|
// the ps_prochandle
|
||||||
|
|
||||||
|
struct core_data {
|
||||||
|
int core_fd; // file descriptor of core file
|
||||||
|
int exec_fd; // file descriptor of exec file
|
||||||
|
int interp_fd; // file descriptor of interpreter (ld-elf.so.1)
|
||||||
|
// part of the class sharing workaround
|
||||||
|
int classes_jsa_fd; // file descriptor of class share archive
|
||||||
|
uintptr_t dynamic_addr; // address of dynamic section of a.out
|
||||||
|
uintptr_t ld_base_addr; // base address of ld.so
|
||||||
|
size_t num_maps; // number of maps.
|
||||||
|
map_info* maps; // maps in a linked list
|
||||||
|
// part of the class sharing workaround
|
||||||
|
map_info* class_share_maps;// class share maps in a linked list
|
||||||
|
map_info** map_array; // sorted (by vaddr) array of map_info pointers
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ps_prochandle {
|
||||||
|
ps_prochandle_ops* ops; // vtable ptr
|
||||||
|
pid_t pid;
|
||||||
|
int num_libs;
|
||||||
|
lib_info* libs; // head of lib list
|
||||||
|
lib_info* lib_tail; // tail of lib list - to append at the end
|
||||||
|
int num_threads;
|
||||||
|
thread_info* threads; // head of thread list
|
||||||
|
struct core_data* core; // data only used for core dumps, NULL for process
|
||||||
|
};
|
||||||
|
|
||||||
|
int pathmap_open(const char* name);
|
||||||
|
|
||||||
|
void print_debug(const char* format,...);
|
||||||
|
bool is_debug();
|
||||||
|
|
||||||
|
typedef bool (*thread_info_callback)(struct ps_prochandle* ph, pthread_t pid, lwpid_t lwpid);
|
||||||
|
|
||||||
|
// reads thread info using libthread_db and calls above callback for each thread
|
||||||
|
bool read_thread_info(struct ps_prochandle* ph, thread_info_callback cb);
|
||||||
|
|
||||||
|
// adds a new shared object to lib list, returns NULL on failure
|
||||||
|
lib_info* add_lib_info(struct ps_prochandle* ph, const char* libname, uintptr_t base);
|
||||||
|
|
||||||
|
// adds a new shared object to lib list, supply open lib file descriptor as well
|
||||||
|
lib_info* add_lib_info_fd(struct ps_prochandle* ph, const char* libname, int fd,
|
||||||
|
uintptr_t base);
|
||||||
|
|
||||||
|
// adds a new thread to threads list, returns NULL on failure
|
||||||
|
thread_info* add_thread_info(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id);
|
||||||
|
|
||||||
|
// a test for ELF signature without using libelf
|
||||||
|
bool is_elf_file(int fd);
|
||||||
|
|
||||||
|
#endif //_LIBPROC_IMPL_H_
|
||||||
66
hotspot/agent/src/os/bsd/mapfile
Normal file
66
hotspot/agent/src/os/bsd/mapfile
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (c) 2003, 2006, 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.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
# Define public interface.
|
||||||
|
|
||||||
|
SUNWprivate_1.1 {
|
||||||
|
global:
|
||||||
|
|
||||||
|
# native methods of BsdDebuggerLocal class
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_init0;
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getAddressSize;
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__I;
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__Ljava_lang_String_2Ljava_lang_String_2;
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_detach0;
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByName0;
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByAddress0;
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_readBytesFromProcess0;
|
||||||
|
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getThreadIntegerRegisterSet0;
|
||||||
|
|
||||||
|
# proc_service.h functions - to be used by libthread_db
|
||||||
|
ps_getpid;
|
||||||
|
ps_pglobal_lookup;
|
||||||
|
ps_pread;
|
||||||
|
ps_pwrite;
|
||||||
|
ps_lsetfpregs;
|
||||||
|
ps_lsetregs;
|
||||||
|
ps_lgetfpregs;
|
||||||
|
ps_lgetregs;
|
||||||
|
ps_lcontinue;
|
||||||
|
ps_lgetxmmregs;
|
||||||
|
ps_lsetxmmregs;
|
||||||
|
ps_lstop;
|
||||||
|
ps_linfo;
|
||||||
|
|
||||||
|
# used by attach test program
|
||||||
|
init_libproc;
|
||||||
|
Pgrab;
|
||||||
|
Pgrab_core;
|
||||||
|
Prelease;
|
||||||
|
|
||||||
|
local:
|
||||||
|
*;
|
||||||
|
};
|
||||||
1023
hotspot/agent/src/os/bsd/ps_core.c
Normal file
1023
hotspot/agent/src/os/bsd/ps_core.c
Normal file
File diff suppressed because it is too large
Load Diff
444
hotspot/agent/src/os/bsd/ps_proc.c
Normal file
444
hotspot/agent/src/os/bsd/ps_proc.c
Normal file
@@ -0,0 +1,444 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <sys/ptrace.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/user.h>
|
||||||
|
#include <elf.h>
|
||||||
|
#include <sys/elf_common.h>
|
||||||
|
#include <sys/link_elf.h>
|
||||||
|
#include <libutil.h>
|
||||||
|
#include "libproc_impl.h"
|
||||||
|
#include "elfmacros.h"
|
||||||
|
|
||||||
|
// This file has the libproc implementation specific to live process
|
||||||
|
// For core files, refer to ps_core.c
|
||||||
|
|
||||||
|
static inline uintptr_t align(uintptr_t ptr, size_t size) {
|
||||||
|
return (ptr & ~(size - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------
|
||||||
|
// ptrace functions
|
||||||
|
// ---------------------------------------------
|
||||||
|
|
||||||
|
// read "size" bytes of data from "addr" within the target process.
|
||||||
|
// unlike the standard ptrace() function, process_read_data() can handle
|
||||||
|
// unaligned address - alignment check, if required, should be done
|
||||||
|
// before calling process_read_data.
|
||||||
|
|
||||||
|
static bool process_read_data(struct ps_prochandle* ph, uintptr_t addr, char *buf, size_t size) {
|
||||||
|
int rslt;
|
||||||
|
size_t i, words;
|
||||||
|
uintptr_t end_addr = addr + size;
|
||||||
|
uintptr_t aligned_addr = align(addr, sizeof(int));
|
||||||
|
|
||||||
|
if (aligned_addr != addr) {
|
||||||
|
char *ptr = (char *)&rslt;
|
||||||
|
errno = 0;
|
||||||
|
rslt = ptrace(PT_READ_D, ph->pid, (caddr_t) aligned_addr, 0);
|
||||||
|
if (errno) {
|
||||||
|
print_debug("ptrace(PT_READ_D, ..) failed for %d bytes @ %lx\n", size, addr);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (; aligned_addr != addr; aligned_addr++, ptr++);
|
||||||
|
for (; ((intptr_t)aligned_addr % sizeof(int)) && aligned_addr < end_addr;
|
||||||
|
aligned_addr++)
|
||||||
|
*(buf++) = *(ptr++);
|
||||||
|
}
|
||||||
|
|
||||||
|
words = (end_addr - aligned_addr) / sizeof(int);
|
||||||
|
|
||||||
|
// assert((intptr_t)aligned_addr % sizeof(int) == 0);
|
||||||
|
for (i = 0; i < words; i++) {
|
||||||
|
errno = 0;
|
||||||
|
rslt = ptrace(PT_READ_D, ph->pid, (caddr_t) aligned_addr, 0);
|
||||||
|
if (errno) {
|
||||||
|
print_debug("ptrace(PT_READ_D, ..) failed for %d bytes @ %lx\n", size, addr);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*(int *)buf = rslt;
|
||||||
|
buf += sizeof(int);
|
||||||
|
aligned_addr += sizeof(int);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aligned_addr != end_addr) {
|
||||||
|
char *ptr = (char *)&rslt;
|
||||||
|
errno = 0;
|
||||||
|
rslt = ptrace(PT_READ_D, ph->pid, (caddr_t) aligned_addr, 0);
|
||||||
|
if (errno) {
|
||||||
|
print_debug("ptrace(PT_READ_D, ..) failed for %d bytes @ %lx\n", size, addr);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (; aligned_addr != end_addr; aligned_addr++)
|
||||||
|
*(buf++) = *(ptr++);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// null implementation for write
|
||||||
|
static bool process_write_data(struct ps_prochandle* ph,
|
||||||
|
uintptr_t addr, const char *buf , size_t size) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// "user" should be a pointer to a reg
|
||||||
|
static bool process_get_lwp_regs(struct ps_prochandle* ph, pid_t pid, struct reg *user) {
|
||||||
|
// we have already attached to all thread 'pid's, just use ptrace call
|
||||||
|
// to get regset now. Note that we don't cache regset upfront for processes.
|
||||||
|
if (ptrace(PT_GETREGS, pid, (caddr_t) user, 0) < 0) {
|
||||||
|
print_debug("ptrace(PTRACE_GETREGS, ...) failed for lwp %d\n", pid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fill in ptrace_lwpinfo for lid
|
||||||
|
static bool process_get_lwp_info(struct ps_prochandle *ph, lwpid_t lwp_id, void *linfo) {
|
||||||
|
errno = 0;
|
||||||
|
ptrace(PT_LWPINFO, lwp_id, linfo, sizeof(struct ptrace_lwpinfo));
|
||||||
|
|
||||||
|
return (errno == 0)? true: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// attach to a process/thread specified by "pid"
|
||||||
|
static bool ptrace_attach(pid_t pid) {
|
||||||
|
if (ptrace(PT_ATTACH, pid, NULL, 0) < 0) {
|
||||||
|
print_debug("ptrace(PTRACE_ATTACH, ..) failed for %d\n", pid);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
int ret;
|
||||||
|
int status;
|
||||||
|
do {
|
||||||
|
// Wait for debuggee to stop.
|
||||||
|
ret = waitpid(pid, &status, 0);
|
||||||
|
if (ret >= 0) {
|
||||||
|
if (WIFSTOPPED(status)) {
|
||||||
|
// Debuggee stopped.
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
print_debug("waitpid(): Child process exited/terminated (status = 0x%x)\n", status);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (errno) {
|
||||||
|
case EINTR:
|
||||||
|
continue;
|
||||||
|
break;
|
||||||
|
case ECHILD:
|
||||||
|
print_debug("waitpid() failed. Child process pid (%d) does not exist \n", pid);
|
||||||
|
break;
|
||||||
|
case EINVAL:
|
||||||
|
print_debug("waitpid() failed. Invalid options argument.\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
print_debug("waitpid() failed. Unexpected error %d\n",errno);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} while(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
// functions for obtaining library information
|
||||||
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
// callback for read_thread_info
|
||||||
|
static bool add_new_thread(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id) {
|
||||||
|
return add_thread_info(ph, pthread_id, lwp_id) != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__) && __FreeBSD_version < 701000
|
||||||
|
/*
|
||||||
|
* TEXT_START_ADDR from binutils/ld/emulparams/<arch_spec>.sh
|
||||||
|
* Not the most robust but good enough.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(amd64) || defined(x86_64)
|
||||||
|
#define TEXT_START_ADDR 0x400000
|
||||||
|
#elif defined(i386)
|
||||||
|
#define TEXT_START_ADDR 0x8048000
|
||||||
|
#else
|
||||||
|
#error TEXT_START_ADDR not defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BUF_SIZE (PATH_MAX + NAME_MAX + 1)
|
||||||
|
|
||||||
|
uintptr_t linkmap_addr(struct ps_prochandle *ph) {
|
||||||
|
uintptr_t ehdr_addr, phdr_addr, dyn_addr, dmap_addr, lmap_addr;
|
||||||
|
ELF_EHDR ehdr;
|
||||||
|
ELF_PHDR *phdrs, *phdr;
|
||||||
|
ELF_DYN *dyns, *dyn;
|
||||||
|
struct r_debug dmap;
|
||||||
|
unsigned long hdrs_size;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
/* read ELF_EHDR at TEXT_START_ADDR and validate */
|
||||||
|
|
||||||
|
ehdr_addr = (uintptr_t)TEXT_START_ADDR;
|
||||||
|
|
||||||
|
if (process_read_data(ph, ehdr_addr, (char *)&ehdr, sizeof(ehdr)) != true) {
|
||||||
|
print_debug("process_read_data failed for ehdr_addr %p\n", ehdr_addr);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_ELF(ehdr) ||
|
||||||
|
ehdr.e_ident[EI_CLASS] != ELF_TARG_CLASS ||
|
||||||
|
ehdr.e_ident[EI_DATA] != ELF_TARG_DATA ||
|
||||||
|
ehdr.e_ident[EI_VERSION] != EV_CURRENT ||
|
||||||
|
ehdr.e_phentsize != sizeof(ELF_PHDR) ||
|
||||||
|
ehdr.e_version != ELF_TARG_VER ||
|
||||||
|
ehdr.e_machine != ELF_TARG_MACH) {
|
||||||
|
print_debug("not an ELF_EHDR at %p\n", ehdr_addr);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* allocate space for all ELF_PHDR's and read */
|
||||||
|
|
||||||
|
phdr_addr = ehdr_addr + ehdr.e_phoff;
|
||||||
|
hdrs_size = ehdr.e_phnum * sizeof(ELF_PHDR);
|
||||||
|
|
||||||
|
if ((phdrs = malloc(hdrs_size)) == NULL)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (process_read_data(ph, phdr_addr, (char *)phdrs, hdrs_size) != true) {
|
||||||
|
print_debug("process_read_data failed for phdr_addr %p\n", phdr_addr);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find PT_DYNAMIC section */
|
||||||
|
|
||||||
|
for (i = 0, phdr = phdrs; i < ehdr.e_phnum; i++, phdr++) {
|
||||||
|
if (phdr->p_type == PT_DYNAMIC)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i >= ehdr.e_phnum) {
|
||||||
|
print_debug("PT_DYNAMIC section not found!\n");
|
||||||
|
free(phdrs);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* allocate space and read in ELF_DYN headers */
|
||||||
|
|
||||||
|
dyn_addr = phdr->p_vaddr;
|
||||||
|
hdrs_size = phdr->p_memsz;
|
||||||
|
free(phdrs);
|
||||||
|
|
||||||
|
if ((dyns = malloc(hdrs_size)) == NULL)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (process_read_data(ph, dyn_addr, (char *)dyns, hdrs_size) != true) {
|
||||||
|
print_debug("process_read_data failed for dyn_addr %p\n", dyn_addr);
|
||||||
|
free(dyns);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find DT_DEBUG */
|
||||||
|
|
||||||
|
dyn = dyns;
|
||||||
|
while (dyn->d_tag != DT_DEBUG && dyn->d_tag != DT_NULL) {
|
||||||
|
dyn++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dyn->d_tag != DT_DEBUG) {
|
||||||
|
print_debug("failed to find DT_DEBUG\n");
|
||||||
|
free(dyns);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* read struct r_debug into dmap */
|
||||||
|
|
||||||
|
dmap_addr = (uintptr_t)dyn->d_un.d_ptr;
|
||||||
|
free(dyns);
|
||||||
|
|
||||||
|
if (process_read_data(ph, dmap_addr, (char *)&dmap, sizeof(dmap)) != true) {
|
||||||
|
print_debug("process_read_data failed for dmap_addr %p\n", dmap_addr);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
lmap_addr = (uintptr_t)dmap.r_map;
|
||||||
|
|
||||||
|
return (lmap_addr);
|
||||||
|
}
|
||||||
|
#endif // __FreeBSD__ && __FreeBSD_version < 701000
|
||||||
|
|
||||||
|
static bool read_lib_info(struct ps_prochandle* ph) {
|
||||||
|
#if defined(__FreeBSD__) && __FreeBSD_version >= 701000
|
||||||
|
struct kinfo_vmentry *freep, *kve;
|
||||||
|
int i, cnt;
|
||||||
|
|
||||||
|
freep = kinfo_getvmmap(ph->pid, &cnt);
|
||||||
|
if (freep == NULL) {
|
||||||
|
print_debug("can't get vm map for pid\n", ph->pid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < cnt; i++) {
|
||||||
|
kve = &freep[i];
|
||||||
|
if ((kve->kve_flags & KVME_FLAG_COW) &&
|
||||||
|
kve->kve_path != NULL &&
|
||||||
|
strlen(kve->kve_path) > 0) {
|
||||||
|
|
||||||
|
if (find_lib(ph, kve->kve_path) == false) {
|
||||||
|
lib_info* lib;
|
||||||
|
if ((lib = add_lib_info(ph, kve->kve_path,
|
||||||
|
(uintptr_t) kve->kve_start)) == NULL)
|
||||||
|
continue; // ignore, add_lib_info prints error
|
||||||
|
|
||||||
|
// we don't need to keep the library open, symtab is already
|
||||||
|
// built. Only for core dump we need to keep the fd open.
|
||||||
|
close(lib->fd);
|
||||||
|
lib->fd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(freep);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
char *l_name;
|
||||||
|
struct link_map *lmap;
|
||||||
|
uintptr_t lmap_addr;
|
||||||
|
|
||||||
|
if ((l_name = malloc(BUF_SIZE)) == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ((lmap = malloc(sizeof(*lmap))) == NULL) {
|
||||||
|
free(l_name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
lmap_addr = linkmap_addr(ph);
|
||||||
|
|
||||||
|
if (lmap_addr == 0) {
|
||||||
|
free(l_name);
|
||||||
|
free(lmap);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (process_read_data(ph, lmap_addr, (char *)lmap, sizeof(*lmap)) != true) {
|
||||||
|
print_debug("process_read_data failed for lmap_addr %p\n", lmap_addr);
|
||||||
|
free (l_name);
|
||||||
|
free (lmap);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process_read_data(ph, (uintptr_t)lmap->l_name, l_name,
|
||||||
|
BUF_SIZE) != true) {
|
||||||
|
print_debug("process_read_data failed for lmap->l_name %p\n",
|
||||||
|
lmap->l_name);
|
||||||
|
free (l_name);
|
||||||
|
free (lmap);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (find_lib(ph, l_name) == false) {
|
||||||
|
lib_info* lib;
|
||||||
|
if ((lib = add_lib_info(ph, l_name,
|
||||||
|
(uintptr_t) lmap->l_addr)) == NULL)
|
||||||
|
continue; // ignore, add_lib_info prints error
|
||||||
|
|
||||||
|
// we don't need to keep the library open, symtab is already
|
||||||
|
// built. Only for core dump we need to keep the fd open.
|
||||||
|
close(lib->fd);
|
||||||
|
lib->fd = -1;
|
||||||
|
}
|
||||||
|
lmap_addr = (uintptr_t)lmap->l_next;
|
||||||
|
} while (lmap->l_next != NULL);
|
||||||
|
|
||||||
|
free (l_name);
|
||||||
|
free (lmap);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// detach a given pid
|
||||||
|
static bool ptrace_detach(pid_t pid) {
|
||||||
|
if (pid && ptrace(PT_DETACH, pid, (caddr_t)1, 0) < 0) {
|
||||||
|
print_debug("ptrace(PTRACE_DETACH, ..) failed for %d\n", pid);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void process_cleanup(struct ps_prochandle* ph) {
|
||||||
|
ptrace_detach(ph->pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ps_prochandle_ops process_ops = {
|
||||||
|
.release= process_cleanup,
|
||||||
|
.p_pread= process_read_data,
|
||||||
|
.p_pwrite= process_write_data,
|
||||||
|
.get_lwp_regs= process_get_lwp_regs,
|
||||||
|
.get_lwp_info= process_get_lwp_info
|
||||||
|
};
|
||||||
|
|
||||||
|
// attach to the process. One and only one exposed stuff
|
||||||
|
struct ps_prochandle* Pgrab(pid_t pid) {
|
||||||
|
struct ps_prochandle* ph = NULL;
|
||||||
|
thread_info* thr = NULL;
|
||||||
|
|
||||||
|
if ( (ph = (struct ps_prochandle*) calloc(1, sizeof(struct ps_prochandle))) == NULL) {
|
||||||
|
print_debug("can't allocate memory for ps_prochandle\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ptrace_attach(pid) != true) {
|
||||||
|
free(ph);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize ps_prochandle
|
||||||
|
ph->pid = pid;
|
||||||
|
|
||||||
|
// initialize vtable
|
||||||
|
ph->ops = &process_ops;
|
||||||
|
|
||||||
|
// read library info and symbol tables, must do this before attaching threads,
|
||||||
|
// as the symbols in the pthread library will be used to figure out
|
||||||
|
// the list of threads within the same process.
|
||||||
|
if (read_lib_info(ph) != true) {
|
||||||
|
ptrace_detach(pid);
|
||||||
|
free(ph);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read thread info
|
||||||
|
read_thread_info(ph, add_new_thread);
|
||||||
|
|
||||||
|
return ph;
|
||||||
|
}
|
||||||
126
hotspot/agent/src/os/bsd/salibelf.c
Normal file
126
hotspot/agent/src/os/bsd/salibelf.c
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003, 2006, 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.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "salibelf.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
extern void print_debug(const char*,...);
|
||||||
|
|
||||||
|
// ELF file parsing helpers. Note that we do *not* use libelf here.
|
||||||
|
int read_elf_header(int fd, ELF_EHDR* ehdr) {
|
||||||
|
if (pread(fd, ehdr, sizeof (ELF_EHDR), 0) != sizeof (ELF_EHDR) ||
|
||||||
|
memcmp(&ehdr->e_ident[EI_MAG0], ELFMAG, SELFMAG) != 0 ||
|
||||||
|
ehdr->e_version != EV_CURRENT) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_elf_file(int fd) {
|
||||||
|
ELF_EHDR ehdr;
|
||||||
|
return read_elf_header(fd, &ehdr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// read program header table of an ELF file
|
||||||
|
ELF_PHDR* read_program_header_table(int fd, ELF_EHDR* hdr) {
|
||||||
|
ELF_PHDR* phbuf = 0;
|
||||||
|
// allocate memory for program header table
|
||||||
|
size_t nbytes = hdr->e_phnum * hdr->e_phentsize;
|
||||||
|
|
||||||
|
if ((phbuf = (ELF_PHDR*) malloc(nbytes)) == NULL) {
|
||||||
|
print_debug("can't allocate memory for reading program header table\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pread(fd, phbuf, nbytes, hdr->e_phoff) != nbytes) {
|
||||||
|
print_debug("ELF file is truncated! can't read program header table\n");
|
||||||
|
free(phbuf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return phbuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read section header table of an ELF file
|
||||||
|
ELF_SHDR* read_section_header_table(int fd, ELF_EHDR* hdr) {
|
||||||
|
ELF_SHDR* shbuf = 0;
|
||||||
|
// allocate memory for section header table
|
||||||
|
size_t nbytes = hdr->e_shnum * hdr->e_shentsize;
|
||||||
|
|
||||||
|
if ((shbuf = (ELF_SHDR*) malloc(nbytes)) == NULL) {
|
||||||
|
print_debug("can't allocate memory for reading section header table\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pread(fd, shbuf, nbytes, hdr->e_shoff) != nbytes) {
|
||||||
|
print_debug("ELF file is truncated! can't read section header table\n");
|
||||||
|
free(shbuf);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return shbuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read a particular section's data
|
||||||
|
void* read_section_data(int fd, ELF_EHDR* ehdr, ELF_SHDR* shdr) {
|
||||||
|
void *buf = NULL;
|
||||||
|
if (shdr->sh_type == SHT_NOBITS || shdr->sh_size == 0) {
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
if ((buf = calloc(shdr->sh_size, 1)) == NULL) {
|
||||||
|
print_debug("can't allocate memory for reading section data\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (pread(fd, buf, shdr->sh_size, shdr->sh_offset) != shdr->sh_size) {
|
||||||
|
free(buf);
|
||||||
|
print_debug("section data read failed\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
uintptr_t find_base_address(int fd, ELF_EHDR* ehdr) {
|
||||||
|
uintptr_t baseaddr = (uintptr_t)-1;
|
||||||
|
int cnt;
|
||||||
|
ELF_PHDR *phbuf, *phdr;
|
||||||
|
|
||||||
|
// read program header table
|
||||||
|
if ((phbuf = read_program_header_table(fd, ehdr)) == NULL) {
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the base address of a shared object is the lowest vaddr of
|
||||||
|
// its loadable segments (PT_LOAD)
|
||||||
|
for (phdr = phbuf, cnt = 0; cnt < ehdr->e_phnum; cnt++, phdr++) {
|
||||||
|
if (phdr->p_type == PT_LOAD && phdr->p_vaddr < baseaddr) {
|
||||||
|
baseaddr = phdr->p_vaddr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
quit:
|
||||||
|
if (phbuf) free(phbuf);
|
||||||
|
return baseaddr;
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -22,54 +22,31 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "nt4internals.hpp"
|
#ifndef _SALIBELF_H_
|
||||||
#include <stdio.h>
|
#define _SALIBELF_H_
|
||||||
#include <stdlib.h>
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
namespace NT4 {
|
#include <elf.h>
|
||||||
|
#include "elfmacros.h"
|
||||||
|
#include "libproc_impl.h"
|
||||||
|
|
||||||
static HMODULE ntDLL = NULL;
|
// read ELF file header.
|
||||||
|
int read_elf_header(int fd, ELF_EHDR* ehdr);
|
||||||
|
|
||||||
HMODULE loadNTDLL() {
|
// is given file descriptor corresponds to an ELF file?
|
||||||
if (ntDLL == NULL) {
|
bool is_elf_file(int fd);
|
||||||
ntDLL = LoadLibrary("NTDLL.DLL");
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(ntDLL != NULL);
|
// read program header table of an ELF file. caller has to
|
||||||
return ntDLL;
|
// free the result pointer after use. NULL on failure.
|
||||||
}
|
ELF_PHDR* read_program_header_table(int fd, ELF_EHDR* hdr);
|
||||||
|
|
||||||
void unloadNTDLL() {
|
// read section header table of an ELF file. caller has to
|
||||||
if (ntDLL != NULL) {
|
// free the result pointer after use. NULL on failure.
|
||||||
FreeLibrary(ntDLL);
|
ELF_SHDR* read_section_header_table(int fd, ELF_EHDR* hdr);
|
||||||
ntDLL = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace NT4
|
// read a particular section's data. caller has to free the
|
||||||
|
// result pointer after use. NULL on failure.
|
||||||
|
void* read_section_data(int fd, ELF_EHDR* ehdr, ELF_SHDR* shdr);
|
||||||
|
|
||||||
static HMODULE psapiDLL = NULL;
|
// find the base address at which the library wants to load itself
|
||||||
|
uintptr_t find_base_address(int fd, ELF_EHDR* ehdr);
|
||||||
HMODULE
|
#endif /* _SALIBELF_H_ */
|
||||||
loadPSAPIDLL() {
|
|
||||||
if (psapiDLL == NULL) {
|
|
||||||
psapiDLL = LoadLibrary("PSAPI.DLL");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (psapiDLL == NULL) {
|
|
||||||
fprintf(stderr, "Simple Windows Debug Server requires PSAPI.DLL on Windows NT 4.0.\n");
|
|
||||||
fprintf(stderr, "Please install this DLL from the SDK and restart the server.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return psapiDLL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
unloadPSAPIDLL() {
|
|
||||||
if (psapiDLL != NULL) {
|
|
||||||
FreeLibrary(psapiDLL);
|
|
||||||
psapiDLL = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
239
hotspot/agent/src/os/bsd/symtab.c
Normal file
239
hotspot/agent/src/os/bsd/symtab.c
Normal file
@@ -0,0 +1,239 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <search.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <db.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include "symtab.h"
|
||||||
|
#include "salibelf.h"
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// functions for symbol lookups
|
||||||
|
// ----------------------------------------------------
|
||||||
|
|
||||||
|
struct elf_section {
|
||||||
|
ELF_SHDR *c_shdr;
|
||||||
|
void *c_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct elf_symbol {
|
||||||
|
char *name;
|
||||||
|
uintptr_t offset;
|
||||||
|
uintptr_t size;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct symtab {
|
||||||
|
char *strs;
|
||||||
|
size_t num_symbols;
|
||||||
|
struct elf_symbol *symbols;
|
||||||
|
DB* hash_table;
|
||||||
|
} symtab_t;
|
||||||
|
|
||||||
|
// read symbol table from given fd.
|
||||||
|
struct symtab* build_symtab(int fd) {
|
||||||
|
ELF_EHDR ehdr;
|
||||||
|
struct symtab* symtab = NULL;
|
||||||
|
|
||||||
|
// Reading of elf header
|
||||||
|
struct elf_section *scn_cache = NULL;
|
||||||
|
int cnt = 0;
|
||||||
|
ELF_SHDR* shbuf = NULL;
|
||||||
|
ELF_SHDR* cursct = NULL;
|
||||||
|
ELF_PHDR* phbuf = NULL;
|
||||||
|
int symtab_found = 0;
|
||||||
|
int dynsym_found = 0;
|
||||||
|
uint32_t symsection = SHT_SYMTAB;
|
||||||
|
|
||||||
|
uintptr_t baseaddr = (uintptr_t)-1;
|
||||||
|
|
||||||
|
lseek(fd, (off_t)0L, SEEK_SET);
|
||||||
|
if (! read_elf_header(fd, &ehdr)) {
|
||||||
|
// not an elf
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// read ELF header
|
||||||
|
if ((shbuf = read_section_header_table(fd, &ehdr)) == NULL) {
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
|
||||||
|
baseaddr = find_base_address(fd, &ehdr);
|
||||||
|
|
||||||
|
scn_cache = calloc(ehdr.e_shnum, sizeof(*scn_cache));
|
||||||
|
if (scn_cache == NULL) {
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (cursct = shbuf, cnt = 0; cnt < ehdr.e_shnum; cnt++) {
|
||||||
|
scn_cache[cnt].c_shdr = cursct;
|
||||||
|
if (cursct->sh_type == SHT_SYMTAB ||
|
||||||
|
cursct->sh_type == SHT_STRTAB ||
|
||||||
|
cursct->sh_type == SHT_DYNSYM) {
|
||||||
|
if ( (scn_cache[cnt].c_data = read_section_data(fd, &ehdr, cursct)) == NULL) {
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cursct->sh_type == SHT_SYMTAB)
|
||||||
|
symtab_found++;
|
||||||
|
|
||||||
|
if (cursct->sh_type == SHT_DYNSYM)
|
||||||
|
dynsym_found++;
|
||||||
|
|
||||||
|
cursct++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!symtab_found && dynsym_found)
|
||||||
|
symsection = SHT_DYNSYM;
|
||||||
|
|
||||||
|
for (cnt = 1; cnt < ehdr.e_shnum; cnt++) {
|
||||||
|
ELF_SHDR *shdr = scn_cache[cnt].c_shdr;
|
||||||
|
|
||||||
|
if (shdr->sh_type == symsection) {
|
||||||
|
ELF_SYM *syms;
|
||||||
|
int j, n, rslt;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
// FIXME: there could be multiple data buffers associated with the
|
||||||
|
// same ELF section. Here we can handle only one buffer. See man page
|
||||||
|
// for elf_getdata on Solaris.
|
||||||
|
|
||||||
|
// guarantee(symtab == NULL, "multiple symtab");
|
||||||
|
symtab = calloc(1, sizeof(*symtab));
|
||||||
|
if (symtab == NULL) {
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
// the symbol table
|
||||||
|
syms = (ELF_SYM *)scn_cache[cnt].c_data;
|
||||||
|
|
||||||
|
// number of symbols
|
||||||
|
n = shdr->sh_size / shdr->sh_entsize;
|
||||||
|
|
||||||
|
// create hash table, we use berkeley db to
|
||||||
|
// manipulate the hash table.
|
||||||
|
symtab->hash_table = dbopen(NULL, O_CREAT | O_RDWR, 0600, DB_HASH, NULL);
|
||||||
|
// guarantee(symtab->hash_table, "unexpected failure: dbopen");
|
||||||
|
|
||||||
|
// shdr->sh_link points to the section that contains the actual strings
|
||||||
|
// for symbol names. the st_name field in ELF_SYM is just the
|
||||||
|
// string table index. we make a copy of the string table so the
|
||||||
|
// strings will not be destroyed by elf_end.
|
||||||
|
size = scn_cache[shdr->sh_link].c_shdr->sh_size;
|
||||||
|
symtab->strs = malloc(size);
|
||||||
|
memcpy(symtab->strs, scn_cache[shdr->sh_link].c_data, size);
|
||||||
|
|
||||||
|
// allocate memory for storing symbol offset and size;
|
||||||
|
symtab->num_symbols = n;
|
||||||
|
symtab->symbols = calloc(n , sizeof(*symtab->symbols));
|
||||||
|
|
||||||
|
// copy symbols info our symtab and enter them info the hash table
|
||||||
|
for (j = 0; j < n; j++, syms++) {
|
||||||
|
DBT key, value;
|
||||||
|
char *sym_name = symtab->strs + syms->st_name;
|
||||||
|
|
||||||
|
// skip non-object and non-function symbols
|
||||||
|
int st_type = ELF_ST_TYPE(syms->st_info);
|
||||||
|
if ( st_type != STT_FUNC && st_type != STT_OBJECT)
|
||||||
|
continue;
|
||||||
|
// skip empty strings and undefined symbols
|
||||||
|
if (*sym_name == '\0' || syms->st_shndx == SHN_UNDEF) continue;
|
||||||
|
|
||||||
|
symtab->symbols[j].name = sym_name;
|
||||||
|
symtab->symbols[j].offset = syms->st_value - baseaddr;
|
||||||
|
symtab->symbols[j].size = syms->st_size;
|
||||||
|
|
||||||
|
key.data = sym_name;
|
||||||
|
key.size = strlen(sym_name) + 1;
|
||||||
|
value.data = &(symtab->symbols[j]);
|
||||||
|
value.size = sizeof(void *);
|
||||||
|
(*symtab->hash_table->put)(symtab->hash_table, &key, &value, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
quit:
|
||||||
|
if (shbuf) free(shbuf);
|
||||||
|
if (phbuf) free(phbuf);
|
||||||
|
if (scn_cache) {
|
||||||
|
for (cnt = 0; cnt < ehdr.e_shnum; cnt++) {
|
||||||
|
if (scn_cache[cnt].c_data != NULL) {
|
||||||
|
free(scn_cache[cnt].c_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(scn_cache);
|
||||||
|
}
|
||||||
|
return symtab;
|
||||||
|
}
|
||||||
|
|
||||||
|
void destroy_symtab(struct symtab* symtab) {
|
||||||
|
if (!symtab) return;
|
||||||
|
if (symtab->strs) free(symtab->strs);
|
||||||
|
if (symtab->symbols) free(symtab->symbols);
|
||||||
|
if (symtab->hash_table) {
|
||||||
|
symtab->hash_table->close(symtab->hash_table);
|
||||||
|
}
|
||||||
|
free(symtab);
|
||||||
|
}
|
||||||
|
|
||||||
|
uintptr_t search_symbol(struct symtab* symtab, uintptr_t base,
|
||||||
|
const char *sym_name, int *sym_size) {
|
||||||
|
DBT key, value;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
// library does not have symbol table
|
||||||
|
if (!symtab || !symtab->hash_table)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
key.data = (char*)(uintptr_t)sym_name;
|
||||||
|
key.size = strlen(sym_name) + 1;
|
||||||
|
ret = (*symtab->hash_table->get)(symtab->hash_table, &key, &value, 0);
|
||||||
|
if (ret == 0) {
|
||||||
|
struct elf_symbol *sym = value.data;
|
||||||
|
uintptr_t rslt = (uintptr_t) ((char*)base + sym->offset);
|
||||||
|
if (sym_size) *sym_size = sym->size;
|
||||||
|
return rslt;
|
||||||
|
}
|
||||||
|
|
||||||
|
quit:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* nearest_symbol(struct symtab* symtab, uintptr_t offset,
|
||||||
|
uintptr_t* poffset) {
|
||||||
|
int n = 0;
|
||||||
|
if (!symtab) return NULL;
|
||||||
|
for (; n < symtab->num_symbols; n++) {
|
||||||
|
struct elf_symbol* sym = &(symtab->symbols[n]);
|
||||||
|
if (sym->name != NULL &&
|
||||||
|
offset >= sym->offset && offset < sym->offset + sym->size) {
|
||||||
|
if (poffset) *poffset = (offset - sym->offset);
|
||||||
|
return sym->name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
50
hotspot/agent/src/os/bsd/symtab.h
Normal file
50
hotspot/agent/src/os/bsd/symtab.h
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYMTAB_H_
|
||||||
|
#define _SYMTAB_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// interface to manage ELF symbol tables
|
||||||
|
|
||||||
|
struct symtab;
|
||||||
|
|
||||||
|
// build symbol table for a given ELF file descriptor
|
||||||
|
struct symtab* build_symtab(int fd);
|
||||||
|
|
||||||
|
// destroy the symbol table
|
||||||
|
void destroy_symtab(struct symtab* symtab);
|
||||||
|
|
||||||
|
// search for symbol in the given symbol table. Adds offset
|
||||||
|
// to the base uintptr_t supplied. Returns NULL if not found.
|
||||||
|
uintptr_t search_symbol(struct symtab* symtab, uintptr_t base,
|
||||||
|
const char *sym_name, int *sym_size);
|
||||||
|
|
||||||
|
// look for nearest symbol for a given offset (not address - base
|
||||||
|
// subtraction done by caller
|
||||||
|
const char* nearest_symbol(struct symtab* symtab, uintptr_t offset,
|
||||||
|
uintptr_t* poffset);
|
||||||
|
|
||||||
|
#endif /*_SYMTAB_H_*/
|
||||||
@@ -4,9 +4,7 @@
|
|||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
* published by the Free Software Foundation. Oracle designates this
|
* published by the Free Software Foundation.
|
||||||
* 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
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
@@ -21,27 +19,41 @@
|
|||||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 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
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* questions.
|
* questions.
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
package sun.io;
|
|
||||||
|
|
||||||
import sun.nio.cs.ext.JIS_X_0212_Solaris_Encoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tables and data to convert Unicode to JIS0212_Solaris
|
|
||||||
*
|
*
|
||||||
* @author ConverterGenerator tool
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class CharToByteJIS0212_Solaris extends CharToByteDoubleByte {
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "libproc.h"
|
||||||
|
|
||||||
public String getCharacterEncoding() {
|
int main(int argc, char** argv) {
|
||||||
return "JIS0212_Solaris";
|
struct ps_prochandle* ph;
|
||||||
|
|
||||||
|
init_libproc(true);
|
||||||
|
switch (argc) {
|
||||||
|
case 2: {
|
||||||
|
// process
|
||||||
|
ph = Pgrab(atoi(argv[1]));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharToByteJIS0212_Solaris() {
|
case 3: {
|
||||||
super.index1 = JIS_X_0212_Solaris_Encoder.getIndex1();
|
// core
|
||||||
super.index2 = JIS_X_0212_Solaris_Encoder.getIndex2();
|
ph = Pgrab_core(argv[1], argv[2]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: {
|
||||||
|
fprintf(stderr, "usage %s <pid> or %s <exec file> <core file>\n", argv[0], argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ph) {
|
||||||
|
Prelease(ph);
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
printf("can't connect to debuggee\n");
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -24,9 +24,7 @@
|
|||||||
|
|
||||||
|
|
||||||
all:
|
all:
|
||||||
cd dbx; $(MAKE) all
|
|
||||||
cd proc; $(MAKE) all
|
cd proc; $(MAKE) all
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
cd dbx; $(MAKE) clean
|
|
||||||
cd proc; $(MAKE) clean
|
cd proc; $(MAKE) clean
|
||||||
|
|||||||
@@ -1,91 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2000, 2003, 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.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
# Targets are:
|
|
||||||
# 32bit: Build the 32 bit version in ./32bit
|
|
||||||
# 64bit: Build the 64 bit version in ./64bit
|
|
||||||
# helloWorld: Build the helloWorld test program
|
|
||||||
# all: Build all of the above. This is the default.
|
|
||||||
#
|
|
||||||
# NOTE: This makefile uses IOBuf.cpp, IOBuf.hpp, Buffer.cpp, and
|
|
||||||
# Buffer.hpp from the src/os/win32/agent directory.
|
|
||||||
|
|
||||||
.PHONY: 32bit 64bit
|
|
||||||
|
|
||||||
ARCH_ORIG = $(shell uname -p)
|
|
||||||
|
|
||||||
# C++ := /java/devtools/$(ARCH_ORIG)/SUNWspro/SC6.1/bin/CC
|
|
||||||
|
|
||||||
C++ := CC
|
|
||||||
RM := /usr/bin/rm
|
|
||||||
MKDIRS := /usr/bin/mkdir -p
|
|
||||||
|
|
||||||
|
|
||||||
WIN32_DIR := ../../win32
|
|
||||||
ARCH := $(subst i386,i486,$(ARCH_ORIG))
|
|
||||||
# INCLUDES := -I/net/sparcworks.eng/export/set/sparcworks5/dbx_62_intg/dev/src/dbx -I$(WIN32_DIR)
|
|
||||||
INCLUDES := -I. -I$(WIN32_DIR)
|
|
||||||
CFLAGS_32bit := -xarch=v8
|
|
||||||
CFLAGS_64bit := -xarch=v9
|
|
||||||
CFLAGS := -PIC -xO3 $(INCLUDES)
|
|
||||||
LIBS := -lsocket -lnsl -lrtld_db
|
|
||||||
LDFLAGS := -G
|
|
||||||
|
|
||||||
ifneq "$(ARCH)" "i486"
|
|
||||||
CFLAGS += $(CFLAGS_$(VERSION))
|
|
||||||
LDFLAGS += $(CFLAGS_$(VERSION))
|
|
||||||
endif
|
|
||||||
|
|
||||||
# We use IOBuf.hpp, IOBuf.cpp, Buffer.hpp, and Buffer.cpp from the win32 dir.
|
|
||||||
vpath %.cpp .:$(WIN32_DIR)
|
|
||||||
vpath %.hpp .:$(WIN32_DIR)
|
|
||||||
|
|
||||||
OBJS = $(VERSION)/svc_agent_dbx.o $(VERSION)/IOBuf.o $(VERSION)/Buffer.o
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The default is to make both 32 bit and 64 bit versions.
|
|
||||||
all:: 32bit 64bit
|
|
||||||
|
|
||||||
32bit 64bit::
|
|
||||||
$(MKDIRS) $@
|
|
||||||
$(MAKE) $@/libsvc_agent_dbx.so helloWorld VERSION=$@
|
|
||||||
|
|
||||||
$(VERSION)/IOBuf.o: IOBuf.hpp
|
|
||||||
$(VERSION)/Buffer.o: Buffer.hpp
|
|
||||||
$(VERSION)/svc_agent_dbx.o: svc_agent_dbx.hpp
|
|
||||||
|
|
||||||
$(VERSION)/%.o: %.cpp
|
|
||||||
$(C++) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
$(VERSION)/libsvc_agent_dbx.so:: $(OBJS)
|
|
||||||
$(C++) $(LDFLAGS) -o $(VERSION)/libsvc_agent_dbx.so $(OBJS) $(LIBS)
|
|
||||||
|
|
||||||
# Would be nice to move this into a shared directory
|
|
||||||
helloWorld:: helloWorld.cpp
|
|
||||||
$(C++) -g $< -o $@
|
|
||||||
|
|
||||||
clean::
|
|
||||||
$(RM) -rf 32bit 64bit *.o helloWorld
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
shell_impl.h
|
|
||||||
proc_service_2.h
|
|
||||||
|
|
||||||
The above files are captured from the dbx build environment.
|
|
||||||
Rather then use a -I that points to stuff in .eng domain that
|
|
||||||
may not be accessible in other domains these files are just
|
|
||||||
copied here so local builds in other domains will work.
|
|
||||||
These files rarely change so the fact that we might have to
|
|
||||||
strobe in new ones on rare occasions is no big deal.
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
This import module uses a largely text-based protocol, except for
|
|
||||||
certain bulk data transfer operations. All text is in single-byte
|
|
||||||
US-ASCII.
|
|
||||||
|
|
||||||
Commands understood:
|
|
||||||
|
|
||||||
address_size ::= <int result>
|
|
||||||
|
|
||||||
Returns 32 if attached to 32-bit process, 64 if 64-bit.
|
|
||||||
|
|
||||||
peek_fail_fast <bool arg> ::=
|
|
||||||
|
|
||||||
Indicates whether "peek" requests should "fail fast"; that is, if
|
|
||||||
any of the addresses in the requested range are unmapped, report
|
|
||||||
the entire range as unmapped. This is substantially faster than
|
|
||||||
the alternative, which is to read the entire range byte-by-byte.
|
|
||||||
However, it should only be used when it is guaranteed by the
|
|
||||||
client application that peeks come from at most one page. The
|
|
||||||
default is that peek_fast_fail is not enabled.
|
|
||||||
|
|
||||||
peek <address addr> <unsigned int numBytes> ::=
|
|
||||||
B<binary char success>
|
|
||||||
[<binary unsigned int len> <binary char isMapped> [<binary char data>]...]...
|
|
||||||
|
|
||||||
NOTE that the binary portion of this message is prefixed by the
|
|
||||||
uppercase US-ASCII letter 'B', allowing easier synchronization by
|
|
||||||
clients. There is no data between the 'B' and the rest of the
|
|
||||||
message.
|
|
||||||
|
|
||||||
May only be called once attached. Reads the address space of the
|
|
||||||
target process starting at the given address (see below for format
|
|
||||||
specifications) and extending the given number of bytes. Whether
|
|
||||||
the read succeeded is indicated by a single byte containing a 1 or
|
|
||||||
0 (success or failure). If successful, the return result is given
|
|
||||||
in a sequence of ranges. _len_, the length of each range, is
|
|
||||||
indicated by a 32-bit unsigned integer transmitted with big-endian
|
|
||||||
byte ordering (i.e., most significant byte first). _isMapped_
|
|
||||||
indicates whether the range is mapped or unmapped in the target
|
|
||||||
process's address space, and will contain the value 1 or 0 for
|
|
||||||
mapped or unmapped, respectively. If the range is mapped,
|
|
||||||
_isMapped_ is followed by _data_, containing the raw binary data
|
|
||||||
for the range. The sum of all ranges' lengths is guaranteed to be
|
|
||||||
equivalent to the number of bytes requested.
|
|
||||||
|
|
||||||
poke <address addr> <int numBytes> B[<binary char data>]... ::= <bool result>
|
|
||||||
|
|
||||||
NOTE that the binary portion of this message is prefixed by the
|
|
||||||
uppercase US-ASCII letter 'B', allowing easier synchronization by
|
|
||||||
clients. There is no data between the 'B' and the rest of the
|
|
||||||
message.
|
|
||||||
|
|
||||||
Writes the given data to the target process starting at the given
|
|
||||||
address. Returns 1 on success, 0 on failure (i.e., one or more of
|
|
||||||
target addresses were unmapped).
|
|
||||||
|
|
||||||
mapped <address addr> <int numBytes> ::= <bool result>
|
|
||||||
|
|
||||||
Returns 1 if entire address range [address...address + int arg) is
|
|
||||||
mapped in target process's address space, 0 if not
|
|
||||||
|
|
||||||
lookup <symbol objName> <symbol sym> ::= <address addr>
|
|
||||||
|
|
||||||
First symbol is object name; second is symbol to be looked up.
|
|
||||||
Looks up symbol in target process's symbol table and returns
|
|
||||||
address. Returns NULL (0x0) if symbol is not found.
|
|
||||||
|
|
||||||
thr_gregs <int tid> ::= <int numAddresses> <address...>
|
|
||||||
|
|
||||||
Fetch the "general" (integer) register set for the given thread.
|
|
||||||
Returned as a series of hexidecimal values. NOTE: the meaning of
|
|
||||||
the return value is architecture-dependent. In general it is the
|
|
||||||
contents of the prgregset_t.
|
|
||||||
|
|
||||||
exit ::=
|
|
||||||
|
|
||||||
Exits the serviceability agent dbx module, returning control to
|
|
||||||
the dbx prompt.
|
|
||||||
|
|
||||||
// Data formats and example values:
|
|
||||||
<address> ::= 0x12345678[9ABCDEF0] /* up to 64-bit hex value */
|
|
||||||
<unsigned int> ::= 5 /* up to 32-bit integer number; no leading sign */
|
|
||||||
<bool> ::= 1 /* ASCII '0' or '1' */
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
const char* helloWorldString = "Hello, world!";
|
|
||||||
// Do not change these values without changing TestDebugger.java as well
|
|
||||||
// FIXME: should make these jbyte, jshort, etc...
|
|
||||||
volatile int8_t testByte = 132;
|
|
||||||
volatile int16_t testShort = 27890;
|
|
||||||
volatile int32_t testInt = 1020304050;
|
|
||||||
volatile int64_t testLong = 102030405060708090LL;
|
|
||||||
volatile float testFloat = 35.4F;
|
|
||||||
volatile double testDouble = 1.23456789;
|
|
||||||
|
|
||||||
volatile int helloWorldTrigger = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int, char**) {
|
|
||||||
while (1) {
|
|
||||||
while (helloWorldTrigger == 0) {
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stderr, "%s\n", helloWorldString);
|
|
||||||
fprintf(stderr, "testByte=%d\n", testByte);
|
|
||||||
fprintf(stderr, "testShort=%d\n", testShort);
|
|
||||||
fprintf(stderr, "testInt=%d\n", testInt);
|
|
||||||
fprintf(stderr, "testLong=%d\n", testLong);
|
|
||||||
fprintf(stderr, "testFloat=%d\n", testFloat);
|
|
||||||
fprintf(stderr, "testDouble=%d\n", testDouble);
|
|
||||||
|
|
||||||
while (helloWorldTrigger != 0) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,172 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2002, 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.
|
|
||||||
*
|
|
||||||
* 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 _PROC_SERVICE_2_H
|
|
||||||
#define _PROC_SERVICE_2_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Types, function definitions for the provider of services beyond
|
|
||||||
* proc_service. This interface will be used by import modules like
|
|
||||||
* BAT/prex, NEO debugger etc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
CCR info
|
|
||||||
|
|
||||||
Version history:
|
|
||||||
|
|
||||||
1.0 - Initial CCR release
|
|
||||||
|
|
||||||
1.1 - Changes for GLUE/neo.
|
|
||||||
New entry points ps_svnt_generic() and ps_svc_generic()
|
|
||||||
- New entry point ps_getpid()
|
|
||||||
|
|
||||||
Release information for automatic CCR updates:
|
|
||||||
BEGIN RELEASE NOTES: (signifies what gets put into CCR release notes)
|
|
||||||
1.2 - Changes to support Solaris 2.7
|
|
||||||
|
|
||||||
END RELEASE NOTES: (signifies what gets put into CCR release notes)
|
|
||||||
|
|
||||||
Following is used for CCR version number:
|
|
||||||
|
|
||||||
#define CCR_PROC_SERVICE_2_VERSION 1.2
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <proc_service.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct ps_loadobj {
|
|
||||||
int objfd; /* fd of the load object or executable
|
|
||||||
* -1 implies its not available.
|
|
||||||
* This file decriptor is live only during the
|
|
||||||
* particular call to ps_iter_f(). If you
|
|
||||||
* need it beyond that you need to dup() it.
|
|
||||||
*/
|
|
||||||
psaddr_t
|
|
||||||
text_base; /* address where text of loadobj was mapped */
|
|
||||||
psaddr_t
|
|
||||||
data_base; /* address where data of loadobj was mapped */
|
|
||||||
const char *objname; /* loadobj name */
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef int ps_iter_f(const struct ps_prochandle *, const struct ps_loadobj *,
|
|
||||||
void *cd);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the ps_prochandle for the current process under focus. Returns
|
|
||||||
* NULL if there is none.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const struct ps_prochandle *
|
|
||||||
ps_get_prochandle(void);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the ps_prochandle for the current process(allows core files to
|
|
||||||
* be specified) under focus. Returns NULL if there is none.
|
|
||||||
*/
|
|
||||||
const struct ps_prochandle *
|
|
||||||
ps_get_prochandle2(int cores_too);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the pid of the process referred to by the ps_prochandle.
|
|
||||||
*
|
|
||||||
* 0 is returned in case the ps_prochandle is not valid or refers to dead
|
|
||||||
* process.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
pid_t
|
|
||||||
ps_getpid(const struct ps_prochandle *);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Iteration function that iterates over all load objects *and the
|
|
||||||
* executable*
|
|
||||||
*
|
|
||||||
* If the callback routine returns:
|
|
||||||
* 0 - continue processing link objects
|
|
||||||
* non zero - stop calling the callback function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
ps_err_e
|
|
||||||
ps_loadobj_iter(const struct ps_prochandle *, ps_iter_f *, void *clnt_data);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Address => function name mapping
|
|
||||||
*
|
|
||||||
* Given an address, returns a pointer to the function's
|
|
||||||
* linker name (null terminated).
|
|
||||||
*/
|
|
||||||
|
|
||||||
ps_err_e
|
|
||||||
ps_find_fun_name(const struct ps_prochandle *, psaddr_t addr,
|
|
||||||
const char **name);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Interface to LD_PRELOAD. LD_PRELOAD given library across the
|
|
||||||
* program 'exec'.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Append/Prepend the 'lib' (has to be library name as understood by LD_PRELOAD)
|
|
||||||
* to the LD_PRELOAD variable setting to be used by the debugee
|
|
||||||
* Returns a cookie (in id).
|
|
||||||
*/
|
|
||||||
ps_err_e
|
|
||||||
ps_ld_preload_append(const char *lib, int *id);
|
|
||||||
ps_err_e
|
|
||||||
ps_ld_preload_prepend(const char *lib, int *id);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove the library associated with 'id' from the LD_PRELOAD setting.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
ps_err_e
|
|
||||||
ps_ld_preload_remove(int id);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The following are C++ only interfaces
|
|
||||||
*/
|
|
||||||
#ifdef __cplusplus
|
|
||||||
|
|
||||||
/*
|
|
||||||
* classes ServiceDbx and ServantDbx and defined in "gp_dbx_svc.h" which is
|
|
||||||
* accessed via CCR
|
|
||||||
*/
|
|
||||||
extern class ServantDbx *ps_svnt_generic();
|
|
||||||
extern class ServiceDbx *ps_svc_generic();
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _PROC_SERVICE_2_H */
|
|
||||||
@@ -1,164 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2001, 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.
|
|
||||||
*
|
|
||||||
* 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 SHELL_IMP_H
|
|
||||||
#define SHELL_IMP_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
CCR info
|
|
||||||
|
|
||||||
Vesrion history:
|
|
||||||
|
|
||||||
1.0 - Initial CCR release
|
|
||||||
|
|
||||||
Release information for automatic CCR updates:
|
|
||||||
|
|
||||||
BEGIN RELEASE NOTES: (signifies what gets put into CCR release notes)
|
|
||||||
1.1
|
|
||||||
- Entry points for va_list style msgs; new shell_imp_vmsg()
|
|
||||||
and shell_imp_verrmsg()
|
|
||||||
- shell_imp_env_checker() is now shell_imp_var_checker().
|
|
||||||
Also the var_checker callback gets passed interp.
|
|
||||||
1.2 - interposition framework (used by jdbx)
|
|
||||||
- access to input FILE pointer.
|
|
||||||
|
|
||||||
END RELEASE NOTES: (signifies what gets put into CCR release notes)
|
|
||||||
|
|
||||||
Following is used as a CCR version number:
|
|
||||||
#define CCR_SHELL_IMP_VERSION 1.1
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
#define SHELL_IMP_MAJOR 1
|
|
||||||
#define SHELL_IMP_MINOR 2
|
|
||||||
#define SHELL_IMP_FLAG_GLOB 0x1
|
|
||||||
#define SHELL_IMP_FLAG_ARGQ 0x2
|
|
||||||
|
|
||||||
typedef void *shell_imp_interp_t;
|
|
||||||
typedef void *shell_imp_command_t;
|
|
||||||
typedef int shell_imp_fun_t(shell_imp_interp_t, int, char **, void *);
|
|
||||||
|
|
||||||
int
|
|
||||||
shell_imp_init(
|
|
||||||
int, /* major version number */
|
|
||||||
int, /* minor version number */
|
|
||||||
shell_imp_interp_t, /* interpreter */
|
|
||||||
int, /* argc */
|
|
||||||
char *[] /* argv */
|
|
||||||
);
|
|
||||||
|
|
||||||
int
|
|
||||||
shell_imp_fini(shell_imp_interp_t);
|
|
||||||
|
|
||||||
shell_imp_command_t
|
|
||||||
shell_imp_define_command(char *, /* command name e.g. "tnf" */
|
|
||||||
shell_imp_fun_t *, /* callback function */
|
|
||||||
int, /* SHELL_IMP_FLAG_* bit vector */
|
|
||||||
void *, /* client_data Passed as last arg to
|
|
||||||
/* callback function */
|
|
||||||
char * /* help message, e.g. */
|
|
||||||
/* "enable the specified tnf probes" */
|
|
||||||
);
|
|
||||||
|
|
||||||
int
|
|
||||||
shell_imp_undefine_command(shell_imp_command_t);
|
|
||||||
|
|
||||||
int
|
|
||||||
shell_imp_var_checker(shell_imp_interp_t,
|
|
||||||
const char *, /* var name */
|
|
||||||
int (*)(shell_imp_interp_t, const char*) /* env checker */
|
|
||||||
);
|
|
||||||
|
|
||||||
int
|
|
||||||
shell_imp_execute(shell_imp_interp_t, const char *);
|
|
||||||
|
|
||||||
const char *
|
|
||||||
shell_imp_get_var(shell_imp_interp_t, const char *);
|
|
||||||
|
|
||||||
void
|
|
||||||
shell_imp_msg(shell_imp_interp_t, const char *, ...);
|
|
||||||
|
|
||||||
void
|
|
||||||
shell_imp_errmsg(shell_imp_interp_t, const char *, ...);
|
|
||||||
|
|
||||||
void
|
|
||||||
shell_imp_vmsg(shell_imp_interp_t, const char *, va_list);
|
|
||||||
|
|
||||||
void
|
|
||||||
shell_imp_verrmsg(shell_imp_interp_t, const char *, va_list);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Stuff added for 1.2
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct shell_imp_interposition_info_t {
|
|
||||||
shell_imp_fun_t *
|
|
||||||
new_func;
|
|
||||||
void * new_client_data;
|
|
||||||
shell_imp_fun_t *
|
|
||||||
original_func;
|
|
||||||
void * original_client_data;
|
|
||||||
int original_flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef int shell_imp_dispatcher_t(shell_imp_interp_t, int, char **,
|
|
||||||
shell_imp_interposition_info_t *);
|
|
||||||
|
|
||||||
shell_imp_command_t
|
|
||||||
shell_imp_interpose(char *name,
|
|
||||||
shell_imp_fun_t *new_func,
|
|
||||||
int flags,
|
|
||||||
void *client_data,
|
|
||||||
char * description,
|
|
||||||
shell_imp_dispatcher_t *);
|
|
||||||
|
|
||||||
int shell_imp_uninterpose(shell_imp_command_t);
|
|
||||||
|
|
||||||
int
|
|
||||||
shell_imp_dispatch_interposition(shell_imp_interp_t,
|
|
||||||
shell_imp_interposition_info_t *,
|
|
||||||
int argc, char *argv[]);
|
|
||||||
|
|
||||||
int
|
|
||||||
shell_imp_dispatch_original(shell_imp_interp_t,
|
|
||||||
shell_imp_interposition_info_t *,
|
|
||||||
int argc, char *argv[]);
|
|
||||||
|
|
||||||
FILE *
|
|
||||||
shell_imp_cur_input(shell_imp_interp_t);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,188 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "shell_imp.h"
|
|
||||||
#include "IOBuf.hpp"
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <thread_db.h>
|
|
||||||
|
|
||||||
typedef td_err_e td_init_fn_t();
|
|
||||||
typedef td_err_e td_ta_new_fn_t(struct ps_prochandle *, td_thragent_t **);
|
|
||||||
typedef td_err_e td_ta_delete_fn_t(td_thragent_t *);
|
|
||||||
typedef td_err_e td_ta_map_id2thr_fn_t(const td_thragent_t *, thread_t, td_thrhandle_t *);
|
|
||||||
typedef td_err_e td_thr_getgregs_fn_t(const td_thrhandle_t *, prgregset_t);
|
|
||||||
|
|
||||||
class ServiceabilityAgentDbxModule {
|
|
||||||
public:
|
|
||||||
ServiceabilityAgentDbxModule(int major, int minor,
|
|
||||||
shell_imp_interp_t interp, int argc, char *argv[]);
|
|
||||||
~ServiceabilityAgentDbxModule();
|
|
||||||
|
|
||||||
bool install();
|
|
||||||
bool uninstall();
|
|
||||||
|
|
||||||
/* This is invoked through the dbx command interpreter. It listens
|
|
||||||
on a socket for commands and does not return until it receives an
|
|
||||||
"exit" command. At that point control is returned to dbx's main
|
|
||||||
loop, at which point if the user sends an exit command to dbx's
|
|
||||||
shell the dbx process will exit. Returns true if completed
|
|
||||||
successfully, false if an error occurred while running (for
|
|
||||||
example, unable to bind listening socket). */
|
|
||||||
bool run();
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
// This must be shared between the Java and C layers
|
|
||||||
static const int PORT = 21928;
|
|
||||||
|
|
||||||
// Command handlers
|
|
||||||
bool handleAddressSize(char* data);
|
|
||||||
bool handlePeekFailFast(char* data);
|
|
||||||
bool handlePeek(char* data);
|
|
||||||
bool handlePoke(char* data);
|
|
||||||
bool handleMapped(char* data);
|
|
||||||
bool handleLookup(char* data);
|
|
||||||
bool handleThrGRegs(char* data);
|
|
||||||
|
|
||||||
// Input routines
|
|
||||||
|
|
||||||
// May mutate addr argument even if result is false
|
|
||||||
bool scanAddress(char** data, psaddr_t* addr);
|
|
||||||
// May mutate num argument even if result is false
|
|
||||||
bool scanUnsignedInt(char** data, unsigned int* num);
|
|
||||||
// Returns NULL if error occurred while scanning. Otherwise, returns
|
|
||||||
// newly-allocated character array which must be freed with delete[].
|
|
||||||
char* scanSymbol(char** data);
|
|
||||||
// Helper routine: converts ASCII to 4-bit integer. Returns true if
|
|
||||||
// character is in range, false otherwise.
|
|
||||||
bool charToNibble(char ascii, int* value);
|
|
||||||
|
|
||||||
// Output routines
|
|
||||||
|
|
||||||
// Writes an int with no leading or trailing spaces
|
|
||||||
bool writeInt(int val, int fd);
|
|
||||||
// Writes an address in hex format with no leading or trailing
|
|
||||||
// spaces
|
|
||||||
bool writeAddress(psaddr_t addr, int fd);
|
|
||||||
// Writes a register in hex format with no leading or trailing
|
|
||||||
// spaces (addresses and registers might be of different size)
|
|
||||||
bool writeRegister(prgreg_t reg, int fd);
|
|
||||||
// Writes a space to given file descriptor
|
|
||||||
bool writeSpace(int fd);
|
|
||||||
// Writes carriage return to given file descriptor
|
|
||||||
bool writeCR(int fd);
|
|
||||||
// Writes a bool as [0|1]
|
|
||||||
bool writeBoolAsInt(bool val, int fd);
|
|
||||||
// Helper routine: converts low 4 bits to ASCII [0..9][A..F]
|
|
||||||
char nibbleToChar(unsigned char nibble);
|
|
||||||
|
|
||||||
// Base routine called by most of the above
|
|
||||||
bool writeString(const char* str, int fd);
|
|
||||||
|
|
||||||
// Writes a binary character
|
|
||||||
bool writeBinChar(char val, int fd);
|
|
||||||
// Writes a binary unsigned int in network (big-endian) byte order
|
|
||||||
bool writeBinUnsignedInt(unsigned int val, int fd);
|
|
||||||
// Writes a binary buffer
|
|
||||||
bool writeBinBuf(char* buf, int size, int fd);
|
|
||||||
|
|
||||||
// Routine to flush the socket
|
|
||||||
bool flush(int client_socket);
|
|
||||||
|
|
||||||
void cleanup(int client_socket);
|
|
||||||
|
|
||||||
// The shell interpreter on which we can invoke commands (?)
|
|
||||||
shell_imp_interp_t _interp;
|
|
||||||
|
|
||||||
// The "command line" arguments passed to us by dbx (?)
|
|
||||||
int _argc;
|
|
||||||
char **_argv;
|
|
||||||
|
|
||||||
// The installed command in the dbx shell
|
|
||||||
shell_imp_command_t _command;
|
|
||||||
|
|
||||||
// Access to libthread_db (dlsym'ed to be able to pick up the
|
|
||||||
// version loaded by dbx)
|
|
||||||
td_init_fn_t* td_init_fn;
|
|
||||||
td_ta_new_fn_t* td_ta_new_fn;
|
|
||||||
td_ta_delete_fn_t* td_ta_delete_fn;
|
|
||||||
td_ta_map_id2thr_fn_t* td_ta_map_id2thr_fn;
|
|
||||||
td_thr_getgregs_fn_t* td_thr_getgregs_fn;
|
|
||||||
|
|
||||||
// Our "thread agent" -- access to libthread_db
|
|
||||||
td_thragent_t* _tdb_agent;
|
|
||||||
|
|
||||||
// Path to libthread.so in target process; free with delete[]
|
|
||||||
char* libThreadName;
|
|
||||||
|
|
||||||
// Handle to dlopen'ed libthread_db.so
|
|
||||||
void* libThreadDB;
|
|
||||||
|
|
||||||
// Helper callback for finding libthread_db.so
|
|
||||||
friend int findLibThreadCB(const rd_loadobj_t* lo, void* data);
|
|
||||||
|
|
||||||
// Support for reading C strings out of the target process (so we
|
|
||||||
// can find the correct libthread_db). Returns newly-allocated char*
|
|
||||||
// which must be freed with delete[], or null if the read failed.
|
|
||||||
char* readCStringFromProcess(psaddr_t addr);
|
|
||||||
|
|
||||||
IOBuf myComm;
|
|
||||||
|
|
||||||
// Output buffer support (used by writeString, writeChar, flush)
|
|
||||||
char* output_buffer;
|
|
||||||
int output_buffer_size;
|
|
||||||
int output_buffer_pos;
|
|
||||||
|
|
||||||
// "Fail fast" flag
|
|
||||||
bool peek_fail_fast;
|
|
||||||
|
|
||||||
// Commands
|
|
||||||
static const char* CMD_ADDRESS_SIZE;
|
|
||||||
static const char* CMD_PEEK_FAIL_FAST;
|
|
||||||
static const char* CMD_PEEK;
|
|
||||||
static const char* CMD_POKE;
|
|
||||||
static const char* CMD_MAPPED;
|
|
||||||
static const char* CMD_LOOKUP;
|
|
||||||
static const char* CMD_THR_GREGS;
|
|
||||||
static const char* CMD_EXIT;
|
|
||||||
};
|
|
||||||
|
|
||||||
// For profiling. Times reported are in milliseconds.
|
|
||||||
class Timer {
|
|
||||||
public:
|
|
||||||
Timer();
|
|
||||||
~Timer();
|
|
||||||
|
|
||||||
void start();
|
|
||||||
void stop();
|
|
||||||
long total();
|
|
||||||
long average();
|
|
||||||
void reset();
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct timeval startTime;
|
|
||||||
long long totalMicroseconds; // stored internally in microseconds
|
|
||||||
int counter;
|
|
||||||
long long timevalDiff(struct timeval* startTime, struct timeval* endTime);
|
|
||||||
};
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -420,7 +420,22 @@ extern uintptr_t Ppltdest(struct ps_prochandle *, uintptr_t, int *);
|
|||||||
/*
|
/*
|
||||||
* Stack frame iteration interface.
|
* Stack frame iteration interface.
|
||||||
*/
|
*/
|
||||||
|
#ifdef SOLARIS_11_B159_OR_LATER
|
||||||
|
/* building on Nevada-B159 or later so define the new callback */
|
||||||
|
typedef int proc_stack_f(
|
||||||
|
void *, /* the cookie given to Pstack_iter() */
|
||||||
|
const prgregset_t, /* the frame's registers */
|
||||||
|
uint_t, /* argc for the frame's function */
|
||||||
|
const long *, /* argv for the frame's function */
|
||||||
|
int, /* bitwise flags describing the frame (see below) */
|
||||||
|
int); /* a signal number */
|
||||||
|
|
||||||
|
#define PR_SIGNAL_FRAME 1 /* called by a signal handler */
|
||||||
|
#define PR_FOUND_SIGNAL 2 /* we found the corresponding signal number */
|
||||||
|
#else
|
||||||
|
/* building on Nevada-B158 or earlier so define the old callback */
|
||||||
typedef int proc_stack_f(void *, const prgregset_t, uint_t, const long *);
|
typedef int proc_stack_f(void *, const prgregset_t, uint_t, const long *);
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int Pstack_iter(struct ps_prochandle *,
|
extern int Pstack_iter(struct ps_prochandle *,
|
||||||
const prgregset_t, proc_stack_f *, void *);
|
const prgregset_t, proc_stack_f *, void *);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -101,7 +101,23 @@ extern int Pstop(struct ps_prochandle *, uint_t);
|
|||||||
/*
|
/*
|
||||||
* Stack frame iteration interface.
|
* Stack frame iteration interface.
|
||||||
*/
|
*/
|
||||||
|
#ifdef SOLARIS_11_B159_OR_LATER
|
||||||
|
/* building on Nevada-B159 or later so define the new callback */
|
||||||
|
typedef int proc_stack_f(
|
||||||
|
void *, /* the cookie given to Pstack_iter() */
|
||||||
|
const prgregset_t, /* the frame's registers */
|
||||||
|
uint_t, /* argc for the frame's function */
|
||||||
|
const long *, /* argv for the frame's function */
|
||||||
|
int, /* bitwise flags describing the frame (see below) */
|
||||||
|
int); /* a signal number */
|
||||||
|
|
||||||
|
#define PR_SIGNAL_FRAME 1 /* called by a signal handler */
|
||||||
|
#define PR_FOUND_SIGNAL 2 /* we found the corresponding signal number */
|
||||||
|
#else
|
||||||
|
/* building on Nevada-B158 or earlier so define the old callback */
|
||||||
typedef int proc_stack_f(void *, const prgregset_t, uint_t, const long *);
|
typedef int proc_stack_f(void *, const prgregset_t, uint_t, const long *);
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int Pstack_iter(struct ps_prochandle *,
|
extern int Pstack_iter(struct ps_prochandle *,
|
||||||
const prgregset_t, proc_stack_f *, void *);
|
const prgregset_t, proc_stack_f *, void *);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@@ -24,6 +24,9 @@
|
|||||||
|
|
||||||
#include "salibproc.h"
|
#include "salibproc.h"
|
||||||
#include "sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal.h"
|
#include "sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal.h"
|
||||||
|
#ifndef SOLARIS_11_B159_OR_LATER
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
#endif
|
||||||
#include <thread_db.h>
|
#include <thread_db.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
@@ -40,8 +43,22 @@
|
|||||||
#define SYMBOL_BUF_SIZE 256
|
#define SYMBOL_BUF_SIZE 256
|
||||||
#define ERR_MSG_SIZE (PATH_MAX + 256)
|
#define ERR_MSG_SIZE (PATH_MAX + 256)
|
||||||
|
|
||||||
// debug mode
|
// debug modes
|
||||||
static int _libsaproc_debug = 0;
|
static int _libsaproc_debug = 0;
|
||||||
|
#ifndef SOLARIS_11_B159_OR_LATER
|
||||||
|
static bool _Pstack_iter_debug = false;
|
||||||
|
|
||||||
|
static void dprintf_2(const char* format,...) {
|
||||||
|
if (_Pstack_iter_debug) {
|
||||||
|
va_list alist;
|
||||||
|
|
||||||
|
va_start(alist, format);
|
||||||
|
fputs("Pstack_iter DEBUG: ", stderr);
|
||||||
|
vfprintf(stderr, format, alist);
|
||||||
|
va_end(alist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // !SOLARIS_11_B159_OR_LATER
|
||||||
|
|
||||||
static void print_debug(const char* format,...) {
|
static void print_debug(const char* format,...) {
|
||||||
if (_libsaproc_debug) {
|
if (_libsaproc_debug) {
|
||||||
@@ -450,6 +467,7 @@ fill_load_object_list(void *cd, const prmap_t* pmp, const char* obj_name) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pstack_iter() proc_stack_f callback prior to Nevada-B159
|
||||||
static int
|
static int
|
||||||
fill_cframe_list(void *cd, const prgregset_t regs, uint_t argc, const long *argv) {
|
fill_cframe_list(void *cd, const prgregset_t regs, uint_t argc, const long *argv) {
|
||||||
DebuggerWith2Objects* dbgo2 = (DebuggerWith2Objects*) cd;
|
DebuggerWith2Objects* dbgo2 = (DebuggerWith2Objects*) cd;
|
||||||
@@ -472,6 +490,14 @@ fill_cframe_list(void *cd, const prgregset_t regs, uint_t argc, const long *argv
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pstack_iter() proc_stack_f callback in Nevada-B159 or later
|
||||||
|
/*ARGSUSED*/
|
||||||
|
static int
|
||||||
|
wrapper_fill_cframe_list(void *cd, const prgregset_t regs, uint_t argc,
|
||||||
|
const long *argv, int frame_flags, int sig) {
|
||||||
|
return(fill_cframe_list(cd, regs, argc, argv));
|
||||||
|
}
|
||||||
|
|
||||||
// part of the class sharing workaround
|
// part of the class sharing workaround
|
||||||
|
|
||||||
// FIXME: !!HACK ALERT!!
|
// FIXME: !!HACK ALERT!!
|
||||||
@@ -970,6 +996,11 @@ JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal_fill
|
|||||||
TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY, TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS);
|
TD_THR_ANY_STATE, TD_THR_LOWEST_PRIORITY, TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef SOLARIS_11_B159_OR_LATER
|
||||||
|
// building on Nevada-B158 or earlier so more hoops to jump through
|
||||||
|
static bool has_newer_Pstack_iter = false; // older version by default
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal
|
* Class: sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal
|
||||||
* Method: fillCFrameList0
|
* Method: fillCFrameList0
|
||||||
@@ -997,7 +1028,24 @@ JNIEXPORT jobject JNICALL Java_sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal_f
|
|||||||
|
|
||||||
env->ReleaseLongArrayElements(regsArray, ptr, JNI_ABORT);
|
env->ReleaseLongArrayElements(regsArray, ptr, JNI_ABORT);
|
||||||
CHECK_EXCEPTION_(0);
|
CHECK_EXCEPTION_(0);
|
||||||
Pstack_iter((struct ps_prochandle*) p_ps_prochandle, gregs, fill_cframe_list, &dbgo2);
|
|
||||||
|
#ifdef SOLARIS_11_B159_OR_LATER
|
||||||
|
// building on Nevada-B159 or later so use the new callback
|
||||||
|
Pstack_iter((struct ps_prochandle*) p_ps_prochandle, gregs,
|
||||||
|
wrapper_fill_cframe_list, &dbgo2);
|
||||||
|
#else
|
||||||
|
// building on Nevada-B158 or earlier so figure out which callback to use
|
||||||
|
|
||||||
|
if (has_newer_Pstack_iter) {
|
||||||
|
// Since we're building on Nevada-B158 or earlier, we have to
|
||||||
|
// cast wrapper_fill_cframe_list to make the compiler happy.
|
||||||
|
Pstack_iter((struct ps_prochandle*) p_ps_prochandle, gregs,
|
||||||
|
(proc_stack_f *)wrapper_fill_cframe_list, &dbgo2);
|
||||||
|
} else {
|
||||||
|
Pstack_iter((struct ps_prochandle*) p_ps_prochandle, gregs,
|
||||||
|
fill_cframe_list, &dbgo2);
|
||||||
|
}
|
||||||
|
#endif // SOLARIS_11_B159_OR_LATER
|
||||||
return dbgo2.obj;
|
return dbgo2.obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1218,6 +1266,102 @@ JNIEXPORT jstring JNICALL Java_sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal_d
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef SOLARIS_11_B159_OR_LATER
|
||||||
|
// Determine if the OS we're running on has the newer version
|
||||||
|
// of libproc's Pstack_iter.
|
||||||
|
//
|
||||||
|
// Set env var PSTACK_ITER_DEBUG=true to debug this logic.
|
||||||
|
// Set env var PSTACK_ITER_DEBUG_RELEASE to simulate a 'release' value.
|
||||||
|
// Set env var PSTACK_ITER_DEBUG_VERSION to simulate a 'version' value.
|
||||||
|
//
|
||||||
|
// frankenputer 'uname -r -v': 5.10 Generic_141445-09
|
||||||
|
// jurassic 'uname -r -v': 5.11 snv_164
|
||||||
|
// lonepeak 'uname -r -v': 5.11 snv_127
|
||||||
|
//
|
||||||
|
static void set_has_newer_Pstack_iter(JNIEnv *env) {
|
||||||
|
static bool done_set = false;
|
||||||
|
|
||||||
|
if (done_set) {
|
||||||
|
// already set has_newer_Pstack_iter
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct utsname name;
|
||||||
|
if (uname(&name) == -1) {
|
||||||
|
THROW_NEW_DEBUGGER_EXCEPTION("uname() failed!");
|
||||||
|
}
|
||||||
|
dprintf_2("release='%s' version='%s'\n", name.release, name.version);
|
||||||
|
|
||||||
|
if (_Pstack_iter_debug) {
|
||||||
|
char *override = getenv("PSTACK_ITER_DEBUG_RELEASE");
|
||||||
|
if (override != NULL) {
|
||||||
|
strncpy(name.release, override, SYS_NMLN - 1);
|
||||||
|
name.release[SYS_NMLN - 2] = '\0';
|
||||||
|
dprintf_2("overriding with release='%s'\n", name.release);
|
||||||
|
}
|
||||||
|
override = getenv("PSTACK_ITER_DEBUG_VERSION");
|
||||||
|
if (override != NULL) {
|
||||||
|
strncpy(name.version, override, SYS_NMLN - 1);
|
||||||
|
name.version[SYS_NMLN - 2] = '\0';
|
||||||
|
dprintf_2("overriding with version='%s'\n", name.version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// the major number corresponds to the old SunOS major number
|
||||||
|
int major = atoi(name.release);
|
||||||
|
if (major >= 6) {
|
||||||
|
dprintf_2("release is SunOS 6 or later\n");
|
||||||
|
has_newer_Pstack_iter = true;
|
||||||
|
done_set = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (major < 5) {
|
||||||
|
dprintf_2("release is SunOS 4 or earlier\n");
|
||||||
|
done_set = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// some SunOS 5.* build so now check for Solaris versions
|
||||||
|
char *dot = strchr(name.release, '.');
|
||||||
|
int minor = 0;
|
||||||
|
if (dot != NULL) {
|
||||||
|
// release is major.minor format
|
||||||
|
*dot = NULL;
|
||||||
|
minor = atoi(dot + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (minor <= 10) {
|
||||||
|
dprintf_2("release is Solaris 10 or earlier\n");
|
||||||
|
done_set = true;
|
||||||
|
return;
|
||||||
|
} else if (minor >= 12) {
|
||||||
|
dprintf_2("release is Solaris 12 or later\n");
|
||||||
|
has_newer_Pstack_iter = true;
|
||||||
|
done_set = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// some Solaris 11 build so now check for internal build numbers
|
||||||
|
if (strncmp(name.version, "snv_", 4) != 0) {
|
||||||
|
dprintf_2("release is Solaris 11 post-GA or later\n");
|
||||||
|
has_newer_Pstack_iter = true;
|
||||||
|
done_set = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// version begins with "snv_" so a pre-GA build of Solaris 11
|
||||||
|
int build = atoi(&name.version[4]);
|
||||||
|
if (build >= 159) {
|
||||||
|
dprintf_2("release is Nevada-B159 or later\n");
|
||||||
|
has_newer_Pstack_iter = true;
|
||||||
|
} else {
|
||||||
|
dprintf_2("release is Nevada-B158 or earlier\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
done_set = true;
|
||||||
|
}
|
||||||
|
#endif // !SOLARIS_11_B159_OR_LATER
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal
|
* Class: sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal
|
||||||
* Method: initIDs
|
* Method: initIDs
|
||||||
@@ -1237,6 +1381,14 @@ JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal_init
|
|||||||
if (libproc_handle == 0)
|
if (libproc_handle == 0)
|
||||||
THROW_NEW_DEBUGGER_EXCEPTION("can't load libproc.so, if you are using Solaris 5.7 or below, copy libproc.so from 5.8!");
|
THROW_NEW_DEBUGGER_EXCEPTION("can't load libproc.so, if you are using Solaris 5.7 or below, copy libproc.so from 5.8!");
|
||||||
|
|
||||||
|
#ifndef SOLARIS_11_B159_OR_LATER
|
||||||
|
_Pstack_iter_debug = getenv("PSTACK_ITER_DEBUG") != NULL;
|
||||||
|
|
||||||
|
set_has_newer_Pstack_iter(env);
|
||||||
|
CHECK_EXCEPTION;
|
||||||
|
dprintf_2("has_newer_Pstack_iter=%d\n", has_newer_Pstack_iter);
|
||||||
|
#endif
|
||||||
|
|
||||||
p_ps_prochandle_ID = env->GetFieldID(clazz, "p_ps_prochandle", "J");
|
p_ps_prochandle_ID = env->GetFieldID(clazz, "p_ps_prochandle", "J");
|
||||||
CHECK_EXCEPTION;
|
CHECK_EXCEPTION;
|
||||||
|
|
||||||
|
|||||||
@@ -1,110 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2001, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "Buffer.hpp"
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
Buffer::Buffer(int bufSize) {
|
|
||||||
buf = new char[bufSize];
|
|
||||||
sz = bufSize;
|
|
||||||
fill = 0;
|
|
||||||
drain = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Buffer::~Buffer() {
|
|
||||||
delete[] buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
char*
|
|
||||||
Buffer::fillPos() {
|
|
||||||
return buf + fill;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
Buffer::remaining() {
|
|
||||||
return sz - fill;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
Buffer::size() {
|
|
||||||
return sz;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Buffer::incrFillPos(int amt) {
|
|
||||||
if (fill + amt >= sz) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
fill += amt;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
Buffer::readByte() {
|
|
||||||
if (drain < fill) {
|
|
||||||
return buf[drain++] & 0xFF;
|
|
||||||
} else {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
Buffer::readBytes(char* data, int len) {
|
|
||||||
int numRead = 0;
|
|
||||||
while (numRead < len) {
|
|
||||||
int c = readByte();
|
|
||||||
if (c < 0) break;
|
|
||||||
data[numRead++] = (char) c;
|
|
||||||
}
|
|
||||||
return numRead;
|
|
||||||
}
|
|
||||||
|
|
||||||
char*
|
|
||||||
Buffer::drainPos() {
|
|
||||||
return buf + drain;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
Buffer::drainRemaining() {
|
|
||||||
return fill - drain;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Buffer::incrDrainPos(int amt) {
|
|
||||||
if (drainRemaining() < amt) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
drain += amt;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Buffer::compact() {
|
|
||||||
// Copy down data
|
|
||||||
memmove(buf, buf + drain, fill - drain);
|
|
||||||
// Adjust positions
|
|
||||||
fill -= drain;
|
|
||||||
drain = 0;
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2001, 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.
|
|
||||||
*
|
|
||||||
* 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 _BUFFER_
|
|
||||||
#define _BUFFER_
|
|
||||||
|
|
||||||
// A Buffer is the backing store for the IOBuf abstraction and
|
|
||||||
// supports producer-consumer filling and draining.
|
|
||||||
|
|
||||||
class Buffer {
|
|
||||||
public:
|
|
||||||
Buffer(int bufSize);
|
|
||||||
~Buffer();
|
|
||||||
|
|
||||||
char* fillPos(); // Position of the place where buffer should be filled
|
|
||||||
int remaining(); // Number of bytes that can be placed starting at fillPos
|
|
||||||
int size(); // Size of the buffer
|
|
||||||
// Move up fill position by amount (decreases remaining()); returns
|
|
||||||
// false if not enough space
|
|
||||||
bool incrFillPos(int amt);
|
|
||||||
|
|
||||||
// Read single byte (0..255); returns -1 if no data available.
|
|
||||||
int readByte();
|
|
||||||
// Read multiple bytes, non-blocking (this buffer does not define a
|
|
||||||
// fill mechanism), into provided buffer. Returns number of bytes read.
|
|
||||||
int readBytes(char* buf, int len);
|
|
||||||
|
|
||||||
// Access to drain position. Be very careful using this.
|
|
||||||
char* drainPos();
|
|
||||||
int drainRemaining();
|
|
||||||
bool incrDrainPos(int amt);
|
|
||||||
|
|
||||||
// Compact buffer, removing already-consumed input. This must be
|
|
||||||
// called periodically to yield the illusion of an infinite buffer.
|
|
||||||
void compact();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Buffer(const Buffer&);
|
|
||||||
Buffer& operator=(const Buffer&);
|
|
||||||
|
|
||||||
char* buf;
|
|
||||||
int sz;
|
|
||||||
int fill;
|
|
||||||
int drain;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // #defined _BUFFER_
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "dispatcher.hpp"
|
|
||||||
|
|
||||||
const char* CMD_ASCII = "ascii";
|
|
||||||
const char* CMD_UNICODE = "unicode";
|
|
||||||
const char* CMD_PROCLIST = "proclist";
|
|
||||||
const char* CMD_ATTACH = "attach";
|
|
||||||
const char* CMD_DETACH = "detach";
|
|
||||||
const char* CMD_LIBINFO = "libinfo";
|
|
||||||
const char* CMD_PEEK = "peek";
|
|
||||||
const char* CMD_POKE = "poke";
|
|
||||||
const char* CMD_THREADLIST = "threadlist";
|
|
||||||
const char* CMD_DUPHANDLE = "duphandle";
|
|
||||||
const char* CMD_CLOSEHANDLE = "closehandle";
|
|
||||||
const char* CMD_GETCONTEXT = "getcontext";
|
|
||||||
const char* CMD_SETCONTEXT = "setcontext";
|
|
||||||
const char* CMD_SELECTORENTRY = "selectorentry";
|
|
||||||
const char* CMD_SUSPEND = "suspend";
|
|
||||||
const char* CMD_RESUME = "resume";
|
|
||||||
const char* CMD_POLLEVENT = "pollevent";
|
|
||||||
const char* CMD_CONTINUEEVENT = "continueevent";
|
|
||||||
const char* CMD_EXIT = "exit";
|
|
||||||
|
|
||||||
// Uncomment the #define below to get messages on stderr
|
|
||||||
// #define DEBUGGING
|
|
||||||
|
|
||||||
void
|
|
||||||
Dispatcher::dispatch(char* cmd, Handler* handler) {
|
|
||||||
if (!strncmp(cmd, CMD_ASCII, strlen(CMD_ASCII))) {
|
|
||||||
handler->ascii(cmd + strlen(CMD_ASCII));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_UNICODE, strlen(CMD_UNICODE))) {
|
|
||||||
handler->unicode(cmd + strlen(CMD_UNICODE));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_PROCLIST, strlen(CMD_PROCLIST))) {
|
|
||||||
handler->procList(cmd + strlen(CMD_PROCLIST));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_ATTACH, strlen(CMD_ATTACH))) {
|
|
||||||
handler->attach(cmd + strlen(CMD_ATTACH));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_DETACH, strlen(CMD_DETACH))) {
|
|
||||||
handler->detach(cmd + strlen(CMD_DETACH));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_LIBINFO, strlen(CMD_LIBINFO))) {
|
|
||||||
handler->libInfo(cmd + strlen(CMD_LIBINFO));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_PEEK, strlen(CMD_PEEK))) {
|
|
||||||
handler->peek(cmd + strlen(CMD_PEEK));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_POKE, strlen(CMD_POKE))) {
|
|
||||||
handler->poke(cmd + strlen(CMD_POKE));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_THREADLIST, strlen(CMD_THREADLIST))) {
|
|
||||||
handler->threadList(cmd + strlen(CMD_THREADLIST));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_DUPHANDLE, strlen(CMD_DUPHANDLE))) {
|
|
||||||
handler->dupHandle(cmd + strlen(CMD_DUPHANDLE));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_CLOSEHANDLE, strlen(CMD_CLOSEHANDLE))) {
|
|
||||||
handler->closeHandle(cmd + strlen(CMD_CLOSEHANDLE));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_GETCONTEXT, strlen(CMD_GETCONTEXT))) {
|
|
||||||
handler->getContext(cmd + strlen(CMD_GETCONTEXT));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_SETCONTEXT, strlen(CMD_SETCONTEXT))) {
|
|
||||||
handler->setContext(cmd + strlen(CMD_SETCONTEXT));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_SELECTORENTRY, strlen(CMD_SELECTORENTRY))) {
|
|
||||||
handler->selectorEntry(cmd + strlen(CMD_SELECTORENTRY));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_SUSPEND, strlen(CMD_SUSPEND))) {
|
|
||||||
handler->suspend(cmd + strlen(CMD_SUSPEND));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_RESUME, strlen(CMD_RESUME))) {
|
|
||||||
handler->resume(cmd + strlen(CMD_RESUME));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_POLLEVENT, strlen(CMD_POLLEVENT))) {
|
|
||||||
handler->pollEvent(cmd + strlen(CMD_POLLEVENT));
|
|
||||||
|
|
||||||
} else if (!strncmp(cmd, CMD_CONTINUEEVENT, strlen(CMD_CONTINUEEVENT))) {
|
|
||||||
handler->continueEvent(cmd + strlen(CMD_CONTINUEEVENT));
|
|
||||||
|
|
||||||
} else if (!strcmp(cmd, CMD_EXIT)) {
|
|
||||||
handler->exit(cmd + strlen(CMD_EXIT));
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
else fprintf(stderr, "Ignoring illegal command \"%s\"\n", cmd);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 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.
|
|
||||||
*
|
|
||||||
* 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 _HANDLER_
|
|
||||||
#define _HANDLER_
|
|
||||||
|
|
||||||
/** An abstract base class encapsulating the handlers for all commands
|
|
||||||
understood by the system. */
|
|
||||||
class Handler {
|
|
||||||
public:
|
|
||||||
virtual void ascii(char* arg) = 0;
|
|
||||||
virtual void unicode(char* arg) = 0;
|
|
||||||
virtual void procList(char* arg) = 0;
|
|
||||||
virtual void attach(char* arg) = 0;
|
|
||||||
virtual void detach(char* arg) = 0;
|
|
||||||
virtual void libInfo(char* arg) = 0;
|
|
||||||
virtual void peek(char* arg) = 0;
|
|
||||||
virtual void poke(char* arg) = 0;
|
|
||||||
virtual void threadList(char* arg) = 0;
|
|
||||||
virtual void dupHandle(char* arg) = 0;
|
|
||||||
virtual void closeHandle(char* arg) = 0;
|
|
||||||
virtual void getContext(char* arg) = 0;
|
|
||||||
virtual void setContext(char* arg) = 0;
|
|
||||||
virtual void selectorEntry(char* arg) = 0;
|
|
||||||
virtual void suspend(char* arg) = 0;
|
|
||||||
virtual void resume(char* arg) = 0;
|
|
||||||
virtual void pollEvent(char* arg) = 0;
|
|
||||||
virtual void continueEvent(char* arg) = 0;
|
|
||||||
virtual void exit(char* arg) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // #defined _HANDLER_
|
|
||||||
@@ -1,490 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2003, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
// This file is currently used for os/solaris/agent too. At some point in time
|
|
||||||
// the source will be reorganized to avoid these ifdefs.
|
|
||||||
|
|
||||||
#ifdef __sun
|
|
||||||
#include <string.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <sys/byteorder.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "IOBuf.hpp"
|
|
||||||
|
|
||||||
// Formats for printing pointers
|
|
||||||
#ifdef _LP64
|
|
||||||
# define INTPTR_FORMAT "0x%016lx"
|
|
||||||
#else /* ! _LP64 */
|
|
||||||
# define INTPTR_FORMAT "0x%08lx"
|
|
||||||
#endif /* _LP64 */
|
|
||||||
|
|
||||||
// Uncomment the #define below to get messages on stderr
|
|
||||||
// #define DEBUGGING
|
|
||||||
|
|
||||||
IOBuf::IOBuf(int inLen, int outLen) {
|
|
||||||
inBuf = new Buffer(inLen);
|
|
||||||
outBuf = new Buffer(outLen);
|
|
||||||
fd = INVALID_SOCKET;
|
|
||||||
outHandle = NULL;
|
|
||||||
usingSocket = true;
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
IOBuf::~IOBuf() {
|
|
||||||
delete inBuf;
|
|
||||||
delete outBuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
IOBuf::setSocket(SOCKET sock) {
|
|
||||||
fd = sock;
|
|
||||||
usingSocket = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reading/writing files is only needed and used on windows.
|
|
||||||
#ifdef WIN32
|
|
||||||
void
|
|
||||||
IOBuf::setOutputFileHandle(HANDLE handle) {
|
|
||||||
outHandle = handle;
|
|
||||||
usingSocket = false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
|
||||||
IOBuf::reset() {
|
|
||||||
gotDataLastTime = false;
|
|
||||||
state = TEXT_STATE;
|
|
||||||
binPos = 0;
|
|
||||||
binLength = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
IOBuf::ReadLineResult
|
|
||||||
IOBuf::tryReadLine() {
|
|
||||||
return doReadLine(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
char*
|
|
||||||
IOBuf::readLine() {
|
|
||||||
ReadLineResult rr = doReadLine(true);
|
|
||||||
if (rr != RL_GOT_DATA) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return getLine();
|
|
||||||
}
|
|
||||||
|
|
||||||
IOBuf::ReadLineResult
|
|
||||||
IOBuf::doReadLine(bool shouldWait) {
|
|
||||||
|
|
||||||
if (!usingSocket) {
|
|
||||||
return IOBuf::RL_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gotDataLastTime) {
|
|
||||||
curLine.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
int c;
|
|
||||||
do {
|
|
||||||
c = readChar(shouldWait);
|
|
||||||
if (c >= 0) {
|
|
||||||
Action act = processChar((char) c);
|
|
||||||
if (act == GOT_LINE) {
|
|
||||||
curLine.push_back('\0');
|
|
||||||
gotDataLastTime = true;
|
|
||||||
return IOBuf::RL_GOT_DATA;
|
|
||||||
} else if (act == SKIP_EOL_CHAR) {
|
|
||||||
// Do nothing
|
|
||||||
} else {
|
|
||||||
curLine.push_back((char) c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (shouldWait || c >= 0);
|
|
||||||
|
|
||||||
gotDataLastTime = false;
|
|
||||||
return IOBuf::RL_NO_DATA;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::flushImpl(bool moreDataToCome) {
|
|
||||||
int numWritten = 0;
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
// When running on Windows and using IOBufs for inter-process
|
|
||||||
// communication, we need to write metadata into the stream
|
|
||||||
// indicating how many bytes are coming down. Five bytes are written
|
|
||||||
// per flush() call, four containing the integer number of bytes
|
|
||||||
// coming (not including the five-byte header) and one (a 0 or 1)
|
|
||||||
// indicating whether there is more data coming.
|
|
||||||
if (!usingSocket) {
|
|
||||||
int numToWrite = outBuf->drainRemaining();
|
|
||||||
char moreToCome = (moreDataToCome ? 1 : 0);
|
|
||||||
DWORD numBytesWritten;
|
|
||||||
if (!WriteFile(outHandle, &numToWrite, sizeof(int), &numBytesWritten, NULL)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (numBytesWritten != sizeof(int)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!WriteFile(outHandle, &moreToCome, 1, &numBytesWritten, NULL)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (numBytesWritten != 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (outBuf->drainRemaining() != 0) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "Flushing %d bytes\n", outBuf->drainRemaining());
|
|
||||||
#endif
|
|
||||||
if (usingSocket) {
|
|
||||||
numWritten = send(fd, outBuf->drainPos(), outBuf->drainRemaining(), 0);
|
|
||||||
} else {
|
|
||||||
#ifdef WIN32
|
|
||||||
DWORD numBytesWritten;
|
|
||||||
if (!WriteFile(outHandle, outBuf->drainPos(), outBuf->drainRemaining(), &numBytesWritten, NULL)) {
|
|
||||||
numWritten = -1;
|
|
||||||
} else {
|
|
||||||
numWritten = numBytesWritten;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if (numWritten != -1) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "Flushed %d bytes\n", numWritten);
|
|
||||||
#endif
|
|
||||||
outBuf->incrDrainPos(numWritten);
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outBuf->compact();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
IOBuf::readChar(bool block) {
|
|
||||||
do {
|
|
||||||
int c = inBuf->readByte();
|
|
||||||
if (c >= 0) {
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
// See whether we need to compact the input buffer
|
|
||||||
if (inBuf->remaining() < inBuf->size() / 2) {
|
|
||||||
inBuf->compact();
|
|
||||||
}
|
|
||||||
// See whether socket is ready
|
|
||||||
fd_set fds;
|
|
||||||
FD_ZERO(&fds);
|
|
||||||
FD_SET(fd, &fds);
|
|
||||||
struct timeval timeout;
|
|
||||||
timeout.tv_sec = 0;
|
|
||||||
timeout.tv_usec = 0;
|
|
||||||
if (block || select(1 + fd, &fds, NULL, NULL, &timeout) > 0) {
|
|
||||||
if (block || FD_ISSET(fd, &fds)) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
int b = (block ? 1 : 0);
|
|
||||||
fprintf(stderr, "calling recv: block = %d\n", b);
|
|
||||||
#endif
|
|
||||||
// Read data from socket
|
|
||||||
int numRead = recv(fd, inBuf->fillPos(), inBuf->remaining(), 0);
|
|
||||||
if (numRead < 0) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "recv failed\n");
|
|
||||||
#endif
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
inBuf->incrFillPos(numRead);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (block);
|
|
||||||
|
|
||||||
return inBuf->readByte();
|
|
||||||
}
|
|
||||||
|
|
||||||
char*
|
|
||||||
IOBuf::getLine() {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "Returning (first 10 chars) \"%.10s\"\n", curLine.begin());
|
|
||||||
#endif
|
|
||||||
return curLine.begin();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::flush() {
|
|
||||||
return flushImpl(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeString(const char* str) {
|
|
||||||
int len = strlen(str);
|
|
||||||
|
|
||||||
if (len > outBuf->size()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len > outBuf->remaining()) {
|
|
||||||
if (!flushImpl(true)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE we do not copy the null terminator of the string.
|
|
||||||
|
|
||||||
strncpy(outBuf->fillPos(), str, len);
|
|
||||||
outBuf->incrFillPos(len);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeInt(int val) {
|
|
||||||
char buf[128];
|
|
||||||
sprintf(buf, "%d", val);
|
|
||||||
return writeString(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeUnsignedInt(unsigned int val) {
|
|
||||||
char buf[128];
|
|
||||||
sprintf(buf, "%u", val);
|
|
||||||
return writeString(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeBoolAsInt(bool val) {
|
|
||||||
if (val) {
|
|
||||||
return writeString("1");
|
|
||||||
} else {
|
|
||||||
return writeString("0");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeAddress(void* val) {
|
|
||||||
char buf[128];
|
|
||||||
sprintf(buf, INTPTR_FORMAT, val);
|
|
||||||
return writeString(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeSpace() {
|
|
||||||
return writeString(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeEOL() {
|
|
||||||
return writeString("\n\r");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeBinChar(char c) {
|
|
||||||
return writeBinBuf((char*) &c, sizeof(c));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeBinUnsignedShort(unsigned short i) {
|
|
||||||
i = htons(i);
|
|
||||||
return writeBinBuf((char*) &i, sizeof(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeBinUnsignedInt(unsigned int i) {
|
|
||||||
i = htonl(i);
|
|
||||||
return writeBinBuf((char*) &i, sizeof(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::writeBinBuf(char* buf, int size) {
|
|
||||||
while (size > 0) {
|
|
||||||
int spaceRemaining = outBuf->remaining();
|
|
||||||
if (spaceRemaining == 0) {
|
|
||||||
if (!flushImpl(true)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
spaceRemaining = outBuf->remaining();
|
|
||||||
}
|
|
||||||
int toCopy = (size > spaceRemaining) ? spaceRemaining : size;
|
|
||||||
memcpy(outBuf->fillPos(), buf, toCopy);
|
|
||||||
outBuf->incrFillPos(toCopy);
|
|
||||||
buf += toCopy;
|
|
||||||
size -= toCopy;
|
|
||||||
if (size > 0) {
|
|
||||||
if (!flushImpl(true)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
IOBuf::FillState
|
|
||||||
IOBuf::fillFromFileHandle(HANDLE fh, DWORD* numBytesRead) {
|
|
||||||
int totalToRead;
|
|
||||||
char moreToCome;
|
|
||||||
|
|
||||||
outBuf->compact();
|
|
||||||
|
|
||||||
DWORD numRead;
|
|
||||||
if (!ReadFile(fh, &totalToRead, sizeof(int), &numRead, NULL)) {
|
|
||||||
return FAILED;
|
|
||||||
}
|
|
||||||
if (numRead != sizeof(int)) {
|
|
||||||
return FAILED;
|
|
||||||
}
|
|
||||||
if (!ReadFile(fh, &moreToCome, 1, &numRead, NULL)) {
|
|
||||||
return FAILED;
|
|
||||||
}
|
|
||||||
if (numRead != 1) {
|
|
||||||
return FAILED;
|
|
||||||
}
|
|
||||||
if (outBuf->remaining() < totalToRead) {
|
|
||||||
return FAILED;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tmp = totalToRead;
|
|
||||||
|
|
||||||
while (totalToRead > 0) {
|
|
||||||
if (!ReadFile(fh, outBuf->fillPos(), totalToRead, &numRead, NULL)) {
|
|
||||||
return FAILED;
|
|
||||||
}
|
|
||||||
outBuf->incrFillPos((int) numRead);
|
|
||||||
totalToRead -= numRead;
|
|
||||||
}
|
|
||||||
|
|
||||||
*numBytesRead = tmp;
|
|
||||||
return ((moreToCome == 0) ? DONE : MORE_DATA_PENDING);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::isBinEscapeChar(char c) {
|
|
||||||
return (c == '|');
|
|
||||||
}
|
|
||||||
|
|
||||||
IOBuf::Action
|
|
||||||
IOBuf::processChar(char c) {
|
|
||||||
Action action = NO_ACTION;
|
|
||||||
switch (state) {
|
|
||||||
case TEXT_STATE: {
|
|
||||||
// Looking for text char, bin escape char, or EOL
|
|
||||||
if (isBinEscapeChar(c)) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "[a: '%c'] ", inBuf[0]);
|
|
||||||
#endif
|
|
||||||
binPos = 0;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "[b: '%c'] ", inBuf[0]);
|
|
||||||
#endif
|
|
||||||
binLength = 0;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "[c: '%c'] ", inBuf[0]);
|
|
||||||
#endif
|
|
||||||
state = BIN_STATE;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "[d: '%c'] ", inBuf[0]);
|
|
||||||
#endif
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "\nSwitching to BIN_STATE\n");
|
|
||||||
#endif
|
|
||||||
} else if (isEOL(c)) {
|
|
||||||
state = EOL_STATE;
|
|
||||||
action = GOT_LINE;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "\nSwitching to EOL_STATE (GOT_LINE)\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
else {
|
|
||||||
fprintf(stderr, "'%c' ", c);
|
|
||||||
fflush(stderr);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case BIN_STATE: {
|
|
||||||
// Seeking to finish read of input
|
|
||||||
if (binPos < 4) {
|
|
||||||
int cur = c & 0xFF;
|
|
||||||
binLength <<= 8;
|
|
||||||
binLength |= cur;
|
|
||||||
++binPos;
|
|
||||||
} else {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "Reading binary byte %d of %d\n",
|
|
||||||
binPos - 4, binLength);
|
|
||||||
#endif
|
|
||||||
++binPos;
|
|
||||||
if (binPos == 4 + binLength) {
|
|
||||||
state = TEXT_STATE;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "Switching to TEXT_STATE\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case EOL_STATE: {
|
|
||||||
// More EOL characters just cause us to re-enter this state
|
|
||||||
if (isEOL(c)) {
|
|
||||||
action = SKIP_EOL_CHAR;
|
|
||||||
} else if (isBinEscapeChar(c)) {
|
|
||||||
binPos = 0;
|
|
||||||
binLength = 0;
|
|
||||||
state = BIN_STATE;
|
|
||||||
} else {
|
|
||||||
state = TEXT_STATE;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
fprintf(stderr, "'%c' ", c);
|
|
||||||
fflush(stderr);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // switch
|
|
||||||
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
IOBuf::isEOL(char c) {
|
|
||||||
#ifdef WIN32
|
|
||||||
return ((c == '\n') || (c == '\r'));
|
|
||||||
#elif defined(__sun)
|
|
||||||
return c == '\n';
|
|
||||||
#else
|
|
||||||
#error Please port isEOL() to your platform
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -1,222 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2003, 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.
|
|
||||||
*
|
|
||||||
* 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 _IO_BUF_
|
|
||||||
#define _IO_BUF_
|
|
||||||
|
|
||||||
// This file is currently used for os/solaris/agent/ too. At some point in time
|
|
||||||
// the source will be reorganized to avoid these ifdefs.
|
|
||||||
// Note that this class can read/write from a file as well as a socket. This
|
|
||||||
// file capability is only implemented on win32.
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#include <winsock2.h>
|
|
||||||
#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
// These are from win32 winsock2.h
|
|
||||||
typedef unsigned int SOCKET;
|
|
||||||
typedef void * HANDLE;
|
|
||||||
typedef unsigned long DWORD;
|
|
||||||
#define INVALID_SOCKET (SOCKET)(~0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include "Buffer.hpp"
|
|
||||||
|
|
||||||
/** Manages an input/output buffer pair for a socket or file handle. */
|
|
||||||
class IOBuf {
|
|
||||||
public:
|
|
||||||
IOBuf(int inBufLen, int outBufLen);
|
|
||||||
~IOBuf();
|
|
||||||
|
|
||||||
enum ReadLineResult {
|
|
||||||
RL_GOT_DATA,
|
|
||||||
RL_NO_DATA,
|
|
||||||
RL_ERROR
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Change the socket with which this buffer is associated */
|
|
||||||
void setSocket(SOCKET sock);
|
|
||||||
|
|
||||||
// Reading/writing files is only supported on windows.
|
|
||||||
#ifdef WIN32
|
|
||||||
/** Change the output file handle with which this buffer is
|
|
||||||
associated. Currently IOBufs can not be used to read from a file
|
|
||||||
handle. */
|
|
||||||
void setOutputFileHandle(HANDLE handle);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Reset the input and output buffers, without flushing the output
|
|
||||||
data to the socket */
|
|
||||||
void reset();
|
|
||||||
|
|
||||||
/** Try to read a line of data from the given socket without
|
|
||||||
blocking. If was able to read a complete line of data, returns a
|
|
||||||
character pointer to the beginning of the (null-terminated)
|
|
||||||
string. If not, returns NULL, but maintains enough state that
|
|
||||||
subsequent calls to tryReadLine() will not ignore the data
|
|
||||||
already read. NOTE: this skips end-of-line characters (typically
|
|
||||||
CR/LF) as defined by "isEOL()". When switching back and forth
|
|
||||||
between binary and text modes, to be sure no data is lost, pad
|
|
||||||
the beginning and end of the binary transmission with bytes
|
|
||||||
which can not be confused with these characters. */
|
|
||||||
ReadLineResult tryReadLine();
|
|
||||||
|
|
||||||
/** Read a line of data from the given socket, blocking until a
|
|
||||||
line, including EOL, appears. Return the line, or NULL if
|
|
||||||
something goes wrong. */
|
|
||||||
char *readLine();
|
|
||||||
|
|
||||||
/** Get the pointer to the beginning of the (null-terminated) line.
|
|
||||||
This should only be called if tryReadLine() has returned
|
|
||||||
RL_GOT_DATA. This sets the "parsing cursor" to the beginning of
|
|
||||||
the line. */
|
|
||||||
char* getLine();
|
|
||||||
|
|
||||||
// NOTE: any further data-acquisition routines must ALWAYS call
|
|
||||||
// fixupData() at the beginning!
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// Output routines
|
|
||||||
//
|
|
||||||
|
|
||||||
/** Flush the output buffer to the socket. Returns true if
|
|
||||||
succeeded, false if write error occurred. */
|
|
||||||
bool flush();
|
|
||||||
|
|
||||||
/** Write the given string to the output buffer. May flush if output
|
|
||||||
buffer becomes too full to store the data. Not guaranteed to
|
|
||||||
work if string is longer than the size of the output buffer.
|
|
||||||
Does not include the null terminator of the string. Returns true
|
|
||||||
if succeeded, false if write error occurred. */
|
|
||||||
bool writeString(const char* str);
|
|
||||||
|
|
||||||
/** Write the given int to the output buffer. May flush if output
|
|
||||||
buffer becomes too full to store the data. Returns true if
|
|
||||||
succeeded, false if write error occurred. */
|
|
||||||
bool writeInt(int val);
|
|
||||||
|
|
||||||
/** Write the given unsigned int to the output buffer. May flush if
|
|
||||||
output buffer becomes too full to store the data. Returns true
|
|
||||||
if succeeded, false if write error occurred. */
|
|
||||||
bool writeUnsignedInt(unsigned int val);
|
|
||||||
|
|
||||||
/** Write the given boolean to the output buffer. May flush if
|
|
||||||
output buffer becomes too full to store the data. Returns true
|
|
||||||
if succeeded, false if write error occurred. */
|
|
||||||
bool writeBoolAsInt(bool val);
|
|
||||||
|
|
||||||
/** Write the given address to the output buffer. May flush if
|
|
||||||
output buffer becomes too full to store the data. Returns true
|
|
||||||
if succeeded, false if write error occurred. */
|
|
||||||
bool writeAddress(void* val);
|
|
||||||
|
|
||||||
/** Writes a space to the output buffer. May flush if output buffer
|
|
||||||
becomes too full to store the data. Returns true if succeeded,
|
|
||||||
false if write error occurred. */
|
|
||||||
bool writeSpace();
|
|
||||||
|
|
||||||
/** Writes an end-of-line sequence to the output buffer. May flush
|
|
||||||
if output buffer becomes too full to store the data. Returns
|
|
||||||
true if succeeded, false if write error occurred. */
|
|
||||||
bool writeEOL();
|
|
||||||
|
|
||||||
/** Writes a binary character to the output buffer. */
|
|
||||||
bool writeBinChar(char c);
|
|
||||||
|
|
||||||
/** Writes a binary unsigned short in network (big-endian) byte
|
|
||||||
order to the output buffer. */
|
|
||||||
bool writeBinUnsignedShort(unsigned short i);
|
|
||||||
|
|
||||||
/** Writes a binary unsigned int in network (big-endian) byte order
|
|
||||||
to the output buffer. */
|
|
||||||
bool writeBinUnsignedInt(unsigned int i);
|
|
||||||
|
|
||||||
/** Writes a binary buffer to the output buffer. */
|
|
||||||
bool writeBinBuf(char* buf, int size);
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
enum FillState {
|
|
||||||
DONE = 1,
|
|
||||||
MORE_DATA_PENDING = 2,
|
|
||||||
FAILED = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Very specialized routine; fill the output buffer from the given
|
|
||||||
file handle. Caller is responsible for ensuring that there is
|
|
||||||
data to be read on the file handle. */
|
|
||||||
FillState fillFromFileHandle(HANDLE fh, DWORD* numRead);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Binary utility routine (for poke) */
|
|
||||||
static bool isBinEscapeChar(char c);
|
|
||||||
|
|
||||||
private:
|
|
||||||
IOBuf(const IOBuf&);
|
|
||||||
IOBuf& operator=(const IOBuf&);
|
|
||||||
|
|
||||||
// Returns -1 if non-blocking and no data available
|
|
||||||
int readChar(bool block);
|
|
||||||
// Line-oriented reading
|
|
||||||
std::vector<char> curLine;
|
|
||||||
bool gotDataLastTime;
|
|
||||||
|
|
||||||
ReadLineResult doReadLine(bool);
|
|
||||||
|
|
||||||
bool flushImpl(bool moreDataToCome);
|
|
||||||
|
|
||||||
SOCKET fd;
|
|
||||||
HANDLE outHandle;
|
|
||||||
bool usingSocket;
|
|
||||||
|
|
||||||
// Buffers
|
|
||||||
Buffer* inBuf;
|
|
||||||
Buffer* outBuf;
|
|
||||||
|
|
||||||
// Simple finite-state machine to handle binary data
|
|
||||||
enum State {
|
|
||||||
TEXT_STATE,
|
|
||||||
BIN_STATE,
|
|
||||||
EOL_STATE
|
|
||||||
};
|
|
||||||
enum Action {
|
|
||||||
NO_ACTION,
|
|
||||||
GOT_LINE, // TEXT_STATE -> EOL_STATE transition
|
|
||||||
SKIP_EOL_CHAR // EOL_STATE -> EOL_STATE transition
|
|
||||||
};
|
|
||||||
|
|
||||||
State state;
|
|
||||||
Action processChar(char c);
|
|
||||||
|
|
||||||
// Handling incoming binary buffers (poke command)
|
|
||||||
int binPos; // Number of binary characters read so far;
|
|
||||||
// total number to read is binLength + 4
|
|
||||||
int binLength; // Number of binary characters in message;
|
|
||||||
// not valid until binPos >= 4
|
|
||||||
|
|
||||||
bool isEOL(char c);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // #defined _IO_BUF_
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2000, 2001, 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.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
SERVER=SwDbgSrv.exe
|
|
||||||
SUBPROCESS=SwDbgSub.exe
|
|
||||||
|
|
||||||
SERVER_SOURCES = \
|
|
||||||
Buffer.cpp \
|
|
||||||
Dispatcher.cpp \
|
|
||||||
initWinsock.cpp \
|
|
||||||
IOBuf.cpp \
|
|
||||||
ioUtils.cpp \
|
|
||||||
isNT4.cpp \
|
|
||||||
nt4internals.cpp \
|
|
||||||
procList.cpp \
|
|
||||||
Reaper.cpp \
|
|
||||||
SwDbgSrv.cpp \
|
|
||||||
serverLists.cpp \
|
|
||||||
toolHelp.cpp
|
|
||||||
|
|
||||||
SUBPROCESS_SOURCES = \
|
|
||||||
SwDbgSub.cpp \
|
|
||||||
Buffer.cpp \
|
|
||||||
IOBuf.cpp \
|
|
||||||
isNT4.cpp \
|
|
||||||
libInfo.cpp \
|
|
||||||
Monitor.cpp \
|
|
||||||
nt4internals.cpp \
|
|
||||||
toolHelp.cpp
|
|
||||||
|
|
||||||
SERVER_OBJS = $(SERVER_SOURCES:.cpp=.obj)
|
|
||||||
SUBPROCESS_OBJS = $(SUBPROCESS_SOURCES:.cpp=.obj)
|
|
||||||
|
|
||||||
CPP=cl.exe
|
|
||||||
LINK32=link.exe
|
|
||||||
|
|
||||||
# These do not need to be optimized (don't run a lot of code) and it
|
|
||||||
# will be useful to have the assertion checks in place
|
|
||||||
|
|
||||||
CFLAGS=/nologo /MD /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
|
||||||
|
|
||||||
LIBS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib \
|
|
||||||
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib \
|
|
||||||
winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib \
|
|
||||||
odbccp32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386
|
|
||||||
|
|
||||||
default: $(SERVER) $(SUBPROCESS)
|
|
||||||
|
|
||||||
$(SERVER): $(SERVER_OBJS)
|
|
||||||
$(LINK32) /out:$@ $(SERVER_OBJS) $(LIBS)
|
|
||||||
|
|
||||||
$(SUBPROCESS): $(SUBPROCESS_OBJS)
|
|
||||||
$(LINK32) /out:$@ $(SUBPROCESS_OBJS) $(LIBS)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f *.obj *.idb *.pch *.pdb *.ncb *.opt *.plg *.exe *.ilk
|
|
||||||
|
|
||||||
.cpp.obj:
|
|
||||||
@ $(CPP) $(CFLAGS) /o $@ $<
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 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.
|
|
||||||
*
|
|
||||||
* 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 _MESSAGE_
|
|
||||||
#define _MESSAGE_
|
|
||||||
|
|
||||||
// These are the commands sent from the server to the child processes
|
|
||||||
// over the child processes' stdin pipes. A subset of the commands
|
|
||||||
// understood by the overall system, these require responses from the
|
|
||||||
// child process. Having a data structure rather than sending text
|
|
||||||
// simplifies parsing on the child side. The child replies by sending
|
|
||||||
// back fully-formatted replies which are copied by the server process
|
|
||||||
// to the clients' sockets.
|
|
||||||
|
|
||||||
struct PeekArg {
|
|
||||||
DWORD address;
|
|
||||||
DWORD numBytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
// NOTE: when sending a PokeArg to the child process, we handle the
|
|
||||||
// buffer specially
|
|
||||||
struct PokeArg {
|
|
||||||
DWORD address;
|
|
||||||
DWORD numBytes;
|
|
||||||
void* data;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Used for continueevent
|
|
||||||
struct BoolArg {
|
|
||||||
bool val;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Used for duphandle, closehandle, and getcontext
|
|
||||||
struct HandleArg {
|
|
||||||
HANDLE handle;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Used for setcontext
|
|
||||||
const int NUM_REGS_IN_CONTEXT = 22;
|
|
||||||
struct SetContextArg {
|
|
||||||
HANDLE handle;
|
|
||||||
DWORD Eax;
|
|
||||||
DWORD Ebx;
|
|
||||||
DWORD Ecx;
|
|
||||||
DWORD Edx;
|
|
||||||
DWORD Esi;
|
|
||||||
DWORD Edi;
|
|
||||||
DWORD Ebp;
|
|
||||||
DWORD Esp;
|
|
||||||
DWORD Eip;
|
|
||||||
DWORD Ds;
|
|
||||||
DWORD Es;
|
|
||||||
DWORD Fs;
|
|
||||||
DWORD Gs;
|
|
||||||
DWORD Cs;
|
|
||||||
DWORD Ss;
|
|
||||||
DWORD EFlags;
|
|
||||||
DWORD Dr0;
|
|
||||||
DWORD Dr1;
|
|
||||||
DWORD Dr2;
|
|
||||||
DWORD Dr3;
|
|
||||||
DWORD Dr6;
|
|
||||||
DWORD Dr7;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Used for selectorentry
|
|
||||||
struct SelectorEntryArg {
|
|
||||||
HANDLE handle;
|
|
||||||
DWORD selector;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Message {
|
|
||||||
typedef enum {
|
|
||||||
ATTACH,
|
|
||||||
DETACH,
|
|
||||||
LIBINFO,
|
|
||||||
PEEK,
|
|
||||||
POKE,
|
|
||||||
THREADLIST,
|
|
||||||
DUPHANDLE,
|
|
||||||
CLOSEHANDLE,
|
|
||||||
GETCONTEXT,
|
|
||||||
SETCONTEXT,
|
|
||||||
SELECTORENTRY,
|
|
||||||
SUSPEND,
|
|
||||||
RESUME,
|
|
||||||
POLLEVENT,
|
|
||||||
CONTINUEEVENT
|
|
||||||
} Type;
|
|
||||||
|
|
||||||
Type type;
|
|
||||||
union {
|
|
||||||
PeekArg peekArg;
|
|
||||||
PokeArg pokeArg;
|
|
||||||
BoolArg boolArg;
|
|
||||||
HandleArg handleArg;
|
|
||||||
SetContextArg setContextArg;
|
|
||||||
SelectorEntryArg selectorArg;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // #defined _MESSAGE_
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2001, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include "Monitor.hpp"
|
|
||||||
|
|
||||||
Monitor::Monitor() {
|
|
||||||
_lock_count = -1; // No threads have entered the critical section
|
|
||||||
_owner = NULL;
|
|
||||||
_lock_event = CreateEvent(NULL, false, false, NULL);
|
|
||||||
_wait_event = CreateEvent(NULL, true, false, NULL);
|
|
||||||
_counter = 0;
|
|
||||||
_tickets = 0;
|
|
||||||
_waiters = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Monitor::~Monitor() {
|
|
||||||
assert(_owner == NULL); // Otherwise, owned monitor being deleted
|
|
||||||
assert(_lock_count == -1); // Otherwise, monitor being deleted with non -1 lock count
|
|
||||||
CloseHandle(_lock_event);
|
|
||||||
CloseHandle(_wait_event);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Monitor::lock() {
|
|
||||||
if (InterlockedIncrement(&_lock_count) == 0) {
|
|
||||||
// Success, we now own the lock
|
|
||||||
} else {
|
|
||||||
DWORD dwRet = WaitForSingleObject((HANDLE)_lock_event, INFINITE);
|
|
||||||
assert(dwRet == WAIT_OBJECT_0); // Unexpected return value from WaitForSingleObject
|
|
||||||
}
|
|
||||||
assert(owner() == NULL); // Otherwise, lock count and owner are inconsistent
|
|
||||||
setOwner(GetCurrentThread());
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Monitor::unlock() {
|
|
||||||
setOwner(NULL);
|
|
||||||
if (InterlockedDecrement(&_lock_count) >= 0) {
|
|
||||||
// Wake a waiting thread up
|
|
||||||
DWORD dwRet = SetEvent(_lock_event);
|
|
||||||
assert(dwRet != 0); // Unexpected return value from SetEvent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Monitor::wait(long timeout) {
|
|
||||||
assert(owner() != NULL);
|
|
||||||
assert(owner() == GetCurrentThread());
|
|
||||||
|
|
||||||
// 0 means forever. Convert to Windows specific code.
|
|
||||||
DWORD timeout_value = (timeout == 0) ? INFINITE : timeout;
|
|
||||||
DWORD which;
|
|
||||||
|
|
||||||
long c = _counter;
|
|
||||||
bool retry = false;
|
|
||||||
|
|
||||||
_waiters++;
|
|
||||||
// Loop until condition variable is signaled. The event object is
|
|
||||||
// set whenever the condition variable is signaled, and tickets will
|
|
||||||
// reflect the number of threads which have been notified. The counter
|
|
||||||
// field is used to make sure we don't respond to notifications that
|
|
||||||
// have occurred *before* we started waiting, and is incremented each
|
|
||||||
// time the condition variable is signaled.
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
|
|
||||||
// Leave critical region
|
|
||||||
unlock();
|
|
||||||
|
|
||||||
// If this is a retry, let other low-priority threads have a chance
|
|
||||||
// to run. Make sure that we sleep outside of the critical section.
|
|
||||||
if (retry) {
|
|
||||||
Sleep(1);
|
|
||||||
} else {
|
|
||||||
retry = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
which = WaitForSingleObject(_wait_event, timeout_value);
|
|
||||||
// Enter critical section
|
|
||||||
lock();
|
|
||||||
|
|
||||||
if (_tickets != 0 && _counter != c) break;
|
|
||||||
|
|
||||||
if (which == WAIT_TIMEOUT) {
|
|
||||||
--_waiters;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_waiters--;
|
|
||||||
|
|
||||||
// If this was the last thread to be notified, then we need to reset
|
|
||||||
// the event object.
|
|
||||||
if (--_tickets == 0) {
|
|
||||||
ResetEvent(_wait_event);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify a single thread waiting on this monitor
|
|
||||||
bool
|
|
||||||
Monitor::notify() {
|
|
||||||
assert(ownedBySelf()); // Otherwise, notify on unknown thread
|
|
||||||
|
|
||||||
if (_waiters > _tickets) {
|
|
||||||
if (!SetEvent(_wait_event)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_tickets++;
|
|
||||||
_counter++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify all threads waiting on this monitor
|
|
||||||
bool
|
|
||||||
Monitor::notifyAll() {
|
|
||||||
assert(ownedBySelf()); // Otherwise, notifyAll on unknown thread
|
|
||||||
|
|
||||||
if (_waiters > 0) {
|
|
||||||
if (!SetEvent(_wait_event)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_tickets = _waiters;
|
|
||||||
_counter++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
HANDLE
|
|
||||||
Monitor::owner() {
|
|
||||||
return _owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Monitor::setOwner(HANDLE owner) {
|
|
||||||
if (owner != NULL) {
|
|
||||||
assert(_owner == NULL); // Setting owner thread of already owned monitor
|
|
||||||
assert(owner == GetCurrentThread()); // Else should not be doing this
|
|
||||||
} else {
|
|
||||||
HANDLE oldOwner = _owner;
|
|
||||||
assert(oldOwner != NULL); // Removing the owner thread of an unowned mutex
|
|
||||||
assert(oldOwner == GetCurrentThread());
|
|
||||||
}
|
|
||||||
_owner = owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Monitor::ownedBySelf() {
|
|
||||||
return (_owner == GetCurrentThread());
|
|
||||||
}
|
|
||||||
@@ -1,246 +0,0 @@
|
|||||||
This debug server uses a largely text-based protocol, except for
|
|
||||||
certain bulk data transfer operations. All text is in single-byte
|
|
||||||
US-ASCII except for the strings returned in "proclist".
|
|
||||||
|
|
||||||
NOTE that the character '|' (vertical bar) is used as an escape
|
|
||||||
character to switch the incoming data stream to the debug server into
|
|
||||||
binary mode, so no text command may contain that character.
|
|
||||||
|
|
||||||
Commands understood:
|
|
||||||
|
|
||||||
ascii <EOL> ::=
|
|
||||||
|
|
||||||
Changes to ASCII mode. This affects all outgoing strings. At
|
|
||||||
startup the system is in unicode mode.
|
|
||||||
|
|
||||||
unicode <EOL> ::=
|
|
||||||
|
|
||||||
Changes to UNICODE mode. This affects all outgoing strings. This
|
|
||||||
is the default mode upon startup.
|
|
||||||
|
|
||||||
proclist <EOL> ::=
|
|
||||||
<int num> [<unsigned int pid> <int charSize> <int numChars> [<binary char_t name>]...]... <EOL>
|
|
||||||
|
|
||||||
Returns integer indicating number of processes to follow, followed
|
|
||||||
by (pid, name) pairs. Names are given by (charSize, numChars,
|
|
||||||
[char_t]...) tuples; charSize indicates the size of each character
|
|
||||||
in bytes, numChars the number of characters in the string, and
|
|
||||||
name the raw data for the string. Each individual character of the
|
|
||||||
string, if multi-byte, is transmitted in network byte order.
|
|
||||||
numChars and name are guaranteed to be separated by precisely one
|
|
||||||
US-ASCII space. If process list is not available because of
|
|
||||||
limitations of the underlying operating system, number of
|
|
||||||
processes returned is 0.
|
|
||||||
|
|
||||||
attach <int pid> <EOL> ::= <bool result> <EOL>
|
|
||||||
|
|
||||||
Attempts to attach to the specified process. Returns 1 if
|
|
||||||
successful, 0 if not. Will fail if already attached or if the
|
|
||||||
process ID does not exist. Attaching to a process causes the
|
|
||||||
process to be suspended.
|
|
||||||
|
|
||||||
detach <EOL> ::= <bool result> <EOL>
|
|
||||||
|
|
||||||
Detaches from the given process. Attaching and detaching multiple
|
|
||||||
times during a debugging session is allowed. Detaching causes the
|
|
||||||
process to resume execution.
|
|
||||||
|
|
||||||
libinfo <EOL> ::=
|
|
||||||
<int numLibs> [<int charSize> <int numChars> [<binary char_t name>]... <address baseAddr>]... <EOL>
|
|
||||||
|
|
||||||
May only be called once attached and the target process must be
|
|
||||||
suspended; otherwise, returns 0. Returns list of the full path
|
|
||||||
names of all of the loaded modules (including the executable
|
|
||||||
image) in the target process, as well as the base address at which
|
|
||||||
each module was relocated. See proclist for format of strings, but
|
|
||||||
NOTE that charSize is ALWAYS 1 for this particular routine,
|
|
||||||
regardless of the setting of ASCII/UNICODE.
|
|
||||||
|
|
||||||
peek <address addr> <unsigned int numBytes> <EOL> ::=
|
|
||||||
B<binary char success>
|
|
||||||
[<binary unsigned int len> <binary char isMapped> [<binary char data>]...]...
|
|
||||||
|
|
||||||
NOTE that the binary portion of this message is prefixed by the
|
|
||||||
uppercase US-ASCII letter 'B', allowing easier synchronization by
|
|
||||||
clients. There is no data between the 'B' and the rest of the
|
|
||||||
message.
|
|
||||||
|
|
||||||
May only be called once attached. Reads the address space of the
|
|
||||||
target process starting at the given address (see below for format
|
|
||||||
specifications) and extending the given number of bytes. Whether
|
|
||||||
the read succeeded is indicated by a single byte containing a 1 or
|
|
||||||
0 (success or failure). If successful, the return result is given
|
|
||||||
in a sequence of ranges. _len_, the length of each range, is
|
|
||||||
indicated by a 32-bit unsigned integer transmitted with big-endian
|
|
||||||
byte ordering (i.e., most significant byte first). _isMapped_
|
|
||||||
indicates whether the range is mapped or unmapped in the target
|
|
||||||
process's address space, and will contain the value 1 or 0 for
|
|
||||||
mapped or unmapped, respectively. If the range is mapped,
|
|
||||||
_isMapped_ is followed by _data_, containing the raw binary data
|
|
||||||
for the range. The sum of all ranges' lengths is guaranteed to be
|
|
||||||
equivalent to the number of bytes requested.
|
|
||||||
|
|
||||||
poke <address addr> |[<binary unsigned int len> [<binary char data>]] <EOL> ::=
|
|
||||||
<bool result> <EOL>
|
|
||||||
|
|
||||||
NOTE that the binary portion of this message is prefixed by the
|
|
||||||
uppercase US-ASCII character '|' (vertical bar), allowing easier
|
|
||||||
synchronization by the server. There is no data between the '|'
|
|
||||||
and the rest of the message. ('B' is not used here because
|
|
||||||
addresses can contain that letter; no alphanumeric characters are
|
|
||||||
used because some of the parsing routines are used by the Solaris
|
|
||||||
SA port, and in that port any alphanumeric character can show up
|
|
||||||
as a part of a symbol being looked up.)
|
|
||||||
|
|
||||||
May only be called once attached. Writes the address space of the
|
|
||||||
target process starting at the given address (see below for format
|
|
||||||
specifications), extending the given number of bytes, and
|
|
||||||
containing the given data. The number of bytes is a 32-bit
|
|
||||||
unsigned integer transmitted with big-endian byte ordering (i.e.,
|
|
||||||
most significant byte first). This is followed by the raw binary
|
|
||||||
data to be placed at that address. The number of bytes of data
|
|
||||||
must match the number of bytes specified in the message.
|
|
||||||
|
|
||||||
Returns true if the write succeeded; false if it failed, for
|
|
||||||
example because a portion of the region was not mapped in the
|
|
||||||
target address space.
|
|
||||||
|
|
||||||
threadlist <EOL> ::= <int numThreads> [<address threadHandle>...] <EOL>
|
|
||||||
|
|
||||||
May only be called once attached and the target process must be
|
|
||||||
suspended; otherwise, returns 0. If available, returns handles for
|
|
||||||
all of the threads in the target process. These handles may be
|
|
||||||
used as arguments to the getcontext and selectorentry
|
|
||||||
commands. They do not need to be (and should not be) duplicated
|
|
||||||
via the duphandle command and must not be closed via the
|
|
||||||
closehandle command.
|
|
||||||
|
|
||||||
duphandle <address handle> <EOL> ::=
|
|
||||||
<bool success> [<address duplicate>] <EOL>
|
|
||||||
|
|
||||||
Duplicates a HANDLE read from the target process's address space.
|
|
||||||
HANDLE is a Windows construct (typically typedef'd to void *).
|
|
||||||
The returned handle should ultimately be closed via the
|
|
||||||
closehandle command; failing to do so can cause resource leaks.
|
|
||||||
|
|
||||||
The purpose of this command is to allow the debugger to read the
|
|
||||||
value of a thread handle from the target process and query its
|
|
||||||
register set and thread selector entries via the getcontext and
|
|
||||||
selectorentry commands, below; such use implies that the target
|
|
||||||
program has its own notion of the thread list, and further, that
|
|
||||||
the debugger has a way of locating that thread list.
|
|
||||||
|
|
||||||
closehandle <address handle> <EOL> ::=
|
|
||||||
|
|
||||||
Closes a handle retrieved via the duphandle command, above.
|
|
||||||
|
|
||||||
getcontext <address threadHandle> <EOL> ::= <bool success> [<context>] <EOL>
|
|
||||||
|
|
||||||
Returns the context for the given thread. The handle must either
|
|
||||||
be one of the handles returned from the threadlist command or the
|
|
||||||
result of duplicating a thread handle out of the target process
|
|
||||||
via the duphandle command. The target process must be suspended.
|
|
||||||
|
|
||||||
The context is returned as a series of hex values which represent
|
|
||||||
the following x86 registers in the following order:
|
|
||||||
EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP, DS, ES, FS, GS,
|
|
||||||
CS, SS, EFLAGS, DR0, DR1, DR2, DR3, DR6, DR7
|
|
||||||
|
|
||||||
FIXME: needs to be generalized and/or specified for other
|
|
||||||
architectures.
|
|
||||||
|
|
||||||
setcontext <address threadHandle> <context> ::= <bool success> <EOL>
|
|
||||||
|
|
||||||
Sets the context of the given thread. The target process must be
|
|
||||||
suspended. See the getcontext command for the ordering of the
|
|
||||||
registers in the context.
|
|
||||||
|
|
||||||
Even if the setcontext command succeeds, some of the bits in some
|
|
||||||
of the registers (like the global enable bits in the debug
|
|
||||||
registers) may be overridden by the operating system. To ensure
|
|
||||||
the debugger's notion of the register set is up to date, it is
|
|
||||||
recommended to follow up a setcontext with a getcontext.
|
|
||||||
|
|
||||||
selectorentry <address threadHandle> <int selector> <EOL> ::=
|
|
||||||
<bool success>
|
|
||||||
[<address limitLow> <address baseLow>
|
|
||||||
<address baseMid> <address flags1>
|
|
||||||
<address flags2> <address baseHi>] <EOL>
|
|
||||||
|
|
||||||
Retrieves a descriptor table entry for the given thread and
|
|
||||||
selector. This data structure allows conversion of a
|
|
||||||
segment-relative address to a linear virtual address. It is most
|
|
||||||
useful for locating the Thread Information Block for a given
|
|
||||||
thread handle to be able to find that thread's ID, to be able to
|
|
||||||
understand whether two different thread handles in fact refer to
|
|
||||||
the same underlying thread.
|
|
||||||
|
|
||||||
This command will only work on the X86 architecture and will
|
|
||||||
return false for the success flag (with no additional information
|
|
||||||
sent) on other architectures.
|
|
||||||
|
|
||||||
suspend ::=
|
|
||||||
|
|
||||||
Suspends the target process. Must be attached to a target process.
|
|
||||||
A process is suspended when attached to via the attach command. If
|
|
||||||
the target process is already suspended then this command has no
|
|
||||||
effect.
|
|
||||||
|
|
||||||
resume ::=
|
|
||||||
|
|
||||||
Resumes the target process without detaching from it. Must be
|
|
||||||
attached to a target process. After resuming a target process, the
|
|
||||||
debugger client must be prepared to poll for events from the
|
|
||||||
target process fairly frequently in order for execution in the
|
|
||||||
target process to proceed normally. If the target process is
|
|
||||||
already resumed then this command has no effect.
|
|
||||||
|
|
||||||
pollevent ::=
|
|
||||||
<bool eventPresent> [<address threadHandle> <unsigned int eventCode>]
|
|
||||||
|
|
||||||
Additional entries in result for given eventCode:
|
|
||||||
|
|
||||||
LOAD/UNLOAD_DLL_DEBUG_EVENT: <address baseOfDLL>
|
|
||||||
EXCEPTION_DEBUG_EVENT: <unsigned int exceptionCode> <address faultingPC>
|
|
||||||
|
|
||||||
Additional entries for given exceptionCode:
|
|
||||||
|
|
||||||
EXCEPTION_ACCESS_VIOLATION: <bool wasWrite> <address faultingAddress>
|
|
||||||
|
|
||||||
<EOL>
|
|
||||||
|
|
||||||
Polls once to see whether a debug event has been generated by the
|
|
||||||
target process. If none is present, returns 0 immediately.
|
|
||||||
Otherwise, returns 1 along with a series of textual information
|
|
||||||
about the event. The event is not cleared, and the thread resumed,
|
|
||||||
until the continueevent command is sent, or the debugger client
|
|
||||||
detaches from the target process.
|
|
||||||
|
|
||||||
Typically a debugger client will suspend the target process upon
|
|
||||||
reception of a debug event. Otherwise, it is not guaranteed that
|
|
||||||
all threads will be suspended upon reception of a debug event, and
|
|
||||||
any operations requiring that threads be suspended (including
|
|
||||||
fetching the context for the thread which generated the event)
|
|
||||||
will fail.
|
|
||||||
|
|
||||||
continueevent <bool passEventToClient> ::= <bool success> <EOL>
|
|
||||||
|
|
||||||
Indicates that the current debug event has been used by the
|
|
||||||
debugger client and that the target process should be resumed. The
|
|
||||||
passEventToClient flag indicates whether the event should be
|
|
||||||
propagated to the target process. Breakpoint and single-step
|
|
||||||
events should not be propagated to the target. Returns false if
|
|
||||||
there was no pending event, true otherwise.
|
|
||||||
|
|
||||||
exit <EOL>
|
|
||||||
|
|
||||||
Exits this debugger session.
|
|
||||||
|
|
||||||
Format specifications:
|
|
||||||
|
|
||||||
// Data formats and example values:
|
|
||||||
<EOL> ::= end of line (typically \n on Unix platforms, or \n\r on Windows)
|
|
||||||
<address> ::= 0x12345678[9ABCDEF0] /* up to 64-bit hex value */
|
|
||||||
<unsigned int> ::= 5 /* up to 32-bit integer number; no leading sign */
|
|
||||||
<bool> ::= 1 /* ASCII '0' or '1' */
|
|
||||||
<context> ::= <address> ...
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
This is a "Simple Windows Debug Server" written for the purpose of
|
|
||||||
enabling the Serviceability Agent on Win32. It has backends both for
|
|
||||||
Windows NT 4.0 (using internal Windows APIs for a few routines) as
|
|
||||||
well as for 95/98/ME/2000 via the Tool Help APIs.
|
|
||||||
|
|
||||||
The reason this debug server is necessary is that the Win32 debug APIs
|
|
||||||
by design tear down the target process when the debugger exits (see
|
|
||||||
knowledge base article Q164205 on msdn.microsoft.com). On Solaris, one
|
|
||||||
can attach to and detach from a process with no effect; this is key to
|
|
||||||
allowing dbx and gcore to work.
|
|
||||||
|
|
||||||
The Simple Windows Debug Server effectively implements attach/detach
|
|
||||||
functionality for arbitrary debug clients. This allows the SA to
|
|
||||||
attach non-destructively to a process, and will enable gcore for Win32
|
|
||||||
to be written shortly. While the debugger (the "client" in all of the
|
|
||||||
source code) is attached, the target process is suspended. (Note that
|
|
||||||
the debug server could be extended to support resumption of the target
|
|
||||||
process and transmission of debug events over to the debugger, but
|
|
||||||
this has been left for the future.)
|
|
||||||
|
|
||||||
The makefile (type "nmake") builds two executables: SwDbgSrv.exe,
|
|
||||||
which is the server process, and SwDbgSub.exe, which is forked by the
|
|
||||||
server and should not be directly invoked by the user.
|
|
||||||
|
|
||||||
The intent is that these two executables can be installed into
|
|
||||||
C:\WINNT\SYSTEM32 and SwDbgSrv installed to run as a service (on NT),
|
|
||||||
for example using ServiceInstaller (http://www.kcmultimedia.com/smaster/).
|
|
||||||
However, SwDbgSrv can also be run from the command line. It generates
|
|
||||||
no text output unless the source code is changed to enable debugging
|
|
||||||
printouts. As long as any processes which have been attached to by the
|
|
||||||
SA are alive, the SwDbgSrv and any forked SwDbgSub processes must be
|
|
||||||
left running. Terminating them will cause termination of the target
|
|
||||||
processes.
|
|
||||||
|
|
||||||
The debug server opens port 27000 and accepts incoming connections
|
|
||||||
from localhost only. The security model assumes that if one can run a
|
|
||||||
process on the given machine then one basically has access to most or
|
|
||||||
all of the machine's facilities; this seems to be in line with the
|
|
||||||
standard Windows security model. The protocol used is text-based, so
|
|
||||||
one can debug the debug server using telnet. See README-commands.txt
|
|
||||||
for documentation on the supported commands.
|
|
||||||
|
|
||||||
Testing indicates that the performance impact of attaching to a
|
|
||||||
process (and therefore permanently attaching a debugger) is minimal.
|
|
||||||
Some serious performance problems had been seen which ultimately
|
|
||||||
appeared to be a lack of physical memory on the machine running the
|
|
||||||
system.
|
|
||||||
|
|
||||||
Bugs:
|
|
||||||
|
|
||||||
This debug server is fundamentally incompatible with the Visual C++
|
|
||||||
debugger. Once the debug server is used to attach to a process, the
|
|
||||||
Visual C++ IDE will not be able to attach to the same process (even if
|
|
||||||
the debug server is "detached" from that process). Note that this
|
|
||||||
system is designed to work with the same primitives that C and C++
|
|
||||||
debuggers use (like "symbol lookup" and "read from process memory")
|
|
||||||
and exposes these primitives to Java, so in the long term we could
|
|
||||||
solve this problem by implementing platform-specific debug symbol
|
|
||||||
parsing and a platform-independent C++ debugger in Java.
|
|
||||||
|
|
||||||
Note:
|
|
||||||
|
|
||||||
The files IOBuf.cpp and IOBuf.hpp are also used in
|
|
||||||
building src/os/solaris/agent.
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include "Reaper.hpp"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
Reaper::Reaper(ReaperCB* cb) {
|
|
||||||
InitializeCriticalSection(&crit);
|
|
||||||
event = CreateEvent(NULL, TRUE, FALSE, NULL);
|
|
||||||
this->cb = cb;
|
|
||||||
|
|
||||||
active = false;
|
|
||||||
shouldShutDown = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Reaper::start() {
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
EnterCriticalSection(&crit);
|
|
||||||
|
|
||||||
if (!active) {
|
|
||||||
DWORD id;
|
|
||||||
HANDLE reaper = CreateThread(NULL, 0, &Reaper::reaperThreadEntry,
|
|
||||||
this, 0, &id);
|
|
||||||
if (reaper != NULL) {
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveCriticalSection(&crit);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Reaper::stop() {
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
EnterCriticalSection(&crit);
|
|
||||||
|
|
||||||
if (active) {
|
|
||||||
shouldShutDown = true;
|
|
||||||
SetEvent(event);
|
|
||||||
while (active) {
|
|
||||||
Sleep(1);
|
|
||||||
}
|
|
||||||
shouldShutDown = false;
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveCriticalSection(&crit);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Reaper::registerProcess(HANDLE processHandle, void* userData) {
|
|
||||||
ProcessInfo info;
|
|
||||||
|
|
||||||
info.handle = processHandle;
|
|
||||||
info.userData = userData;
|
|
||||||
|
|
||||||
EnterCriticalSection(&crit);
|
|
||||||
|
|
||||||
procInfo.push_back(info);
|
|
||||||
SetEvent(event);
|
|
||||||
|
|
||||||
LeaveCriticalSection(&crit);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Reaper::reaperThread() {
|
|
||||||
while (!shouldShutDown) {
|
|
||||||
// Take atomic snapshot of the current process list and user data
|
|
||||||
EnterCriticalSection(&crit);
|
|
||||||
|
|
||||||
int num = procInfo.size();
|
|
||||||
HANDLE* handleList = new HANDLE[1 + num];
|
|
||||||
void** dataList = new void*[num];
|
|
||||||
for (int i = 0; i < num; i++) {
|
|
||||||
handleList[i] = procInfo[i].handle;
|
|
||||||
dataList[i] = procInfo[i].userData;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveCriticalSection(&crit);
|
|
||||||
|
|
||||||
// Topmost handle becomes the event object, so other threads can
|
|
||||||
// signal this one to notice differences in the above list (or
|
|
||||||
// shut down)
|
|
||||||
handleList[num] = event;
|
|
||||||
|
|
||||||
// Wait for these objects
|
|
||||||
DWORD idx = WaitForMultipleObjects(1 + num, handleList,
|
|
||||||
FALSE, INFINITE);
|
|
||||||
if ((idx >= WAIT_OBJECT_0) && (idx <= WAIT_OBJECT_0 + num)) {
|
|
||||||
idx -= WAIT_OBJECT_0;
|
|
||||||
if (idx < num) {
|
|
||||||
// A process exited (i.e., it wasn't that we were woken up
|
|
||||||
// just because the event went off)
|
|
||||||
(*cb)(dataList[idx]);
|
|
||||||
// Remove this process from the list (NOTE: requires that
|
|
||||||
// ordering does not change, i.e., that all additions are to
|
|
||||||
// the back of the process list)
|
|
||||||
EnterCriticalSection(&crit);
|
|
||||||
|
|
||||||
std::vector<ProcessInfo>::iterator iter = procInfo.begin();
|
|
||||||
iter += idx;
|
|
||||||
procInfo.erase(iter);
|
|
||||||
|
|
||||||
LeaveCriticalSection(&crit);
|
|
||||||
} else {
|
|
||||||
// Notification from other thread
|
|
||||||
ResetEvent(event);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Unexpected return value. For now, warn.
|
|
||||||
cerr << "Reaper::reaperThread(): unexpected return value "
|
|
||||||
<< idx << " from WaitForMultipleObjects" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean up these lists
|
|
||||||
delete[] handleList;
|
|
||||||
delete[] dataList;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Time to shut down
|
|
||||||
active = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI
|
|
||||||
Reaper::reaperThreadEntry(LPVOID data) {
|
|
||||||
Reaper* reaper = (Reaper*) data;
|
|
||||||
reaper->reaperThread();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 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.
|
|
||||||
*
|
|
||||||
* 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 _REAPER_
|
|
||||||
#define _REAPER_
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
typedef void ReaperCB(void* userData);
|
|
||||||
|
|
||||||
/** A Reaper maintains a thread which waits for child processes to
|
|
||||||
terminate; upon termination it calls a user-specified ReaperCB to
|
|
||||||
clean up resources associated with those child processes. */
|
|
||||||
|
|
||||||
class Reaper {
|
|
||||||
private:
|
|
||||||
Reaper& operator=(const Reaper&);
|
|
||||||
Reaper(const Reaper&);
|
|
||||||
|
|
||||||
public:
|
|
||||||
Reaper(ReaperCB*);
|
|
||||||
~Reaper();
|
|
||||||
|
|
||||||
// Start the reaper thread.
|
|
||||||
bool start();
|
|
||||||
|
|
||||||
// Stop the reaper thread. This is called automatically in the
|
|
||||||
// reaper's destructor. It is not thread safe and should be called
|
|
||||||
// by at most one thread at a time.
|
|
||||||
bool stop();
|
|
||||||
|
|
||||||
// Register a given child process with the reaper. This should be
|
|
||||||
// called by the application's main thread. When that process
|
|
||||||
// terminates, the cleanup callback will be called with the
|
|
||||||
// specified userData in the context of the reaper thread. Callbacks
|
|
||||||
// are guaranteed to be called serially, so they can safely refer to
|
|
||||||
// static data as well as the given user data.
|
|
||||||
void registerProcess(HANDLE processHandle, void* userData);
|
|
||||||
|
|
||||||
private:
|
|
||||||
// For thread safety of register()
|
|
||||||
CRITICAL_SECTION crit;
|
|
||||||
|
|
||||||
ReaperCB* cb;
|
|
||||||
|
|
||||||
// State variables
|
|
||||||
volatile bool active;
|
|
||||||
volatile bool shouldShutDown;
|
|
||||||
|
|
||||||
struct ProcessInfo {
|
|
||||||
HANDLE handle;
|
|
||||||
void* userData;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Bookkeeping
|
|
||||||
std::vector<ProcessInfo> procInfo;
|
|
||||||
|
|
||||||
// Synchronization between application thread and reaper thread
|
|
||||||
HANDLE event;
|
|
||||||
|
|
||||||
// Entry point for reaper thread
|
|
||||||
void reaperThread();
|
|
||||||
|
|
||||||
// Static function which is actual thread entry point
|
|
||||||
static DWORD WINAPI reaperThreadEntry(LPVOID data);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // #defined _REAPER_
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,146 +0,0 @@
|
|||||||
# Microsoft Developer Studio Project File - Name="SwDbgSrv" - Package Owner=<4>
|
|
||||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
|
||||||
# ** DO NOT EDIT **
|
|
||||||
|
|
||||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
|
||||||
|
|
||||||
CFG=SwDbgSrv - Win32 Debug
|
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
|
||||||
!MESSAGE use the Export Makefile command and run
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "SwDbgSrv.mak".
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "SwDbgSrv.mak" CFG="SwDbgSrv - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "SwDbgSrv - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "SwDbgSrv - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
|
|
||||||
# Begin Project
|
|
||||||
# PROP AllowPerConfigDependencies 0
|
|
||||||
# PROP Scc_ProjName ""
|
|
||||||
# PROP Scc_LocalPath ""
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "SwDbgSrv - Win32 Release"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 0
|
|
||||||
# PROP BASE Output_Dir "Release"
|
|
||||||
# PROP BASE Intermediate_Dir "Release"
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 0
|
|
||||||
# PROP Output_Dir "Release"
|
|
||||||
# PROP Intermediate_Dir "Release"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
|
||||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
|
||||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
|
||||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SwDbgSrv - Win32 Debug"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
|
||||||
# PROP BASE Output_Dir "SwDbgSrv___Win32_Debug"
|
|
||||||
# PROP BASE Intermediate_Dir "SwDbgSrv___Win32_Debug"
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 1
|
|
||||||
# PROP Output_Dir "Debug"
|
|
||||||
# PROP Intermediate_Dir "Debug"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
|
||||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
|
||||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
|
||||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# Begin Target
|
|
||||||
|
|
||||||
# Name "SwDbgSrv - Win32 Release"
|
|
||||||
# Name "SwDbgSrv - Win32 Debug"
|
|
||||||
# Begin Group "Source Files"
|
|
||||||
|
|
||||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\Buffer.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\Dispatcher.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\initWinsock.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\IOBuf.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\ioUtils.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\isNT4.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\nt4internals.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\procList.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\Reaper.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\serverLists.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\SwDbgSrv.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\toolHelp.cpp
|
|
||||||
# End Source File
|
|
||||||
# End Group
|
|
||||||
# Begin Group "Header Files"
|
|
||||||
|
|
||||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
|
||||||
# End Group
|
|
||||||
# Begin Group "Resource Files"
|
|
||||||
|
|
||||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
|
||||||
# End Group
|
|
||||||
# End Target
|
|
||||||
# End Project
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
|
||||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
Project: "SwDbgSrv"=.\SwDbgSrv.dsp - Package Owner=<4>
|
|
||||||
|
|
||||||
Package=<5>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
Package=<4>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
Project: "SwDbgSub"=.\SwDbgSub.dsp - Package Owner=<4>
|
|
||||||
|
|
||||||
Package=<5>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
Package=<4>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
Global:
|
|
||||||
|
|
||||||
Package=<5>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
Package=<3>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
@@ -1,883 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2003, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This is the source code for the subprocess forked by the Simple
|
|
||||||
// Windows Debug Server. It assumes most of the responsibility for the
|
|
||||||
// debug session, and processes all of the commands sent by clients.
|
|
||||||
|
|
||||||
// Disable too-long symbol warnings
|
|
||||||
#pragma warning ( disable : 4786 )
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <vector>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <assert.h>
|
|
||||||
// Must come before windows.h
|
|
||||||
#include <winsock2.h>
|
|
||||||
#include <windows.h>
|
|
||||||
#include "IOBuf.hpp"
|
|
||||||
#include "libInfo.hpp"
|
|
||||||
#include "LockableList.hpp"
|
|
||||||
#include "Message.hpp"
|
|
||||||
#include "Monitor.hpp"
|
|
||||||
#include "nt4internals.hpp"
|
|
||||||
|
|
||||||
// Uncomment the #define below to get messages on stderr
|
|
||||||
// #define DEBUGGING
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
DWORD pid;
|
|
||||||
HANDLE procHandle;
|
|
||||||
IOBuf* ioBuf;
|
|
||||||
|
|
||||||
// State flags indicating whether the attach to the remote process
|
|
||||||
// definitively succeeded or failed
|
|
||||||
volatile bool attachFailed = false;
|
|
||||||
volatile bool attachSucceeded = false;
|
|
||||||
|
|
||||||
// State flag indicating whether the target process is suspended.
|
|
||||||
// Modified by suspend()/resume(), viewed by debug thread, but only
|
|
||||||
// under cover of the threads lock.
|
|
||||||
volatile bool suspended = false;
|
|
||||||
|
|
||||||
// State flags indicating whether we are considered to be attached to
|
|
||||||
// the target process and are therefore queuing up events to be sent
|
|
||||||
// back to the debug server. These flags are only accessed and
|
|
||||||
// modified under the cover of the eventLock.
|
|
||||||
Monitor* eventLock;
|
|
||||||
// The following is set to true when a client is attached to this process
|
|
||||||
volatile bool generateDebugEvents = false;
|
|
||||||
// Pointer to current debug event; non-NULL indicates a debug event is
|
|
||||||
// waiting to be sent to the client. Main thread sets this to NULL to
|
|
||||||
// indicate that the event has been consumed; also sets
|
|
||||||
// passEventToClient, below.
|
|
||||||
volatile DEBUG_EVENT* curDebugEvent = NULL;
|
|
||||||
// Set by main thread to indicate whether the most recently posted
|
|
||||||
// debug event should be passed on to the target process.
|
|
||||||
volatile bool passEventToClient = true;
|
|
||||||
|
|
||||||
void conditionalPostDebugEvent(DEBUG_EVENT* ev, DWORD* continueOrNotHandledFlag) {
|
|
||||||
// FIXME: make it possible for the client to enable and disable
|
|
||||||
// certain types of events (have to do so in a platform-independent
|
|
||||||
// manner)
|
|
||||||
switch (ev->dwDebugEventCode) {
|
|
||||||
case EXCEPTION_DEBUG_EVENT:
|
|
||||||
switch (ev->u.Exception.ExceptionRecord.ExceptionCode) {
|
|
||||||
case EXCEPTION_BREAKPOINT: break;
|
|
||||||
case EXCEPTION_SINGLE_STEP: break;
|
|
||||||
case EXCEPTION_ACCESS_VIOLATION: break;
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
eventLock->lock();
|
|
||||||
if (generateDebugEvents) {
|
|
||||||
curDebugEvent = ev;
|
|
||||||
while (curDebugEvent != NULL) {
|
|
||||||
eventLock->wait();
|
|
||||||
}
|
|
||||||
if (passEventToClient) {
|
|
||||||
*continueOrNotHandledFlag = DBG_EXCEPTION_NOT_HANDLED;
|
|
||||||
} else {
|
|
||||||
*continueOrNotHandledFlag = DBG_CONTINUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
eventLock->unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// Module list
|
|
||||||
//
|
|
||||||
|
|
||||||
vector<LibInfo> libs;
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// Thread list
|
|
||||||
//
|
|
||||||
|
|
||||||
struct ThreadInfo {
|
|
||||||
DWORD tid;
|
|
||||||
HANDLE thread;
|
|
||||||
|
|
||||||
ThreadInfo(DWORD tid, HANDLE thread) {
|
|
||||||
this->tid = tid;
|
|
||||||
this->thread = thread;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class ThreadList : public LockableList<ThreadInfo> {
|
|
||||||
public:
|
|
||||||
bool removeByThreadID(DWORD tid) {
|
|
||||||
for (InternalListType::iterator iter = internalList.begin();
|
|
||||||
iter != internalList.end(); iter++) {
|
|
||||||
if ((*iter).tid == tid) {
|
|
||||||
internalList.erase(iter);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
HANDLE threadIDToHandle(DWORD tid) {
|
|
||||||
for (InternalListType::iterator iter = internalList.begin();
|
|
||||||
iter != internalList.end(); iter++) {
|
|
||||||
if ((*iter).tid == tid) {
|
|
||||||
return (*iter).thread;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ThreadList threads;
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// INITIALIZATION AND TERMINATION
|
|
||||||
//
|
|
||||||
|
|
||||||
void
|
|
||||||
printError(const char* prefix) {
|
|
||||||
DWORD detail = GetLastError();
|
|
||||||
LPTSTR message;
|
|
||||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
||||||
FORMAT_MESSAGE_FROM_SYSTEM,
|
|
||||||
0,
|
|
||||||
detail,
|
|
||||||
0,
|
|
||||||
(LPTSTR) &message,
|
|
||||||
1,
|
|
||||||
NULL);
|
|
||||||
// FIXME: This is signaling an error: "The handle is invalid." ?
|
|
||||||
// Do I have to do all of my WaitForDebugEvent calls from the same thread?
|
|
||||||
cerr << prefix << ": " << message << endl;
|
|
||||||
LocalFree(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
endProcess(bool waitForProcess = true) {
|
|
||||||
NT4::unloadNTDLL();
|
|
||||||
if (waitForProcess) {
|
|
||||||
// Though we're exiting because of an error, do not tear down the
|
|
||||||
// target process.
|
|
||||||
WaitForSingleObject(procHandle, INFINITE);
|
|
||||||
}
|
|
||||||
CloseHandle(procHandle);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI
|
|
||||||
debugThreadEntry(void*) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
DWORD lastMsgId = 0;
|
|
||||||
int count = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!DebugActiveProcess(pid)) {
|
|
||||||
attachFailed = true;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait for debug events. We keep the information from some of these
|
|
||||||
// on the side in anticipation of later queries by the client. NOTE
|
|
||||||
// that we leave the process running. The main thread is responsible
|
|
||||||
// for suspending and resuming all currently-active threads upon
|
|
||||||
// client attach and detach.
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
DEBUG_EVENT ev;
|
|
||||||
if (!WaitForDebugEvent(&ev, INFINITE)) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
if (++count < 10) {
|
|
||||||
// FIXME: This is signaling an error: "The handle is invalid." ?
|
|
||||||
// Do I have to do all of my WaitForDebugEvent calls from the same thread?
|
|
||||||
printError("WaitForDebugEvent failed");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
if (ev.dwDebugEventCode != lastMsgId) {
|
|
||||||
lastMsgId = ev.dwDebugEventCode;
|
|
||||||
count = 0;
|
|
||||||
cerr << "Debug thread received event " << ev.dwDebugEventCode << endl;
|
|
||||||
} else {
|
|
||||||
if (++count < 10) {
|
|
||||||
cerr << "Debug thread received event " << ev.dwDebugEventCode << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DWORD dbgContinueMode = DBG_CONTINUE;
|
|
||||||
|
|
||||||
switch (ev.dwDebugEventCode) {
|
|
||||||
case LOAD_DLL_DEBUG_EVENT:
|
|
||||||
conditionalPostDebugEvent(&ev, &dbgContinueMode);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case UNLOAD_DLL_DEBUG_EVENT:
|
|
||||||
conditionalPostDebugEvent(&ev, &dbgContinueMode);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CREATE_PROCESS_DEBUG_EVENT:
|
|
||||||
threads.lock();
|
|
||||||
// FIXME: will this deal properly with child processes? If
|
|
||||||
// not, is it possible to make it do so?
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "CREATE_PROCESS_DEBUG_EVENT " << ev.dwThreadId
|
|
||||||
<< " " << ev.u.CreateProcessInfo.hThread << endl;
|
|
||||||
#endif
|
|
||||||
if (ev.u.CreateProcessInfo.hThread != NULL) {
|
|
||||||
threads.add(ThreadInfo(ev.dwThreadId, ev.u.CreateProcessInfo.hThread));
|
|
||||||
}
|
|
||||||
threads.unlock();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CREATE_THREAD_DEBUG_EVENT:
|
|
||||||
threads.lock();
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "CREATE_THREAD_DEBUG_EVENT " << ev.dwThreadId
|
|
||||||
<< " " << ev.u.CreateThread.hThread << endl;
|
|
||||||
#endif
|
|
||||||
if (suspended) {
|
|
||||||
// Suspend this thread before adding it to the thread list
|
|
||||||
SuspendThread(ev.u.CreateThread.hThread);
|
|
||||||
}
|
|
||||||
threads.add(ThreadInfo(ev.dwThreadId, ev.u.CreateThread.hThread));
|
|
||||||
threads.unlock();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EXIT_THREAD_DEBUG_EVENT:
|
|
||||||
threads.lock();
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "EXIT_THREAD_DEBUG_EVENT " << ev.dwThreadId << endl;
|
|
||||||
#endif
|
|
||||||
threads.removeByThreadID(ev.dwThreadId);
|
|
||||||
threads.unlock();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EXCEPTION_DEBUG_EVENT:
|
|
||||||
// cerr << "EXCEPTION_DEBUG_EVENT" << endl;
|
|
||||||
switch (ev.u.Exception.ExceptionRecord.ExceptionCode) {
|
|
||||||
case EXCEPTION_BREAKPOINT:
|
|
||||||
// cerr << "EXCEPTION_BREAKPOINT" << endl;
|
|
||||||
if (!attachSucceeded && !attachFailed) {
|
|
||||||
attachSucceeded = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
dbgContinueMode = DBG_EXCEPTION_NOT_HANDLED;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
conditionalPostDebugEvent(&ev, &dbgContinueMode);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EXIT_PROCESS_DEBUG_EVENT:
|
|
||||||
endProcess(false);
|
|
||||||
// NOT REACHED
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Received debug event " << ev.dwDebugEventCode << endl;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ContinueDebugEvent(ev.dwProcessId, ev.dwThreadId, dbgContinueMode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
attachToProcess() {
|
|
||||||
// Create event lock
|
|
||||||
eventLock = new Monitor();
|
|
||||||
|
|
||||||
// Get a process handle for later
|
|
||||||
procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
|
|
||||||
if (procHandle == NULL) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start up the debug thread
|
|
||||||
DWORD debugThreadId;
|
|
||||||
if (CreateThread(NULL, 0, &debugThreadEntry, NULL, 0, &debugThreadId) == NULL) {
|
|
||||||
// Failed to make background debug thread. Fail.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((!attachSucceeded) && (!attachFailed)) {
|
|
||||||
Sleep(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (attachFailed) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(attachSucceeded);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
readMessage(Message* msg) {
|
|
||||||
DWORD numRead;
|
|
||||||
if (!ReadFile(GetStdHandle(STD_INPUT_HANDLE),
|
|
||||||
msg,
|
|
||||||
sizeof(Message),
|
|
||||||
&numRead,
|
|
||||||
NULL)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (numRead != sizeof(Message)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// For "poke" messages, must follow up by reading raw data
|
|
||||||
if (msg->type == Message::POKE) {
|
|
||||||
char* dataBuf = new char[msg->pokeArg.numBytes];
|
|
||||||
if (dataBuf == NULL) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!ReadFile(GetStdHandle(STD_INPUT_HANDLE),
|
|
||||||
dataBuf,
|
|
||||||
msg->pokeArg.numBytes,
|
|
||||||
&numRead,
|
|
||||||
NULL)) {
|
|
||||||
delete[] dataBuf;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (numRead != msg->pokeArg.numBytes) {
|
|
||||||
delete[] dataBuf;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
msg->pokeArg.data = (void *) dataBuf;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
handlePeek(Message* msg) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Entering handlePeek()" << endl;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
char* memBuf = new char[msg->peekArg.numBytes];
|
|
||||||
if (memBuf == NULL) {
|
|
||||||
ioBuf->writeString("B");
|
|
||||||
ioBuf->writeBinChar(0);
|
|
||||||
ioBuf->flush();
|
|
||||||
delete[] memBuf;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try fast case first
|
|
||||||
DWORD numRead;
|
|
||||||
BOOL res = ReadProcessMemory(procHandle,
|
|
||||||
(LPCVOID) msg->peekArg.address,
|
|
||||||
memBuf,
|
|
||||||
msg->peekArg.numBytes,
|
|
||||||
&numRead);
|
|
||||||
if (res && (numRead == msg->peekArg.numBytes)) {
|
|
||||||
|
|
||||||
// OK, complete success. Phew.
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Peek success case" << endl;
|
|
||||||
#endif
|
|
||||||
ioBuf->writeString("B");
|
|
||||||
ioBuf->writeBinChar(1);
|
|
||||||
ioBuf->writeBinUnsignedInt(numRead);
|
|
||||||
ioBuf->writeBinChar(1);
|
|
||||||
ioBuf->writeBinBuf(memBuf, numRead);
|
|
||||||
} else {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "*** Peek slow case ***" << endl;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ioBuf->writeString("B");
|
|
||||||
ioBuf->writeBinChar(1);
|
|
||||||
|
|
||||||
// Use VirtualQuery to speed things up a bit
|
|
||||||
DWORD numLeft = msg->peekArg.numBytes;
|
|
||||||
char* curAddr = (char*) msg->peekArg.address;
|
|
||||||
while (numLeft > 0) {
|
|
||||||
MEMORY_BASIC_INFORMATION memInfo;
|
|
||||||
VirtualQueryEx(procHandle, curAddr, &memInfo, sizeof(memInfo));
|
|
||||||
DWORD numToRead = memInfo.RegionSize;
|
|
||||||
if (numToRead > numLeft) {
|
|
||||||
numToRead = numLeft;
|
|
||||||
}
|
|
||||||
DWORD numRead;
|
|
||||||
if (memInfo.State == MEM_COMMIT) {
|
|
||||||
// Read the process memory at this address for this length
|
|
||||||
// FIXME: should check the result of this read
|
|
||||||
ReadProcessMemory(procHandle, curAddr, memBuf,
|
|
||||||
numToRead, &numRead);
|
|
||||||
// Write this out
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "*** Writing " << numToRead << " bytes as mapped ***" << endl;
|
|
||||||
#endif
|
|
||||||
ioBuf->writeBinUnsignedInt(numToRead);
|
|
||||||
ioBuf->writeBinChar(1);
|
|
||||||
ioBuf->writeBinBuf(memBuf, numToRead);
|
|
||||||
} else {
|
|
||||||
// Indicate region is free
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "*** Writing " << numToRead << " bytes as unmapped ***" << endl;
|
|
||||||
#endif
|
|
||||||
ioBuf->writeBinUnsignedInt(numToRead);
|
|
||||||
ioBuf->writeBinChar(0);
|
|
||||||
}
|
|
||||||
curAddr += numToRead;
|
|
||||||
numLeft -= numToRead;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ioBuf->flush();
|
|
||||||
delete[] memBuf;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Exiting handlePeek()" << endl;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
handlePoke(Message* msg) {
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Entering handlePoke()" << endl;
|
|
||||||
#endif
|
|
||||||
DWORD numWritten;
|
|
||||||
BOOL res = WriteProcessMemory(procHandle,
|
|
||||||
(LPVOID) msg->pokeArg.address,
|
|
||||||
msg->pokeArg.data,
|
|
||||||
msg->pokeArg.numBytes,
|
|
||||||
&numWritten);
|
|
||||||
if (res && (numWritten == msg->pokeArg.numBytes)) {
|
|
||||||
// Success
|
|
||||||
ioBuf->writeBoolAsInt(true);
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << " (Succeeded)" << endl;
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
// Failure
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << " (Failed)" << endl;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
// We clean up the data
|
|
||||||
char* dataBuf = (char*) msg->pokeArg.data;
|
|
||||||
delete[] dataBuf;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Exiting handlePoke()" << endl;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
suspend() {
|
|
||||||
if (suspended) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// Before we suspend, we must take a snapshot of the loaded module
|
|
||||||
// names and base addresses, since acquiring this snapshot requires
|
|
||||||
// starting and exiting a thread in the remote process (at least on
|
|
||||||
// NT 4).
|
|
||||||
libs.clear();
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Starting suspension" << endl;
|
|
||||||
#endif
|
|
||||||
libInfo(pid, libs);
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << " Got lib info" << endl;
|
|
||||||
#endif
|
|
||||||
threads.lock();
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << " Got thread lock" << endl;
|
|
||||||
#endif
|
|
||||||
suspended = true;
|
|
||||||
int j = 0;
|
|
||||||
for (int i = 0; i < threads.size(); i++) {
|
|
||||||
j++;
|
|
||||||
SuspendThread(threads.get(i).thread);
|
|
||||||
}
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Suspended " << j << " threads" << endl;
|
|
||||||
#endif
|
|
||||||
threads.unlock();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
resume() {
|
|
||||||
if (!suspended) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
threads.lock();
|
|
||||||
suspended = false;
|
|
||||||
for (int i = 0; i < threads.size(); i++) {
|
|
||||||
ResumeThread(threads.get(i).thread);
|
|
||||||
}
|
|
||||||
threads.unlock();
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Resumed process" << endl;
|
|
||||||
#endif
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
if (argc != 2) {
|
|
||||||
// Should only be used by performing CreateProcess within SwDbgSrv
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sscanf(argv[1], "%u", &pid) != 1) {
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to attach to process
|
|
||||||
if (!attachToProcess()) {
|
|
||||||
// Attach failed. Notify parent by writing result to stdout file
|
|
||||||
// handle.
|
|
||||||
char res = 0;
|
|
||||||
DWORD numBytes;
|
|
||||||
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), &res, sizeof(res),
|
|
||||||
&numBytes, NULL);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Server is expecting success result back.
|
|
||||||
char res = 1;
|
|
||||||
DWORD numBytes;
|
|
||||||
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), &res, sizeof(res),
|
|
||||||
&numBytes, NULL);
|
|
||||||
|
|
||||||
// Initialize our I/O buffer
|
|
||||||
ioBuf = new IOBuf(32768, 131072);
|
|
||||||
ioBuf->setOutputFileHandle(GetStdHandle(STD_OUTPUT_HANDLE));
|
|
||||||
|
|
||||||
// At this point we are attached. Enter our main loop which services
|
|
||||||
// requests from the server. Note that in order to handle attach/
|
|
||||||
// detach properly (i.e., resumption of process upon "detach") we
|
|
||||||
// will need another thread which handles debug events.
|
|
||||||
while (true) {
|
|
||||||
// Read a message from the server
|
|
||||||
Message msg;
|
|
||||||
if (!readMessage(&msg)) {
|
|
||||||
endProcess();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
cerr << "Main thread read message: " << msg.type << endl;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (msg.type) {
|
|
||||||
// ATTACH and DETACH messages MUST come in pairs
|
|
||||||
case Message::ATTACH:
|
|
||||||
suspend();
|
|
||||||
eventLock->lock();
|
|
||||||
generateDebugEvents = true;
|
|
||||||
eventLock->unlock();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Message::DETACH:
|
|
||||||
eventLock->lock();
|
|
||||||
generateDebugEvents = false;
|
|
||||||
// Flush remaining event if any
|
|
||||||
if (curDebugEvent != NULL) {
|
|
||||||
curDebugEvent = NULL;
|
|
||||||
eventLock->notifyAll();
|
|
||||||
}
|
|
||||||
eventLock->unlock();
|
|
||||||
resume();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Message::LIBINFO:
|
|
||||||
{
|
|
||||||
if (!suspended) {
|
|
||||||
ioBuf->writeInt(0);
|
|
||||||
} else {
|
|
||||||
// Send back formatted text
|
|
||||||
ioBuf->writeInt(libs.size());
|
|
||||||
for (int i = 0; i < libs.size(); i++) {
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeInt(1);
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeInt(libs[i].name.size());
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeString(libs[i].name.c_str());
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeAddress(libs[i].base);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Message::PEEK:
|
|
||||||
handlePeek(&msg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Message::POKE:
|
|
||||||
handlePoke(&msg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Message::THREADLIST:
|
|
||||||
{
|
|
||||||
if (!suspended) {
|
|
||||||
ioBuf->writeInt(0);
|
|
||||||
} else {
|
|
||||||
threads.lock();
|
|
||||||
ioBuf->writeInt(threads.size());
|
|
||||||
for (int i = 0; i < threads.size(); i++) {
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeAddress((void*) threads.get(i).thread);
|
|
||||||
}
|
|
||||||
threads.unlock();
|
|
||||||
}
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Message::DUPHANDLE:
|
|
||||||
{
|
|
||||||
HANDLE dup;
|
|
||||||
if (DuplicateHandle(procHandle,
|
|
||||||
msg.handleArg.handle,
|
|
||||||
GetCurrentProcess(),
|
|
||||||
&dup,
|
|
||||||
0,
|
|
||||||
FALSE,
|
|
||||||
DUPLICATE_SAME_ACCESS)) {
|
|
||||||
ioBuf->writeBoolAsInt(true);
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeAddress((void*) dup);
|
|
||||||
} else {
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
}
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Message::CLOSEHANDLE:
|
|
||||||
{
|
|
||||||
CloseHandle(msg.handleArg.handle);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Message::GETCONTEXT:
|
|
||||||
{
|
|
||||||
if (!suspended) {
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
} else {
|
|
||||||
CONTEXT context;
|
|
||||||
context.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
|
|
||||||
if (GetThreadContext(msg.handleArg.handle, &context)) {
|
|
||||||
ioBuf->writeBoolAsInt(true);
|
|
||||||
// EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP, DS, ES, FS, GS,
|
|
||||||
// CS, SS, EFLAGS, DR0, DR1, DR2, DR3, DR6, DR7
|
|
||||||
// See README-commands.txt
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Eax);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Ebx);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Ecx);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Edx);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Esi);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Edi);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Ebp);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Esp);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Eip);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.SegDs);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.SegEs);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.SegFs);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.SegGs);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.SegCs);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.SegSs);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.EFlags);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Dr0);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Dr1);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Dr2);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Dr3);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Dr6);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) context.Dr7);
|
|
||||||
} else {
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Message::SETCONTEXT:
|
|
||||||
{
|
|
||||||
if (!suspended) {
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
} else {
|
|
||||||
CONTEXT context;
|
|
||||||
context.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
|
|
||||||
context.Eax = msg.setContextArg.Eax;
|
|
||||||
context.Ebx = msg.setContextArg.Ebx;
|
|
||||||
context.Ecx = msg.setContextArg.Ecx;
|
|
||||||
context.Edx = msg.setContextArg.Edx;
|
|
||||||
context.Esi = msg.setContextArg.Esi;
|
|
||||||
context.Edi = msg.setContextArg.Edi;
|
|
||||||
context.Ebp = msg.setContextArg.Ebp;
|
|
||||||
context.Esp = msg.setContextArg.Esp;
|
|
||||||
context.Eip = msg.setContextArg.Eip;
|
|
||||||
context.SegDs = msg.setContextArg.Ds;
|
|
||||||
context.SegEs = msg.setContextArg.Es;
|
|
||||||
context.SegFs = msg.setContextArg.Fs;
|
|
||||||
context.SegGs = msg.setContextArg.Gs;
|
|
||||||
context.SegCs = msg.setContextArg.Cs;
|
|
||||||
context.SegSs = msg.setContextArg.Ss;
|
|
||||||
context.EFlags = msg.setContextArg.EFlags;
|
|
||||||
context.Dr0 = msg.setContextArg.Dr0;
|
|
||||||
context.Dr1 = msg.setContextArg.Dr1;
|
|
||||||
context.Dr2 = msg.setContextArg.Dr2;
|
|
||||||
context.Dr3 = msg.setContextArg.Dr3;
|
|
||||||
context.Dr6 = msg.setContextArg.Dr6;
|
|
||||||
context.Dr7 = msg.setContextArg.Dr7;
|
|
||||||
if (SetThreadContext(msg.setContextArg.handle, &context)) {
|
|
||||||
ioBuf->writeBoolAsInt(true);
|
|
||||||
} else {
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Message::SELECTORENTRY:
|
|
||||||
{
|
|
||||||
LDT_ENTRY entry;
|
|
||||||
|
|
||||||
if (GetThreadSelectorEntry(msg.selectorArg.handle,
|
|
||||||
msg.selectorArg.selector,
|
|
||||||
&entry)) {
|
|
||||||
ioBuf->writeBoolAsInt(true);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) entry.LimitLow);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) entry.BaseLow);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) entry.HighWord.Bytes.BaseMid);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) entry.HighWord.Bytes.Flags1);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) entry.HighWord.Bytes.Flags2);
|
|
||||||
ioBuf->writeSpace(); ioBuf->writeAddress((void*) entry.HighWord.Bytes.BaseHi);
|
|
||||||
} else {
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Message::SUSPEND:
|
|
||||||
suspend();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Message::RESUME:
|
|
||||||
resume();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Message::POLLEVENT:
|
|
||||||
eventLock->lock();
|
|
||||||
if (curDebugEvent == NULL) {
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
} else {
|
|
||||||
ioBuf->writeBoolAsInt(true);
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
threads.lock();
|
|
||||||
ioBuf->writeAddress((void*) threads.threadIDToHandle(curDebugEvent->dwThreadId));
|
|
||||||
threads.unlock();
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeUnsignedInt(curDebugEvent->dwDebugEventCode);
|
|
||||||
// Figure out what else to write
|
|
||||||
switch (curDebugEvent->dwDebugEventCode) {
|
|
||||||
case LOAD_DLL_DEBUG_EVENT:
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeAddress(curDebugEvent->u.LoadDll.lpBaseOfDll);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case UNLOAD_DLL_DEBUG_EVENT:
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeAddress(curDebugEvent->u.UnloadDll.lpBaseOfDll);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EXCEPTION_DEBUG_EVENT:
|
|
||||||
{
|
|
||||||
DWORD code = curDebugEvent->u.Exception.ExceptionRecord.ExceptionCode;
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeUnsignedInt(code);
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeAddress(curDebugEvent->u.Exception.ExceptionRecord.ExceptionAddress);
|
|
||||||
switch (curDebugEvent->u.Exception.ExceptionRecord.ExceptionCode) {
|
|
||||||
case EXCEPTION_ACCESS_VIOLATION:
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeBoolAsInt(curDebugEvent->u.Exception.ExceptionRecord.ExceptionInformation[0] != 0);
|
|
||||||
ioBuf->writeSpace();
|
|
||||||
ioBuf->writeAddress((void*) curDebugEvent->u.Exception.ExceptionRecord.ExceptionInformation[1]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
eventLock->unlock();
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Message::CONTINUEEVENT:
|
|
||||||
eventLock->lock();
|
|
||||||
if (curDebugEvent == NULL) {
|
|
||||||
ioBuf->writeBoolAsInt(false);
|
|
||||||
} else {
|
|
||||||
curDebugEvent = NULL;
|
|
||||||
passEventToClient = msg.boolArg.val;
|
|
||||||
ioBuf->writeBoolAsInt(true);
|
|
||||||
eventLock->notify();
|
|
||||||
}
|
|
||||||
eventLock->unlock();
|
|
||||||
ioBuf->writeEOL();
|
|
||||||
ioBuf->flush();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
endProcess();
|
|
||||||
|
|
||||||
// NOT REACHED
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
# Microsoft Developer Studio Project File - Name="SwDbgSub" - Package Owner=<4>
|
|
||||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
|
||||||
# ** DO NOT EDIT **
|
|
||||||
|
|
||||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
|
||||||
|
|
||||||
CFG=SwDbgSub - Win32 Debug
|
|
||||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
|
||||||
!MESSAGE use the Export Makefile command and run
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "SwDbgSub.mak".
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE You can specify a configuration when running NMAKE
|
|
||||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE NMAKE /f "SwDbgSub.mak" CFG="SwDbgSub - Win32 Debug"
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE Possible choices for configuration are:
|
|
||||||
!MESSAGE
|
|
||||||
!MESSAGE "SwDbgSub - Win32 Release" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE "SwDbgSub - Win32 Debug" (based on "Win32 (x86) Console Application")
|
|
||||||
!MESSAGE
|
|
||||||
|
|
||||||
# Begin Project
|
|
||||||
# PROP AllowPerConfigDependencies 0
|
|
||||||
# PROP Scc_ProjName ""
|
|
||||||
# PROP Scc_LocalPath ""
|
|
||||||
CPP=cl.exe
|
|
||||||
RSC=rc.exe
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "SwDbgSub - Win32 Release"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 0
|
|
||||||
# PROP BASE Output_Dir "Release"
|
|
||||||
# PROP BASE Intermediate_Dir "Release"
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 0
|
|
||||||
# PROP Output_Dir "Release"
|
|
||||||
# PROP Intermediate_Dir "Release"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
|
||||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
|
||||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
|
||||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "SwDbgSub - Win32 Debug"
|
|
||||||
|
|
||||||
# PROP BASE Use_MFC 0
|
|
||||||
# PROP BASE Use_Debug_Libraries 1
|
|
||||||
# PROP BASE Output_Dir "SwDbgSub___Win32_Debug"
|
|
||||||
# PROP BASE Intermediate_Dir "SwDbgSub___Win32_Debug"
|
|
||||||
# PROP BASE Target_Dir ""
|
|
||||||
# PROP Use_MFC 0
|
|
||||||
# PROP Use_Debug_Libraries 1
|
|
||||||
# PROP Output_Dir "Debug"
|
|
||||||
# PROP Intermediate_Dir "Debug"
|
|
||||||
# PROP Ignore_Export_Lib 0
|
|
||||||
# PROP Target_Dir ""
|
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
|
||||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
|
||||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
|
||||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
|
||||||
BSC32=bscmake.exe
|
|
||||||
# ADD BASE BSC32 /nologo
|
|
||||||
# ADD BSC32 /nologo
|
|
||||||
LINK32=link.exe
|
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
|
||||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# Begin Target
|
|
||||||
|
|
||||||
# Name "SwDbgSub - Win32 Release"
|
|
||||||
# Name "SwDbgSub - Win32 Debug"
|
|
||||||
# Begin Group "Source Files"
|
|
||||||
|
|
||||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\Buffer.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\IOBuf.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\isNT4.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\libInfo.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\Monitor.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\nt4internals.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\SwDbgSub.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\toolHelp.cpp
|
|
||||||
# End Source File
|
|
||||||
# End Group
|
|
||||||
# Begin Group "Header Files"
|
|
||||||
|
|
||||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
|
||||||
# End Group
|
|
||||||
# Begin Group "Resource Files"
|
|
||||||
|
|
||||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
|
||||||
# End Group
|
|
||||||
# End Target
|
|
||||||
# End Project
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <winsock2.h>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
void
|
|
||||||
initWinsock()
|
|
||||||
{
|
|
||||||
static int initted = 0;
|
|
||||||
WORD wVersionRequested;
|
|
||||||
WSADATA wsaData;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (!initted) {
|
|
||||||
wVersionRequested = MAKEWORD( 2, 0 );
|
|
||||||
|
|
||||||
err = WSAStartup( wVersionRequested, &wsaData );
|
|
||||||
if ( err != 0 ) {
|
|
||||||
{
|
|
||||||
/* Tell the user that we couldn't find a usable */
|
|
||||||
/* WinSock DLL. */
|
|
||||||
cerr << "SocketBase::SocketBase: unable to find usable "
|
|
||||||
<< "WinSock DLL" << endl;
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Confirm that the WinSock DLL supports 2.0.*/
|
|
||||||
/* Note that if the DLL supports versions greater */
|
|
||||||
/* than 2.0 in addition to 2.0, it will still return */
|
|
||||||
/* 2.0 in wVersion since that is the version we */
|
|
||||||
/* requested. */
|
|
||||||
|
|
||||||
if ( LOBYTE( wsaData.wVersion ) != 2 ||
|
|
||||||
HIBYTE( wsaData.wVersion ) != 0 ) {
|
|
||||||
/* Tell the user that we couldn't find a usable */
|
|
||||||
/* WinSock DLL. */
|
|
||||||
{
|
|
||||||
cerr << "Unable to find suitable version of WinSock DLL" << endl;
|
|
||||||
WSACleanup( );
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initted = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,156 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ioUtils.hpp"
|
|
||||||
#include "IOBuf.hpp"
|
|
||||||
|
|
||||||
bool
|
|
||||||
scanInt(char** data, int* num) {
|
|
||||||
*num = 0;
|
|
||||||
|
|
||||||
// Skip whitespace
|
|
||||||
while ((**data != 0) && (isspace(**data))) {
|
|
||||||
++*data;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (**data == 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((**data != 0) && (!isspace(**data))) {
|
|
||||||
char cur = **data;
|
|
||||||
if ((cur < '0') || (cur > '9')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
*num *= 10;
|
|
||||||
*num += cur - '0';
|
|
||||||
++*data;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
scanUnsignedLong(char** data, unsigned long* num) {
|
|
||||||
*num = 0;
|
|
||||||
|
|
||||||
// Skip whitespace
|
|
||||||
while ((**data != 0) && (isspace(**data))) {
|
|
||||||
++*data;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (**data == 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((**data != 0) && (!isspace(**data))) {
|
|
||||||
char cur = **data;
|
|
||||||
if ((cur < '0') || (cur > '9')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
*num *= 10;
|
|
||||||
*num += cur - '0';
|
|
||||||
++*data;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
charToNibble(char ascii, int* value) {
|
|
||||||
if (ascii >= '0' && ascii <= '9') {
|
|
||||||
*value = ascii - '0';
|
|
||||||
return true;
|
|
||||||
} else if (ascii >= 'A' && ascii <= 'F') {
|
|
||||||
*value = 10 + ascii - 'A';
|
|
||||||
return true;
|
|
||||||
} else if (ascii >= 'a' && ascii <= 'f') {
|
|
||||||
*value = 10 + ascii - 'a';
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
scanAddress(char** data, unsigned long* addr) {
|
|
||||||
*addr = 0;
|
|
||||||
|
|
||||||
// Skip whitespace
|
|
||||||
while ((**data != 0) && (isspace(**data))) {
|
|
||||||
++*data;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (**data == 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strncmp(*data, "0x", 2) != 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
*data += 2;
|
|
||||||
|
|
||||||
while ((**data != 0) && (!isspace(**data))) {
|
|
||||||
int val;
|
|
||||||
bool res = charToNibble(**data, &val);
|
|
||||||
if (!res) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
*addr <<= 4;
|
|
||||||
*addr |= val;
|
|
||||||
++*data;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
scanAndSkipBinEscapeChar(char** data) {
|
|
||||||
// Skip whitespace
|
|
||||||
while ((**data != 0) && (isspace(**data))) {
|
|
||||||
++*data;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IOBuf::isBinEscapeChar(**data)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
++*data;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
scanBinUnsignedLong(char** data, unsigned long* num) {
|
|
||||||
*num = 0;
|
|
||||||
for (int i = 0; i < 4; i++) {
|
|
||||||
unsigned char val = (unsigned char) **data;
|
|
||||||
*num = (*num << 8) | val;
|
|
||||||
++*data;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
@@ -1,186 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2001, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Disable too-long symbol warnings
|
|
||||||
#pragma warning ( disable : 4786 )
|
|
||||||
|
|
||||||
#include "libInfo.hpp"
|
|
||||||
#include "nt4internals.hpp"
|
|
||||||
#include "isNT4.hpp"
|
|
||||||
#include "toolHelp.hpp"
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
typedef void LibInfoImplFunc(DWORD pid, vector<LibInfo>& info);
|
|
||||||
|
|
||||||
static void libInfoImplNT4(DWORD pid, vector<LibInfo>& info);
|
|
||||||
static void libInfoImplToolHelp(DWORD pid, vector<LibInfo>& info);
|
|
||||||
|
|
||||||
void
|
|
||||||
libInfo(DWORD pid, vector<LibInfo>& info) {
|
|
||||||
static LibInfoImplFunc* impl = NULL;
|
|
||||||
|
|
||||||
if (impl == NULL) {
|
|
||||||
// See which operating system we're on
|
|
||||||
impl = (isNT4() ? &libInfoImplNT4 : &libInfoImplToolHelp);
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(impl != NULL);
|
|
||||||
|
|
||||||
(*impl)(pid, info);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ULONG
|
|
||||||
ModuleCount(NT4::PDEBUG_BUFFER db) {
|
|
||||||
return db->ModuleInformation ? *PULONG(db->ModuleInformation) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MAX2(a, b) (((a) < (b)) ? (b) : (a))
|
|
||||||
|
|
||||||
static void
|
|
||||||
libInfoImplNT4(DWORD pid, vector<LibInfo>& info) {
|
|
||||||
static EnumProcessModulesFunc* enumFunc = NULL;
|
|
||||||
static GetModuleFileNameExFunc* fnFunc = NULL;
|
|
||||||
static GetModuleInformationFunc* infoFunc = NULL;
|
|
||||||
|
|
||||||
if (enumFunc == NULL) {
|
|
||||||
HMODULE dll = loadPSAPIDLL();
|
|
||||||
|
|
||||||
enumFunc = (EnumProcessModulesFunc*) GetProcAddress(dll, "EnumProcessModules");
|
|
||||||
fnFunc = (GetModuleFileNameExFunc*) GetProcAddress(dll, "GetModuleFileNameExA");
|
|
||||||
infoFunc = (GetModuleInformationFunc*) GetProcAddress(dll, "GetModuleInformation");
|
|
||||||
|
|
||||||
assert(enumFunc != NULL);
|
|
||||||
assert(fnFunc != NULL);
|
|
||||||
assert(infoFunc != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static HMODULE* mods = new HMODULE[256];
|
|
||||||
static int numMods = 256;
|
|
||||||
|
|
||||||
if (mods == NULL) {
|
|
||||||
mods = new HMODULE[numMods];
|
|
||||||
if (mods == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool done = false;
|
|
||||||
|
|
||||||
HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
|
|
||||||
if (proc == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
DWORD bufSize = numMods * sizeof(HMODULE);
|
|
||||||
DWORD neededSize;
|
|
||||||
|
|
||||||
if (!(*enumFunc)(proc, mods, bufSize, &neededSize)) {
|
|
||||||
// Enum failed
|
|
||||||
CloseHandle(proc);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int numFetched = neededSize / sizeof(HMODULE);
|
|
||||||
|
|
||||||
if (numMods < numFetched) {
|
|
||||||
// Grow buffer
|
|
||||||
numMods = MAX2(numFetched, 2 * numMods);
|
|
||||||
delete[] mods;
|
|
||||||
mods = new HMODULE[numMods];
|
|
||||||
if (mods == NULL) {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
char filename[MAX_PATH];
|
|
||||||
MODULEINFO modInfo;
|
|
||||||
|
|
||||||
// Iterate through and fetch each one's info
|
|
||||||
for (int i = 0; i < numFetched; i++) {
|
|
||||||
if (!(*fnFunc)(proc, mods[i], filename, MAX_PATH)) {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(*infoFunc)(proc, mods[i], &modInfo, sizeof(MODULEINFO))) {
|
|
||||||
CloseHandle(proc);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
info.push_back(LibInfo(string(filename), (void*) modInfo.lpBaseOfDll));
|
|
||||||
}
|
|
||||||
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
} while (!done);
|
|
||||||
|
|
||||||
CloseHandle(proc);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
libInfoImplToolHelp(DWORD pid, vector<LibInfo>& info) {
|
|
||||||
using namespace ToolHelp;
|
|
||||||
|
|
||||||
static CreateToolhelp32SnapshotFunc* snapshotFunc = NULL;
|
|
||||||
static Module32FirstFunc* firstFunc = NULL;
|
|
||||||
static Module32NextFunc* nextFunc = NULL;
|
|
||||||
|
|
||||||
if (snapshotFunc == NULL) {
|
|
||||||
HMODULE dll = loadDLL();
|
|
||||||
|
|
||||||
snapshotFunc =
|
|
||||||
(CreateToolhelp32SnapshotFunc*) GetProcAddress(dll,
|
|
||||||
"CreateToolhelp32Snapshot");
|
|
||||||
|
|
||||||
firstFunc = (Module32FirstFunc*) GetProcAddress(dll,
|
|
||||||
"Module32First");
|
|
||||||
|
|
||||||
nextFunc = (Module32NextFunc*) GetProcAddress(dll,
|
|
||||||
"Module32Next");
|
|
||||||
|
|
||||||
assert(snapshotFunc != NULL);
|
|
||||||
assert(firstFunc != NULL);
|
|
||||||
assert(nextFunc != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
HANDLE snapshot = (*snapshotFunc)(TH32CS_SNAPMODULE, pid);
|
|
||||||
if (snapshot == (HANDLE) -1) {
|
|
||||||
// Error occurred during snapshot
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iterate
|
|
||||||
MODULEENTRY32 module;
|
|
||||||
if ((*firstFunc)(snapshot, &module)) {
|
|
||||||
do {
|
|
||||||
info.push_back(LibInfo(string(module.szExePath), (void*) module.modBaseAddr));
|
|
||||||
} while ((*nextFunc)(snapshot, &module));
|
|
||||||
}
|
|
||||||
|
|
||||||
CloseHandle(snapshot);
|
|
||||||
}
|
|
||||||
@@ -1,273 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 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.
|
|
||||||
*
|
|
||||||
* 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 _NT4INTERNALS_H_
|
|
||||||
#define _NT4INTERNALS_H_
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
namespace NT4 {
|
|
||||||
extern "C" {
|
|
||||||
|
|
||||||
// Data structures and constants required to be able to get necessary
|
|
||||||
// debugging-related information on Windows NT 4.0 through internal
|
|
||||||
// (i.e., non-public) APIs. These are adapted from those in the
|
|
||||||
// _Windows NT/2000 Native API Reference_ by Gary Nebbett, Macmillan
|
|
||||||
// Technical Publishing, 201 West 103rd Street, Indianapolis, IN
|
|
||||||
// 46290, 2000.
|
|
||||||
|
|
||||||
typedef LONG NTSTATUS;
|
|
||||||
typedef LONG KPRIORITY;
|
|
||||||
|
|
||||||
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
|
|
||||||
#define NTAPI __stdcall
|
|
||||||
#else
|
|
||||||
#define _cdecl
|
|
||||||
#define NTAPI
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
|
|
||||||
|
|
||||||
typedef enum _SYSTEM_INFORMATION_CLASS {
|
|
||||||
SystemProcessesAndThreadsInformation = 5
|
|
||||||
} SYSTEM_INFORMATION_CLASS;
|
|
||||||
|
|
||||||
typedef struct _UNICODE_STRING {
|
|
||||||
USHORT Length;
|
|
||||||
USHORT MaximumLength;
|
|
||||||
PWSTR Buffer;
|
|
||||||
} UNICODE_STRING;
|
|
||||||
|
|
||||||
typedef struct _VM_COUNTERS {
|
|
||||||
ULONG PeakVirtualSize;
|
|
||||||
ULONG VirtualSize;
|
|
||||||
ULONG PageFaultCount;
|
|
||||||
ULONG PeakWorkingSetSize;
|
|
||||||
ULONG WorkingSetSize;
|
|
||||||
ULONG QuotaPeakPagedPoolUsage;
|
|
||||||
ULONG QuotaPagedPoolUsage;
|
|
||||||
ULONG QuotaPeakNonPagedPoolUsage;
|
|
||||||
ULONG QuotaNonPagedPoolUsage;
|
|
||||||
ULONG PagefileUsage;
|
|
||||||
ULONG PeakPagefileUsage;
|
|
||||||
} VM_COUNTERS, *PVM_COUNTERS;
|
|
||||||
|
|
||||||
typedef struct _IO_COUNTERS {
|
|
||||||
LARGE_INTEGER ReadOperationCount;
|
|
||||||
LARGE_INTEGER WriteOperationCount;
|
|
||||||
LARGE_INTEGER OtherOperationCount;
|
|
||||||
LARGE_INTEGER ReadTransferCount;
|
|
||||||
LARGE_INTEGER WriteTransferCount;
|
|
||||||
LARGE_INTEGER OtherTransferCount;
|
|
||||||
} IO_COUNTERS, *PIO_COUNTERS;
|
|
||||||
|
|
||||||
typedef struct _CLIENT_ID {
|
|
||||||
HANDLE UniqueProcess;
|
|
||||||
HANDLE UniqueThread;
|
|
||||||
} CLIENT_ID, *PCLIENT_ID;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
StateInitialized,
|
|
||||||
StateReady,
|
|
||||||
StateRunning,
|
|
||||||
StateStandby,
|
|
||||||
StateTerminated,
|
|
||||||
StateWait,
|
|
||||||
StateTransition,
|
|
||||||
StateUnknown
|
|
||||||
} THREAD_STATE;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
Executive,
|
|
||||||
FreePage,
|
|
||||||
PageIn,
|
|
||||||
PoolAllocation,
|
|
||||||
DelayExecution,
|
|
||||||
Suspended,
|
|
||||||
UserRequest,
|
|
||||||
WrExecutive,
|
|
||||||
WrFreePage,
|
|
||||||
WrPageIn,
|
|
||||||
WrPoolAllocation,
|
|
||||||
WrDelayExecution,
|
|
||||||
WrSuspended,
|
|
||||||
WrUserRequest,
|
|
||||||
WrEventPair,
|
|
||||||
WrQueue,
|
|
||||||
WrLpcReceive,
|
|
||||||
WrLpcReply,
|
|
||||||
WrVirtualMemory,
|
|
||||||
WrPageOut,
|
|
||||||
WrRendezvous,
|
|
||||||
Spare2,
|
|
||||||
Spare3,
|
|
||||||
Spare4,
|
|
||||||
Spare5,
|
|
||||||
Spare6,
|
|
||||||
WrKernel
|
|
||||||
} KWAIT_REASON;
|
|
||||||
|
|
||||||
typedef struct _SYSTEM_THREADS {
|
|
||||||
LARGE_INTEGER KernelTime;
|
|
||||||
LARGE_INTEGER UserTime;
|
|
||||||
LARGE_INTEGER CreateTime;
|
|
||||||
ULONG WaitTime;
|
|
||||||
PVOID StartAddress;
|
|
||||||
CLIENT_ID ClientId;
|
|
||||||
KPRIORITY Priority;
|
|
||||||
KPRIORITY BasePriority;
|
|
||||||
ULONG ContextSwitchCount;
|
|
||||||
THREAD_STATE State;
|
|
||||||
KWAIT_REASON WaitReason;
|
|
||||||
} SYSTEM_THREADS, *PSYSTEM_THREADS;
|
|
||||||
|
|
||||||
typedef struct _SYSTEM_PROCESSES { // Information class 5
|
|
||||||
ULONG NextEntryDelta;
|
|
||||||
ULONG ThreadCount;
|
|
||||||
ULONG Reserved1[6];
|
|
||||||
LARGE_INTEGER CreateTime;
|
|
||||||
LARGE_INTEGER UserTime;
|
|
||||||
LARGE_INTEGER KernelTime;
|
|
||||||
UNICODE_STRING ProcessName;
|
|
||||||
KPRIORITY BasePriority;
|
|
||||||
ULONG ProcessId;
|
|
||||||
ULONG InheritedFromProcessId;
|
|
||||||
ULONG HandleCount;
|
|
||||||
ULONG Reserved2[2];
|
|
||||||
ULONG PrivatePageCount;
|
|
||||||
VM_COUNTERS VmCounters;
|
|
||||||
IO_COUNTERS IoCounters; // Windows 2000 only
|
|
||||||
SYSTEM_THREADS Threads[1];
|
|
||||||
} SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
|
|
||||||
|
|
||||||
typedef NTSTATUS NTAPI
|
|
||||||
ZwQuerySystemInformationFunc(IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
|
|
||||||
IN OUT PVOID SystemInformation,
|
|
||||||
IN ULONG SystemInformationLength,
|
|
||||||
OUT PULONG ReturnLength OPTIONAL
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef struct _DEBUG_BUFFER {
|
|
||||||
HANDLE SectionHandle;
|
|
||||||
PVOID SectionBase;
|
|
||||||
PVOID RemoteSectionBase;
|
|
||||||
ULONG SectionBaseDelta;
|
|
||||||
HANDLE EventPairHandle;
|
|
||||||
ULONG Unknown[2];
|
|
||||||
HANDLE RemoteThreadHandle;
|
|
||||||
ULONG InfoClassMask;
|
|
||||||
ULONG SizeOfInfo;
|
|
||||||
ULONG AllocatedSize;
|
|
||||||
ULONG SectionSize;
|
|
||||||
PVOID ModuleInformation;
|
|
||||||
PVOID BackTraceInformation;
|
|
||||||
PVOID HeapInformation;
|
|
||||||
PVOID LockInformation;
|
|
||||||
PVOID Reserved[8];
|
|
||||||
} DEBUG_BUFFER, *PDEBUG_BUFFER;
|
|
||||||
|
|
||||||
typedef PDEBUG_BUFFER NTAPI
|
|
||||||
RtlCreateQueryDebugBufferFunc(IN ULONG Size,
|
|
||||||
IN BOOLEAN EventPair);
|
|
||||||
|
|
||||||
#define PDI_MODULES 0x01 // The loaded modules of the process
|
|
||||||
#define PDI_BACKTRACE 0x02 // The heap stack back traces
|
|
||||||
#define PDI_HEAPS 0x04 // The heaps of the process
|
|
||||||
#define PDI_HEAP_TAGS 0x08 // The heap tags
|
|
||||||
#define PDI_HEAP_BLOCKS 0x10 // The heap blocks
|
|
||||||
#define PDI_LOCKS 0x20 // The locks created by the process
|
|
||||||
|
|
||||||
typedef struct _DEBUG_MODULE_INFORMATION { // c.f. SYSTEM_MODULE_INFORMATION
|
|
||||||
ULONG Reserved[2];
|
|
||||||
ULONG Base;
|
|
||||||
ULONG Size;
|
|
||||||
ULONG Flags;
|
|
||||||
USHORT Index;
|
|
||||||
USHORT Unknown;
|
|
||||||
USHORT LoadCount;
|
|
||||||
USHORT ModuleNameOffset;
|
|
||||||
CHAR ImageName[256];
|
|
||||||
} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
|
|
||||||
|
|
||||||
// Flags
|
|
||||||
#define LDRP_STATIC_LINK 0x00000002
|
|
||||||
#define LDRP_IMAGE_DLL 0x00000004
|
|
||||||
#define LDRP_LOAD_IN_PROGRESS 0x00001000
|
|
||||||
#define LDRP_UNLOAD_IN_PROGRESS 0x00002000
|
|
||||||
#define LDRP_ENTRY_PROCESSED 0x00004000
|
|
||||||
#define LDRP_ENTRY_INSERTED 0x00008000
|
|
||||||
#define LDRP_CURRENT_LOAD 0x00010000
|
|
||||||
#define LDRP_FAILED_BUILTIN_LOAD 0x00020000
|
|
||||||
#define LDRP_DONT_CALL_FOR_THREADS 0x00040000
|
|
||||||
#define LDRP_PROCESS_ATTACH_CALLED 0x00080000
|
|
||||||
#define LDRP_DEBUG_SYMBOLS_LOADED 0x00100000
|
|
||||||
#define LDRP_IMAGE_NOT_AT_BASE 0x00200000
|
|
||||||
#define LDRP_WX86_IGNORE_MACHINETYPE 0x00400000
|
|
||||||
|
|
||||||
// NOTE that this will require creating a thread in the target
|
|
||||||
// process, implying that we can not call this while the process is
|
|
||||||
// suspended. May have to run this command in the child processes
|
|
||||||
// rather than the server.
|
|
||||||
|
|
||||||
typedef NTSTATUS NTAPI
|
|
||||||
RtlQueryProcessDebugInformationFunc(IN ULONG ProcessId,
|
|
||||||
IN ULONG DebugInfoClassMask,
|
|
||||||
IN OUT PDEBUG_BUFFER DebugBuffer);
|
|
||||||
|
|
||||||
typedef NTSTATUS NTAPI
|
|
||||||
RtlDestroyQueryDebugBufferFunc(IN PDEBUG_BUFFER DebugBuffer);
|
|
||||||
|
|
||||||
// Routines to load and unload NTDLL.DLL.
|
|
||||||
HMODULE loadNTDLL();
|
|
||||||
// Safe to call even if has not been loaded
|
|
||||||
void unloadNTDLL();
|
|
||||||
|
|
||||||
} // extern "C"
|
|
||||||
} // namespace NT4
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
|
|
||||||
// On NT 4 only, we now use PSAPI to enumerate the loaded modules in
|
|
||||||
// the target processes. RtlQueryProcessDebugInformation creates a
|
|
||||||
// thread in the target process, which causes problems when we are
|
|
||||||
// handling events like breakpoints in the debugger. The dependence on
|
|
||||||
// an external DLL which might not be present is unfortunate, but we
|
|
||||||
// can either redistribute this DLL (if allowed) or refuse to start on
|
|
||||||
// NT 4 if it is not present.
|
|
||||||
|
|
||||||
typedef struct _MODULEINFO {
|
|
||||||
LPVOID lpBaseOfDll;
|
|
||||||
DWORD SizeOfImage;
|
|
||||||
LPVOID EntryPoint;
|
|
||||||
} MODULEINFO, *LPMODULEINFO;
|
|
||||||
|
|
||||||
typedef BOOL (WINAPI EnumProcessModulesFunc)(HANDLE, HMODULE *, DWORD, LPDWORD);
|
|
||||||
typedef DWORD (WINAPI GetModuleFileNameExFunc)(HANDLE, HMODULE, LPTSTR, DWORD);
|
|
||||||
typedef BOOL (WINAPI GetModuleInformationFunc)(HANDLE, HMODULE, LPMODULEINFO, DWORD);
|
|
||||||
// Routines to load and unload PSAPI.DLL.
|
|
||||||
HMODULE loadPSAPIDLL();
|
|
||||||
// Safe to call even if has not been loaded
|
|
||||||
void unloadPSAPIDLL();
|
|
||||||
|
|
||||||
#endif // #defined _NT4INTERNALS_H_
|
|
||||||
@@ -1,190 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2001, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "procList.hpp"
|
|
||||||
#include "nt4internals.hpp"
|
|
||||||
#include "isNT4.hpp"
|
|
||||||
#include "toolHelp.hpp"
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace NT4;
|
|
||||||
|
|
||||||
typedef void ProcListImplFunc(ProcEntryList& processes);
|
|
||||||
|
|
||||||
void procListImplNT4(ProcEntryList& processes);
|
|
||||||
void procListImplToolHelp(ProcEntryList& processes);
|
|
||||||
|
|
||||||
ProcEntry::ProcEntry(ULONG pid, USHORT nameLength, WCHAR* name) {
|
|
||||||
this->pid = pid;
|
|
||||||
this->nameLength = nameLength;
|
|
||||||
this->name = new WCHAR[nameLength];
|
|
||||||
memcpy(this->name, name, nameLength * sizeof(WCHAR));
|
|
||||||
}
|
|
||||||
|
|
||||||
ProcEntry::ProcEntry(ULONG pid, USHORT nameLength, char* name) {
|
|
||||||
this->pid = pid;
|
|
||||||
this->nameLength = nameLength;
|
|
||||||
this->name = new WCHAR[nameLength];
|
|
||||||
int j = 0;
|
|
||||||
for (int i = 0; i < nameLength; i++) {
|
|
||||||
// FIXME: what is the proper promotion from ASCII to UNICODE?
|
|
||||||
this->name[i] = name[i] & 0xFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ProcEntry::ProcEntry(const ProcEntry& arg) {
|
|
||||||
name = NULL;
|
|
||||||
copyFrom(arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
ProcEntry&
|
|
||||||
ProcEntry::operator=(const ProcEntry& arg) {
|
|
||||||
copyFrom(arg);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProcEntry::~ProcEntry() {
|
|
||||||
delete[] name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ProcEntry::copyFrom(const ProcEntry& arg) {
|
|
||||||
if (name != NULL) {
|
|
||||||
delete[] name;
|
|
||||||
}
|
|
||||||
pid = arg.pid;
|
|
||||||
nameLength = arg.nameLength;
|
|
||||||
name = new WCHAR[nameLength];
|
|
||||||
memcpy(name, arg.name, nameLength * sizeof(WCHAR));
|
|
||||||
}
|
|
||||||
|
|
||||||
ULONG
|
|
||||||
ProcEntry::getPid() {
|
|
||||||
return pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
USHORT
|
|
||||||
ProcEntry::getNameLength() {
|
|
||||||
return nameLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
WCHAR*
|
|
||||||
ProcEntry::getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
procList(ProcEntryList& processes) {
|
|
||||||
static ProcListImplFunc* impl = NULL;
|
|
||||||
|
|
||||||
if (impl == NULL) {
|
|
||||||
// See which operating system we're on
|
|
||||||
impl = (isNT4() ? &procListImplNT4 : &procListImplToolHelp);
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(impl != NULL);
|
|
||||||
|
|
||||||
(*impl)(processes);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
procListImplNT4(ProcEntryList& processes) {
|
|
||||||
using namespace NT4;
|
|
||||||
|
|
||||||
static ZwQuerySystemInformationFunc* query = NULL;
|
|
||||||
|
|
||||||
if (query == NULL) {
|
|
||||||
HMODULE ntDLL = loadNTDLL();
|
|
||||||
query =
|
|
||||||
(ZwQuerySystemInformationFunc*) GetProcAddress(ntDLL,
|
|
||||||
"ZwQuerySystemInformation");
|
|
||||||
assert(query != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
ULONG n = 0x100;
|
|
||||||
PSYSTEM_PROCESSES sp = new SYSTEM_PROCESSES[n];
|
|
||||||
while ((*query)(SystemProcessesAndThreadsInformation,
|
|
||||||
sp, n * sizeof(SYSTEM_PROCESSES), 0) == STATUS_INFO_LENGTH_MISMATCH) {
|
|
||||||
delete[] sp;
|
|
||||||
n *= 2;
|
|
||||||
sp = new SYSTEM_PROCESSES[n];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool done = false;
|
|
||||||
for (PSYSTEM_PROCESSES p = sp; !done;
|
|
||||||
p = PSYSTEM_PROCESSES(PCHAR(p) + p->NextEntryDelta)) {
|
|
||||||
processes.push_back(ProcEntry(p->ProcessId,
|
|
||||||
p->ProcessName.Length / 2,
|
|
||||||
p->ProcessName.Buffer));
|
|
||||||
done = p->NextEntryDelta == 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
procListImplToolHelp(ProcEntryList& processes) {
|
|
||||||
using namespace ToolHelp;
|
|
||||||
|
|
||||||
static CreateToolhelp32SnapshotFunc* snapshotFunc = NULL;
|
|
||||||
static Process32FirstFunc* firstFunc = NULL;
|
|
||||||
static Process32NextFunc* nextFunc = NULL;
|
|
||||||
|
|
||||||
if (snapshotFunc == NULL) {
|
|
||||||
HMODULE dll = loadDLL();
|
|
||||||
|
|
||||||
snapshotFunc =
|
|
||||||
(CreateToolhelp32SnapshotFunc*) GetProcAddress(dll,
|
|
||||||
"CreateToolhelp32Snapshot");
|
|
||||||
|
|
||||||
firstFunc = (Process32FirstFunc*) GetProcAddress(dll,
|
|
||||||
"Process32First");
|
|
||||||
|
|
||||||
nextFunc = (Process32NextFunc*) GetProcAddress(dll,
|
|
||||||
"Process32Next");
|
|
||||||
|
|
||||||
assert(snapshotFunc != NULL);
|
|
||||||
assert(firstFunc != NULL);
|
|
||||||
assert(nextFunc != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
HANDLE snapshot = (*snapshotFunc)(TH32CS_SNAPPROCESS, 0 /* ignored */);
|
|
||||||
if (snapshot == (HANDLE) -1) {
|
|
||||||
// Error occurred during snapshot
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iterate
|
|
||||||
PROCESSENTRY32 proc;
|
|
||||||
if ((*firstFunc)(snapshot, &proc)) {
|
|
||||||
do {
|
|
||||||
// FIXME: could make this uniform to the NT version by cutting
|
|
||||||
// off the path name just before the executable name
|
|
||||||
processes.push_back(ProcEntry(proc.th32ProcessID,
|
|
||||||
strlen(proc.szExeFile),
|
|
||||||
proc.szExeFile));
|
|
||||||
} while ((*nextFunc)(snapshot, &proc));
|
|
||||||
}
|
|
||||||
|
|
||||||
CloseHandle(snapshot);
|
|
||||||
}
|
|
||||||
@@ -1,270 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2003, 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.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include "serverLists.hpp"
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// Lists
|
|
||||||
//
|
|
||||||
|
|
||||||
CRITICAL_SECTION Lists::crit;
|
|
||||||
|
|
||||||
void
|
|
||||||
Lists::init() {
|
|
||||||
InitializeCriticalSection(&crit);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Lists::lock() {
|
|
||||||
EnterCriticalSection(&crit);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Lists::unlock() {
|
|
||||||
LeaveCriticalSection(&crit);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// ListsLocker
|
|
||||||
//
|
|
||||||
|
|
||||||
ListsLocker::ListsLocker() {
|
|
||||||
Lists::lock();
|
|
||||||
}
|
|
||||||
|
|
||||||
ListsLocker::~ListsLocker() {
|
|
||||||
Lists::unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// ChildInfo
|
|
||||||
//
|
|
||||||
|
|
||||||
ChildInfo::ChildInfo(DWORD pid, HANDLE childProcessHandle,
|
|
||||||
HANDLE writeToStdinHandle, HANDLE readFromStdoutHandle,
|
|
||||||
HANDLE auxHandle1, HANDLE auxHandle2) {
|
|
||||||
this->pid = pid;
|
|
||||||
this->childProcessHandle = childProcessHandle;
|
|
||||||
this->writeToStdinHandle = writeToStdinHandle;
|
|
||||||
this->readFromStdoutHandle = readFromStdoutHandle;
|
|
||||||
this->auxHandle1 = auxHandle1;
|
|
||||||
this->auxHandle2 = auxHandle2;
|
|
||||||
client = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD
|
|
||||||
ChildInfo::getPid() {
|
|
||||||
return pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
HANDLE
|
|
||||||
ChildInfo::getChildProcessHandle() {
|
|
||||||
return childProcessHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
HANDLE
|
|
||||||
ChildInfo::getWriteToStdinHandle() {
|
|
||||||
return writeToStdinHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
HANDLE
|
|
||||||
ChildInfo::getReadFromStdoutHandle() {
|
|
||||||
return readFromStdoutHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ChildInfo::setClient(ClientInfo* clientInfo) {
|
|
||||||
client = clientInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientInfo*
|
|
||||||
ChildInfo::getClient() {
|
|
||||||
return client;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ChildInfo::closeAll() {
|
|
||||||
CloseHandle(childProcessHandle);
|
|
||||||
CloseHandle(writeToStdinHandle);
|
|
||||||
CloseHandle(readFromStdoutHandle);
|
|
||||||
CloseHandle(auxHandle1);
|
|
||||||
CloseHandle(auxHandle2);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// ChildList
|
|
||||||
//
|
|
||||||
|
|
||||||
ChildList::ChildList() {
|
|
||||||
}
|
|
||||||
|
|
||||||
ChildList::~ChildList() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ChildList::addChild(ChildInfo* info) {
|
|
||||||
// Could store these in binary sorted order by pid for efficiency
|
|
||||||
childList.push_back(info);
|
|
||||||
}
|
|
||||||
|
|
||||||
ChildInfo*
|
|
||||||
ChildList::removeChild(HANDLE childProcessHandle) {
|
|
||||||
for (ChildInfoList::iterator iter = childList.begin(); iter != childList.end();
|
|
||||||
iter++) {
|
|
||||||
ChildInfo* info = *iter;
|
|
||||||
if (info->getChildProcessHandle() == childProcessHandle) {
|
|
||||||
childList.erase(iter);
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert(false);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ChildList::removeChild(ChildInfo* info) {
|
|
||||||
for (ChildInfoList::iterator iter = childList.begin(); iter != childList.end();
|
|
||||||
iter++) {
|
|
||||||
if (*iter == info) {
|
|
||||||
childList.erase(iter);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
ChildInfo*
|
|
||||||
ChildList::getChildByPid(DWORD pid) {
|
|
||||||
for (ChildInfoList::iterator iter = childList.begin(); iter != childList.end();
|
|
||||||
iter++) {
|
|
||||||
ChildInfo* info = *iter;
|
|
||||||
if (info->getPid() == pid) {
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
ChildList::size() {
|
|
||||||
return childList.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
ChildInfo*
|
|
||||||
ChildList::getChildByIndex(int index) {
|
|
||||||
return childList[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// ClientInfo
|
|
||||||
//
|
|
||||||
|
|
||||||
ClientInfo::ClientInfo(SOCKET dataSocket) {
|
|
||||||
this->dataSocket = dataSocket;
|
|
||||||
buf = new IOBuf(32768, 131072);
|
|
||||||
buf->setSocket(dataSocket);
|
|
||||||
target = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientInfo::~ClientInfo() {
|
|
||||||
delete buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
SOCKET
|
|
||||||
ClientInfo::getDataSocket() {
|
|
||||||
return dataSocket;
|
|
||||||
}
|
|
||||||
|
|
||||||
IOBuf*
|
|
||||||
ClientInfo::getIOBuf() {
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ClientInfo::setTarget(ChildInfo* childInfo) {
|
|
||||||
target = childInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChildInfo*
|
|
||||||
ClientInfo::getTarget() {
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ClientInfo::closeAll() {
|
|
||||||
shutdown(dataSocket, SD_BOTH);
|
|
||||||
closesocket(dataSocket);
|
|
||||||
dataSocket = INVALID_SOCKET;
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// ClientList
|
|
||||||
//
|
|
||||||
|
|
||||||
ClientList::ClientList() {
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientList::~ClientList() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ClientList::addClient(ClientInfo* info) {
|
|
||||||
clientList.push_back(info);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
ClientList::isAnyDataSocketSet(fd_set* fds, ClientInfo** out) {
|
|
||||||
for (ClientInfoList::iterator iter = clientList.begin(); iter != clientList.end();
|
|
||||||
iter++) {
|
|
||||||
ClientInfo* info = *iter;
|
|
||||||
if (FD_ISSET(info->getDataSocket(), fds)) {
|
|
||||||
*out = info;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ClientList::removeClient(ClientInfo* client) {
|
|
||||||
for (ClientInfoList::iterator iter = clientList.begin(); iter != clientList.end();
|
|
||||||
iter++) {
|
|
||||||
if (*iter == client) {
|
|
||||||
clientList.erase(iter);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
ClientList::size() {
|
|
||||||
return clientList.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientInfo*
|
|
||||||
ClientList::get(int num) {
|
|
||||||
return clientList[num];
|
|
||||||
}
|
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2000, 2003, 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.
|
|
||||||
*
|
|
||||||
* 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 _SERVER_LISTS_
|
|
||||||
#define _SERVER_LISTS_
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <winsock2.h>
|
|
||||||
#include "IOBuf.hpp"
|
|
||||||
|
|
||||||
//
|
|
||||||
// NOTE:
|
|
||||||
//
|
|
||||||
// All of these lists are guarded by the global lock managed by the
|
|
||||||
// Lists class. Lists::init() must be called at the start of the
|
|
||||||
// program.
|
|
||||||
//
|
|
||||||
|
|
||||||
class Lists {
|
|
||||||
friend class ListsLocker;
|
|
||||||
public:
|
|
||||||
static void init();
|
|
||||||
private:
|
|
||||||
static void lock();
|
|
||||||
static void unlock();
|
|
||||||
static CRITICAL_SECTION crit;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Should be allocated on stack. Ensures proper locking/unlocking
|
|
||||||
// pairing.
|
|
||||||
class ListsLocker {
|
|
||||||
public:
|
|
||||||
ListsLocker();
|
|
||||||
~ListsLocker();
|
|
||||||
};
|
|
||||||
|
|
||||||
// We must keep track of all of the child processes we have forked to
|
|
||||||
// handle attaching to a target process. This is necessary because we
|
|
||||||
// allow clients to detach from processes, but the child processes we
|
|
||||||
// fork must necessarily stay alive for the duration of the target
|
|
||||||
// application. A subsequent attach operation to the target process
|
|
||||||
// results in the same child process being reused. For this reason,
|
|
||||||
// child processes are known to be in one of two states: attached and
|
|
||||||
// detached.
|
|
||||||
|
|
||||||
class ClientInfo;
|
|
||||||
|
|
||||||
class ChildInfo {
|
|
||||||
public:
|
|
||||||
/** The pid of the ChildInfo indicates the process ID of the target
|
|
||||||
process which the subprocess was created to debug, not the pid
|
|
||||||
of the subprocess itself. */
|
|
||||||
ChildInfo(DWORD pid, HANDLE childProcessHandle,
|
|
||||||
HANDLE writeToStdinHandle, HANDLE readFromStdoutHandle,
|
|
||||||
HANDLE auxHandle1, HANDLE auxHandle2);
|
|
||||||
|
|
||||||
DWORD getPid();
|
|
||||||
HANDLE getChildProcessHandle();
|
|
||||||
HANDLE getWriteToStdinHandle();
|
|
||||||
HANDLE getReadFromStdoutHandle();
|
|
||||||
|
|
||||||
/** Set the client which is currently attached to the target process
|
|
||||||
via this child process. Set this to NULL to indicate that the
|
|
||||||
child process is ready to accept another attachment. */
|
|
||||||
void setClient(ClientInfo* clientInfo);
|
|
||||||
|
|
||||||
ClientInfo* getClient();
|
|
||||||
|
|
||||||
/** This is NOT automatically called in the destructor */
|
|
||||||
void closeAll();
|
|
||||||
|
|
||||||
private:
|
|
||||||
DWORD pid;
|
|
||||||
HANDLE childProcessHandle;
|
|
||||||
HANDLE writeToStdinHandle;
|
|
||||||
HANDLE readFromStdoutHandle;
|
|
||||||
HANDLE auxHandle1;
|
|
||||||
HANDLE auxHandle2;
|
|
||||||
ClientInfo* client;
|
|
||||||
};
|
|
||||||
|
|
||||||
// We keep track of a list of child debugger processes, each of which
|
|
||||||
// is responsible for debugging a certain target process. These
|
|
||||||
// debugger processes can serve multiple clients during their
|
|
||||||
// lifetime. When a client detaches from a given process or tells the
|
|
||||||
// debugger to "exit", the debug server is notified that the child
|
|
||||||
// process is once again available to accept connections from clients.
|
|
||||||
|
|
||||||
class ChildList {
|
|
||||||
private:
|
|
||||||
typedef std::vector<ChildInfo*> ChildInfoList;
|
|
||||||
|
|
||||||
public:
|
|
||||||
ChildList();
|
|
||||||
~ChildList();
|
|
||||||
|
|
||||||
void addChild(ChildInfo*);
|
|
||||||
|
|
||||||
/** Removes and returns the ChildInfo* associated with the given
|
|
||||||
child process handle. */
|
|
||||||
ChildInfo* removeChild(HANDLE childProcessHandle);
|
|
||||||
|
|
||||||
/** Removes the given ChildInfo. */
|
|
||||||
void removeChild(ChildInfo* info);
|
|
||||||
|
|
||||||
/** Return the ChildInfo* associated with a given process ID without
|
|
||||||
removing it from the list. */
|
|
||||||
ChildInfo* getChildByPid(DWORD pid);
|
|
||||||
|
|
||||||
/** Iteration support */
|
|
||||||
int size();
|
|
||||||
|
|
||||||
/** Iteration support */
|
|
||||||
ChildInfo* getChildByIndex(int index);
|
|
||||||
|
|
||||||
private:
|
|
||||||
ChildInfoList childList;
|
|
||||||
};
|
|
||||||
|
|
||||||
// We also keep a list of clients whose requests we are responsible
|
|
||||||
// for serving. Clients can attach and detach from child processes.
|
|
||||||
|
|
||||||
class ClientInfo {
|
|
||||||
public:
|
|
||||||
ClientInfo(SOCKET dataSocket);
|
|
||||||
~ClientInfo();
|
|
||||||
|
|
||||||
SOCKET getDataSocket();
|
|
||||||
/** Gets an IOBuf configured for the data socket, which should be
|
|
||||||
used for all communication with the client. */
|
|
||||||
IOBuf* getIOBuf();
|
|
||||||
|
|
||||||
/** Set the information for the process to which this client is
|
|
||||||
attached. Set this to NULL to indicate that the client is not
|
|
||||||
currently attached to any target process. */
|
|
||||||
void setTarget(ChildInfo* childInfo);
|
|
||||||
|
|
||||||
/** Get the information for the process to which this client is
|
|
||||||
currently attached, or NULL if none. */
|
|
||||||
ChildInfo* getTarget();
|
|
||||||
|
|
||||||
/** Close down the socket connection to this client. This is NOT
|
|
||||||
automatically called by the destructor. */
|
|
||||||
void closeAll();
|
|
||||||
|
|
||||||
private:
|
|
||||||
SOCKET dataSocket;
|
|
||||||
IOBuf* buf;
|
|
||||||
ChildInfo* target;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ClientList {
|
|
||||||
private:
|
|
||||||
typedef std::vector<ClientInfo*> ClientInfoList;
|
|
||||||
|
|
||||||
public:
|
|
||||||
ClientList();
|
|
||||||
~ClientList();
|
|
||||||
|
|
||||||
/** Adds a client to the list. */
|
|
||||||
void addClient(ClientInfo* info);
|
|
||||||
|
|
||||||
/** Check to see whether the parent socket of any of the ClientInfo
|
|
||||||
objects is readable in the given fd_set. If so, returns TRUE and
|
|
||||||
sets the given ClientInfo* (a non-NULL pointer to which must be
|
|
||||||
given) appropriately. */
|
|
||||||
bool isAnyDataSocketSet(fd_set* fds, ClientInfo** info);
|
|
||||||
|
|
||||||
/** Removes a client from the list. User is responsible for deleting
|
|
||||||
the ClientInfo* using operator delete. */
|
|
||||||
void removeClient(ClientInfo* client);
|
|
||||||
|
|
||||||
/** Iteration support. */
|
|
||||||
int size();
|
|
||||||
|
|
||||||
/** Iteration support. */
|
|
||||||
ClientInfo* get(int num);
|
|
||||||
|
|
||||||
private:
|
|
||||||
ClientInfoList clientList;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // #defined _SERVER_LISTS_
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user