Compare commits
2692 Commits
android-1.
...
android-4.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f29c214d6a | ||
![]() |
a811d7a8e6 | ||
![]() |
5ba74660e3 | ||
![]() |
f0e402dbd2 | ||
![]() |
7cc2dec82e | ||
![]() |
2c287e9510 | ||
![]() |
956092e07c | ||
![]() |
3ef4fecd30 | ||
![]() |
98957db553 | ||
![]() |
2e0452cbd1 | ||
![]() |
f84bc8d6f6 | ||
![]() |
f27642c082 | ||
![]() |
204b26b440 | ||
![]() |
9014818f61 | ||
![]() |
f4b34b6c39 | ||
![]() |
6c0e373d38 | ||
![]() |
ec4326084e | ||
![]() |
ecf67e152a | ||
![]() |
d2eea0e6d6 | ||
![]() |
2d51dddf1a | ||
![]() |
baa74eff0d | ||
![]() |
0c24effd01 | ||
![]() |
85049ead25 | ||
![]() |
cc95d69c25 | ||
![]() |
95a7a64ac8 | ||
![]() |
882c6af953 | ||
![]() |
988ff8ff9f | ||
![]() |
e0a00a8a2c | ||
![]() |
f707007435 | ||
![]() |
a9dca77315 | ||
![]() |
8ab03a28d0 | ||
![]() |
4430aa6aaa | ||
![]() |
02e06782fc | ||
![]() |
0ef0009044 | ||
![]() |
30289f0dd6 | ||
![]() |
47dc4d4310 | ||
![]() |
88f1ea8f82 | ||
![]() |
4513ad77ef | ||
![]() |
e58303249b | ||
![]() |
2aceb4bcb3 | ||
![]() |
e2a17ef444 | ||
![]() |
77ac158e90 | ||
![]() |
4198fa4c23 | ||
![]() |
dd526b010d | ||
![]() |
4b3ff1f0fa | ||
![]() |
f8902bf707 | ||
![]() |
047a285d41 | ||
![]() |
b67d4ec5ba | ||
![]() |
950a3c010c | ||
![]() |
5151952197 | ||
![]() |
e249b05963 | ||
![]() |
9d1defbf47 | ||
![]() |
b2af8b6848 | ||
![]() |
1eaa3e6f72 | ||
![]() |
66a97ea9fb | ||
![]() |
77fd70758a | ||
![]() |
4e9d953a0e | ||
![]() |
5e58ea07d4 | ||
![]() |
e895e6deaa | ||
![]() |
965b867512 | ||
![]() |
2b270a0cac | ||
![]() |
155a70b93f | ||
![]() |
c7fda6a96d | ||
![]() |
a4ea1a3d2e | ||
![]() |
de9db8f7ef | ||
![]() |
d4623e56fb | ||
![]() |
f7e403d663 | ||
![]() |
8a05a01de7 | ||
![]() |
2a54e5ecd0 | ||
![]() |
fa36875df4 | ||
![]() |
b5f053b5a7 | ||
![]() |
b338ea30b2 | ||
![]() |
88b61cb691 | ||
![]() |
bec648ee9f | ||
![]() |
8db4b91bd2 | ||
![]() |
d2236e2c07 | ||
![]() |
38bfa21695 | ||
![]() |
478f8ff3f0 | ||
![]() |
29861b5d8e | ||
![]() |
b2550dd4c8 | ||
![]() |
58d15966c8 | ||
![]() |
4a9b7c694a | ||
![]() |
af4d630e4d | ||
![]() |
f238e06d3a | ||
![]() |
e007775f4b | ||
![]() |
acf5aa76a5 | ||
![]() |
f801cf55be | ||
![]() |
47bda0c293 | ||
![]() |
7593fa8eb7 | ||
![]() |
86ec05acc9 | ||
![]() |
ccd7ee624a | ||
![]() |
90ae787b30 | ||
![]() |
666d06fee9 | ||
![]() |
0d207ba624 | ||
![]() |
5766b0932f | ||
![]() |
cc0f225365 | ||
![]() |
7f79814798 | ||
![]() |
cc8668f261 | ||
![]() |
b03bc56b79 | ||
![]() |
e77e1afe24 | ||
![]() |
3a936a4980 | ||
![]() |
49b5eb4ded | ||
![]() |
f50b99f471 | ||
![]() |
e8b4d67a37 | ||
![]() |
59726beda5 | ||
![]() |
12949e5d39 | ||
![]() |
e3738414a6 | ||
![]() |
f9920563da | ||
![]() |
67546bf209 | ||
![]() |
9209fd3868 | ||
![]() |
af4371b46b | ||
![]() |
56ba6336d9 | ||
![]() |
f1d57e1668 | ||
![]() |
cf464878ef | ||
![]() |
4d014e15b4 | ||
![]() |
b010245490 | ||
![]() |
b18d4f6361 | ||
![]() |
7c7a7f8e52 | ||
![]() |
72fcdbe902 | ||
![]() |
d10309c36b | ||
![]() |
691ef3c80b | ||
![]() |
048569be54 | ||
![]() |
973bf681b7 | ||
![]() |
77039d3444 | ||
![]() |
e8f815473b | ||
![]() |
1ad05db9ce | ||
![]() |
de0dc25112 | ||
![]() |
41ff8b9804 | ||
![]() |
6e3b0f2d2e | ||
![]() |
09f76cdd9b | ||
![]() |
abce26b05a | ||
![]() |
183d0a57a2 | ||
![]() |
85811fc7c2 | ||
![]() |
dc81b44759 | ||
![]() |
bfeab1bbe7 | ||
![]() |
2da907059e | ||
![]() |
008f4df5ba | ||
![]() |
ff4608ae0c | ||
![]() |
2e8f4345df | ||
![]() |
faf361a6ac | ||
![]() |
2fc3e1efda | ||
![]() |
b2c5bd543d | ||
![]() |
ac3e35cd8f | ||
![]() |
a76f2ecaa2 | ||
![]() |
26f2e4a163 | ||
![]() |
f71d757f6e | ||
![]() |
7310a1c432 | ||
![]() |
82978cae4e | ||
![]() |
3a8807df34 | ||
![]() |
ab558163a3 | ||
![]() |
b9f0a6eb75 | ||
![]() |
be19a36717 | ||
![]() |
f34c6d7796 | ||
![]() |
bc3740787a | ||
![]() |
5ff2347130 | ||
![]() |
877ad30fd6 | ||
![]() |
507bcabb35 | ||
![]() |
e03ab93699 | ||
![]() |
63deae5e4f | ||
![]() |
c0e3b9ddd6 | ||
![]() |
b438c54d02 | ||
![]() |
1db615b4ae | ||
![]() |
5ac9eee1d3 | ||
![]() |
954923858b | ||
![]() |
2b49277d84 | ||
![]() |
1ad10a566e | ||
![]() |
3e2d2936b0 | ||
![]() |
b9ad1a1e00 | ||
![]() |
6abab301db | ||
![]() |
6fe901ef38 | ||
![]() |
83d5e567d6 | ||
![]() |
c6d95add30 | ||
![]() |
8c368b5d1d | ||
![]() |
fe7d7d4693 | ||
![]() |
dde94f4c16 | ||
![]() |
92133ca427 | ||
![]() |
8b4e8a937b | ||
![]() |
17d9be8ad7 | ||
![]() |
8900e2de45 | ||
![]() |
e5b85f45f9 | ||
![]() |
e9b6fc6f82 | ||
![]() |
0d7177c0d4 | ||
![]() |
829c089f83 | ||
![]() |
c4d1fecc10 | ||
![]() |
15afed42ca | ||
![]() |
f71fa0830a | ||
![]() |
b2d46d3632 | ||
![]() |
66edcd9dad | ||
![]() |
5f1d206de3 | ||
![]() |
e0d680176f | ||
![]() |
2c344d3631 | ||
![]() |
4f90a0932c | ||
![]() |
d3d09f7d75 | ||
![]() |
54662dd4de | ||
![]() |
d7440f3725 | ||
![]() |
069c64cdf2 | ||
![]() |
1389db8b94 | ||
![]() |
7cab21885a | ||
![]() |
e026b1d89a | ||
![]() |
ad18073897 | ||
![]() |
6fa20f8296 | ||
![]() |
d39c3abd5a | ||
![]() |
3ffdef19b4 | ||
![]() |
c7d9c40012 | ||
![]() |
c410a9613a | ||
![]() |
4be256b50b | ||
![]() |
144c291866 | ||
![]() |
f3cfcd869d | ||
![]() |
c23092887f | ||
![]() |
48c8880429 | ||
![]() |
775dabd4d7 | ||
![]() |
9dfaa63a1c | ||
![]() |
8c7f4777ec | ||
![]() |
d2d8031df1 | ||
![]() |
bc366292ff | ||
![]() |
19c0b800a3 | ||
![]() |
3ad36e525f | ||
![]() |
eeddc30e7e | ||
![]() |
3697b52605 | ||
![]() |
a190cbb825 | ||
![]() |
05fddb41d0 | ||
![]() |
a37ce7faa6 | ||
![]() |
cbd76d15af | ||
![]() |
eb75db7d83 | ||
![]() |
81af404b63 | ||
![]() |
21120f6d7b | ||
![]() |
561bf16be5 | ||
![]() |
453294d1da | ||
![]() |
f72ee26927 | ||
![]() |
78a3069f82 | ||
![]() |
e8198b97c3 | ||
![]() |
0a150ead18 | ||
![]() |
26facba288 | ||
![]() |
404e28ff8c | ||
![]() |
e49df0203c | ||
![]() |
170ad35419 | ||
![]() |
c7de022590 | ||
![]() |
6773054eb3 | ||
![]() |
974e16cd82 | ||
![]() |
c0b4d18d7d | ||
![]() |
5d8cfb3e66 | ||
![]() |
5ed48a4d7f | ||
![]() |
f861705f8c | ||
![]() |
5cd1efb2ba | ||
![]() |
1bd035cf11 | ||
![]() |
2f7d7c6538 | ||
![]() |
4ac3b0a148 | ||
![]() |
8af726b24f | ||
![]() |
7b0d9b7984 | ||
![]() |
bfc1d97531 | ||
![]() |
cc1f4acbda | ||
![]() |
76f60e2ebd | ||
![]() |
fe87596a5b | ||
![]() |
c37dcd3d3a | ||
![]() |
999089181e | ||
![]() |
f706b3dfcf | ||
![]() |
dd0e991c6a | ||
![]() |
2651d6c6cb | ||
![]() |
9417a80e48 | ||
![]() |
db2903fac3 | ||
![]() |
cbeccc849a | ||
![]() |
200de748b9 | ||
![]() |
2932f04832 | ||
![]() |
6d6731adc0 | ||
![]() |
efd3983446 | ||
![]() |
e5242bfdd7 | ||
![]() |
1771a33d11 | ||
![]() |
b7beb69075 | ||
![]() |
ce5ba8bfcd | ||
![]() |
28ae6f5dfd | ||
![]() |
cefb93b632 | ||
![]() |
6c98cdb192 | ||
![]() |
7b841f3b4a | ||
![]() |
a7d8f3d50e | ||
![]() |
c80ca54f3c | ||
![]() |
60ef95e1c1 | ||
![]() |
04a83a48ed | ||
![]() |
820ad4283d | ||
![]() |
74438bb225 | ||
![]() |
449d4634be | ||
![]() |
9862f5e08b | ||
![]() |
09d9dd3acd | ||
![]() |
52bf2d5659 | ||
![]() |
e20afb140c | ||
![]() |
a626bbdb36 | ||
![]() |
4af9141c5c | ||
![]() |
29af938cbd | ||
![]() |
4d63f33cdc | ||
![]() |
ab8850f7e2 | ||
![]() |
76aad1d274 | ||
![]() |
ae7280994e | ||
![]() |
22d366cc09 | ||
![]() |
07cd11251f | ||
![]() |
105bc26fa6 | ||
![]() |
e1cd69a708 | ||
![]() |
2e3756b4d3 | ||
![]() |
9b3bbcda84 | ||
![]() |
32dbc03c73 | ||
![]() |
fe43c768ec | ||
![]() |
cc213f871b | ||
![]() |
46bb2a222e | ||
![]() |
8225911775 | ||
![]() |
008a0a5d50 | ||
![]() |
df88d88f56 | ||
![]() |
53493a9b26 | ||
![]() |
fdbecf3b5a | ||
![]() |
63696738e5 | ||
![]() |
261e2232c1 | ||
![]() |
b6a971962a | ||
![]() |
bedfe38b8b | ||
![]() |
056b4bc499 | ||
![]() |
77b25702ba | ||
![]() |
89a3543568 | ||
![]() |
16a0cbaa83 | ||
![]() |
b7c6991c9a | ||
![]() |
dc320d99f1 | ||
![]() |
b6d6ec5326 | ||
![]() |
82b69fcbb3 | ||
![]() |
370a70948a | ||
![]() |
74c0464006 | ||
![]() |
b9c6854cd9 | ||
![]() |
d8450043b0 | ||
![]() |
c50e019734 | ||
![]() |
82393decdf | ||
![]() |
12c78bbded | ||
![]() |
59b222ac75 | ||
![]() |
409302f0f9 | ||
![]() |
93a9d53485 | ||
![]() |
d544bdfac8 | ||
![]() |
54655eaf92 | ||
![]() |
3d2d448af1 | ||
![]() |
69fc1522a3 | ||
![]() |
aa6c8994b7 | ||
![]() |
b66bc51423 | ||
![]() |
de727caee2 | ||
![]() |
eab7bddd9e | ||
![]() |
ad8ff472b6 | ||
![]() |
cfd0345fe0 | ||
![]() |
ca09412a1f | ||
![]() |
222eec2ecf | ||
![]() |
c1eb76198e | ||
![]() |
bf9441efb8 | ||
![]() |
440e417d5f | ||
![]() |
ae5c64413b | ||
![]() |
ca7ee8a9e5 | ||
![]() |
c60a0027b1 | ||
![]() |
35dcf19b2b | ||
![]() |
66fba00991 | ||
![]() |
7d9f1c46bb | ||
![]() |
71c0366fc7 | ||
![]() |
e135d7f305 | ||
![]() |
a61ac5257b | ||
![]() |
9181a5dcfe | ||
![]() |
19b1041930 | ||
![]() |
89fd9eccdc | ||
![]() |
20b94c0ce9 | ||
![]() |
5135b3ae6e | ||
![]() |
df0cf64781 | ||
![]() |
2a22a69e94 | ||
![]() |
9eeaa4bd17 | ||
![]() |
877dc94609 | ||
![]() |
7e3918eb62 | ||
![]() |
072a7e6ced | ||
![]() |
a4c7933b49 | ||
![]() |
0bf5cf87c6 | ||
![]() |
06f0e74a2b | ||
![]() |
0837c69a63 | ||
![]() |
edf09bf990 | ||
![]() |
316ee626b7 | ||
![]() |
73d99958bb | ||
![]() |
fabeb736e9 | ||
![]() |
38a02b4b80 | ||
![]() |
d71ada630d | ||
![]() |
6eee1fc68f | ||
![]() |
535477ca5e | ||
![]() |
3ede900b64 | ||
![]() |
5adc7fdc2b | ||
![]() |
b54e5f2a2f | ||
![]() |
a1822dced3 | ||
![]() |
e36c826f7a | ||
![]() |
5140b785a0 | ||
![]() |
5520650483 | ||
![]() |
29b8fb3d5e | ||
![]() |
b6c1e34dca | ||
![]() |
f6922be2a5 | ||
![]() |
f91e2f7286 | ||
![]() |
01030e6388 | ||
![]() |
f8b3a920a8 | ||
![]() |
a618ea30e1 | ||
![]() |
4ec9e343cf | ||
![]() |
8793e7c7d2 | ||
![]() |
6ccc2c8f43 | ||
![]() |
3e83da435b | ||
![]() |
9ad1d6f58c | ||
![]() |
5467f25f82 | ||
![]() |
be1d78b0dc | ||
![]() |
abd10011a7 | ||
![]() |
dc6d5327bb | ||
![]() |
0836a7ffb1 | ||
![]() |
387d4b7de9 | ||
![]() |
31ab6ac05e | ||
![]() |
8cc8f7e0d5 | ||
![]() |
709bb0f79c | ||
![]() |
df675370d7 | ||
![]() |
3fc211983e | ||
![]() |
531d348d6e | ||
![]() |
a17b85d97b | ||
![]() |
a554212992 | ||
![]() |
536b1daf00 | ||
![]() |
b13ad93f4a | ||
![]() |
73ac7d94b7 | ||
![]() |
3820229b46 | ||
![]() |
d504eee9fa | ||
![]() |
d2040cb224 | ||
![]() |
f655ce7ef3 | ||
![]() |
57e6d9ab48 | ||
![]() |
366c01992a | ||
![]() |
f3ffb8fa6e | ||
![]() |
7812920487 | ||
![]() |
10e2d222ce | ||
![]() |
d463f6e980 | ||
![]() |
34959e0bd5 | ||
![]() |
affd1b4243 | ||
![]() |
76be660aae | ||
![]() |
9f3a8aaf92 | ||
![]() |
7e248be764 | ||
![]() |
4688279db5 | ||
![]() |
eeb321c54e | ||
![]() |
f4497e15b7 | ||
![]() |
a72246d67e | ||
![]() |
5fec211f60 | ||
![]() |
3b4c9db256 | ||
![]() |
df523880b5 | ||
![]() |
e2731d98c1 | ||
![]() |
d600617645 | ||
![]() |
6ff66601a4 | ||
![]() |
cddedade5b | ||
![]() |
ce4a5cd5f3 | ||
![]() |
924fd92013 | ||
![]() |
8173d76740 | ||
![]() |
601a49d398 | ||
![]() |
9a3d53fad0 | ||
![]() |
eaac1e5a1c | ||
![]() |
94ce135693 | ||
![]() |
7c92b6ca40 | ||
![]() |
7bf1c31cac | ||
![]() |
2b7f68c03d | ||
![]() |
4bac8f689e | ||
![]() |
7e81ee0453 | ||
![]() |
1c861728e5 | ||
![]() |
5f0701c9fa | ||
![]() |
bbf094fdf5 | ||
![]() |
c9dbebe344 | ||
![]() |
f5385754e2 | ||
![]() |
aea5f00df4 | ||
![]() |
c164f2a969 | ||
![]() |
48955d24b9 | ||
![]() |
c6f15ecf76 | ||
![]() |
1510795fec | ||
![]() |
094651335e | ||
![]() |
d7552a3101 | ||
![]() |
2f2b721204 | ||
![]() |
16d40217d0 | ||
![]() |
4f1f149c37 | ||
![]() |
9b6a453865 | ||
![]() |
0ce92b9625 | ||
![]() |
1e304a3bce | ||
![]() |
bdcc14d721 | ||
![]() |
6437eac15a | ||
![]() |
1c30398143 | ||
![]() |
f94effdab2 | ||
![]() |
fd4685be87 | ||
![]() |
52f3ee962b | ||
![]() |
82dcfee5fc | ||
![]() |
c07196605c | ||
![]() |
405b8029a6 | ||
![]() |
19e30fc410 | ||
![]() |
670766c564 | ||
![]() |
a1c0f08d3c | ||
![]() |
ecb53eab4b | ||
![]() |
994935f64c | ||
![]() |
673c092e0f | ||
![]() |
402ec70899 | ||
![]() |
5483057817 | ||
![]() |
f34ecbff0d | ||
![]() |
d7daacb463 | ||
![]() |
248321bb6f | ||
![]() |
da2611084f | ||
![]() |
617a5ee417 | ||
![]() |
cbbe9528ca | ||
![]() |
4f13bdd45c | ||
![]() |
7565d5b118 | ||
![]() |
0ca9d0748e | ||
![]() |
81f1617a68 | ||
![]() |
8d2c5b247e | ||
![]() |
b910b6f8de | ||
![]() |
c29f295d39 | ||
![]() |
f19979710a | ||
![]() |
b78aa53904 | ||
![]() |
7645355ecd | ||
![]() |
bf397b6011 | ||
![]() |
a513f70b43 | ||
![]() |
21372896ea | ||
![]() |
15e0ca8186 | ||
![]() |
2270dfa0c4 | ||
![]() |
ea8fad11d9 | ||
![]() |
4e86ebb4b6 | ||
![]() |
0c2d318837 | ||
![]() |
184216696a | ||
![]() |
1ee6e3b737 | ||
![]() |
e5b635c885 | ||
![]() |
681ccffb45 | ||
![]() |
fc0725ec5c | ||
![]() |
b7dd54f0c7 | ||
![]() |
d6c3369cec | ||
![]() |
7a450b4d9e | ||
![]() |
643e572233 | ||
![]() |
52d6233296 | ||
![]() |
65b48f892e | ||
![]() |
2eb46df63a | ||
![]() |
a1d1abbc26 | ||
![]() |
c823b2c741 | ||
![]() |
616f368076 | ||
![]() |
d7dfcb0cb0 | ||
![]() |
514ace9534 | ||
![]() |
22bd479e2e | ||
![]() |
a7916509a3 | ||
![]() |
8dfc073b14 | ||
![]() |
e35ae86e70 | ||
![]() |
9061c6e7ae | ||
![]() |
6171d11e72 | ||
![]() |
cb9ea8873a | ||
![]() |
408e3e5046 | ||
![]() |
45038ae483 | ||
![]() |
12f411d9a6 | ||
![]() |
c20d0f3993 | ||
![]() |
3460db9490 | ||
![]() |
6320848df6 | ||
![]() |
c636ff1944 | ||
![]() |
9a9ca7c1e8 | ||
![]() |
7d6c3f700b | ||
![]() |
541c225320 | ||
![]() |
186b36b65b | ||
![]() |
68c1f682ff | ||
![]() |
b4fc64c96c | ||
![]() |
cc5edd83ec | ||
![]() |
9145ad3f0a | ||
![]() |
a501f6c7e3 | ||
![]() |
edc5fe530f | ||
![]() |
7c3323516b | ||
![]() |
9dbd4c06fe | ||
![]() |
860dc7e25d | ||
![]() |
c27103d84c | ||
![]() |
00a66a6fe8 | ||
![]() |
c98e2365cd | ||
![]() |
958dad705a | ||
![]() |
0b82e1bd77 | ||
![]() |
d33ce20e6d | ||
![]() |
344aca8ced | ||
![]() |
f7fb9e1ef1 | ||
![]() |
7cfe2c5c07 | ||
![]() |
5e2a2705f2 | ||
![]() |
b109e437fc | ||
![]() |
5d967e43d0 | ||
![]() |
acda32c8f2 | ||
![]() |
2730674ca9 | ||
![]() |
a94c708a15 | ||
![]() |
654b1501f7 | ||
![]() |
0351955a68 | ||
![]() |
8958a38329 | ||
![]() |
6591be6c52 | ||
![]() |
3e210abf7d | ||
![]() |
59fae8abaf | ||
![]() |
f6ee33cee7 | ||
![]() |
3fd5e91e58 | ||
![]() |
05f03b8875 | ||
![]() |
8211bc6325 | ||
![]() |
decb531ce2 | ||
![]() |
439fa8ea8c | ||
![]() |
8d7355ac2f | ||
![]() |
856512ea9c | ||
![]() |
fabddfe833 | ||
![]() |
b0f0d4276d | ||
![]() |
bb5c30a3ee | ||
![]() |
326e85eca6 | ||
![]() |
c37fc1ab6a | ||
![]() |
e1d909f71e | ||
![]() |
147b0690a9 | ||
![]() |
ad7f966281 | ||
![]() |
9b6cc223a3 | ||
![]() |
260bf8cfe0 | ||
![]() |
b2060b027c | ||
![]() |
88bfc28ac4 | ||
![]() |
c7dcd67d56 | ||
![]() |
f3913b5b68 | ||
![]() |
86a4fca0b4 | ||
![]() |
e13338429f | ||
![]() |
e64259e860 | ||
![]() |
6334c662ca | ||
![]() |
6331db3fd2 | ||
![]() |
8f08e1c902 | ||
![]() |
a3e230d1fa | ||
![]() |
a099e8e7d3 | ||
![]() |
793e6aedf2 | ||
![]() |
b9462d5f88 | ||
![]() |
67636eea20 | ||
![]() |
965dbc6405 | ||
![]() |
3fc3b7fd94 | ||
![]() |
05ad617b5b | ||
![]() |
40e7ed58d7 | ||
![]() |
402b93c16d | ||
![]() |
2ddf77b377 | ||
![]() |
bd73eede46 | ||
![]() |
cb228fb4a9 | ||
![]() |
8118f62a7d | ||
![]() |
b52e4385c4 | ||
![]() |
63f99f4a4e | ||
![]() |
8941cfa17a | ||
![]() |
ff9ff758ad | ||
![]() |
48d6c8ed23 | ||
![]() |
c6025b6047 | ||
![]() |
0ff08d22f0 | ||
![]() |
5af97ca851 | ||
![]() |
c7bab8cb84 | ||
![]() |
bea23e59f7 | ||
![]() |
23363ed750 | ||
![]() |
a6545f4678 | ||
![]() |
c1bd559d5b | ||
![]() |
29aa009924 | ||
![]() |
20bc061dc7 | ||
![]() |
3fad2b17b9 | ||
![]() |
240b3349fc | ||
![]() |
63d0ceec75 | ||
![]() |
fa136e8ca7 | ||
![]() |
a5948157fd | ||
![]() |
6973e3da87 | ||
![]() |
214feeba19 | ||
![]() |
effc607e87 | ||
![]() |
77093f2a8b | ||
![]() |
823aeb9294 | ||
![]() |
f2ba5c9afa | ||
![]() |
63c4179f59 | ||
![]() |
5e94df8a4f | ||
![]() |
4d0128f13a | ||
![]() |
ec2ab73b87 | ||
![]() |
166b7dbd4a | ||
![]() |
ece8f502ed | ||
![]() |
70f6901c3d | ||
![]() |
8df49ad246 | ||
![]() |
420f4939b3 | ||
![]() |
4442d512c6 | ||
![]() |
a5eaa02f62 | ||
![]() |
b27631b9ae | ||
![]() |
1608416811 | ||
![]() |
8c54c56723 | ||
![]() |
9b549c39c9 | ||
![]() |
ca622f5748 | ||
![]() |
8f88aa7d38 | ||
![]() |
c5cab3452d | ||
![]() |
d1a6918508 | ||
![]() |
028ccf5d40 | ||
![]() |
c2f1d215b1 | ||
![]() |
f525fb525b | ||
![]() |
c9142d4d8e | ||
![]() |
20afd4e70c | ||
![]() |
571da80c58 | ||
![]() |
e096144512 | ||
![]() |
cffdf6693f | ||
![]() |
c75491e291 | ||
![]() |
4c19e4f64f | ||
![]() |
0f5b48ce28 | ||
![]() |
85b06f9365 | ||
![]() |
6d3f548294 | ||
![]() |
c3d45b822c | ||
![]() |
7c5c68f5c7 | ||
![]() |
5056f1fad1 | ||
![]() |
29d03a8f39 | ||
![]() |
3cb8cdea3c | ||
![]() |
631498de43 | ||
![]() |
fd49579f3a | ||
![]() |
524c87c61c | ||
![]() |
009f38478e | ||
![]() |
8f2887be93 | ||
![]() |
5ff025a50c | ||
![]() |
ff7eae7b08 | ||
![]() |
76656afc6d | ||
![]() |
f41855949d | ||
![]() |
e4db460a54 | ||
![]() |
ec8addcc8a | ||
![]() |
8b11c4cec2 | ||
![]() |
7e5993bec7 | ||
![]() |
71a18dd435 | ||
![]() |
1a6b0bb3a6 | ||
![]() |
7d11009a97 | ||
![]() |
d06a73bcb3 | ||
![]() |
b7630f018a | ||
![]() |
459049719c | ||
![]() |
d0c250271c | ||
![]() |
2b89f1e37d | ||
![]() |
a985076bfe | ||
![]() |
158ad015c2 | ||
![]() |
3069270d86 | ||
![]() |
c2bba24d0a | ||
![]() |
470631ed79 | ||
![]() |
204c6e5ff3 | ||
![]() |
0a2301598c | ||
![]() |
f186a1819a | ||
![]() |
db2e7a4cb6 | ||
![]() |
31431f454a | ||
![]() |
143ad4cf31 | ||
![]() |
252a5c854a | ||
![]() |
f0ddaa2fac | ||
![]() |
e1dd3c287b | ||
![]() |
9d40326830 | ||
![]() |
e1d591540e | ||
![]() |
7d2e24eb16 | ||
![]() |
857fc9eab9 | ||
![]() |
83a73d1afe | ||
![]() |
207d7673e5 | ||
![]() |
5a095ef287 | ||
![]() |
03539a36b6 | ||
![]() |
1ebb243d1a | ||
![]() |
cb9ba3c88a | ||
![]() |
1dd9efc541 | ||
![]() |
75917c84d1 | ||
![]() |
2481468f22 | ||
![]() |
41c2a112c2 | ||
![]() |
d7b60b207b | ||
![]() |
c84ff11dad | ||
![]() |
b23f193dcc | ||
![]() |
15ed08d065 | ||
![]() |
7cce04381a | ||
![]() |
d155ba57a3 | ||
![]() |
c7882ab2a9 | ||
![]() |
dc6c2b779b | ||
![]() |
70cf0bc049 | ||
![]() |
d8f9198644 | ||
![]() |
38e81b4294 | ||
![]() |
ed434302f0 | ||
![]() |
82576526e3 | ||
![]() |
1727a041b5 | ||
![]() |
574e8ec28f | ||
![]() |
ee6916c007 | ||
![]() |
c62d55cbae | ||
![]() |
75931ee6e1 | ||
![]() |
918e6a730c | ||
![]() |
e33af61c70 | ||
![]() |
fc9e525fe0 | ||
![]() |
cf8e554c72 | ||
![]() |
36e0345af8 | ||
![]() |
1adc7c0389 | ||
![]() |
cd6b2007b8 | ||
![]() |
dcbc3787bf | ||
![]() |
e742c1f564 | ||
![]() |
077891b199 | ||
![]() |
6cdefd06c0 | ||
![]() |
c425bc0532 | ||
![]() |
1b56aaa659 | ||
![]() |
f2f7bf76df | ||
![]() |
4f05d1c758 | ||
![]() |
83a38b8c44 | ||
![]() |
8034415ddd | ||
![]() |
4dc3a7e1ed | ||
![]() |
537867aed8 | ||
![]() |
804147cb7d | ||
![]() |
edb7cad9b7 | ||
![]() |
1928523c87 | ||
![]() |
2a5fab9a5f | ||
![]() |
dbd5ecad26 | ||
![]() |
08e72d0161 | ||
![]() |
fd8bd2c432 | ||
![]() |
22167aafba | ||
![]() |
58a00b4977 | ||
![]() |
eab2889e66 | ||
![]() |
e54089079b | ||
![]() |
1fa0d84957 | ||
![]() |
7d4da4ea5c | ||
![]() |
8e38a509d2 | ||
![]() |
7eb1cc23f8 | ||
![]() |
2fd81ef71c | ||
![]() |
fd95503347 | ||
![]() |
57f8d4b5b5 | ||
![]() |
e2390bff2e | ||
![]() |
1d8b9ef92c | ||
![]() |
da0d8534f1 | ||
![]() |
a674a571db | ||
![]() |
0753dc653e | ||
![]() |
a4e84d285c | ||
![]() |
3919b96ecc | ||
![]() |
eda7be454d | ||
![]() |
08b51e2c09 | ||
![]() |
12cbf0605e | ||
![]() |
017f438534 | ||
![]() |
9c3eca7bce | ||
![]() |
c47703a521 | ||
![]() |
20bea00090 | ||
![]() |
5982e33aca | ||
![]() |
2eef0ca111 | ||
![]() |
9b25457498 | ||
![]() |
e34c7ffc57 | ||
![]() |
6cf3c7c50a | ||
![]() |
d0c884d359 | ||
![]() |
a59cfcfd08 | ||
![]() |
a2758f19ce | ||
![]() |
ff0d1ce4df | ||
![]() |
53daf4757d | ||
![]() |
e636e1f2c1 | ||
![]() |
e3bc7192ec | ||
![]() |
7f5aa4f35e | ||
![]() |
73a6566da3 | ||
![]() |
8657eafc35 | ||
![]() |
fe6338da91 | ||
![]() |
2ddea18f81 | ||
![]() |
f7db5ecc4d | ||
![]() |
726800e8f4 | ||
![]() |
5a6c96396b | ||
![]() |
10579fc43d | ||
![]() |
7735a38935 | ||
![]() |
e0f1fca46c | ||
![]() |
3f31504db9 | ||
![]() |
6baffed252 | ||
![]() |
4fab6f901c | ||
![]() |
efcf8893a9 | ||
![]() |
2cc0894992 | ||
![]() |
b091dd9bf2 | ||
![]() |
ed87404c44 | ||
![]() |
203aae7d79 | ||
![]() |
22d80c0b35 | ||
![]() |
1e343cb119 | ||
![]() |
e328ce6c55 | ||
![]() |
94179a509e | ||
![]() |
5fb8130be9 | ||
![]() |
baeacba04d | ||
![]() |
6b99103c31 | ||
![]() |
91b76aa298 | ||
![]() |
4a9d6e50bb | ||
![]() |
bfb300152c | ||
![]() |
762a4fe2ee | ||
![]() |
f848321c4f | ||
![]() |
8ecb4770a0 | ||
![]() |
8266cf94d3 | ||
![]() |
35d592cc5a | ||
![]() |
ef9876569a | ||
![]() |
6b8fd05414 | ||
![]() |
ff219e57c0 | ||
![]() |
418e647a83 | ||
![]() |
4994deaef5 | ||
![]() |
7b8666e683 | ||
![]() |
d515ce465b | ||
![]() |
6435d27f9d | ||
![]() |
41070dd15f | ||
![]() |
e5bf068147 | ||
![]() |
b5e8d57664 | ||
![]() |
ee18fb4aac | ||
![]() |
307d1c982d | ||
![]() |
cebc8fb086 | ||
![]() |
a401160cee | ||
![]() |
f0ec06ba60 | ||
![]() |
6bc18fa588 | ||
![]() |
e54cc75f59 | ||
![]() |
8565e21f4d | ||
![]() |
0613dce0a7 | ||
![]() |
1a78fbb5c8 | ||
![]() |
d5099016f7 | ||
![]() |
f0a9d98a39 | ||
![]() |
470835b215 | ||
![]() |
85611165ab | ||
![]() |
03273f8fc0 | ||
![]() |
ad7ff82771 | ||
![]() |
7f03d2356f | ||
![]() |
92cf47c006 | ||
![]() |
cd15bacf33 | ||
![]() |
bd0383acf8 | ||
![]() |
8777e2f54e | ||
![]() |
61ff83475c | ||
![]() |
d09f5a2e01 | ||
![]() |
66929e845d | ||
![]() |
0fdc190cc0 | ||
![]() |
07a387e196 | ||
![]() |
048822d6af | ||
![]() |
17ed54ddcf | ||
![]() |
199213bba9 | ||
![]() |
8c4f3ce8d0 | ||
![]() |
3a7ea52f17 | ||
![]() |
8aeaa478df | ||
![]() |
485fc9f4ef | ||
![]() |
1302f6936b | ||
![]() |
fdb119297a | ||
![]() |
b88f810d58 | ||
![]() |
8f78ddb422 | ||
![]() |
b955ffa5b3 | ||
![]() |
4e362f230b | ||
![]() |
cd834618c4 | ||
![]() |
63b1475551 | ||
![]() |
ddb2f13549 | ||
![]() |
30c8b110f3 | ||
![]() |
8fd682f7f2 | ||
![]() |
ea76f41478 | ||
![]() |
d509f9ccbb | ||
![]() |
09ce7749d7 | ||
![]() |
82fa43febc | ||
![]() |
32913bf7d9 | ||
![]() |
8149d73652 | ||
![]() |
b52c941ed4 | ||
![]() |
d7c6147eff | ||
![]() |
8491327448 | ||
![]() |
56731351de | ||
![]() |
faca92f2f1 | ||
![]() |
2ab5bfd43f | ||
![]() |
665a2207af | ||
![]() |
126601dd3f | ||
![]() |
cb08204053 | ||
![]() |
eaae81082c | ||
![]() |
891966d020 | ||
![]() |
1ca0b9d158 | ||
![]() |
16a8fcce9f | ||
![]() |
b8e1e9685e | ||
![]() |
2f33c5a8e4 | ||
![]() |
f082444291 | ||
![]() |
d1860ad8dd | ||
![]() |
e80f799d89 | ||
![]() |
a677907ee8 | ||
![]() |
9f7df549a2 | ||
![]() |
884147c7d0 | ||
![]() |
21eab513e7 | ||
![]() |
aac0dc97a9 | ||
![]() |
0814eea3ec | ||
![]() |
d73b5cafa0 | ||
![]() |
6e9e53d15f | ||
![]() |
34e89c232d | ||
![]() |
6625986f3a | ||
![]() |
ad812ef2a4 | ||
![]() |
9bcaf0ea6d | ||
![]() |
adb6989786 | ||
![]() |
1a823691a2 | ||
![]() |
06823da2f0 | ||
![]() |
76d56cf4a9 | ||
![]() |
be741d4728 | ||
![]() |
2f460fbee9 | ||
![]() |
73b5cad989 | ||
![]() |
d8bc6e7119 | ||
![]() |
26b666b35e | ||
![]() |
c59ba4595b | ||
![]() |
ca9a0712b8 | ||
![]() |
56ae6bdaa1 | ||
![]() |
654325de02 | ||
![]() |
db6d20be77 | ||
![]() |
36c8c1039f | ||
![]() |
4b29af0a1b | ||
![]() |
06e1831f19 | ||
![]() |
27a5923b24 | ||
![]() |
e5cf8166dc | ||
![]() |
3df3e672f5 | ||
![]() |
94a85f6636 | ||
![]() |
151fac68c3 | ||
![]() |
d027ffdd7a | ||
![]() |
9ec0f03a0d | ||
![]() |
fa3f72ee53 | ||
![]() |
4597687335 | ||
![]() |
be101bf39a | ||
![]() |
fa944c190c | ||
![]() |
1fe109ecf3 | ||
![]() |
93cb308137 | ||
![]() |
079989259f | ||
![]() |
6d074bb71a | ||
![]() |
70d1d45f0e | ||
![]() |
da16ad11fe | ||
![]() |
a2b1bbc9a6 | ||
![]() |
a480cf930f | ||
![]() |
a58c88c235 | ||
![]() |
dd8e4045e7 | ||
![]() |
cfe535ef9f | ||
![]() |
3690bcb217 | ||
![]() |
4053f8530d | ||
![]() |
446a772bc4 | ||
![]() |
69ea1c03e0 | ||
![]() |
73c88b70b2 | ||
![]() |
cff86bdc02 | ||
![]() |
568ee0d135 | ||
![]() |
018c27eda8 | ||
![]() |
51d22d7ea9 | ||
![]() |
25f2d1f0c3 | ||
![]() |
afab5a703d | ||
![]() |
53d161a2bc | ||
![]() |
9921947e6f | ||
![]() |
dc755140c1 | ||
![]() |
7c38f53d19 | ||
![]() |
7f28e0b450 | ||
![]() |
86addd65ab | ||
![]() |
67e7a93844 | ||
![]() |
4fc1273459 | ||
![]() |
16310b5582 | ||
![]() |
d638a500e9 | ||
![]() |
ec37237d69 | ||
![]() |
a1d3e0d8eb | ||
![]() |
2e236c132f | ||
![]() |
17edd38f03 | ||
![]() |
9c9b0fc7e1 | ||
![]() |
1fa7b45df8 | ||
![]() |
fcf16907c7 | ||
![]() |
93b8f941f2 | ||
![]() |
906dbea2b4 | ||
![]() |
83c366cf09 | ||
![]() |
1fb6662d1a | ||
![]() |
7dbbfac0fc | ||
![]() |
5d8fd2a0bc | ||
![]() |
a71aefc66f | ||
![]() |
76ab561b4d | ||
![]() |
d041bf2095 | ||
![]() |
c5393b23f6 | ||
![]() |
f1a17e762b | ||
![]() |
49a05c060a | ||
![]() |
62daffe147 | ||
![]() |
f9c5afb1f9 | ||
![]() |
58b2c1616b | ||
![]() |
e19d702b8e | ||
![]() |
f351ae488b | ||
![]() |
d6b58b03b8 | ||
![]() |
09049311a2 | ||
![]() |
cfff36df2b | ||
![]() |
a60ff6c5b2 | ||
![]() |
8f627eec55 | ||
![]() |
32c226d6ed | ||
![]() |
058d6d88b9 | ||
![]() |
b69060f1ae | ||
![]() |
f39a3fe67d | ||
![]() |
bec678c5a7 | ||
![]() |
1625c7a837 | ||
![]() |
a7bd1bf276 | ||
![]() |
9db064a0d3 | ||
![]() |
5d7181a71c | ||
![]() |
68fc85ffc0 | ||
![]() |
177a77067b | ||
![]() |
0245c426ee | ||
![]() |
09d695d782 | ||
![]() |
25b7a16a6e | ||
![]() |
44eae4c7af | ||
![]() |
c4cb87f367 | ||
![]() |
a43debbc43 | ||
![]() |
5fbf2e0992 | ||
![]() |
5b892aa7e5 | ||
![]() |
70b1668a76 | ||
![]() |
b118b9c5cd | ||
![]() |
a7ad339910 | ||
![]() |
3350468499 | ||
![]() |
f5d1693e3c | ||
![]() |
a0b800aba9 | ||
![]() |
e1414aa96b | ||
![]() |
632c07c092 | ||
![]() |
cc12c74f7f | ||
![]() |
e800444559 | ||
![]() |
514126b2b5 | ||
![]() |
1fc51769de | ||
![]() |
056daf6a1c | ||
![]() |
52764f5546 | ||
![]() |
738b175a93 | ||
![]() |
8584a922dc | ||
![]() |
7cad7230ff | ||
![]() |
482d59a42f | ||
![]() |
e22dfc46b7 | ||
![]() |
b70659d8ea | ||
![]() |
b57db7581c | ||
![]() |
70f0e9d86d | ||
![]() |
f20d59e691 | ||
![]() |
c3650d6a4b | ||
![]() |
73fa5fdaf9 | ||
![]() |
d8545e2690 | ||
![]() |
4a1f3cb4eb | ||
![]() |
c83c1da548 | ||
![]() |
5b44655f22 | ||
![]() |
2f80f07d81 | ||
![]() |
cee8425f22 | ||
![]() |
bb44055d0a | ||
![]() |
7e6a577313 | ||
![]() |
861b42a2d8 | ||
![]() |
23f56bbb6a | ||
![]() |
3452e301ec | ||
![]() |
8eb948d8c8 | ||
![]() |
cd24e61e57 | ||
![]() |
79fcc6948d | ||
![]() |
3d11bf0f3f | ||
![]() |
de3c594723 | ||
![]() |
dac52ff9f5 | ||
![]() |
df49ebabfe | ||
![]() |
45af9ba7c4 | ||
![]() |
5eb686d105 | ||
![]() |
5f926c2679 | ||
![]() |
b00d7a331c | ||
![]() |
e8e1efeafb | ||
![]() |
ea29cd5a4a | ||
![]() |
d6045cba4e | ||
![]() |
fc5ea79c5e | ||
![]() |
eae1f1fba3 | ||
![]() |
023e5409df | ||
![]() |
b6f40f0027 | ||
![]() |
e4cb70aef3 | ||
![]() |
06f51ba1af | ||
![]() |
09670ec2d1 | ||
![]() |
87043f9c89 | ||
![]() |
28a7c35fea | ||
![]() |
43828aa3a7 | ||
![]() |
f44de270bb | ||
![]() |
697011d3c4 | ||
![]() |
c61f990566 | ||
![]() |
208898ee77 | ||
![]() |
11f3d5a431 | ||
![]() |
e4ade69654 | ||
![]() |
a70e3eb15c | ||
![]() |
82c4be54da | ||
![]() |
ecd0e95a02 | ||
![]() |
348eea2dbe | ||
![]() |
5977ee02f6 | ||
![]() |
e83c56dfbb | ||
![]() |
13585da4b4 | ||
![]() |
68d03fdbd8 | ||
![]() |
f40d3e7608 | ||
![]() |
6519c8124e | ||
![]() |
e30e909363 | ||
![]() |
646ca9f1c9 | ||
![]() |
334379dada | ||
![]() |
f920b20654 | ||
![]() |
5936e36f6b | ||
![]() |
a37f372973 | ||
![]() |
fbc3abcbfc | ||
![]() |
85aad90956 | ||
![]() |
a5cb76bca0 | ||
![]() |
3ea9368d92 | ||
![]() |
f6aa779383 | ||
![]() |
c2d5944e19 | ||
![]() |
caf08f71b8 | ||
![]() |
ddaa771cd5 | ||
![]() |
24aae1b1d4 | ||
![]() |
8d28b043e9 | ||
![]() |
94963af28e | ||
![]() |
55b9099976 | ||
![]() |
e2bb45a7c0 | ||
![]() |
cb4d9c0e1d | ||
![]() |
e2cb764778 | ||
![]() |
61f90d1898 | ||
![]() |
f3087c6e86 | ||
![]() |
7c0c379372 | ||
![]() |
b7590d784f | ||
![]() |
af96d4dadc | ||
![]() |
68ec71ebd6 | ||
![]() |
c14ea96f2f | ||
![]() |
132b3adfcc | ||
![]() |
cb9e9ccb2b | ||
![]() |
ffe65783b4 | ||
![]() |
bba5c314b2 | ||
![]() |
c448c082cf | ||
![]() |
d6da8336b8 | ||
![]() |
022d303116 | ||
![]() |
6c6de44f04 | ||
![]() |
7d03c9cbce | ||
![]() |
6855359e57 | ||
![]() |
6e9d51701e | ||
![]() |
a73de44b7c | ||
![]() |
177ba8cb42 | ||
![]() |
c5819d427d | ||
![]() |
04c3d4d709 | ||
![]() |
6d77a81456 | ||
![]() |
35765066b9 | ||
![]() |
cb835cd77c | ||
![]() |
e4a21c89a8 | ||
![]() |
cb1df91616 | ||
![]() |
aed4a4c90b | ||
![]() |
75039bafde | ||
![]() |
253b763160 | ||
![]() |
89d3fdcae2 | ||
![]() |
5e7783097a | ||
![]() |
bec5dec947 | ||
![]() |
338a06f4bc | ||
![]() |
0e0bd58631 | ||
![]() |
d999c93401 | ||
![]() |
0c3d21e63c | ||
![]() |
621df52644 | ||
![]() |
1ad08626a1 | ||
![]() |
e480fc83b2 | ||
![]() |
31e72bc328 | ||
![]() |
897815a1fe | ||
![]() |
e796d39d80 | ||
![]() |
495f16cbac | ||
![]() |
86ad80b6be | ||
![]() |
f1a39dce60 | ||
![]() |
ca6fe7bebe | ||
![]() |
de44d0b2bd | ||
![]() |
95a17848d3 | ||
![]() |
10c8ce59a4 | ||
![]() |
f638339d09 | ||
![]() |
5f64df4bc3 | ||
![]() |
71b9eedbea | ||
![]() |
7e2daefe6c | ||
![]() |
0fec6b9d88 | ||
![]() |
b385229837 | ||
![]() |
90c4c1e82b | ||
![]() |
e31bfae2ba | ||
![]() |
a938409c0e | ||
![]() |
a89c28b091 | ||
![]() |
fd7d5acdeb | ||
![]() |
87426ed37a | ||
![]() |
8180b08fb2 | ||
![]() |
2f3309c9e3 | ||
![]() |
9831ad3ce6 | ||
![]() |
4b469eae40 | ||
![]() |
9bf330b567 | ||
![]() |
468319ce4f | ||
![]() |
0aa8289c6f | ||
![]() |
16e818f90b | ||
![]() |
7939908c83 | ||
![]() |
8e8a7b1f0f | ||
![]() |
994e9a5ed1 | ||
![]() |
9bf1daaaf9 | ||
![]() |
29992cf978 | ||
![]() |
f3dbdbe269 | ||
![]() |
31f0610798 | ||
![]() |
0d9f87a3b7 | ||
![]() |
143970a5b0 | ||
![]() |
125207c307 | ||
![]() |
c8be370b34 | ||
![]() |
98873f6540 | ||
![]() |
a5c0d72bfb | ||
![]() |
bcb2edac65 | ||
![]() |
9ab38c67eb | ||
![]() |
d9ad62343c | ||
![]() |
d717f5170f | ||
![]() |
c66f220c44 | ||
![]() |
b0641d4a44 | ||
![]() |
df331f5f9b | ||
![]() |
487b613e57 | ||
![]() |
f5c6dc8b7c | ||
![]() |
faa7c1d29f | ||
![]() |
bf8f6bb820 | ||
![]() |
b7001bce52 | ||
![]() |
0a1b306fe1 | ||
![]() |
32ca348eec | ||
![]() |
ce0d646cc0 | ||
![]() |
74cf48f0c1 | ||
![]() |
b99c197b27 | ||
![]() |
229ab1a33e | ||
![]() |
4638822fc0 | ||
![]() |
6cda7b6249 | ||
![]() |
f432de2de7 | ||
![]() |
b82532d11a | ||
![]() |
cd17f88010 | ||
![]() |
451159035a | ||
![]() |
bda5da074e | ||
![]() |
c902908999 | ||
![]() |
3abc9d98c9 | ||
![]() |
0096491274 | ||
![]() |
0c7245213d | ||
![]() |
3ec1bd2c7a | ||
![]() |
924c8785f0 | ||
![]() |
8af58f0fd4 | ||
![]() |
d98f3e9f71 | ||
![]() |
26bee12899 | ||
![]() |
771600415f | ||
![]() |
3884bfe966 | ||
![]() |
370bbc5dea | ||
![]() |
d53cae0e45 | ||
![]() |
6e47ab1345 | ||
![]() |
d0e629a68e | ||
![]() |
b8ef90d679 | ||
![]() |
ae25dc08c1 | ||
![]() |
268bec521c | ||
![]() |
5da3ed177c | ||
![]() |
6ea19d7815 | ||
![]() |
6ce10804d5 | ||
![]() |
fa6128ad17 | ||
![]() |
763230ae55 | ||
![]() |
81a6894b0a | ||
![]() |
2d461c7c00 | ||
![]() |
7f84da69f8 | ||
![]() |
94387eae69 | ||
![]() |
918ad3ecfd | ||
![]() |
fd3fc8bd27 | ||
![]() |
b0d9c83041 | ||
![]() |
a0223a888f | ||
![]() |
96e5faccdc | ||
![]() |
09b36dc7a9 | ||
![]() |
91966c30ef | ||
![]() |
35aebd36c7 | ||
![]() |
0acdbe0892 | ||
![]() |
c7f5c8e270 | ||
![]() |
3b242f82b5 | ||
![]() |
38bccb271f | ||
![]() |
999f7711cd | ||
![]() |
b0bbbff606 | ||
![]() |
89ea107de5 | ||
![]() |
0f7d9df17f | ||
![]() |
669c823f05 | ||
![]() |
e5ea45547e | ||
![]() |
7a796df91d | ||
![]() |
39ac5c2714 | ||
![]() |
4f3465240a | ||
![]() |
9749753889 | ||
![]() |
0b33d9982e | ||
![]() |
19726f59d7 | ||
![]() |
58246b7067 | ||
![]() |
d3f2d49f3a | ||
![]() |
d50225ad20 | ||
![]() |
68990d19e4 | ||
![]() |
9ac3e4377f | ||
![]() |
6dcf0d73a6 | ||
![]() |
3afafd46f3 | ||
![]() |
af60b29097 | ||
![]() |
8363448fb5 | ||
![]() |
3dc94305e4 | ||
![]() |
17a40ffbf0 | ||
![]() |
c57fd96381 | ||
![]() |
c3c0e88bed | ||
![]() |
951e838191 | ||
![]() |
3906a9c16b | ||
![]() |
f5aa1382ec | ||
![]() |
fadfe40155 | ||
![]() |
5598077d35 | ||
![]() |
ec92af8fe5 | ||
![]() |
dda5d14a6b | ||
![]() |
83eb46c59d | ||
![]() |
a64990f3f2 | ||
![]() |
f03fb955a9 | ||
![]() |
023c49882e | ||
![]() |
d265046dcc | ||
![]() |
2abf4606f9 | ||
![]() |
3a5d668e01 | ||
![]() |
a11bb504ec | ||
![]() |
7b79d1ed88 | ||
![]() |
d34ff3cb96 | ||
![]() |
ae3c9783f2 | ||
![]() |
bc9d1fe7c4 | ||
![]() |
4685acbdd4 | ||
![]() |
9efda5b7d0 | ||
![]() |
a4f633ff2a | ||
![]() |
5a09973fa5 | ||
![]() |
663e05797f | ||
![]() |
dfec555c7f | ||
![]() |
bcf861f246 | ||
![]() |
92425f097d | ||
![]() |
c8b9ba7d41 | ||
![]() |
88f6fa70d7 | ||
![]() |
0ade879a50 | ||
![]() |
26619dfbb8 | ||
![]() |
18126667b7 | ||
![]() |
4e5f0d41f6 | ||
![]() |
cec4e990d8 | ||
![]() |
0cb2d467de | ||
![]() |
821bea0266 | ||
![]() |
30517a9344 | ||
![]() |
777901424f | ||
![]() |
9363d91218 | ||
![]() |
4f7c1aab10 | ||
![]() |
5e9da71a09 | ||
![]() |
a4fdd8ae4c | ||
![]() |
e4197d41bb | ||
![]() |
fed3135972 | ||
![]() |
f6fcdb2edd | ||
![]() |
28de3e5901 | ||
![]() |
bad1686e1f | ||
![]() |
1dcc732bb5 | ||
![]() |
48527c3f74 | ||
![]() |
de75876c3f | ||
![]() |
f9a9cda23a | ||
![]() |
10f6adf0c8 | ||
![]() |
7059b1f02e | ||
![]() |
30e30acf10 | ||
![]() |
6b577759b2 | ||
![]() |
22fc595bff | ||
![]() |
7e5d19c055 | ||
![]() |
6b6ebeca98 | ||
![]() |
3a13102637 | ||
![]() |
f733ca08e6 | ||
![]() |
f2ebd304c3 | ||
![]() |
50a83255d8 | ||
![]() |
c4a5e97624 | ||
![]() |
57aadbb096 | ||
![]() |
221595a085 | ||
![]() |
afb0167ad9 | ||
![]() |
a0aec0bd30 | ||
![]() |
3eb2657855 | ||
![]() |
3435fc600d | ||
![]() |
bf29647964 | ||
![]() |
b1dd939e90 | ||
![]() |
e0bdf2c3e2 | ||
![]() |
2cbb8f3f98 | ||
![]() |
84f8b3ad9c | ||
![]() |
4711f8faa8 | ||
![]() |
e5705524e2 | ||
![]() |
074af91700 | ||
![]() |
18142abc06 | ||
![]() |
4029e0e7cb | ||
![]() |
832a86eaba | ||
![]() |
88bb394c0d | ||
![]() |
0bbcbf0d57 | ||
![]() |
0f2dc2b60c | ||
![]() |
681c4bd782 | ||
![]() |
cb5529efd8 | ||
![]() |
c993768360 | ||
![]() |
b3773e9cc8 | ||
![]() |
9c95cbf750 | ||
![]() |
c51871d4b2 | ||
![]() |
784515ad93 | ||
![]() |
01eb7f7243 | ||
![]() |
a4824467c3 | ||
![]() |
368ee1e4d6 | ||
![]() |
877923d369 | ||
![]() |
d25ea49e63 | ||
![]() |
b73b6783a5 | ||
![]() |
7708a89c60 | ||
![]() |
0e1723e684 | ||
![]() |
7743f68204 | ||
![]() |
d625b56d6b | ||
![]() |
946f3ad199 | ||
![]() |
2f5c6d2d66 | ||
![]() |
1ee2cbe919 | ||
![]() |
015f3a770d | ||
![]() |
dd0ffc738e | ||
![]() |
1079eb1747 | ||
![]() |
8f88cbedc1 | ||
![]() |
2d2dbd3024 | ||
![]() |
afc92c7023 | ||
![]() |
8bac1c0dfc | ||
![]() |
67cbb25865 | ||
![]() |
e0a4b67811 | ||
![]() |
cc32fbc305 | ||
![]() |
c643a4d4c7 | ||
![]() |
2be3f09f2d | ||
![]() |
cd9f1f0b27 | ||
![]() |
ac56f5ca2f | ||
![]() |
b489666086 | ||
![]() |
1c0a0381df | ||
![]() |
e6cff939e6 | ||
![]() |
e4e7755de3 | ||
![]() |
a94dc678fb | ||
![]() |
21edf366ea | ||
![]() |
31b1221c2f | ||
![]() |
3964084282 | ||
![]() |
5288fee835 | ||
![]() |
ff03fb25f7 | ||
![]() |
d0909a874a | ||
![]() |
4d9b75a9b0 | ||
![]() |
7c72513bfa | ||
![]() |
d9dd4bcd9e | ||
![]() |
3398ee9c15 | ||
![]() |
af149077bd | ||
![]() |
19c40c7801 | ||
![]() |
e84dca9b80 | ||
![]() |
b1fd729d63 | ||
![]() |
23d3e6b21b | ||
![]() |
09dc7fb1b8 | ||
![]() |
1952c8f430 | ||
![]() |
2cc0f8e9b9 | ||
![]() |
cfaf49ddea | ||
![]() |
fd88dd19f7 | ||
![]() |
a903811819 | ||
![]() |
65fb884d28 | ||
![]() |
1dae997ca4 | ||
![]() |
4aa321538a | ||
![]() |
204d1f65db | ||
![]() |
a57270b6ab | ||
![]() |
78d18badef | ||
![]() |
b127b1f208 | ||
![]() |
8a51237407 | ||
![]() |
e1bd6aa4e1 | ||
![]() |
b78220573a | ||
![]() |
81ec4e437a | ||
![]() |
c18d76f6ec | ||
![]() |
1f8e2672a8 | ||
![]() |
fe88a194a3 | ||
![]() |
2cae7967e6 | ||
![]() |
b083bb57f5 | ||
![]() |
7b6795dad9 | ||
![]() |
f67e03274d | ||
![]() |
9d91860612 | ||
![]() |
b2c7e0c18b | ||
![]() |
56baceca02 | ||
![]() |
5c7384fa79 | ||
![]() |
8f7cdff455 | ||
![]() |
e0b4844a20 | ||
![]() |
dc3bc87b43 | ||
![]() |
a7f976c9de | ||
![]() |
5fd462951b | ||
![]() |
5b07b5de91 | ||
![]() |
9062a23691 | ||
![]() |
b0e114191e | ||
![]() |
dd16182b4b | ||
![]() |
f8d02d24ed | ||
![]() |
b6cd6816d2 | ||
![]() |
b609bfd048 | ||
![]() |
bde9e2802d | ||
![]() |
a9e409a035 | ||
![]() |
3f7a3228cd | ||
![]() |
a7a9dddb5d | ||
![]() |
c5c84c8643 | ||
![]() |
081504af74 | ||
![]() |
e80227c2d3 | ||
![]() |
bf018299bd | ||
![]() |
54e494d909 | ||
![]() |
add0a45a11 | ||
![]() |
18a0a39a1b | ||
![]() |
86d25a54bc | ||
![]() |
e8f7e30b05 | ||
![]() |
c7b54666e0 | ||
![]() |
fb48c8a5c3 | ||
![]() |
712e4f81e0 | ||
![]() |
265e14bced | ||
![]() |
55aa7321e4 | ||
![]() |
e274a9fac0 | ||
![]() |
71882977e6 | ||
![]() |
c2af2c075f | ||
![]() |
1af88c9743 | ||
![]() |
e6553716a0 | ||
![]() |
d004dc9957 | ||
![]() |
4b3b89ec76 | ||
![]() |
eaa7cc9884 | ||
![]() |
be7f5da0bd | ||
![]() |
c5a3f7700b | ||
![]() |
c13fa640ee | ||
![]() |
8e551a6319 | ||
![]() |
8d54a62c6d | ||
![]() |
f50e9be593 | ||
![]() |
a34694d394 | ||
![]() |
09db590d56 | ||
![]() |
9b6e8af699 | ||
![]() |
3be409a38c | ||
![]() |
f11b3bcbf9 | ||
![]() |
702457363c | ||
![]() |
2b434862fd | ||
![]() |
3ef36b2115 | ||
![]() |
2848ca2c05 | ||
![]() |
22b137711a | ||
![]() |
c5d8d36d4d | ||
![]() |
aad685ce00 | ||
![]() |
2b10d912cc | ||
![]() |
4c090434a4 | ||
![]() |
fcee105b2b | ||
![]() |
5f133f3c4d | ||
![]() |
31e2feeef3 | ||
![]() |
2dc801f9fc | ||
![]() |
8da75ab893 | ||
![]() |
e1d5bef7a6 | ||
![]() |
b595593a89 | ||
![]() |
f5da2df126 | ||
![]() |
c992848617 | ||
![]() |
099423ba1c | ||
![]() |
23bc3ff71d | ||
![]() |
bf90b57b44 | ||
![]() |
bfe04ea0e6 | ||
![]() |
8488efaa09 | ||
![]() |
5d8b43c7d4 | ||
![]() |
8c6b848e43 | ||
![]() |
0e47a919f4 | ||
![]() |
02be15039a | ||
![]() |
aa8f50b404 | ||
![]() |
6d46b09954 | ||
![]() |
2f16916246 | ||
![]() |
01d14ab429 | ||
![]() |
c913b28f20 | ||
![]() |
b130f00493 | ||
![]() |
ae2d5ba314 | ||
![]() |
e3e4ac9237 | ||
![]() |
0f5587097b | ||
![]() |
8eda21baa5 | ||
![]() |
2cc2b2be69 | ||
![]() |
f8e658cf6b | ||
![]() |
9a48b8e419 | ||
![]() |
4661fda2e5 | ||
![]() |
d0d07712e5 | ||
![]() |
38e53adadd | ||
![]() |
c59b248241 | ||
![]() |
5a6f593b61 | ||
![]() |
a995ca7215 | ||
![]() |
621bc53339 | ||
![]() |
0b3c5c50f7 | ||
![]() |
b2eddeccf6 | ||
![]() |
9c0d66161c | ||
![]() |
c8fe4add6d | ||
![]() |
c0f4a09658 | ||
![]() |
aa00ec1a2c | ||
![]() |
ec7e8cc9dd | ||
![]() |
7cfc4fc4f5 | ||
![]() |
d7321f833d | ||
![]() |
d1edd7956a | ||
![]() |
a7e9442270 | ||
![]() |
5dc354bef7 | ||
![]() |
4399df8f2e | ||
![]() |
3f14ff34df | ||
![]() |
2bb79ad9b5 | ||
![]() |
368070454b | ||
![]() |
aa54339415 | ||
![]() |
78befc1211 | ||
![]() |
c1519a52ef | ||
![]() |
70828ae0ea | ||
![]() |
a90a1213da | ||
![]() |
37bec5d740 | ||
![]() |
f9316d37b4 | ||
![]() |
8d1f2e6ffc | ||
![]() |
448a1b9f18 | ||
![]() |
08a4ce983b | ||
![]() |
0c3989854f | ||
![]() |
fe3186b9c1 | ||
![]() |
6139fa33ab | ||
![]() |
306641a893 | ||
![]() |
c32c913e5a | ||
![]() |
3134b56bb0 | ||
![]() |
b868a32df6 | ||
![]() |
638608b11a | ||
![]() |
b299039d06 | ||
![]() |
da8ea213ab | ||
![]() |
e6e2ba1d40 | ||
![]() |
847b183f63 | ||
![]() |
8b3cea6732 | ||
![]() |
0d6bbc7af0 | ||
![]() |
0b73dac8aa | ||
![]() |
dfe6eda57e | ||
![]() |
0e5411b4ba | ||
![]() |
865e3789dd | ||
![]() |
d6722bdd20 | ||
![]() |
db4bce0549 | ||
![]() |
08ff1a6474 | ||
![]() |
00588f13d8 | ||
![]() |
1a0775f1ca | ||
![]() |
dcf5164daa | ||
![]() |
81d79f9fb3 | ||
![]() |
962dcb2221 | ||
![]() |
fed58049d5 | ||
![]() |
ca4462d76c | ||
![]() |
c0fc678e96 | ||
![]() |
b2dd464951 | ||
![]() |
b6a562e389 | ||
![]() |
2703b7046c | ||
![]() |
3c2a9aec91 | ||
![]() |
8d26fbb24a | ||
![]() |
a08eb1df00 | ||
![]() |
d381573876 | ||
![]() |
0ca21df5c6 | ||
![]() |
6519756b23 | ||
![]() |
4489244058 | ||
![]() |
da14b0e1dd | ||
![]() |
0ee092fb23 | ||
![]() |
449c8dee92 | ||
![]() |
1ed86fa491 | ||
![]() |
5d90cb30f4 | ||
![]() |
149f7dfe04 | ||
![]() |
6bd73ed417 | ||
![]() |
3224c08bd7 | ||
![]() |
0999f8dcf2 | ||
![]() |
d40e63ee47 | ||
![]() |
fb723c8749 | ||
![]() |
f540c03bff | ||
![]() |
420878c690 | ||
![]() |
0233509c16 | ||
![]() |
aac93c2370 | ||
![]() |
48e1feaa9d | ||
![]() |
3a3c1853ac | ||
![]() |
0d06b42327 | ||
![]() |
56d90bb49a | ||
![]() |
6ac872a0ee | ||
![]() |
6783f6a736 | ||
![]() |
066ecc8f4a | ||
![]() |
0aad55369d | ||
![]() |
f582340a6a | ||
![]() |
3a4910c616 | ||
![]() |
3e0cb1bc63 | ||
![]() |
423d942e6d | ||
![]() |
69d6c2ccd9 | ||
![]() |
a3db183abe | ||
![]() |
72f9a5c374 | ||
![]() |
9c2e97e9d3 | ||
![]() |
86ca12cfff | ||
![]() |
ae54025061 | ||
![]() |
761cb55ab3 | ||
![]() |
b35d80f0b0 | ||
![]() |
d7cf638288 | ||
![]() |
9e401df692 | ||
![]() |
76299d196f | ||
![]() |
8db7bcb14f | ||
![]() |
1447332ffa | ||
![]() |
62e1f374d1 | ||
![]() |
b16b7364e3 | ||
![]() |
c4dff905d4 | ||
![]() |
e34bd9e5a2 | ||
![]() |
81a844a0fc | ||
![]() |
a15beddec2 | ||
![]() |
4ce737f5df | ||
![]() |
8d0d37cb9c | ||
![]() |
b511304d47 | ||
![]() |
dd279aa99f | ||
![]() |
4f60dabb9f | ||
![]() |
2282ecc295 | ||
![]() |
e2d3af00cc | ||
![]() |
5b98774566 | ||
![]() |
94074360b9 | ||
![]() |
f4680b57ed | ||
![]() |
0f2001b147 | ||
![]() |
f6ccc15457 | ||
![]() |
599ad0c581 | ||
![]() |
b8175727c7 | ||
![]() |
d40c04273d | ||
![]() |
d51564f918 | ||
![]() |
fc2693110e | ||
![]() |
4c2fd970ba | ||
![]() |
0f67de14e6 | ||
![]() |
820e6867e2 | ||
![]() |
d1c780e5d3 | ||
![]() |
d40d6bb615 | ||
![]() |
9a33051289 | ||
![]() |
3e0c5102e6 | ||
![]() |
1d8bd9da0c | ||
![]() |
f10a41b5a1 | ||
![]() |
8e87548b05 | ||
![]() |
30b4d82bba | ||
![]() |
2e5574379e | ||
![]() |
040e18f362 | ||
![]() |
62e10eaef7 | ||
![]() |
727c443a27 | ||
![]() |
9bfd3f54e6 | ||
![]() |
977e0cb4d3 | ||
![]() |
0dae6718be | ||
![]() |
9f7b092e01 | ||
![]() |
6846a45882 | ||
![]() |
bdca379412 | ||
![]() |
3de0321690 | ||
![]() |
fe6d7ca344 | ||
![]() |
7f842b3f9c | ||
![]() |
b0350d9b22 | ||
![]() |
24e570257e | ||
![]() |
1e9496756c | ||
![]() |
7704f449c9 | ||
![]() |
9ad150d7d2 | ||
![]() |
8b9bc8330f | ||
![]() |
0d1ef5a3df | ||
![]() |
59290f4c88 | ||
![]() |
c12170c601 | ||
![]() |
bd4502a736 | ||
![]() |
90da07a882 | ||
![]() |
901f24b988 | ||
![]() |
d05446b34e | ||
![]() |
ff24286911 | ||
![]() |
7a2e1a0245 | ||
![]() |
0ec85334ff | ||
![]() |
c7703c481a | ||
![]() |
8e2ff164cc | ||
![]() |
5b7158cd71 | ||
![]() |
5f9117d007 | ||
![]() |
7d545233ac | ||
![]() |
ef80f2f803 | ||
![]() |
dd3bcd1330 | ||
![]() |
3b3944e42f | ||
![]() |
f03e2d3f31 | ||
![]() |
bdb51d0830 | ||
![]() |
ccd547800a | ||
![]() |
5c6a8a6f41 | ||
![]() |
84f4753d1b | ||
![]() |
b67c1bacd0 | ||
![]() |
56faf66fd7 | ||
![]() |
b3cdf7fef8 | ||
![]() |
0688023af7 | ||
![]() |
db7c59df6c | ||
![]() |
441d7608b7 | ||
![]() |
2cc0d38afb | ||
![]() |
5d45fa4049 | ||
![]() |
2081fda69a | ||
![]() |
1f353828c3 | ||
![]() |
eae3fb664e | ||
![]() |
0c1f88a2cd | ||
![]() |
58f708da07 | ||
![]() |
76b6f084ab | ||
![]() |
8217a9414f | ||
![]() |
4fbecd297a | ||
![]() |
2be18508f3 | ||
![]() |
4eb4c932dc | ||
![]() |
42e449e972 | ||
![]() |
144a5d3c86 | ||
![]() |
f4e10b721e | ||
![]() |
ba96e30fa0 | ||
![]() |
2e23e29245 | ||
![]() |
f4dca7be3b | ||
![]() |
a798b9f0e1 | ||
![]() |
f65368a693 | ||
![]() |
d33019030c | ||
![]() |
e955e6ca6c | ||
![]() |
8897e7301a | ||
![]() |
6bf5bce644 | ||
![]() |
b138e4f90f | ||
![]() |
b969b5a32a | ||
![]() |
43164fcbdf | ||
![]() |
604085c380 | ||
![]() |
a37cf34ede | ||
![]() |
e9d0518394 | ||
![]() |
0946b1f6e9 | ||
![]() |
684305fe24 | ||
![]() |
e66695d083 | ||
![]() |
3c56ce497d | ||
![]() |
ce6c1d6184 | ||
![]() |
f588772b05 | ||
![]() |
015610e64e | ||
![]() |
ce69c5e62f | ||
![]() |
555e02dee7 | ||
![]() |
52583cc679 | ||
![]() |
64b6c43379 | ||
![]() |
72a23d0560 | ||
![]() |
81e03be699 | ||
![]() |
2a9b0df9e7 | ||
![]() |
3fbd2b3f6d | ||
![]() |
42c701708f | ||
![]() |
99d685d288 | ||
![]() |
ce13670546 | ||
![]() |
3de4dcdb18 | ||
![]() |
ae5df14f93 | ||
![]() |
53c3e86fae | ||
![]() |
3d302be485 | ||
![]() |
6042658cb5 | ||
![]() |
b05aa15000 | ||
![]() |
18635d9c17 | ||
![]() |
b9aedb2c57 | ||
![]() |
4ad2f19f14 | ||
![]() |
0546fd7ee0 | ||
![]() |
5c8c00a95a | ||
![]() |
be5755969d | ||
![]() |
a4f6d2281f | ||
![]() |
d1624add2b | ||
![]() |
10f2093f3b | ||
![]() |
d4a65d28d4 | ||
![]() |
95d751feac | ||
![]() |
4a7f31fad7 | ||
![]() |
6dba546e53 | ||
![]() |
c99892f155 | ||
![]() |
a9e5bbfd3d | ||
![]() |
bb8717109e | ||
![]() |
572fced5b0 | ||
![]() |
9691ecc9a7 | ||
![]() |
ff3129b0fe | ||
![]() |
abdffc4e23 | ||
![]() |
c9205dba43 | ||
![]() |
d32c8052fc | ||
![]() |
5775163f04 | ||
![]() |
0a0c1edd80 | ||
![]() |
48bebaeca8 | ||
![]() |
4efbf95d8c | ||
![]() |
6a916acce2 | ||
![]() |
6451571aef | ||
![]() |
b338686778 | ||
![]() |
bd4ab138d8 | ||
![]() |
5d7995be24 | ||
![]() |
e05762a531 | ||
![]() |
8e6435ead5 | ||
![]() |
b11d7c3eca | ||
![]() |
bcb0a925b0 | ||
![]() |
72e6fd4242 | ||
![]() |
6481b91520 | ||
![]() |
23d24394e7 | ||
![]() |
9a9c1619b8 | ||
![]() |
2bf3ec03c3 | ||
![]() |
9962cef7c6 | ||
![]() |
ad1ff2fb26 | ||
![]() |
55930b5ffd | ||
![]() |
16e02c2e3b | ||
![]() |
72e64e0869 | ||
![]() |
c1974ee144 | ||
![]() |
9c8ea7fa3f | ||
![]() |
24dc936346 | ||
![]() |
1bc98ccb76 | ||
![]() |
73c04b3269 | ||
![]() |
0befb8b56d | ||
![]() |
9f1a7f933d | ||
![]() |
6c57fbf7a7 | ||
![]() |
ea0fe8563d | ||
![]() |
88fb10f838 | ||
![]() |
c343d3fcd3 | ||
![]() |
fddaafceda | ||
![]() |
ff590cadc2 | ||
![]() |
fb76fd5b61 | ||
![]() |
459436f2f6 | ||
![]() |
bb3bcbc6dc | ||
![]() |
8465bf90ea | ||
![]() |
ffc0120471 | ||
![]() |
61c9b8e14a | ||
![]() |
7bbd4580af | ||
![]() |
4e56e7f2a3 | ||
![]() |
7858564582 | ||
![]() |
78778cdd8c | ||
![]() |
a1dbf0b453 | ||
![]() |
1ec041f096 | ||
![]() |
369197cb75 | ||
![]() |
fa8fef9506 | ||
![]() |
f2c05baac4 | ||
![]() |
96c03c7dcc | ||
![]() |
70478100d5 | ||
![]() |
6858e651d4 | ||
![]() |
209cf82593 | ||
![]() |
ff44eeef97 | ||
![]() |
51a4f7872a | ||
![]() |
f97ce8cb7b | ||
![]() |
d3ecb3cd05 | ||
![]() |
51ae972502 | ||
![]() |
fd1cf2c42e | ||
![]() |
d445a2b275 | ||
![]() |
482358fda7 | ||
![]() |
f7ad13b0ce | ||
![]() |
1df986c21e | ||
![]() |
aeb41ec103 | ||
![]() |
001a321897 | ||
![]() |
6ac5660e1c | ||
![]() |
1203671b47 | ||
![]() |
b2061a30da | ||
![]() |
4afe0f4724 | ||
![]() |
ade2a92991 | ||
![]() |
2215c11325 | ||
![]() |
28ebb94c98 | ||
![]() |
9883f396cc | ||
![]() |
958214aa99 | ||
![]() |
1a6939d27b | ||
![]() |
bcd9404445 | ||
![]() |
d29b8a51a5 | ||
![]() |
4f0555bf26 | ||
![]() |
8ad63d745d | ||
![]() |
1e0a4e1892 | ||
![]() |
847223de9c | ||
![]() |
5109146f95 | ||
![]() |
75785e9413 | ||
![]() |
2eeddec9cc | ||
![]() |
82775ae0ac | ||
![]() |
347db52a1d | ||
![]() |
8d8034eae0 | ||
![]() |
cd9c98dfda | ||
![]() |
c9a41a6997 | ||
![]() |
c940945155 | ||
![]() |
8b2707a6a0 | ||
![]() |
7cc5666d94 | ||
![]() |
cec75a765f | ||
![]() |
b4867734b0 | ||
![]() |
5c48537356 | ||
![]() |
d3f0638aee | ||
![]() |
26cd0fce57 | ||
![]() |
168f267723 | ||
![]() |
2410512c4f | ||
![]() |
364462ea2e | ||
![]() |
8c44765841 | ||
![]() |
52eed0aeb7 | ||
![]() |
58f2b7ed66 | ||
![]() |
124a542aa4 | ||
![]() |
ff7d94530d | ||
![]() |
f67e5211e0 | ||
![]() |
d69ec35bef | ||
![]() |
1aa6708cc2 | ||
![]() |
1aeeeae166 | ||
![]() |
b8d2233e8a | ||
![]() |
a9b706bd2b | ||
![]() |
66ad34293b | ||
![]() |
2e4ec5ae45 | ||
![]() |
0144b0b67c | ||
![]() |
bb5581ad6e | ||
![]() |
76a34d6628 | ||
![]() |
5dce6d195a | ||
![]() |
dac542655c | ||
![]() |
5b81b91817 | ||
![]() |
b55ab95837 | ||
![]() |
9d8be5485c | ||
![]() |
fff0c58e9a | ||
![]() |
94e5c5ef37 | ||
![]() |
570cb24498 | ||
![]() |
b11f6e0850 | ||
![]() |
abdb3695b2 | ||
![]() |
319de1758c | ||
![]() |
2336503264 | ||
![]() |
37c4305633 | ||
![]() |
1e95e58c91 | ||
![]() |
8300a7aef9 | ||
![]() |
4903487555 | ||
![]() |
6f39e611f3 | ||
![]() |
25abeb155c | ||
![]() |
2172188923 | ||
![]() |
0da2a8eb87 | ||
![]() |
af00228b70 | ||
![]() |
686af0b3a5 | ||
![]() |
a511f24561 | ||
![]() |
defd162212 | ||
![]() |
052fbd8808 | ||
![]() |
9973a56422 | ||
![]() |
a3ae60d343 | ||
![]() |
5b5212b457 | ||
![]() |
16922b7ebc | ||
![]() |
307aadb847 | ||
![]() |
79260746db | ||
![]() |
5d335a1c65 | ||
![]() |
914528cdc9 | ||
![]() |
134f31e234 | ||
![]() |
9aac38249b | ||
![]() |
032a713549 | ||
![]() |
223ddfcfc4 | ||
![]() |
9df22a5a5f | ||
![]() |
d285151df6 | ||
![]() |
8120a8df84 | ||
![]() |
e5c35e075f | ||
![]() |
ce2ebf8d73 | ||
![]() |
bd8d987b3c | ||
![]() |
80fba9a2fe | ||
![]() |
00eea3f8a0 | ||
![]() |
275cd48511 | ||
![]() |
f33a7700a5 | ||
![]() |
9d16a79b18 | ||
![]() |
3cf53d1a78 | ||
![]() |
dd06eccffc | ||
![]() |
02bee57242 | ||
![]() |
eb4338e03e | ||
![]() |
14773193be | ||
![]() |
db21d7e4ed | ||
![]() |
89d1841616 | ||
![]() |
b1c9cc2f2d | ||
![]() |
8939c1e1cc | ||
![]() |
6dbfddfe4e | ||
![]() |
5797e016f9 | ||
![]() |
b9e49ad56e | ||
![]() |
d1714c29fc | ||
![]() |
c6d4084ad0 | ||
![]() |
f3833b67ee | ||
![]() |
fedbcde6ef | ||
![]() |
9c49fee3f2 | ||
![]() |
6b0e8b5e20 | ||
![]() |
b6e3fb0f3f | ||
![]() |
e035a2d7c7 | ||
![]() |
ef3644d110 | ||
![]() |
312be567a0 | ||
![]() |
042ebe0e32 | ||
![]() |
6bf08d131f | ||
![]() |
cb99ab98c9 | ||
![]() |
3558834c56 | ||
![]() |
614628b018 | ||
![]() |
cee39c250c | ||
![]() |
2a8245c914 | ||
![]() |
8f670c8e41 | ||
![]() |
d7b156d2a3 | ||
![]() |
f0c5eeeeef | ||
![]() |
b8faf0662b | ||
![]() |
e0aa3967ee | ||
![]() |
575d6b3f10 | ||
![]() |
94962b9c9c | ||
![]() |
e2ac89869f | ||
![]() |
964a14d0dd | ||
![]() |
9579ee380c | ||
![]() |
6e42398dd6 | ||
![]() |
a7a86dc553 | ||
![]() |
e44cb1a35c | ||
![]() |
3a1bbee36b | ||
![]() |
a93baa9fc6 | ||
![]() |
3fda8700bd | ||
![]() |
cc6b182910 | ||
![]() |
e77d54d98a | ||
![]() |
2577f413fa | ||
![]() |
97b06ef7dd | ||
![]() |
aa35095517 | ||
![]() |
c111863fbf | ||
![]() |
db0017e5e2 | ||
![]() |
994b68f5c7 | ||
![]() |
6a51defa03 | ||
![]() |
67b2206bbd | ||
![]() |
75a3689b69 | ||
![]() |
41e533af4a | ||
![]() |
8e6451ed0a | ||
![]() |
976c44be65 | ||
![]() |
a169e31a06 | ||
![]() |
eae561b2ab | ||
![]() |
053febdd3b | ||
![]() |
76fedd24f3 | ||
![]() |
e46b482282 | ||
![]() |
0a4a393d71 | ||
![]() |
6b8c6a26f1 | ||
![]() |
076bc8f92d | ||
![]() |
3871d57ba5 | ||
![]() |
22f1e3d4fa | ||
![]() |
019c5d920a | ||
![]() |
a716190241 | ||
![]() |
b3765b2ee7 | ||
![]() |
18a859aff4 | ||
![]() |
2304a0bf86 | ||
![]() |
caaf7ecd1c | ||
![]() |
1ff910858c | ||
![]() |
52e7d3d91a | ||
![]() |
a172709259 | ||
![]() |
45fe7a42f8 | ||
![]() |
63673645c4 | ||
![]() |
1a48b588c6 | ||
![]() |
19c23cc687 | ||
![]() |
91af9e64b5 | ||
![]() |
18c5bcc66a | ||
![]() |
7f14f7ba14 | ||
![]() |
37443edd97 | ||
![]() |
7ed132a1ae | ||
![]() |
a742200641 | ||
![]() |
a685faf3e3 | ||
![]() |
cd7014fd06 | ||
![]() |
28518391d1 | ||
![]() |
0291b0cada | ||
![]() |
26c15a8eb9 | ||
![]() |
6b9d2d6839 | ||
![]() |
6d4d8cb79c | ||
![]() |
4f086aeb4a | ||
![]() |
6774809b62 | ||
![]() |
cc1a72b280 | ||
![]() |
4e69dfed0b | ||
![]() |
4b315b35b0 | ||
![]() |
77ec41cc22 | ||
![]() |
9d1f5afc34 | ||
![]() |
e73a571fd9 | ||
![]() |
be96be7e83 | ||
![]() |
90e83bcc1c | ||
![]() |
2f606043c7 | ||
![]() |
b7ebc3bf78 | ||
![]() |
b97c44dc9e | ||
![]() |
7f2162689c | ||
![]() |
42f160ddfa | ||
![]() |
fb6907d39c | ||
![]() |
4918d4cb0c | ||
![]() |
0e78f78677 | ||
![]() |
611793d6ab | ||
![]() |
312d86493c | ||
![]() |
85b0c388ed | ||
![]() |
ea5adb571e | ||
![]() |
7ab9c068aa | ||
![]() |
cb7e8c5ef3 | ||
![]() |
ab8b54101e | ||
![]() |
fc6d95b10e | ||
![]() |
aa46fa2403 | ||
![]() |
16984423bc | ||
![]() |
8173ee9b38 | ||
![]() |
973a83f04d | ||
![]() |
d466780c7c | ||
![]() |
cf38531741 | ||
![]() |
2576abf0ed | ||
![]() |
519763265e | ||
![]() |
cd122865a5 | ||
![]() |
8a5705c7fa | ||
![]() |
424d027b6e | ||
![]() |
d6f3185148 | ||
![]() |
6fce15cea1 | ||
![]() |
3b43f87d29 | ||
![]() |
4e6043a355 | ||
![]() |
7d1d98b97e | ||
![]() |
a02b93bd75 | ||
![]() |
68bcaa4a7b | ||
![]() |
ccc3d1eea1 | ||
![]() |
06b48d847d | ||
![]() |
4a927712b7 | ||
![]() |
c1a534ba0b | ||
![]() |
2bf607d599 | ||
![]() |
0621a279ad | ||
![]() |
1deef576b3 | ||
![]() |
0a79d2135c | ||
![]() |
fa5755ae98 | ||
![]() |
21baae3d71 | ||
![]() |
cb43ffeb10 | ||
![]() |
cb0f5ed811 | ||
![]() |
55cb28032d | ||
![]() |
50ace4fec5 | ||
![]() |
e1a739ec38 | ||
![]() |
e93c115ab1 | ||
![]() |
04acf6c80e | ||
![]() |
6a9b888d7c | ||
![]() |
e8f79c1f5d | ||
![]() |
c6b5cd8d76 | ||
![]() |
b44fcd6e8f | ||
![]() |
70465614e1 | ||
![]() |
c0141a2bdd | ||
![]() |
f201ae83fc | ||
![]() |
6a09cfd9f9 | ||
![]() |
3527fd6f0d | ||
![]() |
9bd7922e5d | ||
![]() |
a37ffb0c74 | ||
![]() |
a24bc688c0 | ||
![]() |
9903f1a79a | ||
![]() |
49b53c0b94 | ||
![]() |
04ed4a1c88 | ||
![]() |
4032c1e2df | ||
![]() |
0db9a39e2a | ||
![]() |
1120749f04 | ||
![]() |
ef5f1ec301 | ||
![]() |
1b5b230593 | ||
![]() |
da3019b553 | ||
![]() |
ecb6d41334 | ||
![]() |
8ebb9caa83 | ||
![]() |
c0b91e659a | ||
![]() |
6c8a2f2a5b | ||
![]() |
87d44baab4 | ||
![]() |
8bff9a31aa | ||
![]() |
5ccaf62090 | ||
![]() |
43a3d66f13 | ||
![]() |
038fbae518 | ||
![]() |
f45d94425b | ||
![]() |
ab37bb30c6 | ||
![]() |
cd11be09cb | ||
![]() |
59e778eba7 | ||
![]() |
9205fdf8c6 | ||
![]() |
b508876e4c | ||
![]() |
2beac0f5c6 | ||
![]() |
7b6334c3bc | ||
![]() |
2837863f35 | ||
![]() |
20783c1428 | ||
![]() |
fde04556fe | ||
![]() |
0f9a0a025a | ||
![]() |
410b2ae7fb | ||
![]() |
8e37eda84d | ||
![]() |
4b043b56f7 | ||
![]() |
506b13d910 | ||
![]() |
04ce2b3606 | ||
![]() |
8946da4fe1 | ||
![]() |
b8e6c50cfa | ||
![]() |
de9a1e139e | ||
![]() |
732d133c1d | ||
![]() |
aa4b1d0429 | ||
![]() |
53f3d63a18 | ||
![]() |
7d8574cefe | ||
![]() |
6304d8b218 | ||
![]() |
e4d8a9205a | ||
![]() |
d881b9e10a | ||
![]() |
7980f585f7 | ||
![]() |
15956f9288 | ||
![]() |
16c91eff09 | ||
![]() |
84baa86362 | ||
![]() |
3af8c59b71 | ||
![]() |
a8a2148863 | ||
![]() |
7b6e6fa572 | ||
![]() |
9946750609 | ||
![]() |
f982f03832 | ||
![]() |
d5578fb652 | ||
![]() |
1c7708ea7c | ||
![]() |
7c99c1856f | ||
![]() |
31b075c7a4 | ||
![]() |
fcd00ebbdf | ||
![]() |
b4637f4f1f | ||
![]() |
f0107db210 | ||
![]() |
3a4b14bac6 | ||
![]() |
bd77d49812 | ||
![]() |
4fdbadde92 | ||
![]() |
5d726df15e | ||
![]() |
78c1c04ced | ||
![]() |
d11b2bd596 | ||
![]() |
8a1d2cf142 | ||
![]() |
ddd235bd9c | ||
![]() |
204e82d0af | ||
![]() |
8e1ee7fd01 | ||
![]() |
a910abcd19 | ||
![]() |
ac65d2f600 | ||
![]() |
fdf2454db2 | ||
![]() |
1297428e89 | ||
![]() |
1e5db2794b | ||
![]() |
4aef0ae660 | ||
![]() |
a418c3b837 | ||
![]() |
e4fa46e75c | ||
![]() |
06fee9d367 | ||
![]() |
f439445830 | ||
![]() |
440de73df9 | ||
![]() |
bb7928ccda | ||
![]() |
5e1daa561a | ||
![]() |
c3581dc78a | ||
![]() |
7911e057a5 | ||
![]() |
16b59c4c38 | ||
![]() |
6ba5efd59a | ||
![]() |
161232820c | ||
![]() |
051ea9bc07 | ||
![]() |
4fd42c1dc0 | ||
![]() |
d791da7943 | ||
![]() |
c1f8dd9f0b | ||
![]() |
9b67cc0ba4 | ||
![]() |
afe86d745a | ||
![]() |
f450fa5f99 | ||
![]() |
0be7eda75a | ||
![]() |
716e06071a | ||
![]() |
3472348067 | ||
![]() |
5751c54bf1 | ||
![]() |
c8a850bcd1 | ||
![]() |
6aed4288eb | ||
![]() |
e734769276 | ||
![]() |
702b01c211 | ||
![]() |
5ef5272be9 | ||
![]() |
424dff854c | ||
![]() |
95faecefde | ||
![]() |
1698d9ebfc | ||
![]() |
32b7c9c6dd | ||
![]() |
f1cd18bdec | ||
![]() |
9163872132 | ||
![]() |
81569aa72c | ||
![]() |
7cc7433f4a | ||
![]() |
717cd61a1b | ||
![]() |
8ecdf610ca | ||
![]() |
1d168621a5 | ||
![]() |
d046725133 | ||
![]() |
5ffedb22c8 | ||
![]() |
350bb359fa | ||
![]() |
f8916e2e45 | ||
![]() |
4ad72f89b1 | ||
![]() |
3cab22c8cf | ||
![]() |
8ab5b02b5f | ||
![]() |
87ae0da817 | ||
![]() |
519a73f11e | ||
![]() |
62ac0dc457 | ||
![]() |
3f61212781 | ||
![]() |
acdb052030 | ||
![]() |
8ff1a2759a | ||
![]() |
58f0326362 | ||
![]() |
68b5f55671 | ||
![]() |
7e0bfb511e | ||
![]() |
3d4edfc599 | ||
![]() |
4e383b81d0 | ||
![]() |
5207d78c32 | ||
![]() |
b5e4a41606 | ||
![]() |
377d4c979d | ||
![]() |
709a898de8 | ||
![]() |
88f06cd84a | ||
![]() |
1825fb5d5f | ||
![]() |
c0e464268d | ||
![]() |
ee7b077abf | ||
![]() |
e2a8b1fd19 | ||
![]() |
ede2e75f49 | ||
![]() |
b0ae864dff | ||
![]() |
40e6b82286 | ||
![]() |
a9c41a8e0a | ||
![]() |
3f192f55f0 | ||
![]() |
dd8f3c80f1 | ||
![]() |
5586838bab | ||
![]() |
8641833b62 | ||
![]() |
ba9c6f0989 | ||
![]() |
1cfbda826c | ||
![]() |
ecede40222 | ||
![]() |
8132626b71 | ||
![]() |
92e712f60d | ||
![]() |
55cd975f34 | ||
![]() |
d378c68d74 | ||
![]() |
d7ed1ae982 | ||
![]() |
3c543e1da9 | ||
![]() |
cb58a8221c | ||
![]() |
f199d2d503 | ||
![]() |
2e5491b8f2 | ||
![]() |
71fbeecdbd | ||
![]() |
fd5b1bb85d | ||
![]() |
9f6915631b | ||
![]() |
bd9a90c443 | ||
![]() |
eb9d5ed347 | ||
![]() |
8f8b5310d2 | ||
![]() |
1f6f493963 | ||
![]() |
9ab75d4cc8 | ||
![]() |
75c5e25ae3 | ||
![]() |
b55462328f | ||
![]() |
75fba6888a | ||
![]() |
e31c1d0b48 | ||
![]() |
f31fceaae6 | ||
![]() |
4f920f685b | ||
![]() |
294dd0b86b | ||
![]() |
2e1a03c16f | ||
![]() |
1dcf07a84c | ||
![]() |
5c734644ee | ||
![]() |
e100f52f4a | ||
![]() |
16f7d16f9f | ||
![]() |
49f0a8f23b | ||
![]() |
53691d7df2 | ||
![]() |
58060c50bc | ||
![]() |
ee424e23c1 | ||
![]() |
bdc6e3c83f | ||
![]() |
9bcb91a212 | ||
![]() |
34e6991c97 | ||
![]() |
699237baf5 | ||
![]() |
291100c795 | ||
![]() |
a28336c735 | ||
![]() |
3b06c128cf | ||
![]() |
1db874720a | ||
![]() |
ba8bfedd04 | ||
![]() |
2721fbd208 | ||
![]() |
34f411e5fd | ||
![]() |
c0472409d1 | ||
![]() |
7ec87a1926 | ||
![]() |
d0996bb4cd | ||
![]() |
276313ec18 | ||
![]() |
1d7a8944d8 | ||
![]() |
cdcc2648ba | ||
![]() |
aba3ee7d32 | ||
![]() |
30a419afc3 | ||
![]() |
8f92500fa9 | ||
![]() |
e964f3a095 | ||
![]() |
f597049b40 | ||
![]() |
97cf7f3394 | ||
![]() |
90f82e5868 | ||
![]() |
1a2917ca95 | ||
![]() |
d6bf8f9229 | ||
![]() |
72d3489612 | ||
![]() |
fb02ec25e9 | ||
![]() |
fc10b24acc | ||
![]() |
8c59d96e24 | ||
![]() |
64ceac3f49 | ||
![]() |
c29731a491 | ||
![]() |
e9d08ba523 | ||
![]() |
2497f65fee | ||
![]() |
d1cfc947f9 | ||
![]() |
4fa7b10564 | ||
![]() |
3839580cd9 | ||
![]() |
278d157f43 | ||
![]() |
a809abb086 | ||
![]() |
6458c49c96 | ||
![]() |
0b5db51ea6 | ||
![]() |
ee84231886 | ||
![]() |
70b5ddafd4 | ||
![]() |
99d7907611 | ||
![]() |
278d960aae | ||
![]() |
44358b9fed | ||
![]() |
4cf30fb534 | ||
![]() |
f197147a78 | ||
![]() |
caa17a905a | ||
![]() |
ca07064c9e | ||
![]() |
be71c8142d | ||
![]() |
d548a265ca | ||
![]() |
5f53a18204 | ||
![]() |
20b3097d4c | ||
![]() |
f7ee5739fa | ||
![]() |
754c178ae5 | ||
![]() |
a0783df14e | ||
![]() |
ece132df48 | ||
![]() |
df55c64203 | ||
![]() |
e1e684920f | ||
![]() |
ff3c8dfced | ||
![]() |
c22da7ed32 | ||
![]() |
aeebf717ad | ||
![]() |
a3de55c831 | ||
![]() |
db63eff2d5 | ||
![]() |
fe62de1ad0 | ||
![]() |
7b12b4a349 | ||
![]() |
5cdb2b73d2 | ||
![]() |
3bbac05726 | ||
![]() |
c1202510b6 | ||
![]() |
780775c812 | ||
![]() |
ae77aae80c | ||
![]() |
07401a681f | ||
![]() |
157cdf42d7 | ||
![]() |
cd5df2d92c | ||
![]() |
00da948b09 | ||
![]() |
a5d9651368 | ||
![]() |
21195bbaf1 | ||
![]() |
8d7c695337 | ||
![]() |
7e61789985 | ||
![]() |
25f8ea4d40 | ||
![]() |
01a1f8b080 | ||
![]() |
b5239ed16a | ||
![]() |
62a1bb5acf | ||
![]() |
9cb69cf4dc | ||
![]() |
8a2658a342 | ||
![]() |
25a3a3ea8c | ||
![]() |
a6083b7768 | ||
![]() |
870fa11830 | ||
![]() |
fdfa16776c | ||
![]() |
362b2aabee | ||
![]() |
b74ceb25aa | ||
![]() |
83d3d7491a | ||
![]() |
ebf3ea006e | ||
![]() |
34ea5117db | ||
![]() |
0493b61c1a | ||
![]() |
a7f8f312e0 | ||
![]() |
2db97868f8 | ||
![]() |
95604529ec | ||
![]() |
0896a3a9f0 | ||
![]() |
817b4c45f0 | ||
![]() |
84adfb759c | ||
![]() |
195082ab52 | ||
![]() |
e8870ffc96 | ||
![]() |
a7b5e20e9c | ||
![]() |
110044b131 | ||
![]() |
194d3fa048 | ||
![]() |
9d52bdfb95 | ||
![]() |
03c643b493 | ||
![]() |
71c0aeb44f | ||
![]() |
b152dde4ca | ||
![]() |
83362689f5 | ||
![]() |
10be95cffc | ||
![]() |
ad13c57298 | ||
![]() |
92b10af793 | ||
![]() |
2d04a78477 | ||
![]() |
ecac54db21 | ||
![]() |
3ba822cc3f | ||
![]() |
47c5e30b61 | ||
![]() |
199f9d9238 | ||
![]() |
e823807dc2 | ||
![]() |
f1729553e3 | ||
![]() |
9e78de3e3c | ||
![]() |
53b32f8b7e | ||
![]() |
70bba5160f | ||
![]() |
763ac28357 | ||
![]() |
943043583a | ||
![]() |
a6210dc510 | ||
![]() |
05324b36c1 | ||
![]() |
18af6efefa | ||
![]() |
0703efeae2 | ||
![]() |
96bbbe2177 | ||
![]() |
bb9eedeff4 | ||
![]() |
af7315acf6 | ||
![]() |
50d233fdce | ||
![]() |
581f43056b | ||
![]() |
214dec2811 | ||
![]() |
76ef331cd6 | ||
![]() |
7e7d6c48a0 | ||
![]() |
dfb93b8914 | ||
![]() |
b3cfdb6220 | ||
![]() |
eeaf6544b6 | ||
![]() |
79d23e28ed | ||
![]() |
5d436ddcae | ||
![]() |
cd23098828 | ||
![]() |
8213d5c3c0 | ||
![]() |
ff7b46b87c | ||
![]() |
7934a799e1 | ||
![]() |
9c46315800 | ||
![]() |
b63e4e88b0 | ||
![]() |
5f32207a3d | ||
![]() |
35af95026e | ||
![]() |
051736be13 | ||
![]() |
539f046a55 | ||
![]() |
6ffc625a7a | ||
![]() |
72540134bd | ||
![]() |
b9c37d7186 | ||
![]() |
1902b53152 | ||
![]() |
73981476a3 | ||
![]() |
a8f96cf3f9 | ||
![]() |
7fbe3c8b78 | ||
![]() |
60c221ccfa | ||
![]() |
0619f2e744 | ||
![]() |
5c32826841 | ||
![]() |
0e24d2c944 | ||
![]() |
3c99876116 | ||
![]() |
f3b3c91e7d | ||
![]() |
0d19cef4c1 | ||
![]() |
51192d546d | ||
![]() |
f406a20519 | ||
![]() |
d704c4d711 | ||
![]() |
9a96aaa8ef | ||
![]() |
ab9a0025d5 | ||
![]() |
1f2a381e84 | ||
![]() |
5be45ce0cf | ||
![]() |
e36502673d | ||
![]() |
fdc5c1f56f | ||
![]() |
cf399f77b8 | ||
![]() |
1e40783d9a | ||
![]() |
44e55ba8eb | ||
![]() |
fe46030cdd | ||
![]() |
0893d49187 | ||
![]() |
7a9e06fa7e | ||
![]() |
2a7ad97539 | ||
![]() |
4a9afcb101 | ||
![]() |
9ea64da6c5 | ||
![]() |
6ed80c8814 | ||
![]() |
2d77d4dbd6 | ||
![]() |
ee223d02d9 | ||
![]() |
10093276e9 | ||
![]() |
468fc8c533 | ||
![]() |
33acbf0719 | ||
![]() |
76e3d69330 | ||
![]() |
4e5a965d6a | ||
![]() |
8d0c0334f1 | ||
![]() |
dfa87a200f | ||
![]() |
f355096a64 | ||
![]() |
7e5e9f4270 | ||
![]() |
bc10cd2900 | ||
![]() |
9641805419 | ||
![]() |
d154954f02 | ||
![]() |
7910e39d19 | ||
![]() |
3f56b7f65a | ||
![]() |
4a05d12cf5 | ||
![]() |
4e30c09e57 | ||
![]() |
7ed086eb99 | ||
![]() |
916edf2a3f | ||
![]() |
5632aeb838 | ||
![]() |
5672726b44 | ||
![]() |
895244b2ab | ||
![]() |
a246a71975 | ||
![]() |
5cf640c926 | ||
![]() |
c7f65a01e5 | ||
![]() |
77e9c05988 | ||
![]() |
252c576d7e | ||
![]() |
b8a18d059b | ||
![]() |
bd192b470b | ||
![]() |
cdeb4c8afa | ||
![]() |
a4e67f4512 | ||
![]() |
c88110e284 | ||
![]() |
664dac1e95 | ||
![]() |
824201294b | ||
![]() |
0dfd94cff4 | ||
![]() |
4e57cf3f8c | ||
![]() |
2093d350be | ||
![]() |
842cdcd2f6 | ||
![]() |
9e74f697e0 | ||
![]() |
76ec6891e2 | ||
![]() |
c0ed422958 | ||
![]() |
b4423ff7df | ||
![]() |
1bbc56cd22 | ||
![]() |
00fb8b45d9 | ||
![]() |
ce0595d01d | ||
![]() |
a90528ad34 | ||
![]() |
efecfde19a | ||
![]() |
d87945b4e7 | ||
![]() |
2e5bd8f8aa | ||
![]() |
cc05d12716 | ||
![]() |
8f53951b05 | ||
![]() |
f76b577fed | ||
![]() |
898cc98f3d | ||
![]() |
fcb10796ec | ||
![]() |
30eb40241c | ||
![]() |
ac68b70ed9 | ||
![]() |
44ac5d5d93 | ||
![]() |
bb08537104 | ||
![]() |
81fa6d5f94 | ||
![]() |
4c4a9632bd | ||
![]() |
3d8f4ada56 | ||
![]() |
6e36f86333 | ||
![]() |
2b45974837 | ||
![]() |
d5f72afd49 | ||
![]() |
c1e553a9cf | ||
![]() |
8b09aa39c3 | ||
![]() |
61e844f48e | ||
![]() |
e5bcc9dc5c | ||
![]() |
9cfb12e6bc | ||
![]() |
eda65ce1a5 | ||
![]() |
e7274663f1 | ||
![]() |
1d763d50e7 | ||
![]() |
70f1280ca9 | ||
![]() |
e40fb3d68f | ||
![]() |
d5b3513cca | ||
![]() |
d63185fd88 | ||
![]() |
a22c04502a | ||
![]() |
09131482e7 | ||
![]() |
08a85b69b4 | ||
![]() |
4553a785e2 | ||
![]() |
bf8947da81 | ||
![]() |
b7681167cb | ||
![]() |
a2f5e21244 | ||
![]() |
733f7deeb7 | ||
![]() |
fc8b178759 | ||
![]() |
267e23ae99 | ||
![]() |
4a1fe7167b | ||
![]() |
37429fff41 | ||
![]() |
336efb5267 | ||
![]() |
838ac974f4 | ||
![]() |
bf013b1951 | ||
![]() |
3772217641 | ||
![]() |
5c3b16c576 | ||
![]() |
fc90c51f72 | ||
![]() |
25e3c33488 | ||
![]() |
4b91ef8348 | ||
![]() |
ec6c274da2 | ||
![]() |
c52c174e41 | ||
![]() |
5b67764a5a | ||
![]() |
2f4ce43033 | ||
![]() |
040ae31701 | ||
![]() |
f24799580f | ||
![]() |
1b02faeea6 | ||
![]() |
f30dae9cf4 | ||
![]() |
654476654e | ||
![]() |
563b15dbfe | ||
![]() |
e76de9a8ca | ||
![]() |
b489245af2 | ||
![]() |
4cab53af77 | ||
![]() |
1ff2ee440b | ||
![]() |
b572dc4b51 | ||
![]() |
bdde630b4a | ||
![]() |
d7f5035959 | ||
![]() |
38460b45bc | ||
![]() |
24a41091f4 | ||
![]() |
a48fa7f4de | ||
![]() |
a0508577c9 | ||
![]() |
3ccce08bf8 | ||
![]() |
cd64095ad1 | ||
![]() |
6c9f88d15c | ||
![]() |
bc89169b5e | ||
![]() |
9122f51d44 | ||
![]() |
3707ba5132 | ||
![]() |
5a2edd681c | ||
![]() |
68f25c31f8 | ||
![]() |
51cec57e44 | ||
![]() |
ee40369656 | ||
862ed2d3db | |||
69b1a8ac50 | |||
d99f61fda8 | |||
c2fc66958c | |||
29a2875eaa | |||
3e294b91a0 | |||
![]() |
a35df3487b | ||
50524197fc | |||
![]() |
8c0b2e6875 | ||
a80a1dcf13 | |||
![]() |
90ec5f2a3f | ||
ff9ce60919 | |||
![]() |
edbe7fc97b | ||
![]() |
0b251a1b9c | ||
![]() |
c2f23bb1cd | ||
![]() |
8af5c80fb8 | ||
![]() |
658d73ad10 | ||
![]() |
b675146ae7 | ||
![]() |
e0055e0f99 | ||
![]() |
39c8f369ef | ||
![]() |
74dca85302 | ||
![]() |
33767fc71b |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
*.pyc
|
||||
*.*~
|
||||
libc/kernel/original
|
||||
|
@@ -14,6 +14,6 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
ifneq ($(TARGET_SIMULATOR),true)
|
||||
include $(call all-subdir-makefiles)
|
||||
endif
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
include $(call all-subdir-makefiles)
|
||||
|
49
CleanSpec.mk
Normal file
49
CleanSpec.mk
Normal file
@@ -0,0 +1,49 @@
|
||||
# Copyright (C) 2007 The Android Open Source Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
# If you don't need to do a full clean build but would like to touch
|
||||
# a file or delete some intermediate files, add a clean step to the end
|
||||
# of the list. These steps will only be run once, if they haven't been
|
||||
# run before.
|
||||
#
|
||||
# E.g.:
|
||||
# $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
|
||||
# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
|
||||
#
|
||||
# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
|
||||
# files that are missing or have been moved.
|
||||
#
|
||||
# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
|
||||
# Use $(OUT_DIR) to refer to the "out" directory.
|
||||
#
|
||||
# If you need to re-do something that's already mentioned, just copy
|
||||
# the command and add it to the bottom of the list. E.g., if a change
|
||||
# that you made last week required touching a file and a change you
|
||||
# made today requires touching the same file, just copy the old
|
||||
# touch step and add it to the end of the list.
|
||||
#
|
||||
# ************************************************
|
||||
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
|
||||
# ************************************************
|
||||
|
||||
# For example:
|
||||
#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
|
||||
#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
|
||||
#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
|
||||
#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
|
||||
|
||||
# ************************************************
|
||||
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
|
||||
# ************************************************
|
590
libc/Android.mk
590
libc/Android.mk
@@ -9,14 +9,14 @@ libc_common_src_files := \
|
||||
unistd/abort.c \
|
||||
unistd/alarm.c \
|
||||
unistd/brk.c \
|
||||
unistd/creat.c \
|
||||
unistd/daemon.c \
|
||||
unistd/eventfd.c \
|
||||
unistd/exec.c \
|
||||
unistd/fcntl.c \
|
||||
unistd/fnmatch.c \
|
||||
unistd/fstatfs.c \
|
||||
unistd/ftime.c \
|
||||
unistd/ftok.c \
|
||||
unistd/getcwd.c \
|
||||
unistd/getdtablesize.c \
|
||||
unistd/gethostname.c \
|
||||
unistd/getopt_long.c \
|
||||
@@ -26,9 +26,9 @@ libc_common_src_files := \
|
||||
unistd/initgroups.c \
|
||||
unistd/isatty.c \
|
||||
unistd/issetugid.c \
|
||||
unistd/killpg.c \
|
||||
unistd/lseek64.c \
|
||||
unistd/mmap.c \
|
||||
unistd/nice.c \
|
||||
unistd/open.c \
|
||||
unistd/openat.c \
|
||||
unistd/opendir.c \
|
||||
@@ -46,19 +46,21 @@ libc_common_src_files := \
|
||||
unistd/sbrk.c \
|
||||
unistd/send.c \
|
||||
unistd/setegid.c \
|
||||
unistd/setuid.c \
|
||||
unistd/seteuid.c \
|
||||
unistd/setreuid.c \
|
||||
unistd/setresuid.c \
|
||||
unistd/setpgrp.c \
|
||||
unistd/sigblock.c \
|
||||
unistd/siginterrupt.c \
|
||||
unistd/siglist.c \
|
||||
unistd/signal.c \
|
||||
unistd/signame.c \
|
||||
unistd/sigsetmask.c \
|
||||
unistd/sigsuspend.c \
|
||||
unistd/sigwait.c \
|
||||
unistd/sleep.c \
|
||||
unistd/statfs.c \
|
||||
unistd/strsignal.c \
|
||||
unistd/sysconf.c \
|
||||
unistd/syslog.c \
|
||||
unistd/system.c \
|
||||
unistd/tcgetpgrp.c \
|
||||
@@ -134,6 +136,11 @@ libc_common_src_files := \
|
||||
stdio/vsscanf.c \
|
||||
stdio/wbuf.c \
|
||||
stdio/wsetup.c \
|
||||
stdio/__fgets_chk.c \
|
||||
stdio/__snprintf_chk.c \
|
||||
stdio/__sprintf_chk.c \
|
||||
stdio/__vsnprintf_chk.c \
|
||||
stdio/__vsprintf_chk.c \
|
||||
stdlib/_rand48.c \
|
||||
stdlib/assert.c \
|
||||
stdlib/atexit.c \
|
||||
@@ -170,29 +177,22 @@ libc_common_src_files := \
|
||||
stdlib/tolower_.c \
|
||||
stdlib/toupper_.c \
|
||||
stdlib/wchar.c \
|
||||
string/bcopy.c \
|
||||
string/index.c \
|
||||
string/memccpy.c \
|
||||
string/memchr.c \
|
||||
string/memmem.c \
|
||||
string/memmove.c.arm \
|
||||
string/memrchr.c \
|
||||
string/memswap.c \
|
||||
string/strcasecmp.c \
|
||||
string/strcasestr.c \
|
||||
string/strcat.c \
|
||||
string/strchr.c \
|
||||
string/strcmp.c \
|
||||
string/strcoll.c \
|
||||
string/strcpy.c \
|
||||
string/strcspn.c \
|
||||
string/strdup.c \
|
||||
string/strerror.c \
|
||||
string/strerror_r.c \
|
||||
string/strlcat.c \
|
||||
string/strlcpy.c \
|
||||
string/strncat.c \
|
||||
string/strncmp.c \
|
||||
string/strncpy.c \
|
||||
string/strndup.c \
|
||||
string/strnlen.c \
|
||||
@@ -203,29 +203,75 @@ libc_common_src_files := \
|
||||
string/strstr.c \
|
||||
string/strtok.c \
|
||||
string/strtotimeval.c \
|
||||
string/strxfrm.c \
|
||||
string/__memcpy_chk.c \
|
||||
string/__memmove_chk.c \
|
||||
string/__memset_chk.c \
|
||||
string/__strcat_chk.c \
|
||||
string/__strcpy_chk.c \
|
||||
string/__strlcat_chk.c \
|
||||
string/__strlcpy_chk.c \
|
||||
string/__strlen_chk.c \
|
||||
string/__strncat_chk.c \
|
||||
string/__strncpy_chk.c \
|
||||
wchar/wcpcpy.c \
|
||||
wchar/wcpncpy.c \
|
||||
wchar/wcscasecmp.c \
|
||||
wchar/wcscat.c \
|
||||
wchar/wcschr.c \
|
||||
wchar/wcscmp.c \
|
||||
wchar/wcscoll.c \
|
||||
wchar/wcscpy.c \
|
||||
wchar/wcscspn.c \
|
||||
wchar/wcsdup.c \
|
||||
wchar/wcslcat.c \
|
||||
wchar/wcslcpy.c \
|
||||
wchar/wcslen.c \
|
||||
wchar/wcsncasecmp.c \
|
||||
wchar/wcsncat.c \
|
||||
wchar/wcsncmp.c \
|
||||
wchar/wcsncpy.c \
|
||||
wchar/wcsnlen.c \
|
||||
wchar/wcspbrk.c \
|
||||
wchar/wcsrchr.c \
|
||||
wchar/wcsspn.c \
|
||||
wchar/wcsstr.c \
|
||||
wchar/wcstok.c \
|
||||
wchar/wcswidth.c \
|
||||
wchar/wcsxfrm.c \
|
||||
wchar/wmemchr.c \
|
||||
wchar/wmemcmp.c \
|
||||
wchar/wmemcpy.c \
|
||||
wchar/wmemmove.c \
|
||||
wchar/wmemset.c \
|
||||
inet/bindresvport.c \
|
||||
inet/inet_addr.c \
|
||||
inet/inet_aton.c \
|
||||
inet/inet_ntoa.c \
|
||||
inet/inet_ntop.c \
|
||||
inet/inet_pton.c \
|
||||
inet/ether_aton.c \
|
||||
inet/ether_ntoa.c \
|
||||
tzcode/asctime.c \
|
||||
tzcode/difftime.c \
|
||||
tzcode/localtime.c \
|
||||
tzcode/strftime.c \
|
||||
tzcode/strptime.c \
|
||||
bionic/__errno.c \
|
||||
bionic/__set_errno.c \
|
||||
bionic/_rand48.c \
|
||||
bionic/bionic_clone.c \
|
||||
bionic/cpuacct.c \
|
||||
bionic/arc4random.c \
|
||||
bionic/basename.c \
|
||||
bionic/basename_r.c \
|
||||
bionic/clearenv.c \
|
||||
bionic/dirname.c \
|
||||
bionic/dirname_r.c \
|
||||
bionic/drand48.c \
|
||||
bionic/erand48.c \
|
||||
bionic/err.c \
|
||||
bionic/fdprintf.c \
|
||||
bionic/fork.c \
|
||||
bionic/fts.c \
|
||||
bionic/getcwd.cpp \
|
||||
bionic/if_nametoindex.c \
|
||||
bionic/if_indextoname.c \
|
||||
bionic/ioctl.c \
|
||||
@@ -233,13 +279,21 @@ libc_common_src_files := \
|
||||
bionic/libc_init_common.c \
|
||||
bionic/logd_write.c \
|
||||
bionic/md5.c \
|
||||
bionic/memmove_words.c \
|
||||
bionic/pututline.c \
|
||||
bionic/realpath.c \
|
||||
bionic/sched_getaffinity.c \
|
||||
bionic/sched_getcpu.c \
|
||||
bionic/sched_cpualloc.c \
|
||||
bionic/sched_cpucount.c \
|
||||
bionic/semaphore.c \
|
||||
bionic/sha1.c \
|
||||
bionic/ssp.c \
|
||||
bionic/stubs.c \
|
||||
bionic/strerror.cpp \
|
||||
bionic/strerror_r.cpp \
|
||||
bionic/strsignal.cpp \
|
||||
bionic/stubs.cpp \
|
||||
bionic/system_properties.c \
|
||||
bionic/tdestroy.c \
|
||||
bionic/time64.c \
|
||||
bionic/thread_atexit.c \
|
||||
bionic/utime.c \
|
||||
@@ -259,7 +313,7 @@ libc_common_src_files := \
|
||||
netbsd/resolv/res_mkquery.c \
|
||||
netbsd/resolv/res_query.c \
|
||||
netbsd/resolv/res_send.c \
|
||||
netbsd/resolv/res_state.c.arm \
|
||||
netbsd/resolv/res_state.c \
|
||||
netbsd/resolv/res_cache.c \
|
||||
netbsd/net/nsdispatch.c \
|
||||
netbsd/net/getaddrinfo.c \
|
||||
@@ -273,22 +327,57 @@ libc_common_src_files := \
|
||||
netbsd/nameser/ns_ttl.c \
|
||||
netbsd/nameser/ns_netint.c \
|
||||
netbsd/nameser/ns_print.c \
|
||||
netbsd/nameser/ns_samedomain.c
|
||||
netbsd/nameser/ns_samedomain.c \
|
||||
|
||||
libc_upstream_netbsd_src_files := \
|
||||
upstream-netbsd/libc/compat-43/creat.c \
|
||||
upstream-netbsd/libc/gen/ftw.c \
|
||||
upstream-netbsd/libc/gen/nftw.c \
|
||||
upstream-netbsd/libc/gen/nice.c \
|
||||
upstream-netbsd/libc/gen/psignal.c \
|
||||
upstream-netbsd/libc/regex/regcomp.c \
|
||||
upstream-netbsd/libc/regex/regerror.c \
|
||||
upstream-netbsd/libc/regex/regexec.c \
|
||||
upstream-netbsd/libc/regex/regfree.c \
|
||||
upstream-netbsd/libc/stdlib/tdelete.c \
|
||||
upstream-netbsd/libc/stdlib/tfind.c \
|
||||
upstream-netbsd/libc/stdlib/tsearch.c \
|
||||
upstream-netbsd/libc/string/strxfrm.c \
|
||||
|
||||
# The following files are common, but must be compiled
|
||||
# with different C flags when building a static C library.
|
||||
#
|
||||
# The reason for this is the implementation of __get_tls()
|
||||
# that will differ between the shared and static versions
|
||||
# of the library.
|
||||
#
|
||||
# See comments in private/bionic_tls.h for more details.
|
||||
#
|
||||
# NOTE: bionic/pthread.c is added later to this list
|
||||
# because it needs special handling on ARM, see
|
||||
# below.
|
||||
#
|
||||
libc_static_common_src_files := \
|
||||
unistd/sysconf.c \
|
||||
bionic/__errno.c \
|
||||
|
||||
# Architecture specific source files go here
|
||||
# =========================================================
|
||||
ifeq ($(TARGET_ARCH),arm)
|
||||
libc_common_src_files += \
|
||||
bionic/eabi.c \
|
||||
arch-arm/bionic/__get_pc.S \
|
||||
arch-arm/bionic/__get_sp.S \
|
||||
arch-arm/bionic/_exit_with_stack_teardown.S \
|
||||
arch-arm/bionic/_setjmp.S \
|
||||
arch-arm/bionic/atomics_arm.S \
|
||||
arch-arm/bionic/abort_arm.S \
|
||||
arch-arm/bionic/atomics_arm.c \
|
||||
arch-arm/bionic/clone.S \
|
||||
arch-arm/bionic/eabi.c \
|
||||
arch-arm/bionic/ffs.S \
|
||||
arch-arm/bionic/futex_arm.S \
|
||||
arch-arm/bionic/kill.S \
|
||||
arch-arm/bionic/libgcc_compat.c \
|
||||
arch-arm/bionic/tkill.S \
|
||||
arch-arm/bionic/tgkill.S \
|
||||
arch-arm/bionic/memcmp.S \
|
||||
arch-arm/bionic/memcmp16.S \
|
||||
arch-arm/bionic/memcpy.S \
|
||||
@@ -296,17 +385,26 @@ libc_common_src_files += \
|
||||
arch-arm/bionic/setjmp.S \
|
||||
arch-arm/bionic/sigsetjmp.S \
|
||||
arch-arm/bionic/strlen.c.arm \
|
||||
arch-arm/bionic/strcpy.S \
|
||||
arch-arm/bionic/strcmp.S \
|
||||
arch-arm/bionic/syscall.S \
|
||||
string/memmove.c.arm \
|
||||
string/bcopy.c \
|
||||
string/strncmp.c \
|
||||
unistd/socketcalls.c
|
||||
|
||||
# These files need to be arm so that gdbserver
|
||||
# can set breakpoints in them without messing
|
||||
# up any thumb code.
|
||||
libc_common_src_files += \
|
||||
bionic/pthread.c.arm \
|
||||
bionic/pthread-atfork.c.arm \
|
||||
bionic/pthread-rwlocks.c.arm \
|
||||
bionic/pthread-timers.c.arm \
|
||||
bionic/ptrace.c.arm
|
||||
|
||||
libc_static_common_src_files += \
|
||||
bionic/pthread.c.arm \
|
||||
|
||||
# these are used by the static and dynamic versions of the libc
|
||||
# respectively
|
||||
libc_arch_static_src_files := \
|
||||
@@ -314,114 +412,316 @@ libc_arch_static_src_files := \
|
||||
|
||||
libc_arch_dynamic_src_files := \
|
||||
arch-arm/bionic/exidx_dynamic.c
|
||||
else # !arm
|
||||
endif # arm
|
||||
|
||||
ifeq ($(TARGET_ARCH),x86)
|
||||
libc_common_src_files += \
|
||||
arch-x86/bionic/__get_sp.S \
|
||||
arch-x86/bionic/__get_tls.c \
|
||||
arch-x86/bionic/__set_tls.c \
|
||||
arch-x86/bionic/atomics_x86.S \
|
||||
arch-x86/bionic/clone.S \
|
||||
arch-x86/bionic/_exit_with_stack_teardown.S \
|
||||
arch-x86/bionic/futex_x86.S \
|
||||
arch-x86/bionic/setjmp.S \
|
||||
arch-x86/bionic/_setjmp.S \
|
||||
arch-x86/bionic/sigsetjmp.S \
|
||||
arch-x86/bionic/vfork.S \
|
||||
arch-x86/string/bzero.S \
|
||||
arch-x86/string/memset.S \
|
||||
arch-x86/string/memcmp.S \
|
||||
arch-x86/string/memcpy.S \
|
||||
arch-x86/string/strlen.S \
|
||||
bionic/pthread.c \
|
||||
arch-x86/bionic/syscall.S \
|
||||
arch-x86/string/bcopy_wrapper.S \
|
||||
arch-x86/string/memcpy_wrapper.S \
|
||||
arch-x86/string/memmove_wrapper.S \
|
||||
arch-x86/string/bzero_wrapper.S \
|
||||
arch-x86/string/memcmp_wrapper.S \
|
||||
arch-x86/string/memset_wrapper.S \
|
||||
arch-x86/string/strcmp_wrapper.S \
|
||||
arch-x86/string/strncmp_wrapper.S \
|
||||
arch-x86/string/strlen_wrapper.S \
|
||||
string/strcpy.c \
|
||||
bionic/pthread-atfork.c \
|
||||
bionic/pthread-rwlocks.c \
|
||||
bionic/pthread-timers.c \
|
||||
bionic/ptrace.c
|
||||
|
||||
# this is needed for static versions of libc
|
||||
libc_static_common_src_files += \
|
||||
bionic/pthread.c \
|
||||
|
||||
libc_arch_static_src_files := \
|
||||
arch-x86/bionic/dl_iterate_phdr_static.c
|
||||
bionic/dl_iterate_phdr_static.c
|
||||
|
||||
libc_arch_dynamic_src_files :=
|
||||
endif # x86
|
||||
endif # !arm
|
||||
|
||||
ifeq ($(TARGET_ARCH),mips)
|
||||
libc_common_src_files += \
|
||||
arch-mips/bionic/__get_sp.S \
|
||||
arch-mips/bionic/__get_tls.c \
|
||||
arch-mips/bionic/__set_tls.c \
|
||||
arch-mips/bionic/_exit_with_stack_teardown.S \
|
||||
arch-mips/bionic/_setjmp.S \
|
||||
arch-mips/bionic/futex_mips.S \
|
||||
arch-mips/bionic/bzero.S \
|
||||
arch-mips/bionic/cacheflush.c \
|
||||
arch-mips/bionic/clone.S \
|
||||
arch-mips/bionic/ffs.S \
|
||||
arch-mips/bionic/memcmp16.S \
|
||||
arch-mips/bionic/memmove.c \
|
||||
arch-mips/bionic/pipe.S \
|
||||
arch-mips/bionic/setjmp.S \
|
||||
arch-mips/bionic/sigsetjmp.S \
|
||||
arch-mips/bionic/vfork.S
|
||||
|
||||
libc_common_src_files += \
|
||||
arch-mips/string/memset.S \
|
||||
arch-mips/string/memcpy.S \
|
||||
arch-mips/string/mips_strlen.c
|
||||
|
||||
libc_common_src_files += \
|
||||
string/bcopy.c \
|
||||
string/memcmp.c \
|
||||
string/strcmp.c \
|
||||
string/strcpy.c \
|
||||
string/strncmp.c
|
||||
|
||||
libc_common_src_files += \
|
||||
bionic/pthread-atfork.c \
|
||||
bionic/pthread-rwlocks.c \
|
||||
bionic/pthread-timers.c \
|
||||
bionic/ptrace.c
|
||||
|
||||
libc_static_common_src_files += \
|
||||
bionic/pthread.c
|
||||
|
||||
libc_arch_static_src_files := \
|
||||
bionic/dl_iterate_phdr_static.c
|
||||
|
||||
libc_arch_dynamic_src_files :=
|
||||
endif # mips
|
||||
|
||||
# Define some common cflags
|
||||
# ========================================================
|
||||
libc_common_cflags := \
|
||||
-DWITH_ERRLIST \
|
||||
-DANDROID_CHANGES \
|
||||
-DUSE_LOCKS \
|
||||
-DREALLOC_ZERO_BYTES_FREES \
|
||||
-D_LIBC=1 \
|
||||
-DSOFTFLOAT \
|
||||
-DFLOATING_POINT \
|
||||
-DNEED_PSELECT=1 \
|
||||
-DINET6 \
|
||||
-I$(LOCAL_PATH)/private \
|
||||
-DUSE_DL_PREFIX
|
||||
-DWITH_ERRLIST \
|
||||
-DANDROID_CHANGES \
|
||||
-D_LIBC=1 \
|
||||
-DFLOATING_POINT \
|
||||
-DINET6 \
|
||||
-I$(LOCAL_PATH)/private \
|
||||
-DPOSIX_MISTAKE \
|
||||
-DLOG_ON_HEAP_ERROR \
|
||||
-std=gnu99 \
|
||||
-Wall -Wextra
|
||||
|
||||
# these macro definitions are required to implement the
|
||||
# 'timezone' and 'daylight' global variables, as well as
|
||||
# properly update the 'tm_gmtoff' field in 'struct tm'.
|
||||
#
|
||||
libc_common_cflags += \
|
||||
-DTM_GMTOFF=tm_gmtoff \
|
||||
-DUSG_COMPAT=1
|
||||
|
||||
ifeq ($(strip $(DEBUG_BIONIC_LIBC)),true)
|
||||
libc_common_cflags += -DDEBUG
|
||||
endif
|
||||
|
||||
# To customize dlmalloc's alignment, set BOARD_MALLOC_ALIGNMENT in
|
||||
# the appropriate BoardConfig.mk file.
|
||||
#
|
||||
ifneq ($(BOARD_MALLOC_ALIGNMENT),)
|
||||
libc_common_cflags += -DMALLOC_ALIGNMENT=$(BOARD_MALLOC_ALIGNMENT)
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_ARCH),arm)
|
||||
libc_common_cflags += -DSOFTFLOAT
|
||||
libc_common_cflags += -fstrict-aliasing
|
||||
libc_crt_target_cflags := -mthumb-interwork
|
||||
else # !arm
|
||||
ifeq ($(TARGET_ARCH),x86)
|
||||
libc_crt_target_cflags := -m32
|
||||
endif # x86
|
||||
#
|
||||
# Define HAVE_ARM_TLS_REGISTER macro to indicate to the C library
|
||||
# that it should access the hardware TLS register directly in
|
||||
# private/bionic_tls.h
|
||||
#
|
||||
# The value must match your kernel configuration
|
||||
#
|
||||
ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
|
||||
libc_common_cflags += -DHAVE_ARM_TLS_REGISTER
|
||||
endif
|
||||
#
|
||||
# Define HAVE_32_BYTE_CACHE_LINES to indicate to C
|
||||
# library it should use to 32-byte version of memcpy, and not
|
||||
# the 64-byte version.
|
||||
#
|
||||
ifeq ($(ARCH_ARM_HAVE_32_BYTE_CACHE_LINES),true)
|
||||
libc_common_cflags += -DHAVE_32_BYTE_CACHE_LINE
|
||||
endif
|
||||
ifeq ($(ARCH_ARM_USE_NON_NEON_MEMCPY),true)
|
||||
libc_common_cflags += -DARCH_ARM_USE_NON_NEON_MEMCPY
|
||||
endif
|
||||
endif # !arm
|
||||
|
||||
ifeq ($(TARGET_ARCH),x86)
|
||||
libc_common_cflags += -DSOFTFLOAT
|
||||
libc_crt_target_cflags :=
|
||||
ifeq ($(ARCH_X86_HAVE_SSE2),true)
|
||||
libc_crt_target_cflags += -DUSE_SSE2=1
|
||||
endif
|
||||
ifeq ($(ARCH_X86_HAVE_SSSE3),true)
|
||||
libc_crt_target_cflags += -DUSE_SSSE3=1
|
||||
endif
|
||||
endif # x86
|
||||
|
||||
ifeq ($(TARGET_ARCH),mips)
|
||||
ifneq ($(ARCH_MIPS_HAS_FPU),true)
|
||||
libc_common_cflags += -DSOFTFLOAT
|
||||
endif
|
||||
libc_common_cflags += -fstrict-aliasing
|
||||
libc_crt_target_cflags := $(TARGET_GLOBAL_CFLAGS)
|
||||
endif # mips
|
||||
|
||||
# Define ANDROID_SMP appropriately.
|
||||
ifeq ($(TARGET_CPU_SMP),true)
|
||||
libc_common_cflags += -DANDROID_SMP=1
|
||||
else
|
||||
libc_common_cflags += -DANDROID_SMP=0
|
||||
endif
|
||||
|
||||
# crtbrand.c needs <stdint.h> and a #define for the platform SDK version.
|
||||
libc_crt_target_cflags += \
|
||||
-I$(LOCAL_PATH)/include \
|
||||
-DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
|
||||
|
||||
# Define some common includes
|
||||
# ========================================================
|
||||
libc_common_c_includes := \
|
||||
$(LOCAL_PATH)/stdlib \
|
||||
$(LOCAL_PATH)/string \
|
||||
$(LOCAL_PATH)/stdio
|
||||
$(LOCAL_PATH)/stdio \
|
||||
external/safe-iop/include
|
||||
|
||||
# Needed to access private/__dso_handle.h from
|
||||
# crtbegin_xxx.S and crtend_xxx.S
|
||||
libc_crt_target_cflags += \
|
||||
-I$(LOCAL_PATH)/private \
|
||||
-I$(LOCAL_PATH)/arch-$(TARGET_ARCH)/include
|
||||
|
||||
# Define the libc run-time (crt) support object files that must be built,
|
||||
# which are needed to build all other objects (shared/static libs and
|
||||
# executables)
|
||||
# ==========================================================================
|
||||
|
||||
# ARM, MIPS, and x86 all need crtbegin_so/crtend_so.
|
||||
#
|
||||
# For x86, the .init section must point to a function that calls all
|
||||
# entries in the .ctors section. (on ARM this is done through the
|
||||
# .init_array section instead).
|
||||
#
|
||||
# For all the platforms, the .fini_array section must point to a function
|
||||
# that will call __cxa_finalize(&__dso_handle) in order to ensure that
|
||||
# static C++ destructors are properly called on dlclose().
|
||||
#
|
||||
ifeq ($(TARGET_ARCH),arm)
|
||||
libc_crtbegin_extension := c
|
||||
libc_crt_target_so_cflags :=
|
||||
endif
|
||||
ifeq ($(TARGET_ARCH),mips)
|
||||
libc_crtbegin_extension := S
|
||||
libc_crt_target_so_cflags := -fPIC
|
||||
endif
|
||||
ifeq ($(TARGET_ARCH),x86)
|
||||
# we only need begin_so/end_so for x86, since it needs an appropriate .init
|
||||
# section in the shared library with a function to call all the entries in
|
||||
# .ctors section. ARM uses init_array, and does not need the function.
|
||||
GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_so.o
|
||||
$(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_so.S
|
||||
libc_crtbegin_extension := S
|
||||
libc_crt_target_so_cflags := -fPIC
|
||||
endif
|
||||
ifeq ($(libc_crtbegin_extension),)
|
||||
$(error $(TARGET_ARCH) not supported)
|
||||
endif
|
||||
libc_crt_target_so_cflags += $(libc_crt_target_cflags)
|
||||
libc_crt_target_crtbegin_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin.$(libc_crtbegin_extension)
|
||||
libc_crt_target_crtbegin_so_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_so.$(libc_crtbegin_extension)
|
||||
|
||||
# See the comment in crtbrand.c for the reason why we need to generate
|
||||
# crtbrand.s before generating crtbrand.o.
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.s
|
||||
$(GEN): $(LOCAL_PATH)/bionic/crtbrand.c
|
||||
@mkdir -p $(dir $@)
|
||||
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
||||
$(hide) $(TARGET_CC) $(libc_crt_target_so_cflags) -S \
|
||||
-MD -MF $(@:%.s=%.d) -o $@ $<
|
||||
$(hide) sed -i -e '/\.note\.ABI-tag/s/progbits/note/' $@
|
||||
$(call transform-d-to-p-args,$(@:%.s=%.d),$(@:%.s=%.P))
|
||||
-include $(GEN:%.s=%.P)
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_so.o
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
|
||||
$(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.s
|
||||
@mkdir -p $(dir $@)
|
||||
$(hide) $(TARGET_CC) $(libc_crt_target_so_cflags) -o $@ -c $<
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
|
||||
$(GEN): $(libc_crt_target_crtbegin_so_file)
|
||||
@mkdir -p $(dir $@)
|
||||
$(hide) $(TARGET_CC) $(libc_crt_target_so_cflags) \
|
||||
-MD -MF $(@:%.o=%.d) -o $@ -c $<
|
||||
$(transform-d-to-p)
|
||||
-include $(GEN:%.o=%.P)
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
|
||||
$(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtend_so.S
|
||||
@mkdir -p $(dir $@)
|
||||
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
||||
$(hide) $(TARGET_CC) $(libc_crt_target_so_cflags) \
|
||||
-MD -MF $(@:%.o=%.d) -o $@ -c $<
|
||||
$(transform-d-to-p)
|
||||
-include $(GEN:%.o=%.P)
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
# The following two are installed to device
|
||||
GEN := $(TARGET_OUT_SHARED_LIBRARIES)/crtbegin_so.o
|
||||
$(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
|
||||
$(hide) mkdir -p $(dir $@) && cp -f $< $@
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
GEN := $(TARGET_OUT_SHARED_LIBRARIES)/crtend_so.o
|
||||
$(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
|
||||
$(hide) mkdir -p $(dir $@) && cp -f $< $@
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
endif # TARGET_ARCH == x86
|
||||
|
||||
|
||||
GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_static.o
|
||||
$(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_static.S
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o
|
||||
$(GEN): $(libc_crt_target_crtbegin_file)
|
||||
@mkdir -p $(dir $@)
|
||||
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
||||
$(hide) $(TARGET_CC) $(libc_crt_target_cflags) \
|
||||
-MD -MF $(@:%.o=%.d) -o $@ -c $<
|
||||
$(transform-d-to-p)
|
||||
-include $(GEN:%.o=%.P)
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_dynamic.o
|
||||
$(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_dynamic.S
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
|
||||
$(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
|
||||
@mkdir -p $(dir $@)
|
||||
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
||||
$(hide) $(TARGET_LD) -r -o $@ $^
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o
|
||||
$(GEN): $(libc_crt_target_crtbegin_file)
|
||||
@mkdir -p $(dir $@)
|
||||
$(hide) $(TARGET_CC) $(libc_crt_target_cflags) \
|
||||
-MD -MF $(@:%.o=%.d) -o $@ -c $<
|
||||
$(transform-d-to-p)
|
||||
-include $(GEN:%.o=%.P)
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
|
||||
$(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
|
||||
@mkdir -p $(dir $@)
|
||||
$(hide) $(TARGET_LD) -r -o $@ $^
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
# We rename crtend.o to crtend_android.o to avoid a
|
||||
# name clash between gcc and bionic.
|
||||
GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_android.o
|
||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
|
||||
$(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtend.S
|
||||
@mkdir -p $(dir $@)
|
||||
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
||||
$(hide) $(TARGET_CC) $(libc_crt_target_cflags) \
|
||||
-MD -MF $(@:%.o=%.d) -o $@ -c $<
|
||||
$(transform-d-to-p)
|
||||
-include $(GEN:%.o=%.P)
|
||||
ALL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
|
||||
@@ -429,15 +729,60 @@ ALL_GENERATED_SOURCES += $(GEN)
|
||||
# "WITH_MALLOC_CHECK_LIBC_A := true" to buildspec.mk
|
||||
WITH_MALLOC_CHECK_LIBC_A := $(strip $(WITH_MALLOC_CHECK_LIBC_A))
|
||||
|
||||
# ========================================================
|
||||
# libbionic_ssp.a - stack protector code
|
||||
# ========================================================
|
||||
#
|
||||
# The stack protector code needs to be compiled
|
||||
# with -fno-stack-protector, since it modifies the
|
||||
# stack canary.
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := bionic/ssp.c
|
||||
LOCAL_CFLAGS := $(libc_common_cflags) -fno-stack-protector
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
LOCAL_MODULE := libbionic_ssp
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
|
||||
# ========================================================
|
||||
# libc_netbsd.a - upstream NetBSD C library code
|
||||
# ========================================================
|
||||
#
|
||||
# These files are built with the netbsd-compat.h header file
|
||||
# automatically included.
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := $(libc_upstream_netbsd_src_files)
|
||||
LOCAL_CFLAGS := \
|
||||
$(libc_common_cflags) \
|
||||
-I$(LOCAL_PATH)/upstream-netbsd \
|
||||
-include upstream-netbsd/netbsd-compat.h
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
LOCAL_MODULE := libc_netbsd
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
|
||||
# ========================================================
|
||||
# libc_common.a
|
||||
# ========================================================
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := $(libc_common_src_files)
|
||||
LOCAL_CFLAGS := $(libc_common_cflags)
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
LOCAL_MODULE := libc_common
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
LOCAL_WHOLE_STATIC_LIBRARIES := libbionic_ssp libc_netbsd
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
@@ -457,12 +802,15 @@ include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(libc_arch_static_src_files) \
|
||||
$(libc_static_common_src_files) \
|
||||
bionic/libc_init_static.c
|
||||
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
LOCAL_CFLAGS := $(libc_common_cflags)
|
||||
LOCAL_CFLAGS := $(libc_common_cflags) \
|
||||
-DLIBC_STATIC
|
||||
|
||||
LOCAL_MODULE := libc_nomalloc
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
|
||||
@@ -476,19 +824,16 @@ include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(libc_arch_static_src_files) \
|
||||
$(libc_static_common_src_files) \
|
||||
bionic/dlmalloc.c \
|
||||
bionic/malloc_debug_common.cpp \
|
||||
bionic/libc_init_static.c
|
||||
|
||||
LOCAL_CFLAGS := $(libc_common_cflags)
|
||||
|
||||
ifeq ($(WITH_MALLOC_CHECK_LIBC_A),true)
|
||||
LOCAL_CFLAGS += -DMALLOC_LEAK_CHECK
|
||||
LOCAL_SRC_FILES += bionic/malloc_leak.c.arm
|
||||
endif
|
||||
|
||||
LOCAL_CFLAGS := $(libc_common_cflags) \
|
||||
-DLIBC_STATIC
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
|
||||
LOCAL_MODULE := libc
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
|
||||
@@ -500,16 +845,36 @@ include $(BUILD_STATIC_LIBRARY)
|
||||
# ========================================================
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_CFLAGS := $(libc_common_cflags)
|
||||
# pthread deadlock prediction:
|
||||
# set -DPTHREAD_DEBUG -DPTHREAD_DEBUG_ENABLED=1 to enable support for
|
||||
# pthread deadlock prediction.
|
||||
# Since this code is experimental it is disabled by default.
|
||||
# see libc/bionic/pthread_debug.c for details
|
||||
|
||||
LOCAL_CFLAGS := $(libc_common_cflags) -DPTHREAD_DEBUG -DPTHREAD_DEBUG_ENABLED=0
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(libc_arch_dynamic_src_files) \
|
||||
$(libc_static_common_src_files) \
|
||||
bionic/dlmalloc.c \
|
||||
bionic/malloc_leak.c.arm \
|
||||
bionic/malloc_debug_common.cpp \
|
||||
bionic/pthread_debug.c \
|
||||
bionic/libc_init_dynamic.c
|
||||
|
||||
ifeq ($(TARGET_ARCH),arm)
|
||||
LOCAL_NO_CRT := true
|
||||
LOCAL_CFLAGS += -DCRT_LEGACY_WORKAROUND
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
arch-arm/bionic/crtbegin_so.c \
|
||||
arch-arm/bionic/atexit_legacy.c \
|
||||
$(LOCAL_SRC_FILES) \
|
||||
arch-arm/bionic/crtend_so.S
|
||||
endif
|
||||
|
||||
LOCAL_MODULE:= libc
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
|
||||
# WARNING: The only library libc.so should depend on is libdl.so! If you add other libraries,
|
||||
# make sure to add -Wl,--exclude-libs=libgcc.a to the LOCAL_LDFLAGS for those libraries. This
|
||||
@@ -526,8 +891,16 @@ LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
|
||||
# For all builds, except for the -user build we will enable memory
|
||||
# allocation checking (including memory leaks, buffer overwrites, etc.)
|
||||
# Note that all these checks are also controlled by env. settings
|
||||
# that can enable, or disable specific checks. Note also that some of
|
||||
# the checks are available only in emulator and are implemeted in
|
||||
# libc_malloc_qemu_instrumented.so.
|
||||
ifneq ($(TARGET_BUILD_VARIANT),user)
|
||||
|
||||
# ========================================================
|
||||
# libc_debug.so
|
||||
# libc_malloc_debug_leak.so
|
||||
# ========================================================
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
@@ -538,30 +911,53 @@ LOCAL_CFLAGS := \
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(libc_arch_dynamic_src_files) \
|
||||
bionic/dlmalloc.c \
|
||||
bionic/malloc_leak.c.arm \
|
||||
bionic/libc_init_dynamic.c
|
||||
bionic/malloc_debug_leak.cpp \
|
||||
bionic/malloc_debug_check.cpp \
|
||||
bionic/malloc_debug_check_mapinfo.cpp \
|
||||
bionic/malloc_debug_stacktrace.cpp
|
||||
|
||||
LOCAL_MODULE:= libc_debug
|
||||
LOCAL_MODULE:= libc_malloc_debug_leak
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
|
||||
# WARNING: The only library libc.so should depend on is libdl.so! If you add other libraries,
|
||||
# make sure to add -Wl,--exclude-libs=libgcc.a to the LOCAL_LDFLAGS for those libraries. This
|
||||
# ensures that symbols that are pulled into those new libraries from libgcc.a are not declared
|
||||
# external; if that were the case, then libc would not pull those symbols from libgcc.a as it
|
||||
# should, instead relying on the external symbols from the dependent libraries. That would
|
||||
# create an "cloaked" dependency on libgcc.a in libc though the libraries, which is not what
|
||||
# you wanted!
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := libdl
|
||||
LOCAL_SHARED_LIBRARIES := libc libdl
|
||||
LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
# Don't prelink
|
||||
LOCAL_PRELINK_MODULE := false
|
||||
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
|
||||
|
||||
# Don't install on release build
|
||||
LOCAL_MODULE_TAGS := eng
|
||||
LOCAL_MODULE_TAGS := eng debug
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
|
||||
# ========================================================
|
||||
# libc_malloc_debug_qemu.so
|
||||
# ========================================================
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_CFLAGS := \
|
||||
$(libc_common_cflags) \
|
||||
-DMALLOC_QEMU_INSTRUMENT
|
||||
|
||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
bionic/malloc_debug_qemu.cpp
|
||||
|
||||
LOCAL_MODULE:= libc_malloc_debug_qemu
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := libc libdl
|
||||
LOCAL_WHOLE_STATIC_LIBRARIES := libc_common
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
|
||||
# Don't install on release build
|
||||
LOCAL_MODULE_TAGS := eng debug
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
endif #!user
|
||||
|
||||
|
||||
# ========================================================
|
||||
include $(call all-makefiles-under,$(LOCAL_PATH))
|
||||
|
441
libc/Jamfile
441
libc/Jamfile
@@ -1,441 +0,0 @@
|
||||
# This file is used to build the Bionic library with the Jam build
|
||||
# tool. For info, see www.perforce.com/jam/jam.html
|
||||
#
|
||||
|
||||
BIONIC_TOP ?= $(DOT) ;
|
||||
|
||||
DEBUG = 1 ;
|
||||
|
||||
# pattern used for automatic heade inclusion detection
|
||||
HDRPATTERN = "^[ ]*#[ ]*include[ ]*[<\"]([^\">]*)[\">].*$" ;
|
||||
|
||||
|
||||
# debugging support, simply define the DEBUG variable to activate verbose output
|
||||
rule Debug
|
||||
{
|
||||
if $(DEBUG) {
|
||||
Echo $(1) ;
|
||||
}
|
||||
}
|
||||
|
||||
# return all elements from $(1) that are not in $(2)
|
||||
rule Filter list : filter
|
||||
{
|
||||
local result = ;
|
||||
local item ;
|
||||
for item in $(list) {
|
||||
if ! $(item) in $(filter) {
|
||||
result += $(item) ;
|
||||
}
|
||||
}
|
||||
return $(result) ;
|
||||
}
|
||||
|
||||
|
||||
# reverse a list of elements
|
||||
rule Reverse list
|
||||
{
|
||||
local result = ;
|
||||
local item ;
|
||||
|
||||
for item in $(list) {
|
||||
result = $(item) $(result) ;
|
||||
}
|
||||
return $(result) ;
|
||||
}
|
||||
|
||||
|
||||
# decompose a path into a list of elements
|
||||
rule PathDecompose dir
|
||||
{
|
||||
local result ;
|
||||
|
||||
while $(dir:D)
|
||||
{
|
||||
if ! $(dir:BS) { # for rooted paths like "/foo"
|
||||
break ;
|
||||
}
|
||||
result = $(dir:BS) $(result) ;
|
||||
dir = $(dir:D) ;
|
||||
}
|
||||
result = $(dir) $(result) ;
|
||||
return $(result) ;
|
||||
}
|
||||
|
||||
|
||||
# simply a file path, i.e. get rid of . or .. when possible
|
||||
rule _PathSimplify dir
|
||||
{
|
||||
local result = ;
|
||||
local dir2 d ;
|
||||
|
||||
dir = [ PathDecompose $(dir) ] ;
|
||||
|
||||
# get rid of any single dot
|
||||
dir2 = ;
|
||||
for d in $(dir) {
|
||||
if $(d) = "." {
|
||||
continue ;
|
||||
}
|
||||
dir2 += $(d) ;
|
||||
}
|
||||
|
||||
# get rid of .. when possible
|
||||
for d in $(dir2) {
|
||||
if $(d) = ".." && $(result) {
|
||||
result = $(result[2-]) ;
|
||||
}
|
||||
else
|
||||
result = $(d) $(result) ;
|
||||
}
|
||||
|
||||
# now invert the result
|
||||
result = [ Reverse $(result) ] ;
|
||||
if ! $(result) {
|
||||
result = "." ;
|
||||
}
|
||||
return $(result:J="/") ;
|
||||
}
|
||||
|
||||
|
||||
rule PathSimplify dirs
|
||||
{
|
||||
local result ;
|
||||
local d ;
|
||||
for d in $(dirs) {
|
||||
result += [ _PathSimplify $(d) ] ;
|
||||
}
|
||||
return $(result) ;
|
||||
}
|
||||
|
||||
|
||||
# retrieve list of subdirectories
|
||||
rule ListSubDirs paths
|
||||
{
|
||||
local result = ;
|
||||
local entry ;
|
||||
for entry in [ Glob $(paths) : * ] {
|
||||
if ! $(entry:S) {
|
||||
result += $(entry) ;
|
||||
}
|
||||
}
|
||||
return [ PathSimplify $(result) ] ;
|
||||
}
|
||||
|
||||
|
||||
# retrieve list of sources in a given directory
|
||||
rule ListSources path
|
||||
{
|
||||
return [ Glob $(path) : *.S *.c ] ;
|
||||
}
|
||||
|
||||
|
||||
# find the prebuilt directory
|
||||
#
|
||||
if ! $(TOP) {
|
||||
Echo "Please define TOP as the root of your device build tree" ;
|
||||
Exit ;
|
||||
}
|
||||
|
||||
Debug "OS is" $(OS) ;
|
||||
Debug "CPU is" $(CPU) ;
|
||||
|
||||
if $(OS) = LINUX
|
||||
{
|
||||
PREBUILT = $(TOP)/prebuilt/Linux ;
|
||||
}
|
||||
else if $(OS) = MACOSX
|
||||
{
|
||||
switch $(CPU) {
|
||||
case i386 : PREBUILT = $(TOP)/prebuilt/darwin-x86 ; break ;
|
||||
case ppc : PREBUILT = $(TOP)/prebuilt/darwin-ppc ; break ;
|
||||
case * : Echo "unsupported CPU" "$(CPU) !!" ;
|
||||
Echo "Please contact digit@google.com for help" ;
|
||||
Exit ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Echo "Unsupported operating system" $(OS) ;
|
||||
Echo "Please contact digit@google.com for help" ;
|
||||
Exit ;
|
||||
}
|
||||
|
||||
Debug "TOP is" $(TOP) ;
|
||||
Debug "PREBUILT is" $(PREBUILT) ;
|
||||
|
||||
|
||||
# check architectures and setup toolchain variables
|
||||
#
|
||||
SUPPORTED_ARCHS = x86 arm ;
|
||||
|
||||
ARCH ?= $(SUPPORTED_ARCHS) ;
|
||||
|
||||
if ! $(ARCH) in $(SUPPORTED_ARCHS) {
|
||||
Echo "The variable ARCH contains an unsupported value, use one or more of these instead" ;
|
||||
Echo "separated by spaces:" $(SUPPORTED_ARCHS) ;
|
||||
Exit ;
|
||||
}
|
||||
|
||||
x86_TOOLSET_PREFIX ?= "" ;
|
||||
arm_TOOLSET_PREFIX ?= $(TOP)/prebuilt/Linux/toolchain-4.1.1/bin/arm-elf- ;
|
||||
|
||||
for arch in $(ARCH) {
|
||||
CC_$(arch) = $($(arch)_TOOLSET_PREFIX)gcc ;
|
||||
C++_$(arch) = $($(arch)_TOOLSET_PREFIX)g++ ;
|
||||
AR_$(arch) = $($(arch)_TOOLSET_PREFIX)ar ;
|
||||
}
|
||||
|
||||
|
||||
# the list of arch-independent source subdirectories
|
||||
BIONIC_SRC_SUBDIRS = string ;
|
||||
BIONIC_x86_SUBDIRS = ;
|
||||
BIONIC_arm_SUBDIRS = ;
|
||||
|
||||
CFLAGS = -O0 -g -W ;
|
||||
|
||||
|
||||
|
||||
# find sources in a given list of subdirectories
|
||||
rule FindSources dirs
|
||||
{
|
||||
local dir ;
|
||||
|
||||
for dir in $(dirs)
|
||||
{
|
||||
local LOCAL_SRC NO_LOCAL_SRC ;
|
||||
|
||||
if [ Glob $(dir) : rules.jam ] {
|
||||
include $(dir)/rules.jam ;
|
||||
if $(LOCAL_SRC) {
|
||||
_sources = $(LOCAL_SRC) ;
|
||||
}
|
||||
else {
|
||||
_sources = [ Glob $(dir) : *.S *.c ] ;
|
||||
_sources = $(_sources:BS) ;
|
||||
}
|
||||
if $(NO_LOCAL_SRC) {
|
||||
_sources = [ Filter $(_sources) : $(NO_LOCAL_SRC) ] ;
|
||||
}
|
||||
sources += $(dir)/$(_sources) ;
|
||||
}
|
||||
else
|
||||
sources += [ ListSources $(dir) ] ;
|
||||
}
|
||||
}
|
||||
|
||||
# Compile a given object file from a source
|
||||
rule Compile object : source
|
||||
{
|
||||
Depends $(object) : $(source) ;
|
||||
Depends bionic : $(object) ;
|
||||
Clean clean : $(object) ;
|
||||
|
||||
MakeLocate $(object) : $(OUT) ;
|
||||
|
||||
|
||||
CC on $(object) = $(CC_$(arch)) ;
|
||||
CFLAGS on $(object) = $(CFLAGS) ;
|
||||
INCLUDES on $(object) = $(INCLUDES) ;
|
||||
DEFINES on $(object) = $(DEFINES) ;
|
||||
|
||||
HDRRULE on $(>) = HdrRule ;
|
||||
HDRSCAN on $(>) = $(HDRPATTERN) ;
|
||||
HDRSEARCH on $(>) = $(INCLUDES) ;
|
||||
HDRGRIST on $(>) = $(HDRGRIST) ;
|
||||
}
|
||||
|
||||
|
||||
actions Compile
|
||||
{
|
||||
$(CC) -c -o $(1) $(CFLAGS) -I$(INCLUDES) -D$(DEFINES) $(2)
|
||||
}
|
||||
|
||||
|
||||
rule RmTemps
|
||||
{
|
||||
Temporary $(2) ;
|
||||
}
|
||||
|
||||
actions quietly updated piecemeal together RmTemps
|
||||
{
|
||||
rm -f $(2)
|
||||
}
|
||||
|
||||
actions Archive
|
||||
{
|
||||
$(AR) ru $(1) $(2)
|
||||
}
|
||||
|
||||
rule Library library : objects
|
||||
{
|
||||
local obj ;
|
||||
|
||||
if ! $(library:S) {
|
||||
library = $(library:S=.a) ;
|
||||
}
|
||||
library = $(library:G=<$(arch)>) ;
|
||||
|
||||
Depends all : $(library) ;
|
||||
|
||||
if ! $(library:D) {
|
||||
MakeLocate $(library) $(library)($(objects:BS)) : $(OUT) ;
|
||||
}
|
||||
|
||||
Depends $(library) : $(library)($(objects:BS)) ;
|
||||
for obj in $(objects) {
|
||||
Depends $(library)($(obj:BS)) : $(obj) ;
|
||||
}
|
||||
|
||||
Clean clean : $(library) ;
|
||||
|
||||
AR on $(library) = $(AR_$(arch)) ;
|
||||
Archive $(library) : $(objects) ;
|
||||
|
||||
RmTemps $(library) : $(objects) ;
|
||||
}
|
||||
|
||||
|
||||
rule ProcessDir
|
||||
{
|
||||
local CFLAGS = $(CFLAGS) ;
|
||||
local DEFINES = $(DEFINES) ;
|
||||
local INCLUDES = $(INCLUDES) ;
|
||||
local local_rules = [ Glob $(1) : rules.jam ] ;
|
||||
local source sources ;
|
||||
|
||||
if $(local_rules) {
|
||||
local LOCAL_CFLAGS LOCAL_DEFINES LOCAL_INCLUDES LOCAL_SRC NO_LOCAL_SRC ;
|
||||
|
||||
include $(local_rules) ;
|
||||
CFLAGS += $(LOCAL_CFLAGS) ;
|
||||
DEFINES += $(LOCAL_DEFINES) ;
|
||||
INCLUDES += $(LOCAL_INCLUDES) ;
|
||||
|
||||
if $(LOCAL_SRC) {
|
||||
sources = $(LOCAL_SRC) ;
|
||||
}
|
||||
else {
|
||||
sources = [ Glob $(1) : *.S *.c ] ;
|
||||
sources = $(sources:BS) ;
|
||||
}
|
||||
|
||||
if $(NO_LOCAL_SRC) {
|
||||
sources = [ Filter $(sources) : $(NO_LOCAL_SRC) ] ;
|
||||
}
|
||||
|
||||
sources = $(1)/$(sources) ;
|
||||
}
|
||||
else
|
||||
sources = [ Glob $(1) : *.S *.c ] ;
|
||||
|
||||
for source in $(sources) {
|
||||
local name = $(source:B) ;
|
||||
|
||||
if $(source:S) = ".S" {
|
||||
# record the list of assembler sources
|
||||
ASSEMBLER_SOURCES += $(name) ;
|
||||
}
|
||||
else if $(source:S) = ".c" && $(name) in $(ASSEMBLER_SOURCES) {
|
||||
# skip C source file if corresponding assembler exists
|
||||
continue ;
|
||||
}
|
||||
|
||||
objname = <$(arch)>$(name).o ;
|
||||
|
||||
Compile $(objname) : $(source) ;
|
||||
ALL_OBJECTS += $(objname) ;
|
||||
}
|
||||
}
|
||||
|
||||
rule ProcessDirs
|
||||
{
|
||||
local dir ;
|
||||
for dir in $(1) {
|
||||
ProcessDir $(dir) ;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDES_x86 = /usr/src/linux/include ;
|
||||
|
||||
INCLUDES_arm = ../kernel_headers
|
||||
include/arch/arm
|
||||
include/bits32
|
||||
;
|
||||
|
||||
INCLUDES = include stdio string stdlib .
|
||||
../msun/include
|
||||
;
|
||||
|
||||
DEFINES = ANDROID_CHANGES
|
||||
USE_LOCKS
|
||||
REALLOC_ZERO_BYTES_FREES
|
||||
_LIBC=1
|
||||
SOFTFLOAT
|
||||
FLOATING_POINT
|
||||
NEED_PSELECT=1
|
||||
ANDROID
|
||||
;
|
||||
|
||||
CFLAGS_x86 = ;
|
||||
|
||||
|
||||
for arch in $(ARCH)
|
||||
{
|
||||
local ARCH_DIR = $(BIONIC_TOP)/arch-$(arch) ;
|
||||
local INCLUDES = $(INCLUDES_$(arch)) $(ARCH_DIR)/include $(INCLUDES) ;
|
||||
local DEFINES = $(DEFINES_$(arch)) $(DEFINES) ARCH=$(arch) ;
|
||||
local CFLAGS = $(CFLAGS) $(CFLAGS_$(arch)) ;
|
||||
local OUT = out/$(arch) ;
|
||||
local ASSEMBLER_SOURCES ALL_OBJECTS ;
|
||||
|
||||
ProcessDirs [ ListSubDirs $(ARCH_DIR) ] ;
|
||||
ProcessDirs stdlib stdio unistd string tzcode inet ;
|
||||
ProcessDirs [ ListSubDirs netbsd ] ;
|
||||
ProcessDirs bionic ;
|
||||
|
||||
Library bionic : $(ALL_OBJECTS) ;
|
||||
}
|
||||
|
||||
BIONIC_SEARCH = $(BIONIC_TOP)/include ;
|
||||
|
||||
|
||||
|
||||
# /HdrRule source : headers ;
|
||||
#
|
||||
# Arranges the proper dependencies when the file _source_ includes the files
|
||||
# _headers_ through the #include C preprocessor directive
|
||||
#
|
||||
# this rule is not intendend to be called explicitely. It is called
|
||||
# automatically during header scanning on sources handled by the @Object
|
||||
# rule (e.g. sources in @Main or @Library rules)
|
||||
#
|
||||
rule HdrRule
|
||||
{
|
||||
# HdrRule source : headers ;
|
||||
|
||||
# N.B. This rule is called during binding, potentially after
|
||||
# the fate of many targets has been determined, and must be
|
||||
# used with caution: don't add dependencies to unrelated
|
||||
# targets, and don't set variables on $(<).
|
||||
|
||||
# Tell Jam that anything depending on $(<) also depends on $(>),
|
||||
# set SEARCH so Jam can find the headers, but then say we don't
|
||||
# care if we can't actually find the headers (they may have been
|
||||
# within ifdefs),
|
||||
|
||||
local s = $(>:G=$(HDRGRIST:E)) ;
|
||||
|
||||
Includes $(<) : $(s) ;
|
||||
SEARCH on $(s) = $(HDRSEARCH) ;
|
||||
NoCare $(s) ;
|
||||
|
||||
# Propagate on $(<) to $(>)
|
||||
|
||||
HDRSEARCH on $(s) = $(HDRSEARCH) ;
|
||||
HDRSCAN on $(s) = $(HDRSCAN) ;
|
||||
HDRRULE on $(s) = $(HDRRULE) ;
|
||||
HDRGRIST on $(s) = $(HDRGRIST) ;
|
||||
}
|
||||
|
||||
|
4238
libc/NOTICE
4238
libc/NOTICE
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,5 @@
|
||||
Welcome to Bionic, Android small and custom C library for the Android platform
|
||||
Welcome to Bionic, Android's small and custom C library for the Android
|
||||
platform.
|
||||
|
||||
Bionic is mainly a port of the BSD C library to our Linux kernel with the
|
||||
following additions/changes:
|
||||
|
@@ -1,10 +1,10 @@
|
||||
# this file is used to list all the syscalls that will be supported by
|
||||
# the Bionic C library. It is used to automatically generate the syscall
|
||||
# stubs, the list of syscall constants (__NR_xxxx) and the content of <linux/_unitsd.h>
|
||||
# stubs, the list of syscall constants (__NR_xxxx) and the content of <linux/_unistd.h>
|
||||
#
|
||||
# each non comment line has the following format:
|
||||
#
|
||||
# return_type func_name[:syscall_name[:call_id]]([parameter_list]) (#syscall_number|stub)
|
||||
# return_type func_name[:syscall_name[:call_id]]([parameter_list]) (syscall_number|"stub")
|
||||
#
|
||||
# note that:
|
||||
# - syscall_name correspond to the name of the syscall, which may differ from
|
||||
@@ -22,79 +22,110 @@
|
||||
# assembler template for the syscall; it's up to the bionic implementation to provide
|
||||
# a relevant C stub
|
||||
#
|
||||
# - additionally, if the syscall number is different amoung ARM, and x86, MIPS use:
|
||||
# return_type funcname[:syscall_name](parameters) arm_number,x86_number,mips_number
|
||||
#
|
||||
# the file is processed by a python script named gensyscalls.py
|
||||
#
|
||||
|
||||
# process management
|
||||
void _exit:exit_group (int) 248,252
|
||||
void _exit_thread:exit (int) 1
|
||||
void _exit:exit_group (int) 248,252,246
|
||||
void _exit_thread:exit (int) 1
|
||||
pid_t __fork:fork (void) 2
|
||||
pid_t _waitpid:waitpid (pid_t, int*, int, struct rusage*) -1,7
|
||||
int waitid(int, pid_t, struct siginfo_t*, int,void*) 280,284
|
||||
pid_t __clone:clone(int (*fn)(void*), void *child_stack, int flags, void *arg) 120
|
||||
pid_t _waitpid:waitpid (pid_t, int*, int, struct rusage*) -1,7,7
|
||||
int __waitid:waitid(int, pid_t, struct siginfo_t*, int,void*) 280,284,278
|
||||
|
||||
# NOTE: this system call is never called directly, but we list it there
|
||||
# to have __NR_clone properly defined.
|
||||
#
|
||||
pid_t __sys_clone:clone (int, void*, int*, void*, int*) 120
|
||||
|
||||
int execve (const char*, char* const*, char* const*) 11
|
||||
|
||||
int setuid:setuid32 (uid_t) 213
|
||||
uid_t getuid:getuid32 () 199
|
||||
gid_t getgid:getgid32 () 200
|
||||
uid_t geteuid:geteuid32 () 201
|
||||
gid_t getegid:getegid32 () 202
|
||||
uid_t getresuid:getresuid32 () 209
|
||||
gid_t getresgid:getresgid32 () 211
|
||||
pid_t gettid() 224
|
||||
int getgroups:getgroups32(int, gid_t *) 205
|
||||
int __setuid:setuid32 (uid_t) 213,213,-1
|
||||
int __setuid:setuid (uid_t) -1,-1,23
|
||||
uid_t getuid:getuid32 () 199,199,-1
|
||||
uid_t getuid:getuid () -1,-1,24
|
||||
gid_t getgid:getgid32 () 200,200,-1
|
||||
gid_t getgid:getgid () -1,-1,47
|
||||
uid_t geteuid:geteuid32 () 201,201,-1
|
||||
uid_t geteuid:geteuid () -1,-1,49
|
||||
gid_t getegid:getegid32 () 202,202,-1
|
||||
gid_t getegid:getegid () -1,-1,50
|
||||
uid_t getresuid:getresuid32 (uid_t *ruid, uid_t *euid, uid_t *suid) 209,209,-1
|
||||
uid_t getresuid:getresuid (uid_t *ruid, uid_t *euid, uid_t *suid) -1,-1,186
|
||||
gid_t getresgid:getresgid32 (gid_t *rgid, gid_t *egid, gid_t *sgid) 211,211,-1
|
||||
gid_t getresgid:getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid) -1,-1,191
|
||||
pid_t gettid() 224,224,222
|
||||
ssize_t readahead(int, off64_t, size_t) 225,225,223
|
||||
int getgroups:getgroups32(int, gid_t *) 205,205,-1
|
||||
int getgroups:getgroups(int, gid_t *) -1,-1,80
|
||||
pid_t getpgid(pid_t) 132
|
||||
pid_t getppid() 64
|
||||
pid_t getppid() 64
|
||||
pid_t getsid(pid_t) 147
|
||||
pid_t setsid() 66
|
||||
int setgid:setgid32(gid_t) 214
|
||||
int setgid:setgid32(gid_t) 214,214,-1
|
||||
int setgid:setgid(gid_t) -1,-1,46
|
||||
int seteuid:seteuid32(uid_t) stub
|
||||
int setreuid:setreuid32(uid_t, uid_t) 203
|
||||
int setresuid:setresuid32(uid_t, uid_t, uid_t) 208
|
||||
int setresgid:setresgid32(gid_t, gid_t, gid_t) 210
|
||||
int __setreuid:setreuid32(uid_t, uid_t) 203,203,-1
|
||||
int __setreuid:setreuid(uid_t, uid_t) -1,-1,70
|
||||
int __setresuid:setresuid32(uid_t, uid_t, uid_t) 208,208,-1
|
||||
int __setresuid:setresuid(uid_t, uid_t, uid_t) -1,-1,185
|
||||
int setresgid:setresgid32(gid_t, gid_t, gid_t) 210,210,-1
|
||||
int setresgid:setresgid(gid_t, gid_t, gid_t) -1,-1,190
|
||||
void* __brk:brk(void*) 45
|
||||
# see comments in arch-arm/bionic/kill.S to understand why we don't generate an ARM stub for kill/tkill
|
||||
int kill(pid_t, int) -1,37
|
||||
int tkill(pid_t tid, int sig) -1,238
|
||||
int kill(pid_t, int) -1,37,37
|
||||
int tkill(pid_t tid, int sig) -1,238,236
|
||||
int tgkill(pid_t tgid, pid_t tid, int sig) -1,270,266
|
||||
int __ptrace:ptrace(int request, int pid, void* addr, void* data) 26
|
||||
int __set_thread_area:set_thread_area(void* user_desc) -1,243
|
||||
int __set_thread_area:set_thread_area(void* user_desc) -1,243,283
|
||||
int __getpriority:getpriority(int, int) 96
|
||||
int setpriority(int, int, int) 97
|
||||
int setrlimit(int resource, const struct rlimit *rlp) 75
|
||||
int getrlimit:ugetrlimit(int resource, struct rlimit *rlp) 191
|
||||
int getrlimit:ugetrlimit(int resource, struct rlimit *rlp) 191,191,-1
|
||||
int getrlimit:getrlimit(int resource, struct rlimit *rlp) -1,-1,76
|
||||
int getrusage(int who, struct rusage* r_usage) 77
|
||||
int setgroups:setgroups32(int, const gid_t *) 206
|
||||
int setgroups:setgroups32(int, const gid_t *) 206,206,-1
|
||||
int setgroups:setgroups(int, const gid_t *) -1,-1,81
|
||||
pid_t getpgrp(void) stub
|
||||
int setpgid(pid_t, pid_t) 57
|
||||
pid_t vfork(void) 190,-1
|
||||
int setregid:setregid32(gid_t, gid_t) 204
|
||||
pid_t vfork(void) 190,-1,-1
|
||||
int setregid:setregid32(gid_t, gid_t) 204,204,-1
|
||||
int setregid:setregid(gid_t, gid_t) -1,-1,71
|
||||
int chroot(const char *) 61
|
||||
int prctl(int option, unsigned int arg2, unsigned int arg3, unsigned int arg4, unsigned int arg5) 172
|
||||
int capget(cap_user_header_t header, cap_user_data_t data) 184
|
||||
int capset(cap_user_header_t header, const cap_user_data_t data) 185
|
||||
# IMPORTANT: Even though <sys/prctl.h> declares prctl(int,...), the syscall stub must take 6 arguments
|
||||
# to match the kernel implementation.
|
||||
int prctl(int option, unsigned int arg2, unsigned int arg3, unsigned int arg4, unsigned int arg5) 172,172,192
|
||||
int capget(cap_user_header_t header, cap_user_data_t data) 184,184,204
|
||||
int capset(cap_user_header_t header, const cap_user_data_t data) 185,185,205
|
||||
int sigaltstack(const stack_t*, stack_t*) 186,186,206
|
||||
int acct(const char* filepath) 51
|
||||
|
||||
# file descriptors
|
||||
ssize_t read (int, void*, size_t) 3
|
||||
ssize_t write (int, const void*, size_t) 4
|
||||
ssize_t __pread64:pread64 (int, void *, size_t, off_t, off_t) 180
|
||||
ssize_t __pwrite64:pwrite64 (int, void *, size_t, off_t, off_t) 181
|
||||
ssize_t pread64 (int, void *, size_t, off64_t) 180,180,200
|
||||
ssize_t pwrite64 (int, void *, size_t, off64_t) 181,181,201
|
||||
int __open:open (const char*, int, mode_t) 5
|
||||
int __openat:openat (int, const char*, int, mode_t) 322,295
|
||||
int __openat:openat (int, const char*, int, mode_t) 322,295,288
|
||||
int close (int) 6
|
||||
int creat(const char*, mode_t) stub
|
||||
off_t lseek(int, off_t, int) 19
|
||||
int __llseek:_llseek (int, unsigned long, unsigned long, loff_t*, int) 140
|
||||
pid_t getpid () 20
|
||||
void * mmap(void *, size_t, int, int, int, long) stub
|
||||
void * __mmap2:mmap2(void*, size_t, int, int, int, long) 192
|
||||
void * __mmap2:mmap2(void*, size_t, int, int, int, long) 192,192,210
|
||||
int munmap(void *, size_t) 91
|
||||
void * mremap(void *, size_t, size_t, unsigned long) 163
|
||||
void * mremap(void *, size_t, size_t, unsigned long) 163,163,167
|
||||
int msync(const void *, size_t, int) 144
|
||||
int mprotect(const void *, size_t, int) 125
|
||||
int madvise(const void *, size_t, int) 220,219
|
||||
int mlock(const void *addr, size_t len) 150
|
||||
int munlock(const void *addr, size_t len) 151
|
||||
int mincore(void* start, size_t length, unsigned char* vec) 219,218
|
||||
int madvise(const void *, size_t, int) 220,219,218
|
||||
int mlock(const void *addr, size_t len) 150,150,154
|
||||
int munlock(const void *addr, size_t len) 151,151,155
|
||||
int mlockall(int flags) 152,152,156
|
||||
int munlockall() 153,153,157
|
||||
int mincore(void* start, size_t length, unsigned char* vec) 219,218,217
|
||||
int __ioctl:ioctl(int, int, void *) 54
|
||||
int readv(int, const struct iovec *, int) 145
|
||||
int writev(int, const struct iovec *, int) 146
|
||||
@@ -102,119 +133,149 @@ int __fcntl:fcntl(int, int, void*) 55
|
||||
int flock(int, int) 143
|
||||
int fchmod(int, mode_t) 94
|
||||
int dup(int) 41
|
||||
int pipe(int *) 42
|
||||
int pipe(int *) 42,42,-1
|
||||
int pipe2(int *, int) 359,331,328
|
||||
int dup2(int, int) 63
|
||||
int select:_newselect(int, struct fd_set *, struct fd_set *, struct fd_set *, struct timeval *) 142
|
||||
int ftruncate(int, off_t) 93
|
||||
int getdents:getdents64(unsigned int, struct dirent *, unsigned int) 217,220
|
||||
int ftruncate64(int, off64_t) 194,194,212
|
||||
int getdents:getdents64(unsigned int, struct dirent *, unsigned int) 217,220,219
|
||||
int fsync(int) 118
|
||||
int fchown:fchown32(int, uid_t, gid_t) 207
|
||||
int fdatasync(int) 148,148,152
|
||||
int fchown:fchown32(int, uid_t, gid_t) 207,207,-1
|
||||
int fchown:fchown(int, uid_t, gid_t) -1,-1,95
|
||||
void sync(void) 36
|
||||
int __fcntl64:fcntl64(int, int, void *) 221
|
||||
int fstatfs:fstatfs64(int, size_t, struct statfs *) 267,269
|
||||
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count) 187
|
||||
int fstatat:fstatat64(int dirfd, const char *path, struct stat *buf, int flags) 327,300
|
||||
int mkdirat(int dirfd, const char *pathname, mode_t mode) 323,296
|
||||
int fchownat(int dirfd, const char *path, uid_t owner, gid_t group, int flags) 325,298
|
||||
int fchmodat(int dirfd, const char *path, mode_t mode, int flags) 333,306
|
||||
int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath) 329,302
|
||||
int __fcntl64:fcntl64(int, int, void *) 221,221,220
|
||||
int __fstatfs64:fstatfs64(int, size_t, struct statfs *) 267,269,256
|
||||
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count) 187,187,207
|
||||
int fstatat:fstatat64(int dirfd, const char *path, struct stat *buf, int flags) 327,300,293
|
||||
int mkdirat(int dirfd, const char *pathname, mode_t mode) 323,296,289
|
||||
int fchownat(int dirfd, const char *path, uid_t owner, gid_t group, int flags) 325,298,291
|
||||
int fchmodat(int dirfd, const char *path, mode_t mode, int flags) 333,306,299
|
||||
int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath) 329,302,295
|
||||
int fsetxattr(int, const char *, const void *, size_t, int) 228,228,226
|
||||
ssize_t fgetxattr(int, const char *, void *, size_t) 231,231,229
|
||||
ssize_t flistxattr(int, char *, size_t) 234,234,232
|
||||
int fremovexattr(int, const char *) 237,237,235
|
||||
|
||||
# file system
|
||||
int link (const char*, const char*) 9
|
||||
int unlink (const char*) 10
|
||||
int unlinkat (int, const char *, int) 328,301
|
||||
int unlinkat (int, const char *, int) 328,301,294
|
||||
int chdir (const char*) 12
|
||||
int mknod (const char*, mode_t, dev_t) 14
|
||||
int chmod (const char*,mode_t) 15
|
||||
int chown:chown32(const char *, uid_t, gid_t) 212
|
||||
int lchown:lchown32 (const char*, uid_t, gid_t) 198
|
||||
int chown:chown32(const char *, uid_t, gid_t) 212,212,-1
|
||||
int chown:chown(const char *, uid_t, gid_t) -1,-1,202
|
||||
int lchown:lchown32 (const char*, uid_t, gid_t) 198,198,-1
|
||||
int lchown:lchown (const char*, uid_t, gid_t) -1,-1,16
|
||||
int mount (const char*, const char*, const char*, unsigned long, const void*) 21
|
||||
int umount(const char*) stub
|
||||
int umount2 (const char*, int) 52
|
||||
int fstat:fstat64(int, struct stat*) 197
|
||||
int stat:stat64(const char *, struct stat *) 195
|
||||
int lstat:lstat64(const char *, struct stat *) 196
|
||||
int fstat:fstat64(int, struct stat*) 197,197,215
|
||||
int stat:stat64(const char *, struct stat *) 195,195,213
|
||||
int lstat:lstat64(const char *, struct stat *) 196,196,214
|
||||
int mkdir(const char *, mode_t) 39
|
||||
int readlink(const char *, char *, size_t) 85
|
||||
int rmdir(const char *) 40
|
||||
int rename(const char *, const char *) 38
|
||||
int __getcwd:getcwd(char * buf, size_t size) 183
|
||||
int __getcwd:getcwd(char * buf, size_t size) 183,183,203
|
||||
int access(const char *, int) 33
|
||||
int faccessat(int, const char *, int, int) 334,307,300
|
||||
int symlink(const char *, const char *) 83
|
||||
int fchdir(int) 133
|
||||
int truncate(const char*, off_t) 92
|
||||
int __statfs64:statfs64(const char *, size_t, struct statfs *) 266,268
|
||||
int setxattr(const char *, const char *, const void *, size_t, int) 226,226,224
|
||||
int lsetxattr(const char *, const char *, const void *, size_t, int) 227,227,225
|
||||
ssize_t getxattr(const char *, const char *, void *, size_t) 229,229,227
|
||||
ssize_t lgetxattr(const char *, const char *, void *, size_t) 230,230,228
|
||||
ssize_t listxattr(const char *, char *, size_t) 232,232,230
|
||||
ssize_t llistxattr(const char *, char *, size_t) 233,233,231
|
||||
int removexattr(const char *, const char *) 235,235,233
|
||||
int lremovexattr(const char *, const char *) 236,236,234
|
||||
int __statfs64:statfs64(const char *, size_t, struct statfs *) 266,268,255
|
||||
long unshare(unsigned long) 337,310,303
|
||||
|
||||
# time
|
||||
int pause () 29
|
||||
int gettimeofday(struct timeval*, struct timezone*) 78
|
||||
int settimeofday(const struct timeval*, const struct timezone*) 79
|
||||
clock_t times(struct tms *) 43
|
||||
int nanosleep(const struct timespec *, struct timespec *) 162
|
||||
int clock_gettime(clockid_t clk_id, struct timespec *tp) 263,265
|
||||
int clock_settime(clockid_t clk_id, const struct timespec *tp) 262,264
|
||||
int clock_getres(clockid_t clk_id, struct timespec *res) 264,266
|
||||
int clock_nanosleep(const struct timespec *req, struct timespec *rem) 265,267
|
||||
int nanosleep(const struct timespec *, struct timespec *) 162,162,166
|
||||
int clock_gettime(clockid_t clk_id, struct timespec *tp) 263,265,263
|
||||
int clock_settime(clockid_t clk_id, const struct timespec *tp) 262,264,262
|
||||
int clock_getres(clockid_t clk_id, struct timespec *res) 264,266,264
|
||||
int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *req, struct timespec *rem) 265,267,265
|
||||
int getitimer(int, const struct itimerval *) 105
|
||||
int setitimer(int, const struct itimerval *, struct itimerval *) 104
|
||||
int __timer_create:timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid) 257,259
|
||||
int __timer_settime:timer_settime(timer_t, int, const struct itimerspec*, struct itimerspec*) 258,260
|
||||
int __timer_gettime:timer_gettime(timer_t, struct itimerspec*) 259,261
|
||||
int __timer_getoverrun:timer_getoverrun(timer_t) 260,262
|
||||
int __timer_delete:timer_delete(timer_t) 261,263
|
||||
int utimes(const char*, const struct timeval tvp[2]) 269, 271
|
||||
int __timer_create:timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid) 257,259,257
|
||||
int __timer_settime:timer_settime(timer_t, int, const struct itimerspec*, struct itimerspec*) 258,260,258
|
||||
int __timer_gettime:timer_gettime(timer_t, struct itimerspec*) 259,261,259
|
||||
int __timer_getoverrun:timer_getoverrun(timer_t) 260,262,260
|
||||
int __timer_delete:timer_delete(timer_t) 261,263,261
|
||||
int utimes(const char*, const struct timeval tvp[2]) 269,271,267
|
||||
int utimensat(int, const char *, const struct timespec times[2], int) 348,320,316
|
||||
|
||||
# signals
|
||||
int sigaction(int, const struct sigaction *, struct sigaction *) 67
|
||||
int sigprocmask(int, const sigset_t *, sigset_t *) 126
|
||||
int __sigsuspend:sigsuspend(int unused1, int unused2, unsigned mask) 72
|
||||
int __rt_sigaction:rt_sigaction (int sig, const struct sigaction *act, struct sigaction *oact, size_t sigsetsize) 174
|
||||
int __rt_sigprocmask:rt_sigprocmask (int how, const sigset_t *set, sigset_t *oset, size_t sigsetsize) 175
|
||||
int __rt_sigtimedwait:rt_sigtimedwait(const sigset_t *set, struct siginfo_t *info, struct timespec_t *timeout, size_t sigset_size) 177
|
||||
int __sigsuspend:sigsuspend(int unused1, int unused2, unsigned mask) 72,72,-1
|
||||
int __sigsuspend:sigsuspend(const sigset_t *mask) -1,-1,72
|
||||
int __rt_sigaction:rt_sigaction (int sig, const struct sigaction *act, struct sigaction *oact, size_t sigsetsize) 174,174,194
|
||||
int __rt_sigprocmask:rt_sigprocmask (int how, const sigset_t *set, sigset_t *oset, size_t sigsetsize) 175,175,195
|
||||
int __rt_sigtimedwait:rt_sigtimedwait(const sigset_t *set, struct siginfo_t *info, struct timespec_t *timeout, size_t sigset_size) 177,177,197
|
||||
int sigpending(sigset_t *) 73
|
||||
|
||||
# sockets
|
||||
int socket(int, int, int) 281,-1
|
||||
int socketpair(int, int, int, int*) 288,-1
|
||||
int bind(int, struct sockaddr *, int) 282,-1
|
||||
int connect(int, struct sockaddr *, socklen_t) 283,-1
|
||||
int listen(int, int) 284,-1
|
||||
int accept(int, struct sockaddr *, socklen_t *) 285,-1
|
||||
int getsockname(int, struct sockaddr *, socklen_t *) 286,-1
|
||||
int getpeername(int, struct sockaddr *, socklen_t *) 287,-1
|
||||
int sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t) 290,-1
|
||||
int recvfrom(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *) 292,-1
|
||||
int shutdown(int, int) 293,-1
|
||||
int setsockopt(int, int, int, const void *, socklen_t) 294,-1
|
||||
int getsockopt(int, int, int, void *, socklen_t *) 295,-1
|
||||
int sendmsg(int, const struct msghdr *, unsigned int) 296,-1
|
||||
int recvmsg(int, struct msghdr *, unsigned int) 297,-1
|
||||
int socket(int, int, int) 281,-1,183
|
||||
int socketpair(int, int, int, int*) 288,-1,184
|
||||
int bind(int, struct sockaddr *, int) 282,-1,169
|
||||
int connect(int, struct sockaddr *, socklen_t) 283,-1,170
|
||||
int listen(int, int) 284,-1,174
|
||||
int accept(int, struct sockaddr *, socklen_t *) 285,-1,168
|
||||
int getsockname(int, struct sockaddr *, socklen_t *) 286,-1,172
|
||||
int getpeername(int, struct sockaddr *, socklen_t *) 287,-1,171
|
||||
int sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t) 290,-1,180
|
||||
int recvfrom(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *) 292,-1,176
|
||||
int shutdown(int, int) 293,-1,182
|
||||
int setsockopt(int, int, int, const void *, socklen_t) 294,-1,181
|
||||
int getsockopt(int, int, int, void *, socklen_t *) 295,-1,173
|
||||
int sendmsg(int, const struct msghdr *, unsigned int) 296,-1,179
|
||||
int recvmsg(int, struct msghdr *, unsigned int) 297,-1,177
|
||||
|
||||
# sockets for x86. These are done as an "indexed" call to socketcall syscall.
|
||||
int socket:socketcall:1 (int, int, int) -1,102
|
||||
int bind:socketcall:2 (int, struct sockaddr *, int) -1,102
|
||||
int connect:socketcall:3(int, struct sockaddr *, socklen_t) -1,102
|
||||
int listen:socketcall:4(int, int) -1,102
|
||||
int accept:socketcall:5(int, struct sockaddr *, socklen_t *) -1,102
|
||||
int getsockname:socketcall:6(int, struct sockaddr *, socklen_t *) -1,102
|
||||
int getpeername:socketcall:7(int, struct sockaddr *, socklen_t *) -1,102
|
||||
int socketpair:socketcall:8(int, int, int, int*) -1,102
|
||||
int sendto:socketcall:11(int, const void *, size_t, int, const struct sockaddr *, socklen_t) -1,102
|
||||
int recvfrom:socketcall:12(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *) -1,102
|
||||
int shutdown:socketcall:13(int, int) -1,102
|
||||
int setsockopt:socketcall:14(int, int, int, const void *, socklen_t) -1,102
|
||||
int getsockopt:socketcall:15(int, int, int, void *, socklen_t *) -1,102
|
||||
int sendmsg:socketcall:16(int, const struct msghdr *, unsigned int) -1,102
|
||||
int recvmsg:socketcall:17(int, struct msghdr *, unsigned int) -1,102
|
||||
int socket:socketcall:1 (int, int, int) -1,102,-1
|
||||
int bind:socketcall:2 (int, struct sockaddr *, int) -1,102,-1
|
||||
int connect:socketcall:3(int, struct sockaddr *, socklen_t) -1,102,-1
|
||||
int listen:socketcall:4(int, int) -1,102,-1
|
||||
int accept:socketcall:5(int, struct sockaddr *, socklen_t *) -1,102,-1
|
||||
int getsockname:socketcall:6(int, struct sockaddr *, socklen_t *) -1,102,-1
|
||||
int getpeername:socketcall:7(int, struct sockaddr *, socklen_t *) -1,102,-1
|
||||
int socketpair:socketcall:8(int, int, int, int*) -1,102,-1
|
||||
int sendto:socketcall:11(int, const void *, size_t, int, const struct sockaddr *, socklen_t) -1,102,-1
|
||||
int recvfrom:socketcall:12(int, void *, size_t, unsigned int, struct sockaddr *, socklen_t *) -1,102,-1
|
||||
int shutdown:socketcall:13(int, int) -1,102,-1
|
||||
int setsockopt:socketcall:14(int, int, int, const void *, socklen_t) -1,102,-1
|
||||
int getsockopt:socketcall:15(int, int, int, void *, socklen_t *) -1,102,-1
|
||||
int sendmsg:socketcall:16(int, const struct msghdr *, unsigned int) -1,102,-1
|
||||
int recvmsg:socketcall:17(int, struct msghdr *, unsigned int) -1,102,-1
|
||||
|
||||
# scheduler & real-time
|
||||
int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param) 156
|
||||
int sched_getscheduler(pid_t pid) 157
|
||||
int sched_yield(void) 158
|
||||
int sched_setparam(pid_t pid, const struct sched_param *param) 154
|
||||
int sched_getparam(pid_t pid, struct sched_param *param) 155
|
||||
int sched_get_priority_max(int policy) 159
|
||||
int sched_get_priority_min(int policy) 160
|
||||
int sched_rr_get_interval(pid_t pid, struct timespec *interval) 161
|
||||
int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param) 156,156,160
|
||||
int sched_getscheduler(pid_t pid) 157,157,161
|
||||
int sched_yield(void) 158,158,162
|
||||
int sched_setparam(pid_t pid, const struct sched_param *param) 154,154,158
|
||||
int sched_getparam(pid_t pid, struct sched_param *param) 155,155,159
|
||||
int sched_get_priority_max(int policy) 159,159,163
|
||||
int sched_get_priority_min(int policy) 160,160,164
|
||||
int sched_rr_get_interval(pid_t pid, struct timespec *interval) 161,161,165
|
||||
int sched_setaffinity(pid_t pid, size_t setsize, const cpu_set_t* set) 241,241,239
|
||||
int __sched_getaffinity:sched_getaffinity(pid_t pid, size_t setsize, cpu_set_t* set) 242,242,240
|
||||
int __getcpu:getcpu(unsigned *cpu, unsigned *node, void *unused) 345,318,312
|
||||
|
||||
# io priorities
|
||||
int ioprio_set(int which, int who, int ioprio) 314,289,314
|
||||
int ioprio_get(int which, int who) 315,290,315
|
||||
|
||||
# other
|
||||
int uname(struct utsname *) 122
|
||||
@@ -225,21 +286,30 @@ int __syslog:syslog(int, char *, int) 103
|
||||
int init_module(void *, unsigned long, const char *) 128
|
||||
int delete_module(const char*, unsigned int) 129
|
||||
int klogctl:syslog(int, char *, int) 103
|
||||
int sysinfo(struct sysinfo *) 116
|
||||
int personality(unsigned long) 136
|
||||
long perf_event_open(struct perf_event_attr *attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags) 364
|
||||
|
||||
# futex
|
||||
int futex(void *, int, int, void *, void *, int) 240
|
||||
int futex(void *, int, int, void *, void *, int) 240,240,238
|
||||
|
||||
# epoll
|
||||
int epoll_create(int size) 250,254
|
||||
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 251,255
|
||||
int epoll_wait(int epfd, struct epoll_event *events, int max, int timeout) 252,256
|
||||
int epoll_create(int size) 250,254,248
|
||||
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 251,255,249
|
||||
int epoll_wait(int epfd, struct epoll_event *events, int max, int timeout) 252,256,250
|
||||
|
||||
int inotify_init(void) 316,291
|
||||
int inotify_add_watch(int, const char *, unsigned int) 317,292
|
||||
int inotify_rm_watch(int, unsigned int) 318,293
|
||||
int inotify_init(void) 316,291,284
|
||||
int inotify_add_watch(int, const char *, unsigned int) 317,292,285
|
||||
int inotify_rm_watch(int, unsigned int) 318,293,286
|
||||
|
||||
int poll(struct pollfd *, unsigned int, long) 168
|
||||
int poll(struct pollfd *, unsigned int, long) 168,168,188
|
||||
|
||||
int eventfd:eventfd2(unsigned int, int) 356,328,325
|
||||
|
||||
# ARM-specific ARM_NR_BASE == 0x0f0000 == 983040
|
||||
int __set_tls:ARM_set_tls(void*) 983045,-1
|
||||
int cacheflush:ARM_cacheflush(long start, long end, long flags) 983042,-1
|
||||
int __set_tls:ARM_set_tls(void*) 983045,-1,-1
|
||||
int cacheflush:ARM_cacheflush(long start, long end, long flags) 983042,-1,-1
|
||||
|
||||
# MIPS-specific
|
||||
int _flush_cache:cacheflush(char *addr, const int nbytes, const int op) -1,-1,147
|
||||
int syscall(int number,...) -1,-1,0
|
||||
|
@@ -26,6 +26,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
.global __get_sp
|
||||
.type __get_sp, %function
|
||||
|
||||
__get_sp:
|
||||
mov r0, sp
|
||||
|
@@ -26,15 +26,10 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#include <asm/unistd.h>
|
||||
|
||||
.text
|
||||
.type _exit_with_stack_teardown, #function
|
||||
.globl _exit_with_stack_teardown
|
||||
.align 4
|
||||
#include <machine/asm.h>
|
||||
|
||||
@ void _exit_with_stack_teardown(void * stackBase, int stackSize, int retCode)
|
||||
|
||||
_exit_with_stack_teardown:
|
||||
ENTRY(_exit_with_stack_teardown)
|
||||
|
||||
#if __ARM_EABI__
|
||||
mov lr, r2
|
||||
@@ -53,3 +48,4 @@ _exit_with_stack_teardown:
|
||||
@ exit() should never return, cause a crash if it does
|
||||
mov r0, #0
|
||||
ldr r0, [r0]
|
||||
END(_exit_with_stack_teardown)
|
||||
|
@@ -3,6 +3,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997 Mark Brinicombe
|
||||
* Copyright (c) 2010 Android Open Source Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -35,6 +36,7 @@
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
#include <machine/cpu-features.h>
|
||||
|
||||
/*
|
||||
* C library -- _setjmp, _longjmp
|
||||
@@ -51,42 +53,46 @@
|
||||
|
||||
ENTRY(_setjmp)
|
||||
ldr r1, .L_setjmp_magic
|
||||
str r1, [r0], #4
|
||||
#ifdef SOFTFLOAT
|
||||
add r0, r0, #52
|
||||
#else
|
||||
/* Store fp registers */
|
||||
sfm f4, 4, [r0], #48
|
||||
/* Store fpsr */
|
||||
rfs r1
|
||||
str r1, [r0], #0x0004
|
||||
#endif /* SOFTFLOAT */
|
||||
/* Store integer registers */
|
||||
stmia r0, {r4-r14}
|
||||
str r1, [r0, #(_JB_MAGIC * 4)]
|
||||
|
||||
/* Store core registers */
|
||||
add r1, r0, #(_JB_CORE_BASE * 4)
|
||||
stmia r1, {r4-r14}
|
||||
|
||||
#ifdef __ARM_HAVE_VFP
|
||||
/* Store floating-point registers */
|
||||
add r1, r0, #(_JB_FLOAT_BASE * 4)
|
||||
vstmia r1, {d8-d15}
|
||||
/* Store floating-point state */
|
||||
fmrx r1, fpscr
|
||||
str r1, [r0, #(_JB_FLOAT_STATE * 4)]
|
||||
#endif /* __ARM_HAVE_VFP */
|
||||
|
||||
mov r0, #0x00000000
|
||||
bx lr
|
||||
END(_setjmp)
|
||||
|
||||
.L_setjmp_magic:
|
||||
.word _JB_MAGIC__SETJMP
|
||||
|
||||
ENTRY(_longjmp)
|
||||
ldr r2, .L_setjmp_magic
|
||||
ldr r3, [r0], #4
|
||||
ldr r3, [r0, #(_JB_MAGIC * 4)]
|
||||
teq r2, r3
|
||||
bne botch
|
||||
|
||||
#ifdef SOFTFLOAT
|
||||
add r0, r0, #52
|
||||
#else
|
||||
/* Restore fp registers */
|
||||
lfm f4, 4, [r0], #48
|
||||
/* Restore fpsr */
|
||||
ldr r4, [r0], #0x0004
|
||||
wfs r4
|
||||
#endif /* SOFTFLOAT */
|
||||
/* Restore integer registers */
|
||||
ldmia r0, {r4-r14}
|
||||
#ifdef __ARM_HAVE_VFP
|
||||
/* Restore floating-point registers */
|
||||
add r2, r0, #(_JB_FLOAT_BASE * 4)
|
||||
vldmia r2, {d8-d15}
|
||||
/* Restore floating-point state */
|
||||
ldr r2, [r0, #(_JB_FLOAT_STATE * 4)]
|
||||
fmxr fpscr, r2
|
||||
#endif /* __ARM_HAVE_VFP */
|
||||
|
||||
/* Restore core registers */
|
||||
add r2, r0, #(_JB_CORE_BASE * 4)
|
||||
ldmia r2, {r4-r14}
|
||||
|
||||
/* Validate sp and r14 */
|
||||
teq sp, #0
|
||||
@@ -104,3 +110,4 @@ botch:
|
||||
bl PIC_SYM(_C_LABEL(longjmperror), PLT)
|
||||
bl PIC_SYM(_C_LABEL(abort), PLT)
|
||||
b . - 8 /* Cannot get here */
|
||||
END(_longjmp)
|
||||
|
42
libc/arch-arm/bionic/abort_arm.S
Normal file
42
libc/arch-arm/bionic/abort_arm.S
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
* Coding the abort function in assembly so that registers are guaranteed to
|
||||
* be preserved properly regardless of GCC's assumption on the "noreturn"
|
||||
* attribute. When the registers are not properly preserved we won't be able
|
||||
* to unwind the stack all the way to the bottom to fully reveal the call
|
||||
* sequence when the crash happens.
|
||||
*/
|
||||
ENTRY(abort)
|
||||
.save {r3, r14}
|
||||
stmfd sp!, {r3, r14}
|
||||
blx PIC_SYM(_C_LABEL(__libc_android_abort), PLT)
|
||||
END(abort)
|
35
libc/arch-arm/bionic/atexit.h
Normal file
35
libc/arch-arm/bionic/atexit.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
extern void *__dso_handle;
|
||||
|
||||
__attribute__ ((visibility ("hidden")))
|
||||
int atexit(void (*func)(void))
|
||||
{
|
||||
return (__cxa_atexit((void (*)(void *))func, (void *)0, &__dso_handle));
|
||||
}
|
60
libc/arch-arm/bionic/atexit_legacy.c
Normal file
60
libc/arch-arm/bionic/atexit_legacy.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2012 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <private/logd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/*
|
||||
* This source file should only be included by libc.so, its purpose is
|
||||
* to support legacy ARM binaries by exporting a publicly visible
|
||||
* implementation of atexit().
|
||||
*/
|
||||
|
||||
extern int __cxa_atexit(void (*func)(void *), void *arg, void *dso);
|
||||
|
||||
/*
|
||||
* Register a function to be performed at exit.
|
||||
*/
|
||||
int
|
||||
atexit(void (*func)(void))
|
||||
{
|
||||
/*
|
||||
* Exit functions queued by this version of atexit will not be called
|
||||
* on dlclose(), and when they are called (at program exit), the
|
||||
* calling library may have been dlclose()'d, causing the program to
|
||||
* crash.
|
||||
*/
|
||||
static char const warning[] =
|
||||
"WARNING: generic atexit() called from legacy shared library\n";
|
||||
|
||||
__libc_android_log_print(ANDROID_LOG_WARN, "libc", warning);
|
||||
fprintf(stderr, warning);
|
||||
|
||||
return (__cxa_atexit((void (*)(void *))func, NULL, NULL));
|
||||
}
|
@@ -1,178 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.global __atomic_cmpxchg
|
||||
.global __atomic_swap
|
||||
.global __atomic_dec
|
||||
.global __atomic_inc
|
||||
.global __futex_wait
|
||||
.global __futex_wake
|
||||
|
||||
#define FUTEX_WAIT 0
|
||||
#define FUTEX_WAKE 1
|
||||
|
||||
#if 1
|
||||
.equ kernel_cmpxchg, 0xFFFF0FC0
|
||||
.equ kernel_atomic_base, 0xFFFF0FFF
|
||||
__atomic_dec:
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r2, r0
|
||||
1: @ atomic_dec
|
||||
ldr r0, [r2]
|
||||
mov r3, #kernel_atomic_base
|
||||
add lr, pc, #4
|
||||
sub r1, r0, #1
|
||||
add pc, r3, #(kernel_cmpxchg - kernel_atomic_base)
|
||||
bcc 1b
|
||||
add r0, r1, #1
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
|
||||
__atomic_inc:
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r2, r0
|
||||
1: @ atomic_inc
|
||||
ldr r0, [r2]
|
||||
mov r3, #kernel_atomic_base
|
||||
add lr, pc, #4
|
||||
add r1, r0, #1
|
||||
add pc, r3, #(kernel_cmpxchg - kernel_atomic_base)
|
||||
bcc 1b
|
||||
sub r0, r1, #1
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
|
||||
/* r0(old) r1(new) r2(addr) -> r0(zero_if_succeeded) */
|
||||
__atomic_cmpxchg:
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0 /* r4 = save oldvalue */
|
||||
1: @ atomic_cmpxchg
|
||||
mov r3, #kernel_atomic_base
|
||||
add lr, pc, #4
|
||||
mov r0, r4 /* r0 = oldvalue */
|
||||
add pc, r3, #(kernel_cmpxchg - kernel_atomic_base)
|
||||
bcs 2f /* swap was made. we're good, return. */
|
||||
ldr r3, [r2] /* swap not made, see if it's because *ptr!=oldvalue */
|
||||
cmp r3, r4
|
||||
beq 1b
|
||||
2: @ atomic_cmpxchg
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
#else
|
||||
#define KUSER_CMPXCHG 0xffffffc0
|
||||
|
||||
/* r0(old) r1(new) r2(addr) -> r0(zero_if_succeeded) */
|
||||
__atomic_cmpxchg:
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0 /* r4 = save oldvalue */
|
||||
1: add lr, pc, #4
|
||||
mov r0, r4 /* r0 = oldvalue */
|
||||
mov pc, #KUSER_CMPXCHG
|
||||
bcs 2f /* swap was made. we're good, return. */
|
||||
ldr r3, [r2] /* swap not made, see if it's because *ptr!=oldvalue */
|
||||
cmp r3, r4
|
||||
beq 1b
|
||||
2: ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
|
||||
/* r0(addr) -> r0(old) */
|
||||
__atomic_dec:
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r2, r0 /* address */
|
||||
1: ldr r0, [r2] /* oldvalue */
|
||||
add lr, pc, #4
|
||||
sub r1, r0, #1 /* newvalue = oldvalue - 1 */
|
||||
mov pc, #KUSER_CMPXCHG
|
||||
bcc 1b /* no swap, try again until we get it right */
|
||||
mov r0, ip /* swapped, return the old value */
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
|
||||
/* r0(addr) -> r0(old) */
|
||||
__atomic_inc:
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r2, r0 /* address */
|
||||
1: ldr r0, [r2] /* oldvalue */
|
||||
add lr, pc, #4
|
||||
add r1, r0, #1 /* newvalue = oldvalue + 1 */
|
||||
mov pc, #KUSER_CMPXCHG
|
||||
bcc 1b /* no swap, try again until we get it right */
|
||||
mov r0, ip /* swapped, return the old value */
|
||||
ldmia sp!, {r4, lr}
|
||||
bx lr
|
||||
#endif
|
||||
|
||||
/* r0(new) r1(addr) -> r0(old) */
|
||||
__atomic_swap:
|
||||
swp r0, r0, [r1]
|
||||
bx lr
|
||||
|
||||
/* __futex_wait(*ftx, val, *timespec) */
|
||||
/* __futex_syscall(*ftx, op, val, *timespec, *addr2, val3) */
|
||||
|
||||
#if __ARM_EABI__
|
||||
|
||||
__futex_wait:
|
||||
.fnstart
|
||||
stmdb sp!, {r4, r7}
|
||||
.save {r4, r7}
|
||||
mov r3, r2
|
||||
mov r2, r1
|
||||
mov r1, #FUTEX_WAIT
|
||||
ldr r7, =__NR_futex
|
||||
swi #0
|
||||
ldmia sp!, {r4, r7}
|
||||
bx lr
|
||||
.fnend
|
||||
|
||||
__futex_wake:
|
||||
stmdb sp!, {r4, r7}
|
||||
mov r2, r1
|
||||
mov r1, #FUTEX_WAKE
|
||||
ldr r7, =__NR_futex
|
||||
swi #0
|
||||
ldmia sp!, {r4, r7}
|
||||
bx lr
|
||||
|
||||
#else
|
||||
|
||||
__futex_wait:
|
||||
mov r3, r2
|
||||
mov r2, r1
|
||||
mov r1, #FUTEX_WAIT
|
||||
swi #__NR_futex
|
||||
bx lr
|
||||
|
||||
__futex_wake:
|
||||
mov r2, r1
|
||||
mov r1, #FUTEX_WAKE
|
||||
swi #__NR_futex
|
||||
bx lr
|
||||
|
||||
#endif
|
87
libc/arch-arm/bionic/atomics_arm.c
Normal file
87
libc/arch-arm/bionic/atomics_arm.c
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
/* The purpose of this file is to export a small set of atomic-related
|
||||
* functions from the C library, to ensure binary ABI compatibility for
|
||||
* the NDK.
|
||||
*
|
||||
* These functions were initially exposed by the NDK through <sys/atomics.h>,
|
||||
* which was unfortunate because their implementation didn't provide any
|
||||
* memory barriers at all.
|
||||
*
|
||||
* This wasn't a problem for the platform code that used them, because it
|
||||
* used explicit barrier instructions around them. On the other hand, it means
|
||||
* that any NDK-generated machine code that linked against them would not
|
||||
* perform correctly when running on multi-core devices.
|
||||
*
|
||||
* To fix this, the platform code was first modified to not use any of these
|
||||
* functions (everything is now inlined through assembly statements, see
|
||||
* libc/private/bionic_arm_inline.h and the headers it includes.
|
||||
*
|
||||
* The functions here are thus only for the benefit of NDK applications,
|
||||
* and now includes full memory barriers to prevent any random memory ordering
|
||||
* issue from cropping.
|
||||
*
|
||||
* Note that we also provide an updated <sys/atomics.h> header that defines
|
||||
* always_inlined versions of the functions that use the GCC builtin
|
||||
* intrinsics to perform the same thing.
|
||||
*
|
||||
* NOTE: There is no need for a similar file for non-ARM platforms.
|
||||
*/
|
||||
|
||||
/* DO NOT INCLUDE <sys/atomics.h> HERE ! */
|
||||
|
||||
int
|
||||
__atomic_cmpxchg(int old, int _new, volatile int *ptr)
|
||||
{
|
||||
/* We must return 0 on success */
|
||||
return __sync_val_compare_and_swap(ptr, old, _new) != old;
|
||||
}
|
||||
|
||||
int
|
||||
__atomic_swap(int _new, volatile int *ptr)
|
||||
{
|
||||
int prev;
|
||||
do {
|
||||
prev = *ptr;
|
||||
} while (__sync_val_compare_and_swap(ptr, prev, _new) != prev);
|
||||
return prev;
|
||||
}
|
||||
|
||||
int
|
||||
__atomic_dec(volatile int *ptr)
|
||||
{
|
||||
return __sync_fetch_and_sub (ptr, 1);
|
||||
}
|
||||
|
||||
int
|
||||
__atomic_inc(volatile int *ptr)
|
||||
{
|
||||
return __sync_fetch_and_add (ptr, 1);
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
* Copyright (C) 2008-2010 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -26,49 +26,91 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/linux-syscalls.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
.text
|
||||
.type __pthread_clone, #function
|
||||
.global __pthread_clone
|
||||
.align 4
|
||||
|
||||
__pthread_clone:
|
||||
@ insert the args onto the new stack
|
||||
str r0, [r1, #-4]
|
||||
str r3, [r1, #-8]
|
||||
ENTRY(__pthread_clone)
|
||||
@ insert the args onto the new stack
|
||||
stmdb r1!, {r0, r3}
|
||||
|
||||
@ do the system call
|
||||
@ get flags
|
||||
|
||||
@ do the system call
|
||||
@ get flags
|
||||
|
||||
mov r0, r2
|
||||
|
||||
|
||||
@ new sp is already in r1
|
||||
|
||||
#if __ARM_EABI__
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_clone
|
||||
swi #0
|
||||
swi #0
|
||||
#else
|
||||
swi #__NR_clone
|
||||
swi #__NR_clone
|
||||
#endif
|
||||
|
||||
movs r0, r0
|
||||
movs r0, r0
|
||||
#if __ARM_EABI__
|
||||
ldmnefd sp!, {r4, r7}
|
||||
#endif
|
||||
blt __error
|
||||
bxne lr
|
||||
blt __error
|
||||
bxne lr
|
||||
|
||||
|
||||
@ pick the function arg and call address off the stack and jump
|
||||
@ to the C __thread_entry function which does some setup and then
|
||||
@ calls the thread's start function
|
||||
@ pick the function arg and call address off the stack and jump
|
||||
@ to the C __thread_entry function which does some setup and then
|
||||
@ calls the thread's start function
|
||||
|
||||
ldr r0, [sp, #-4]
|
||||
ldr r1, [sp, #-8]
|
||||
mov r2, sp @ __thread_entry needs the TLS pointer
|
||||
b __thread_entry
|
||||
pop {r0, r1}
|
||||
mov r2, sp @ __thread_entry needs the TLS pointer
|
||||
b __thread_entry
|
||||
|
||||
__error:
|
||||
mov r0, #-1
|
||||
bx lr
|
||||
mov r0, #-1
|
||||
bx lr
|
||||
END(__pthread_clone)
|
||||
|
||||
|
||||
#
|
||||
# This function is defined as:
|
||||
#
|
||||
# pid_t __bionic_clone( int flags, void *child_stack,
|
||||
# pid_t *pid, void *tls, pid_t *ctid,
|
||||
# int (*fn)(void *), void* arg );
|
||||
#
|
||||
# NOTE: This is not the same signature than the GLibc
|
||||
# __clone function here !! Placing 'fn' and 'arg'
|
||||
# at the end of the parameter list makes the
|
||||
# implementation much simpler.
|
||||
#
|
||||
|
||||
ENTRY(__bionic_clone)
|
||||
mov ip, sp
|
||||
.save {r4, r5, r6, r7}
|
||||
|
||||
# save registers to parent stack
|
||||
stmfd sp!, {r4, r5, r6, r7}
|
||||
|
||||
# load extra parameters
|
||||
ldmfd ip, {r4, r5, r6}
|
||||
|
||||
# store 'fn' and 'arg' to the child stack
|
||||
str r5, [r1, #-4]
|
||||
str r6, [r1, #-8]
|
||||
|
||||
# system call
|
||||
ldr r7, =__NR_clone
|
||||
swi #0
|
||||
movs r0, r0
|
||||
beq 1f
|
||||
|
||||
# in parent, reload saved registers
|
||||
# then either exit or error
|
||||
#
|
||||
ldmfd sp!, {r4, r5, r6, r7}
|
||||
bxne lr
|
||||
b __set_syscall_errno
|
||||
|
||||
1: # in the child - pick arguments
|
||||
ldr r0, [sp, #-4]
|
||||
ldr r1, [sp, #-8]
|
||||
b __bionic_clone_entry
|
||||
END(__bionic_clone)
|
||||
|
68
libc/arch-arm/bionic/crtbegin.c
Normal file
68
libc/arch-arm/bionic/crtbegin.c
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void (**preinit_array)(void);
|
||||
void (**init_array)(void);
|
||||
void (**fini_array)(void);
|
||||
} structors_array_t;
|
||||
|
||||
extern int main(int argc, char **argv, char **env);
|
||||
|
||||
extern void __libc_init(
|
||||
unsigned int *elfdata,
|
||||
void (*onexit)(void),
|
||||
int (*slingshot)(int, char**, char**),
|
||||
structors_array_t const * const structors
|
||||
);
|
||||
|
||||
__attribute__ ((section (".preinit_array")))
|
||||
void (*__PREINIT_ARRAY__)(void) = (void (*)(void)) -1;
|
||||
|
||||
__attribute__ ((section (".init_array")))
|
||||
void (*__INIT_ARRAY__)(void) = (void (*)(void)) -1;
|
||||
|
||||
__attribute__ ((section (".fini_array")))
|
||||
void (*__FINI_ARRAY__)(void) = (void (*)(void)) -1;
|
||||
|
||||
__attribute__((visibility("hidden")))
|
||||
void _start() {
|
||||
structors_array_t array;
|
||||
void *elfdata;
|
||||
|
||||
array.preinit_array = &__PREINIT_ARRAY__;
|
||||
array.init_array = &__INIT_ARRAY__;
|
||||
array.fini_array = &__FINI_ARRAY__;
|
||||
|
||||
elfdata = __builtin_frame_address(0) + sizeof(void *);
|
||||
__libc_init(elfdata, (void *) 0, &main, &array);
|
||||
}
|
||||
|
||||
#include "__dso_handle.h"
|
||||
#include "atexit.h"
|
58
libc/arch-arm/bionic/crtbegin_so.c
Normal file
58
libc/arch-arm/bionic/crtbegin_so.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
extern void __cxa_finalize(void *);
|
||||
extern void *__dso_handle;
|
||||
|
||||
__attribute__((visibility("hidden"),destructor))
|
||||
void __on_dlclose() {
|
||||
__cxa_finalize(&__dso_handle);
|
||||
}
|
||||
|
||||
/* CRT_LEGACY_WORKAROUND should only be defined when building
|
||||
* this file as part of the platform's C library.
|
||||
*
|
||||
* The C library already defines a function named 'atexit()'
|
||||
* for backwards compatibility with older NDK-generated binaries.
|
||||
*
|
||||
* For newer ones, 'atexit' is actually embedded in the C
|
||||
* runtime objects that are linked into the final ELF
|
||||
* binary (shared library or executable), and will call
|
||||
* __cxa_atexit() in order to un-register any atexit()
|
||||
* handler when a library is unloaded.
|
||||
*
|
||||
* This function must be global *and* hidden. Only the
|
||||
* code inside the same ELF binary should be able to access it.
|
||||
*/
|
||||
|
||||
#ifdef CRT_LEGACY_WORKAROUND
|
||||
#include "__dso_handle.h"
|
||||
#else
|
||||
#include "__dso_handle_so.h"
|
||||
#include "atexit.h"
|
||||
#endif
|
@@ -35,6 +35,6 @@
|
||||
.section .fini_array, "aw"
|
||||
.long 0
|
||||
|
||||
.section .ctors, "aw"
|
||||
.long 0
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
#endif
|
||||
|
31
libc/arch-arm/bionic/crtend_so.S
Normal file
31
libc/arch-arm/bionic/crtend_so.S
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
#endif
|
@@ -30,8 +30,6 @@
|
||||
|
||||
extern int __cxa_atexit(void (*)(void*), void*, void* );
|
||||
|
||||
void* __dso_handle = 0;
|
||||
|
||||
/* The "C++ ABI for ARM" document states that static C++ constructors,
|
||||
* which are called from the .init_array, should manually call
|
||||
* __aeabi_atexit() to register static destructors explicitely.
|
@@ -25,12 +25,8 @@
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
typedef long unsigned int *_Unwind_Ptr;
|
||||
|
||||
/* Stubbed out in libdl and defined in the dynamic linker.
|
||||
* Same semantics as __gnu_Unwind_Find_exidx().
|
||||
*/
|
||||
extern _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int *pcount);
|
||||
#include <link.h>
|
||||
|
||||
/* For a given PC, find the .so that it belongs to.
|
||||
* Returns the base address of the .ARM.exidx section
|
||||
|
@@ -25,7 +25,8 @@
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
typedef long unsigned int *_Unwind_Ptr;
|
||||
|
||||
#include <link.h>
|
||||
|
||||
/* Find the .ARM.exidx section (which in the case of a static executable
|
||||
* can be identified through its start and end symbols), and return its
|
||||
|
@@ -29,6 +29,7 @@
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/cpu-features.h>
|
||||
|
||||
/*
|
||||
* ffs - find first set bit, this algorithm isolates the first set
|
||||
@@ -36,8 +37,8 @@
|
||||
* 6 bits as an index into the table. This algorithm should be a win
|
||||
* over the checking each bit in turn as per the C compiled version.
|
||||
*
|
||||
* under ARMv5 there's an instruction called CLZ (count leading Zero's) that
|
||||
* could be used
|
||||
* Some newer ARM architectures have an instruction named
|
||||
* CLZ (count leading Zero's) that is used
|
||||
*
|
||||
* This is the ffs algorithm devised by d.seal and posted to comp.sys.arm on
|
||||
* 16 Feb 1994.
|
||||
@@ -47,7 +48,7 @@ ENTRY(ffs)
|
||||
/* Standard trick to isolate bottom bit in r0 or 0 if r0 = 0 on entry */
|
||||
rsb r1, r0, #0
|
||||
ands r0, r0, r1
|
||||
#ifndef __ARM_ARCH_5__
|
||||
#ifndef __ARM_HAVE_CLZ
|
||||
/*
|
||||
* now r0 has at most one set bit, call this X
|
||||
* if X = 0, all further instructions are skipped
|
||||
@@ -61,6 +62,7 @@ ENTRY(ffs)
|
||||
ldrneb r0, [ r2, r0, lsr #26 ]
|
||||
|
||||
bx lr
|
||||
END(ffs)
|
||||
|
||||
.text;
|
||||
.type .L_ffs_table, _ASM_TYPE_OBJECT;
|
||||
@@ -74,9 +76,10 @@ ENTRY(ffs)
|
||||
.byte 10, 0, 0, 25, 0, 0, 21, 27 /* 40-47 */
|
||||
.byte 31, 0, 0, 0, 0, 24, 0, 20 /* 48-55 */
|
||||
.byte 30, 0, 23, 19, 29, 18, 17, 0 /* 56-63 */
|
||||
#else
|
||||
#else /* !defined(__ARM_HAVE_CLZ) */
|
||||
clzne r0, r0
|
||||
rsbne r0, r0, #32
|
||||
bx lr
|
||||
#endif
|
||||
END(ffs)
|
||||
#endif /* !defined(__ARM_HAVE_CLZ) */
|
||||
|
||||
|
112
libc/arch-arm/bionic/futex_arm.S
Normal file
112
libc/arch-arm/bionic/futex_arm.S
Normal file
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/linux-syscalls.h>
|
||||
#include <machine/asm.h>
|
||||
#include <machine/cpu-features.h>
|
||||
|
||||
#define FUTEX_WAIT 0
|
||||
#define FUTEX_WAKE 1
|
||||
|
||||
/* __futex_wait(*ftx, val, *timespec) */
|
||||
/* __futex_wake(*ftx, counter) */
|
||||
/* __futex_syscall3(*ftx, op, val) */
|
||||
/* __futex_syscall4(*ftx, op, val, *timespec) */
|
||||
|
||||
.global __futex_wait
|
||||
.type __futex_wait, %function
|
||||
|
||||
.global __futex_wake
|
||||
.type __futex_wake, %function
|
||||
|
||||
.global __futex_syscall3
|
||||
.type __futex_syscall3, %function
|
||||
|
||||
.global __futex_syscall4
|
||||
.type __futex_syscall4, %function
|
||||
|
||||
#if __ARM_EABI__
|
||||
|
||||
ENTRY(__futex_syscall3)
|
||||
stmdb sp!, {r4, r7}
|
||||
.save {r4, r7}
|
||||
ldr r7, =__NR_futex
|
||||
swi #0
|
||||
ldmia sp!, {r4, r7}
|
||||
bx lr
|
||||
END(__futex_syscall3)
|
||||
|
||||
ENTRY(__futex_wait)
|
||||
stmdb sp!, {r4, r7}
|
||||
.save {r4, r7}
|
||||
mov r3, r2
|
||||
mov r2, r1
|
||||
mov r1, #FUTEX_WAIT
|
||||
ldr r7, =__NR_futex
|
||||
swi #0
|
||||
ldmia sp!, {r4, r7}
|
||||
bx lr
|
||||
END(__futex_wait)
|
||||
|
||||
ENTRY(__futex_wake)
|
||||
.save {r4, r7}
|
||||
stmdb sp!, {r4, r7}
|
||||
mov r2, r1
|
||||
mov r1, #FUTEX_WAKE
|
||||
ldr r7, =__NR_futex
|
||||
swi #0
|
||||
ldmia sp!, {r4, r7}
|
||||
bx lr
|
||||
END(__futex_wake)
|
||||
|
||||
#else
|
||||
|
||||
ENTRY(__futex_syscall3)
|
||||
swi #__NR_futex
|
||||
bx lr
|
||||
END(__futex_syscall3)
|
||||
|
||||
ENTRY(__futex_wait)
|
||||
mov r3, r2
|
||||
mov r2, r1
|
||||
mov r1, #FUTEX_WAIT
|
||||
swi #__NR_futex
|
||||
bx lr
|
||||
END(__futex_wait)
|
||||
|
||||
ENTRY(__futex_wake)
|
||||
mov r2, r1
|
||||
mov r1, #FUTEX_WAKE
|
||||
swi #__NR_futex
|
||||
bx lr
|
||||
END(__futex_wake)
|
||||
|
||||
#endif
|
||||
|
||||
ENTRY(__futex_syscall4)
|
||||
b __futex_syscall3
|
||||
END(__futex_syscall4)
|
@@ -33,17 +33,13 @@
|
||||
of a corrupted malloc heap).
|
||||
*/
|
||||
#include <sys/linux-syscalls.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef __NR_kill
|
||||
#define __NR_kill 37
|
||||
#endif
|
||||
|
||||
.text
|
||||
.type kill, #function
|
||||
.globl kill
|
||||
.align 4
|
||||
|
||||
kill:
|
||||
ENTRY(kill)
|
||||
stmfd sp!, {r4-r7, ip, lr}
|
||||
ldr r7, =__NR_kill
|
||||
swi #0
|
||||
@@ -51,3 +47,4 @@ kill:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
END(kill)
|
||||
|
160
libc/arch-arm/bionic/libgcc_compat.c
Normal file
160
libc/arch-arm/bionic/libgcc_compat.c
Normal file
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* This file contains dummy references to libgcc.a functions to force the
|
||||
* dynamic linker to copy their definition into the final libc.so binary.
|
||||
*
|
||||
* They are required to ensure backwards binary compatibility with
|
||||
* Android 1.5, 1.6 and even 3.0 system images. Some applications built
|
||||
* using the NDK require them to be here.
|
||||
*
|
||||
* Now, for a more elaborate description of the issue:
|
||||
*
|
||||
* libgcc.a is a compiler-specific library containing various helper
|
||||
* functions used to implement certain operations that are not necessarily
|
||||
* supported by the target CPU. For example, integer division doesn't have a
|
||||
* corresponding CPU instruction on ARMv5, and is instead implemented in the
|
||||
* compiler-generated machine code as a call to an __idiv helper function.
|
||||
*
|
||||
* Normally, one has to place libgcc.a in the link command used to generate
|
||||
* target binaries (shared libraries and executables) after all objects and
|
||||
* static libraries, but before dependent shared libraries, i.e. something
|
||||
* like:
|
||||
* gcc <options> -o libfoo.so foo.a libgcc.a -lc -lm
|
||||
*
|
||||
* This ensures that any helper function needed by the code in foo.a is copied
|
||||
* into the final libfoo.so. Unfortunately, the Android build system has been
|
||||
* using this instead:
|
||||
*
|
||||
* gcc <options> -o libfoo.so foo.a -lc -lm libgcc.a
|
||||
*
|
||||
* The problem with this is that if one helper function needed by foo.a has
|
||||
* already been copied into libc.so or libm.so, then nothing will be copied
|
||||
* into libfoo.so. Instead, a symbol import definition will be added to it
|
||||
* so libfoo.so can directly call the one in libc.so at runtime.
|
||||
*
|
||||
* When changing toolchains for 2.0, the set of helper functions copied to
|
||||
* libc.so changed, which resulted in some native shared libraries generated
|
||||
* with the NDK to fail to load properly.
|
||||
*
|
||||
* The NDK has been fixed after 1.6_r1 to use the correct link command, so
|
||||
* any native shared library generated with it should now be safe from that
|
||||
* problem. On the other hand, existing shared libraries distributed with
|
||||
* applications that were generated with a previous version of the NDK
|
||||
* still need all 1.5/1.6 helper functions in libc.so and libm.so
|
||||
*
|
||||
* After 3.2, the toolchain was updated again, adding __aeabi_f2uiz to the
|
||||
* list of requirements. Technically, this is due to mis-linked NDK libraries
|
||||
* but it is easier to add a single function here than asking several app
|
||||
* developers to fix their build.
|
||||
*
|
||||
* Final note: some of the functions below should really be in libm.so to
|
||||
* completely reflect the state of 1.5/1.6 system images. However,
|
||||
* since libm.so depends on libc.so, it's easier to put all of
|
||||
* these in libc.so instead, since the dynamic linker will always
|
||||
* search in libc.so before libm.so for dependencies.
|
||||
*/
|
||||
|
||||
#define COMPAT_FUNCTIONS_LIST \
|
||||
XX(__adddf3) \
|
||||
XX(__addsf3) \
|
||||
XX(__aeabi_cdcmpeq) \
|
||||
XX(__aeabi_cdcmple) \
|
||||
XX(__aeabi_cdrcmple) \
|
||||
XX(__aeabi_d2f) \
|
||||
XX(__aeabi_d2iz) \
|
||||
XX(__aeabi_dadd) \
|
||||
XX(__aeabi_dcmpeq) \
|
||||
XX(__aeabi_dcmpge) \
|
||||
XX(__aeabi_dcmpgt) \
|
||||
XX(__aeabi_dcmple) \
|
||||
XX(__aeabi_dcmplt) \
|
||||
XX(__aeabi_dcmpun) \
|
||||
XX(__aeabi_ddiv) \
|
||||
XX(__aeabi_dmul) \
|
||||
XX(__aeabi_drsub) \
|
||||
XX(__aeabi_dsub) \
|
||||
XX(__aeabi_f2d) \
|
||||
XX(__aeabi_f2iz) \
|
||||
XX(__aeabi_f2uiz) \
|
||||
XX(__aeabi_fadd) \
|
||||
XX(__aeabi_fcmpun) \
|
||||
XX(__aeabi_fdiv) \
|
||||
XX(__aeabi_fmul) \
|
||||
XX(__aeabi_frsub) \
|
||||
XX(__aeabi_fsub) \
|
||||
XX(__aeabi_i2d) \
|
||||
XX(__aeabi_i2f) \
|
||||
XX(__aeabi_l2d) \
|
||||
XX(__aeabi_l2f) \
|
||||
XX(__aeabi_lmul) \
|
||||
XX(__aeabi_llsl) \
|
||||
XX(__aeabi_llsr) \
|
||||
XX(__aeabi_ui2d) \
|
||||
XX(__aeabi_ui2f) \
|
||||
XX(__aeabi_ul2d) \
|
||||
XX(__aeabi_ul2f) \
|
||||
XX(__cmpdf2) \
|
||||
XX(__divdf3) \
|
||||
XX(__divsf3) \
|
||||
XX(__eqdf2) \
|
||||
XX(__extendsfdf2) \
|
||||
XX(__fixdfsi) \
|
||||
XX(__fixsfsi) \
|
||||
XX(__floatdidf) \
|
||||
XX(__floatdisf) \
|
||||
XX(__floatsidf) \
|
||||
XX(__floatsisf) \
|
||||
XX(__floatundidf) \
|
||||
XX(__floatundisf) \
|
||||
XX(__floatunsidf) \
|
||||
XX(__floatunsisf) \
|
||||
XX(__gedf2) \
|
||||
XX(__gtdf2) \
|
||||
XX(__ledf2) \
|
||||
XX(__ltdf2) \
|
||||
XX(__muldf3) \
|
||||
XX(__muldi3) \
|
||||
XX(__mulsf3) \
|
||||
XX(__nedf2) \
|
||||
XX(__subdf3) \
|
||||
XX(__subsf3) \
|
||||
XX(__truncdfsf2) \
|
||||
XX(__unorddf2) \
|
||||
XX(__unordsf2) \
|
||||
|
||||
#define XX(f) extern void f(void);
|
||||
COMPAT_FUNCTIONS_LIST
|
||||
#undef XX
|
||||
|
||||
void __bionic_libgcc_compat_hooks(void)
|
||||
{
|
||||
#define XX(f) f();
|
||||
COMPAT_FUNCTIONS_LIST
|
||||
#undef XX
|
||||
}
|
@@ -27,12 +27,7 @@
|
||||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
|
||||
.text
|
||||
|
||||
.global memcmp
|
||||
.type memcmp, %function
|
||||
.align 4
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
* Optimized memcmp() for ARM9.
|
||||
@@ -43,7 +38,7 @@
|
||||
* (2) The loads are scheduled in a way they won't stall
|
||||
*/
|
||||
|
||||
memcmp:
|
||||
ENTRY(memcmp)
|
||||
PLD (r0, #0)
|
||||
PLD (r1, #0)
|
||||
|
||||
@@ -53,6 +48,7 @@ memcmp:
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
|
||||
.save {r4, lr}
|
||||
/* save registers */
|
||||
stmfd sp!, {r4, lr}
|
||||
|
||||
@@ -174,6 +170,7 @@ memcmp:
|
||||
9: /* restore registers and return */
|
||||
ldmfd sp!, {r4, lr}
|
||||
bx lr
|
||||
END(memcmp)
|
||||
|
||||
|
||||
|
||||
|
@@ -27,12 +27,7 @@
|
||||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
|
||||
.text
|
||||
|
||||
.global __memcmp16
|
||||
.type __memcmp16, %function
|
||||
.align 4
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
* Optimized memcmp16() for ARM9.
|
||||
@@ -43,7 +38,7 @@
|
||||
* (2) The loads are scheduled in a way they won't stall
|
||||
*/
|
||||
|
||||
__memcmp16:
|
||||
ENTRY(__memcmp16)
|
||||
PLD (r0, #0)
|
||||
PLD (r1, #0)
|
||||
|
||||
@@ -79,6 +74,7 @@ __memcmp16:
|
||||
bx lr
|
||||
|
||||
|
||||
.save {r4, lr}
|
||||
/* save registers */
|
||||
0: stmfd sp!, {r4, lr}
|
||||
|
||||
@@ -95,7 +91,6 @@ __memcmp16:
|
||||
bxne lr
|
||||
|
||||
|
||||
|
||||
0: /* here the first pointer is aligned, and we have at least 3 words
|
||||
* to process.
|
||||
*/
|
||||
@@ -234,3 +229,4 @@ __memcmp16:
|
||||
7: /* fix up the 2 pointers and fallthrough... */
|
||||
sub r1, r1, #2
|
||||
b 2b
|
||||
END(__memcmp16)
|
||||
|
@@ -27,12 +27,148 @@
|
||||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
.text
|
||||
#if defined(__ARM_NEON__) && !defined(ARCH_ARM_USE_NON_NEON_MEMCPY)
|
||||
|
||||
.text
|
||||
.fpu neon
|
||||
|
||||
#ifdef HAVE_32_BYTE_CACHE_LINE
|
||||
/* a prefetch distance of 2 cache-lines */
|
||||
#define CACHE_LINE_SIZE 32
|
||||
#define PREFETCH_DISTANCE (CACHE_LINE_SIZE*2)
|
||||
#else
|
||||
/* a prefetch distance of 4 cache-lines works best experimentally */
|
||||
#define CACHE_LINE_SIZE 64
|
||||
#define PREFETCH_DISTANCE (CACHE_LINE_SIZE*4)
|
||||
#endif
|
||||
|
||||
ENTRY(memcpy)
|
||||
.save {r0, lr}
|
||||
/* start preloading as early as possible */
|
||||
pld [r1, #(CACHE_LINE_SIZE*0)]
|
||||
stmfd sp!, {r0, lr}
|
||||
pld [r1, #(CACHE_LINE_SIZE*1)]
|
||||
|
||||
/* do we have at least 16-bytes to copy (needed for alignment below) */
|
||||
cmp r2, #16
|
||||
blo 5f
|
||||
|
||||
/* align destination to cache-line for the write-buffer */
|
||||
rsb r3, r0, #0
|
||||
ands r3, r3, #0xF
|
||||
beq 0f
|
||||
|
||||
/* copy up to 15-bytes (count in r3) */
|
||||
sub r2, r2, r3
|
||||
movs ip, r3, lsl #31
|
||||
ldrmib lr, [r1], #1
|
||||
strmib lr, [r0], #1
|
||||
ldrcsb ip, [r1], #1
|
||||
ldrcsb lr, [r1], #1
|
||||
strcsb ip, [r0], #1
|
||||
strcsb lr, [r0], #1
|
||||
movs ip, r3, lsl #29
|
||||
bge 1f
|
||||
// copies 4 bytes, destination 32-bits aligned
|
||||
vld4.8 {d0[0], d1[0], d2[0], d3[0]}, [r1]!
|
||||
vst4.8 {d0[0], d1[0], d2[0], d3[0]}, [r0, :32]!
|
||||
1: bcc 2f
|
||||
// copies 8 bytes, destination 64-bits aligned
|
||||
vld1.8 {d0}, [r1]!
|
||||
vst1.8 {d0}, [r0, :64]!
|
||||
2:
|
||||
|
||||
0: /* preload immediately the next cache line, which we may need */
|
||||
pld [r1, #(CACHE_LINE_SIZE*0)]
|
||||
pld [r1, #(CACHE_LINE_SIZE*1)]
|
||||
|
||||
#ifdef HAVE_32_BYTE_CACHE_LINE
|
||||
/* make sure we have at least 32 bytes to copy */
|
||||
subs r2, r2, #32
|
||||
blo 4f
|
||||
|
||||
/* preload all the cache lines we need.
|
||||
* NOTE: the number of pld below depends on PREFETCH_DISTANCE,
|
||||
* ideally would would increase the distance in the main loop to
|
||||
* avoid the goofy code below. In practice this doesn't seem to make
|
||||
* a big difference.
|
||||
*/
|
||||
pld [r1, #(PREFETCH_DISTANCE)]
|
||||
|
||||
1: /* The main loop copies 32 bytes at a time */
|
||||
vld1.8 {d0 - d3}, [r1]!
|
||||
pld [r1, #(PREFETCH_DISTANCE)]
|
||||
subs r2, r2, #32
|
||||
vst1.8 {d0 - d3}, [r0, :128]!
|
||||
bhs 1b
|
||||
#else
|
||||
/* make sure we have at least 64 bytes to copy */
|
||||
subs r2, r2, #64
|
||||
blo 2f
|
||||
|
||||
/* preload all the cache lines we need.
|
||||
* NOTE: the number of pld below depends on PREFETCH_DISTANCE,
|
||||
* ideally would would increase the distance in the main loop to
|
||||
* avoid the goofy code below. In practice this doesn't seem to make
|
||||
* a big difference.
|
||||
*/
|
||||
pld [r1, #(CACHE_LINE_SIZE*2)]
|
||||
pld [r1, #(CACHE_LINE_SIZE*3)]
|
||||
pld [r1, #(PREFETCH_DISTANCE)]
|
||||
|
||||
1: /* The main loop copies 64 bytes at a time */
|
||||
vld1.8 {d0 - d3}, [r1]!
|
||||
vld1.8 {d4 - d7}, [r1]!
|
||||
pld [r1, #(PREFETCH_DISTANCE)]
|
||||
subs r2, r2, #64
|
||||
vst1.8 {d0 - d3}, [r0, :128]!
|
||||
vst1.8 {d4 - d7}, [r0, :128]!
|
||||
bhs 1b
|
||||
|
||||
2: /* fix-up the remaining count and make sure we have >= 32 bytes left */
|
||||
add r2, r2, #64
|
||||
subs r2, r2, #32
|
||||
blo 4f
|
||||
|
||||
3: /* 32 bytes at a time. These cache lines were already preloaded */
|
||||
vld1.8 {d0 - d3}, [r1]!
|
||||
subs r2, r2, #32
|
||||
vst1.8 {d0 - d3}, [r0, :128]!
|
||||
bhs 3b
|
||||
#endif
|
||||
4: /* less than 32 left */
|
||||
add r2, r2, #32
|
||||
tst r2, #0x10
|
||||
beq 5f
|
||||
// copies 16 bytes, 128-bits aligned
|
||||
vld1.8 {d0, d1}, [r1]!
|
||||
vst1.8 {d0, d1}, [r0, :128]!
|
||||
|
||||
5: /* copy up to 15-bytes (count in r2) */
|
||||
movs ip, r2, lsl #29
|
||||
bcc 1f
|
||||
vld1.8 {d0}, [r1]!
|
||||
vst1.8 {d0}, [r0]!
|
||||
1: bge 2f
|
||||
vld4.8 {d0[0], d1[0], d2[0], d3[0]}, [r1]!
|
||||
vst4.8 {d0[0], d1[0], d2[0], d3[0]}, [r0]!
|
||||
2: movs ip, r2, lsl #31
|
||||
ldrmib r3, [r1], #1
|
||||
ldrcsb ip, [r1], #1
|
||||
ldrcsb lr, [r1], #1
|
||||
strmib r3, [r0], #1
|
||||
strcsb ip, [r0], #1
|
||||
strcsb lr, [r0], #1
|
||||
|
||||
ldmfd sp!, {r0, lr}
|
||||
bx lr
|
||||
END(memcpy)
|
||||
|
||||
|
||||
#else /* __ARM_ARCH__ < 7 */
|
||||
|
||||
.global memcpy
|
||||
.type memcpy, %function
|
||||
.align 4
|
||||
|
||||
/*
|
||||
* Optimized memcpy() for ARM.
|
||||
@@ -40,13 +176,12 @@
|
||||
* note that memcpy() always returns the destination pointer,
|
||||
* so we have to preserve R0.
|
||||
*/
|
||||
|
||||
memcpy:
|
||||
/* The stack must always be 64-bits aligned to be compliant with the
|
||||
|
||||
ENTRY(memcpy)
|
||||
/* The stack must always be 64-bits aligned to be compliant with the
|
||||
* ARM ABI. Since we have to save R0, we might as well save R4
|
||||
* which we can use for better pipelining of the reads below
|
||||
*/
|
||||
.fnstart
|
||||
.save {r0, r4, lr}
|
||||
stmfd sp!, {r0, r4, lr}
|
||||
/* Making room for r5-r11 which will be spilled later */
|
||||
@@ -82,10 +217,10 @@ memcpy:
|
||||
strmib r3, [r0], #1
|
||||
strcsb r4, [r0], #1
|
||||
strcsb r12,[r0], #1
|
||||
|
||||
|
||||
src_aligned:
|
||||
|
||||
/* see if src and dst are aligned together (congruent) */
|
||||
/* see if src and dst are aligned together (congruent) */
|
||||
eor r12, r0, r1
|
||||
tst r12, #3
|
||||
bne non_congruent
|
||||
@@ -103,7 +238,7 @@ src_aligned:
|
||||
andhi r3, r2, #0x1C
|
||||
|
||||
/* conditionnaly copies 0 to 7 words (length in r3) */
|
||||
movs r12, r3, lsl #28
|
||||
movs r12, r3, lsl #28
|
||||
ldmcsia r1!, {r4, r5, r6, r7} /* 16 bytes */
|
||||
ldmmiia r1!, {r8, r9} /* 8 bytes */
|
||||
stmcsia r0!, {r4, r5, r6, r7}
|
||||
@@ -124,7 +259,7 @@ cached_aligned32:
|
||||
|
||||
/*
|
||||
* We preload a cache-line up to 64 bytes ahead. On the 926, this will
|
||||
* stall only until the requested world is fetched, but the linefill
|
||||
* stall only until the requested world is fetched, but the linefill
|
||||
* continues in the the background.
|
||||
* While the linefill is going, we write our previous cache-line
|
||||
* into the write-buffer (which should have some free space).
|
||||
@@ -150,19 +285,19 @@ cached_aligned32:
|
||||
|
||||
// NOTE: if r12 is more than 64 ahead of r1, the following ldrhi
|
||||
// for ARM9 preload will not be safely guarded by the preceding subs.
|
||||
// When it is safely guarded the only possibility to have SIGSEGV here
|
||||
// When it is safely guarded the only possibility to have SIGSEGV here
|
||||
// is because the caller overstates the length.
|
||||
ldrhi r3, [r12], #32 /* cheap ARM9 preload */
|
||||
stmia r0!, { r4-r11 }
|
||||
bhs 1b
|
||||
|
||||
|
||||
add r2, r2, #32
|
||||
|
||||
|
||||
|
||||
|
||||
less_than_32_left:
|
||||
/*
|
||||
/*
|
||||
* less than 32 bytes left at this point (length in r2)
|
||||
*/
|
||||
|
||||
@@ -174,7 +309,7 @@ less_than_32_left:
|
||||
beq 1f
|
||||
|
||||
/* conditionnaly copies 0 to 31 bytes */
|
||||
movs r12, r2, lsl #28
|
||||
movs r12, r2, lsl #28
|
||||
ldmcsia r1!, {r4, r5, r6, r7} /* 16 bytes */
|
||||
ldmmiia r1!, {r8, r9} /* 8 bytes */
|
||||
stmcsia r0!, {r4, r5, r6, r7}
|
||||
@@ -182,7 +317,7 @@ less_than_32_left:
|
||||
movs r12, r2, lsl #30
|
||||
ldrcs r3, [r1], #4 /* 4 bytes */
|
||||
ldrmih r4, [r1], #2 /* 2 bytes */
|
||||
strcs r3, [r0], #4
|
||||
strcs r3, [r0], #4
|
||||
strmih r4, [r0], #2
|
||||
tst r2, #0x1
|
||||
ldrneb r3, [r1] /* last byte */
|
||||
@@ -200,34 +335,34 @@ non_congruent:
|
||||
* here source is aligned to 4 bytes
|
||||
* but destination is not.
|
||||
*
|
||||
* in the code below r2 is the number of bytes read
|
||||
* in the code below r2 is the number of bytes read
|
||||
* (the number of bytes written is always smaller, because we have
|
||||
* partial words in the shift queue)
|
||||
*/
|
||||
cmp r2, #4
|
||||
blo copy_last_3_and_return
|
||||
|
||||
|
||||
/* Use post-incriment mode for stm to spill r5-r11 to reserved stack
|
||||
* frame. Don't update sp.
|
||||
*/
|
||||
stmea sp, {r5-r11}
|
||||
|
||||
|
||||
/* compute shifts needed to align src to dest */
|
||||
rsb r5, r0, #0
|
||||
and r5, r5, #3 /* r5 = # bytes in partial words */
|
||||
mov r12, r5, lsl #3 /* r12 = right */
|
||||
mov r12, r5, lsl #3 /* r12 = right */
|
||||
rsb lr, r12, #32 /* lr = left */
|
||||
|
||||
|
||||
/* read the first word */
|
||||
ldr r3, [r1], #4
|
||||
sub r2, r2, #4
|
||||
|
||||
|
||||
/* write a partial word (0 to 3 bytes), such that destination
|
||||
* becomes aligned to 32 bits (r5 = nb of words to copy for alignment)
|
||||
*/
|
||||
movs r5, r5, lsl #31
|
||||
strmib r3, [r0], #1
|
||||
movmi r3, r3, lsr #8
|
||||
movmi r3, r3, lsr #8
|
||||
strcsb r3, [r0], #1
|
||||
movcs r3, r3, lsr #8
|
||||
strcsb r3, [r0], #1
|
||||
@@ -235,7 +370,7 @@ non_congruent:
|
||||
|
||||
cmp r2, #4
|
||||
blo partial_word_tail
|
||||
|
||||
|
||||
/* Align destination to 32 bytes (cache line boundary) */
|
||||
1: tst r0, #0x1c
|
||||
beq 2f
|
||||
@@ -366,7 +501,7 @@ partial_word_tail:
|
||||
strcsb r3, [r0], #1
|
||||
movcs r3, r3, lsr #8
|
||||
strcsb r3, [r0], #1
|
||||
|
||||
|
||||
/* Refill spilled registers from the stack. Don't update sp. */
|
||||
ldmfd sp, {r5-r11}
|
||||
|
||||
@@ -383,5 +518,7 @@ copy_last_3_and_return:
|
||||
add sp, sp, #28
|
||||
ldmfd sp!, {r0, r4, lr}
|
||||
bx lr
|
||||
.fnend
|
||||
END(memcpy)
|
||||
|
||||
|
||||
#endif /* __ARM_ARCH__ < 7 */
|
||||
|
@@ -25,15 +25,8 @@
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
.text
|
||||
|
||||
.global memset
|
||||
.type memset, %function
|
||||
|
||||
.global bzero
|
||||
.type bzero, %function
|
||||
|
||||
.align
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
* Optimized memset() for ARM.
|
||||
@@ -41,15 +34,15 @@
|
||||
* memset() returns its first argument.
|
||||
*/
|
||||
|
||||
bzero:
|
||||
ENTRY(bzero)
|
||||
mov r2, r1
|
||||
mov r1, #0
|
||||
END(bzero)
|
||||
|
||||
memset:
|
||||
ENTRY(memset)
|
||||
/* compute the offset to align the destination
|
||||
* offset = (4-(src&3))&3 = -src & 3
|
||||
*/
|
||||
.fnstart
|
||||
.save {r0, r4-r7, lr}
|
||||
stmfd sp!, {r0, r4-r7, lr}
|
||||
rsb r3, r0, #0
|
||||
@@ -80,7 +73,7 @@ memset:
|
||||
|
||||
rsb r3, r0, #0
|
||||
ands r3, r3, #0x1C
|
||||
beq aligned32
|
||||
beq 3f
|
||||
cmp r3, r2
|
||||
andhi r3, r2, #0x1C
|
||||
sub r2, r2, r3
|
||||
@@ -93,7 +86,7 @@ memset:
|
||||
movs r3, r3, lsl #2
|
||||
strcs r1, [r0], #4
|
||||
|
||||
aligned32:
|
||||
3:
|
||||
subs r2, r2, #32
|
||||
mov r3, r1
|
||||
bmi 2f
|
||||
@@ -113,5 +106,4 @@ aligned32:
|
||||
strcsb r1, [r0]
|
||||
ldmfd sp!, {r0, r4-r7, lr}
|
||||
bx lr
|
||||
.fnend
|
||||
|
||||
END(memset)
|
||||
|
@@ -3,6 +3,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1997 Mark Brinicombe
|
||||
* Copyright (c) 2010 Android Open Source Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -35,6 +36,7 @@
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
#include <machine/cpu-features.h>
|
||||
|
||||
/*
|
||||
* C library -- setjmp, longjmp
|
||||
@@ -57,24 +59,27 @@ ENTRY(setjmp)
|
||||
ldmfd sp!, {r0, r14}
|
||||
|
||||
/* Store signal mask */
|
||||
str r1, [r0, #(25 * 4)]
|
||||
str r1, [r0, #(_JB_SIGMASK * 4)]
|
||||
|
||||
ldr r1, .Lsetjmp_magic
|
||||
str r1, [r0], #4
|
||||
str r1, [r0, #(_JB_MAGIC * 4)]
|
||||
|
||||
#ifdef SOFTFLOAT
|
||||
add r0, r0, #52
|
||||
#else
|
||||
/* Store fp registers */
|
||||
sfm f4, 4, [r0], #48
|
||||
/* Store fpsr */
|
||||
rfs r1
|
||||
str r1, [r0], #0x0004
|
||||
#endif /*SOFTFLOAT*/
|
||||
/* Store integer registers */
|
||||
stmia r0, {r4-r14}
|
||||
mov r0, #0x00000000
|
||||
bx lr
|
||||
/* Store core registers */
|
||||
add r1, r0, #(_JB_CORE_BASE * 4)
|
||||
stmia r1, {r4-r14}
|
||||
|
||||
#ifdef __ARM_HAVE_VFP
|
||||
/* Store floating-point registers */
|
||||
add r1, r0, #(_JB_FLOAT_BASE * 4)
|
||||
vstmia r1, {d8-d15}
|
||||
/* Store floating-point state */
|
||||
fmrx r1, fpscr
|
||||
str r1, [r0, #(_JB_FLOAT_STATE * 4)]
|
||||
#endif /* __ARM_HAVE_VFP */
|
||||
|
||||
mov r0, #0x00000000
|
||||
bx lr
|
||||
END(setjmp)
|
||||
|
||||
.Lsetjmp_magic:
|
||||
.word _JB_MAGIC_SETJMP
|
||||
@@ -82,12 +87,12 @@ ENTRY(setjmp)
|
||||
|
||||
ENTRY(longjmp)
|
||||
ldr r2, .Lsetjmp_magic
|
||||
ldr r3, [r0]
|
||||
ldr r3, [r0, #(_JB_MAGIC * 4)]
|
||||
teq r2, r3
|
||||
bne botch
|
||||
|
||||
/* Fetch signal mask */
|
||||
ldr r2, [r0, #(25 * 4)]
|
||||
ldr r2, [r0, #(_JB_SIGMASK * 4)]
|
||||
|
||||
/* Set signal mask */
|
||||
stmfd sp!, {r0, r1, r14}
|
||||
@@ -99,18 +104,18 @@ ENTRY(longjmp)
|
||||
add sp, sp, #4 /* unalign the stack */
|
||||
ldmfd sp!, {r0, r1, r14}
|
||||
|
||||
add r0, r0, #4
|
||||
#ifdef SOFTFLOAT
|
||||
add r0, r0, #52
|
||||
#else
|
||||
/* Restore fp registers */
|
||||
lfm f4, 4, [r0], #48
|
||||
/* Restore FPSR */
|
||||
ldr r4, [r0], #0x0004
|
||||
wfs r4
|
||||
#endif /* SOFTFLOAT */
|
||||
/* Restore integer registers */
|
||||
ldmia r0, {r4-r14}
|
||||
#ifdef __ARM_HAVE_VFP
|
||||
/* Restore floating-point registers */
|
||||
add r2, r0, #(_JB_FLOAT_BASE * 4)
|
||||
vldmia r2, {d8-d15}
|
||||
/* Restore floating-point state */
|
||||
ldr r2, [r0, #(_JB_FLOAT_STATE * 4)]
|
||||
fmxr fpscr, r2
|
||||
#endif /* __ARM_HAVE_VFP */
|
||||
|
||||
/* Restore core registers */
|
||||
add r2, r0, #(_JB_CORE_BASE * 4)
|
||||
ldmia r2, {r4-r14}
|
||||
|
||||
/* Validate sp and r14 */
|
||||
teq sp, #0
|
||||
@@ -134,3 +139,4 @@ botch:
|
||||
bl PIC_SYM(_C_LABEL(longjmperror), PLT)
|
||||
bl PIC_SYM(_C_LABEL(abort), PLT)
|
||||
b . - 8 /* Cannot get here */
|
||||
END(longjmp)
|
||||
|
@@ -33,6 +33,8 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#define _ALIGN_TEXT .align 0
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
|
||||
@@ -50,6 +52,7 @@ ENTRY(sigsetjmp)
|
||||
teq r1, #0
|
||||
beq PIC_SYM(_C_LABEL(_setjmp), PLT)
|
||||
b PIC_SYM(_C_LABEL(setjmp), PLT)
|
||||
END(sigsetjmp)
|
||||
|
||||
.L_setjmp_magic:
|
||||
.word _JB_MAGIC__SETJMP
|
||||
@@ -60,3 +63,4 @@ ENTRY(siglongjmp)
|
||||
teq r2, r3
|
||||
beq PIC_SYM(_C_LABEL(_longjmp), PLT)
|
||||
b PIC_SYM(_C_LABEL(longjmp), PLT)
|
||||
END(siglongjmp)
|
||||
|
317
libc/arch-arm/bionic/strcmp.S
Normal file
317
libc/arch-arm/bionic/strcmp.S
Normal file
@@ -0,0 +1,317 @@
|
||||
/*
|
||||
* Copyright (c) 2011 The Android Open Source Project
|
||||
* Copyright (c) 2008 ARM Ltd
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
.text
|
||||
|
||||
#ifdef __ARMEB__
|
||||
#define SHFT2LSB lsl
|
||||
#define SHFT2LSBEQ lsleq
|
||||
#define SHFT2MSB lsr
|
||||
#define SHFT2MSBEQ lsreq
|
||||
#define MSB 0x000000ff
|
||||
#define LSB 0xff000000
|
||||
#else
|
||||
#define SHFT2LSB lsr
|
||||
#define SHFT2LSBEQ lsreq
|
||||
#define SHFT2MSB lsl
|
||||
#define SHFT2MSBEQ lsleq
|
||||
#define MSB 0xff000000
|
||||
#define LSB 0x000000ff
|
||||
#endif
|
||||
|
||||
#define magic1(REG) REG
|
||||
#define magic2(REG) REG, lsl #7
|
||||
|
||||
ENTRY(strcmp)
|
||||
PLD(r0, #0)
|
||||
PLD(r1, #0)
|
||||
eor r2, r0, r1
|
||||
tst r2, #3
|
||||
|
||||
/* Strings not at same byte offset from a word boundary. */
|
||||
bne .Lstrcmp_unaligned
|
||||
ands r2, r0, #3
|
||||
bic r0, r0, #3
|
||||
bic r1, r1, #3
|
||||
ldr ip, [r0], #4
|
||||
it eq
|
||||
ldreq r3, [r1], #4
|
||||
beq 1f
|
||||
|
||||
/* Although s1 and s2 have identical initial alignment, they are
|
||||
* not currently word aligned. Rather than comparing bytes,
|
||||
* make sure that any bytes fetched from before the addressed
|
||||
* bytes are forced to 0xff. Then they will always compare
|
||||
* equal.
|
||||
*/
|
||||
eor r2, r2, #3
|
||||
lsl r2, r2, #3
|
||||
mvn r3, #MSB
|
||||
SHFT2LSB r2, r3, r2
|
||||
ldr r3, [r1], #4
|
||||
orr ip, ip, r2
|
||||
orr r3, r3, r2
|
||||
1:
|
||||
/* Load the 'magic' constant 0x01010101. */
|
||||
str r4, [sp, #-4]!
|
||||
mov r4, #1
|
||||
orr r4, r4, r4, lsl #8
|
||||
orr r4, r4, r4, lsl #16
|
||||
.p2align 2
|
||||
4:
|
||||
PLD(r0, #8)
|
||||
PLD(r1, #8)
|
||||
sub r2, ip, magic1(r4)
|
||||
cmp ip, r3
|
||||
itttt eq
|
||||
|
||||
/* check for any zero bytes in first word */
|
||||
biceq r2, r2, ip
|
||||
tsteq r2, magic2(r4)
|
||||
ldreq ip, [r0], #4
|
||||
ldreq r3, [r1], #4
|
||||
beq 4b
|
||||
2:
|
||||
/* There's a zero or a different byte in the word */
|
||||
SHFT2MSB r0, ip, #24
|
||||
SHFT2LSB ip, ip, #8
|
||||
cmp r0, #1
|
||||
it cs
|
||||
cmpcs r0, r3, SHFT2MSB #24
|
||||
it eq
|
||||
SHFT2LSBEQ r3, r3, #8
|
||||
beq 2b
|
||||
/* On a big-endian machine, r0 contains the desired byte in bits
|
||||
* 0-7; on a little-endian machine they are in bits 24-31. In
|
||||
* both cases the other bits in r0 are all zero. For r3 the
|
||||
* interesting byte is at the other end of the word, but the
|
||||
* other bits are not necessarily zero. We need a signed result
|
||||
* representing the differnece in the unsigned bytes, so for the
|
||||
* little-endian case we can't just shift the interesting bits up.
|
||||
*/
|
||||
#ifdef __ARMEB__
|
||||
sub r0, r0, r3, lsr #24
|
||||
#else
|
||||
and r3, r3, #255
|
||||
/* No RSB instruction in Thumb2 */
|
||||
#ifdef __thumb2__
|
||||
lsr r0, r0, #24
|
||||
sub r0, r0, r3
|
||||
#else
|
||||
rsb r0, r3, r0, lsr #24
|
||||
#endif
|
||||
#endif
|
||||
ldr r4, [sp], #4
|
||||
bx lr
|
||||
|
||||
.Lstrcmp_unaligned:
|
||||
wp1 .req r0
|
||||
wp2 .req r1
|
||||
b1 .req r2
|
||||
w1 .req r4
|
||||
w2 .req r5
|
||||
t1 .req ip
|
||||
@ r3 is scratch
|
||||
|
||||
/* First of all, compare bytes until wp1(sp1) is word-aligned. */
|
||||
1:
|
||||
tst wp1, #3
|
||||
beq 2f
|
||||
ldrb r2, [wp1], #1
|
||||
ldrb r3, [wp2], #1
|
||||
cmp r2, #1
|
||||
it cs
|
||||
cmpcs r2, r3
|
||||
beq 1b
|
||||
sub r0, r2, r3
|
||||
bx lr
|
||||
|
||||
2:
|
||||
str r5, [sp, #-4]!
|
||||
str r4, [sp, #-4]!
|
||||
mov b1, #1
|
||||
orr b1, b1, b1, lsl #8
|
||||
orr b1, b1, b1, lsl #16
|
||||
|
||||
and t1, wp2, #3
|
||||
bic wp2, wp2, #3
|
||||
ldr w1, [wp1], #4
|
||||
ldr w2, [wp2], #4
|
||||
cmp t1, #2
|
||||
beq 2f
|
||||
bhi 3f
|
||||
|
||||
/* Critical inner Loop: Block with 3 bytes initial overlap */
|
||||
.p2align 2
|
||||
1:
|
||||
bic t1, w1, #MSB
|
||||
cmp t1, w2, SHFT2LSB #8
|
||||
sub r3, w1, b1
|
||||
bic r3, r3, w1
|
||||
bne 4f
|
||||
ands r3, r3, b1, lsl #7
|
||||
it eq
|
||||
ldreq w2, [wp2], #4
|
||||
bne 5f
|
||||
eor t1, t1, w1
|
||||
cmp t1, w2, SHFT2MSB #24
|
||||
bne 6f
|
||||
ldr w1, [wp1], #4
|
||||
b 1b
|
||||
4:
|
||||
SHFT2LSB w2, w2, #8
|
||||
b 8f
|
||||
|
||||
5:
|
||||
#ifdef __ARMEB__
|
||||
/* The syndrome value may contain false ones if the string ends
|
||||
* with the bytes 0x01 0x00
|
||||
*/
|
||||
tst w1, #0xff000000
|
||||
itt ne
|
||||
tstne w1, #0x00ff0000
|
||||
tstne w1, #0x0000ff00
|
||||
beq 7f
|
||||
#else
|
||||
bics r3, r3, #0xff000000
|
||||
bne 7f
|
||||
#endif
|
||||
ldrb w2, [wp2]
|
||||
SHFT2LSB t1, w1, #24
|
||||
#ifdef __ARMEB__
|
||||
lsl w2, w2, #24
|
||||
#endif
|
||||
b 8f
|
||||
|
||||
6:
|
||||
SHFT2LSB t1, w1, #24
|
||||
and w2, w2, #LSB
|
||||
b 8f
|
||||
|
||||
/* Critical inner Loop: Block with 2 bytes initial overlap */
|
||||
.p2align 2
|
||||
2:
|
||||
SHFT2MSB t1, w1, #16
|
||||
sub r3, w1, b1
|
||||
SHFT2LSB t1, t1, #16
|
||||
bic r3, r3, w1
|
||||
cmp t1, w2, SHFT2LSB #16
|
||||
bne 4f
|
||||
ands r3, r3, b1, lsl #7
|
||||
it eq
|
||||
ldreq w2, [wp2], #4
|
||||
bne 5f
|
||||
eor t1, t1, w1
|
||||
cmp t1, w2, SHFT2MSB #16
|
||||
bne 6f
|
||||
ldr w1, [wp1], #4
|
||||
b 2b
|
||||
|
||||
5:
|
||||
#ifdef __ARMEB__
|
||||
/* The syndrome value may contain false ones if the string ends
|
||||
* with the bytes 0x01 0x00
|
||||
*/
|
||||
tst w1, #0xff000000
|
||||
it ne
|
||||
tstne w1, #0x00ff0000
|
||||
beq 7f
|
||||
#else
|
||||
lsls r3, r3, #16
|
||||
bne 7f
|
||||
#endif
|
||||
ldrh w2, [wp2]
|
||||
SHFT2LSB t1, w1, #16
|
||||
#ifdef __ARMEB__
|
||||
lsl w2, w2, #16
|
||||
#endif
|
||||
b 8f
|
||||
|
||||
6:
|
||||
SHFT2MSB w2, w2, #16
|
||||
SHFT2LSB t1, w1, #16
|
||||
4:
|
||||
SHFT2LSB w2, w2, #16
|
||||
b 8f
|
||||
|
||||
/* Critical inner Loop: Block with 1 byte initial overlap */
|
||||
.p2align 2
|
||||
3:
|
||||
and t1, w1, #LSB
|
||||
cmp t1, w2, SHFT2LSB #24
|
||||
sub r3, w1, b1
|
||||
bic r3, r3, w1
|
||||
bne 4f
|
||||
ands r3, r3, b1, lsl #7
|
||||
it eq
|
||||
ldreq w2, [wp2], #4
|
||||
bne 5f
|
||||
eor t1, t1, w1
|
||||
cmp t1, w2, SHFT2MSB #8
|
||||
bne 6f
|
||||
ldr w1, [wp1], #4
|
||||
b 3b
|
||||
4:
|
||||
SHFT2LSB w2, w2, #24
|
||||
b 8f
|
||||
5:
|
||||
/* The syndrome value may contain false ones if the string ends
|
||||
* with the bytes 0x01 0x00
|
||||
*/
|
||||
tst w1, #LSB
|
||||
beq 7f
|
||||
ldr w2, [wp2], #4
|
||||
6:
|
||||
SHFT2LSB t1, w1, #8
|
||||
bic w2, w2, #MSB
|
||||
b 8f
|
||||
7:
|
||||
mov r0, #0
|
||||
ldr r4, [sp], #4
|
||||
ldr r5, [sp], #4
|
||||
bx lr
|
||||
|
||||
8:
|
||||
and r2, t1, #LSB
|
||||
and r0, w2, #LSB
|
||||
cmp r0, #1
|
||||
it cs
|
||||
cmpcs r0, r2
|
||||
itt eq
|
||||
SHFT2LSBEQ t1, t1, #8
|
||||
SHFT2LSBEQ w2, w2, #8
|
||||
beq 8b
|
||||
sub r0, r2, r0
|
||||
ldr r4, [sp], #4
|
||||
ldr r5, [sp], #4
|
||||
bx lr
|
||||
END(strcmp)
|
133
libc/arch-arm/bionic/strcpy.S
Normal file
133
libc/arch-arm/bionic/strcpy.S
Normal file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
* Copyright (c) 2008 ARM Ltd
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the company may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Android adaptation and tweak by Jim Huang <jserv@0xlab.org>.
|
||||
*/
|
||||
|
||||
#include <machine/cpu-features.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
ENTRY(strcpy)
|
||||
PLD(r1, #0)
|
||||
eor r2, r0, r1
|
||||
mov ip, r0
|
||||
tst r2, #3
|
||||
bne 4f
|
||||
tst r1, #3
|
||||
bne 3f
|
||||
5:
|
||||
str r5, [sp, #-4]!
|
||||
mov r5, #0x01
|
||||
orr r5, r5, r5, lsl #8
|
||||
orr r5, r5, r5, lsl #16
|
||||
|
||||
str r4, [sp, #-4]!
|
||||
tst r1, #4
|
||||
ldr r3, [r1], #4
|
||||
beq 2f
|
||||
sub r2, r3, r5
|
||||
bics r2, r2, r3
|
||||
tst r2, r5, lsl #7
|
||||
itt eq
|
||||
streq r3, [ip], #4
|
||||
ldreq r3, [r1], #4
|
||||
bne 1f
|
||||
/* Inner loop. We now know that r1 is 64-bit aligned, so we
|
||||
can safely fetch up to two words. This allows us to avoid
|
||||
load stalls. */
|
||||
.p2align 2
|
||||
2:
|
||||
PLD(r1, #8)
|
||||
ldr r4, [r1], #4
|
||||
sub r2, r3, r5
|
||||
bics r2, r2, r3
|
||||
tst r2, r5, lsl #7
|
||||
sub r2, r4, r5
|
||||
bne 1f
|
||||
str r3, [ip], #4
|
||||
bics r2, r2, r4
|
||||
tst r2, r5, lsl #7
|
||||
itt eq
|
||||
ldreq r3, [r1], #4
|
||||
streq r4, [ip], #4
|
||||
beq 2b
|
||||
mov r3, r4
|
||||
1:
|
||||
#ifdef __ARMEB__
|
||||
rors r3, r3, #24
|
||||
#endif
|
||||
strb r3, [ip], #1
|
||||
tst r3, #0xff
|
||||
#ifdef __ARMEL__
|
||||
ror r3, r3, #8
|
||||
#endif
|
||||
bne 1b
|
||||
ldr r4, [sp], #4
|
||||
ldr r5, [sp], #4
|
||||
bx lr
|
||||
|
||||
/* Strings have the same offset from word alignment, but it's
|
||||
not zero. */
|
||||
3:
|
||||
tst r1, #1
|
||||
beq 1f
|
||||
ldrb r2, [r1], #1
|
||||
strb r2, [ip], #1
|
||||
cmp r2, #0
|
||||
it eq
|
||||
bxeq lr
|
||||
1:
|
||||
tst r1, #2
|
||||
beq 5b
|
||||
ldrh r2, [r1], #2
|
||||
#ifdef __ARMEB__
|
||||
tst r2, #0xff00
|
||||
iteet ne
|
||||
strneh r2, [ip], #2
|
||||
lsreq r2, r2, #8
|
||||
streqb r2, [ip]
|
||||
tstne r2, #0xff
|
||||
#else
|
||||
tst r2, #0xff
|
||||
itet ne
|
||||
strneh r2, [ip], #2
|
||||
streqb r2, [ip]
|
||||
tstne r2, #0xff00
|
||||
#endif
|
||||
bne 5b
|
||||
bx lr
|
||||
|
||||
/* src and dst do not have a common word-alignement. Fall back to
|
||||
byte copying. */
|
||||
4:
|
||||
ldrb r2, [r1], #1
|
||||
strb r2, [ip], #1
|
||||
cmp r2, #0
|
||||
bne 4b
|
||||
bx lr
|
||||
END(strcpy)
|
51
libc/arch-arm/bionic/tgkill.S
Normal file
51
libc/arch-arm/bionic/tgkill.S
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
/* unlike our auto-generated syscall stubs, this code saves lr
|
||||
on the stack, as well as a few other registers. this makes
|
||||
our stack unwinder happy, when we generate debug stack
|
||||
traces after the C library or other parts of the system
|
||||
abort due to a fatal runtime error (e.g. detection
|
||||
of a corrupted malloc heap).
|
||||
*/
|
||||
|
||||
#include <sys/linux-syscalls.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef __NR_tgkill
|
||||
#define __NR_tgkill 268
|
||||
#endif
|
||||
|
||||
ENTRY(tgkill)
|
||||
stmfd sp!, {r4-r7, ip, lr}
|
||||
ldr r7, =__NR_tgkill
|
||||
swi #0
|
||||
ldmfd sp!, {r4-r7, ip, lr}
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
END(tgkill)
|
@@ -32,18 +32,15 @@
|
||||
abort due to a fatal runtime error (e.g. detection
|
||||
of a corrupted malloc heap).
|
||||
*/
|
||||
|
||||
#include <sys/linux-syscalls.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef __NR_tkill
|
||||
#define __NR_tkill 238
|
||||
#endif
|
||||
|
||||
.text
|
||||
.type tkill, #function
|
||||
.globl tkill
|
||||
.align 4
|
||||
|
||||
tkill:
|
||||
ENTRY(tkill)
|
||||
stmfd sp!, {r4-r7, ip, lr}
|
||||
ldr r7, =__NR_tkill
|
||||
swi #0
|
||||
@@ -51,3 +48,4 @@ tkill:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
END(tkill)
|
||||
|
@@ -1,10 +1,89 @@
|
||||
/* $OpenBSD: endian.h,v 1.3 2005/12/13 00:35:23 millert Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _ARM_ENDIAN_H_
|
||||
#define _ARM_ENDIAN_H_
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
/*
|
||||
* REV and REV16 weren't available on ARM5 or ARM4.
|
||||
* We don't include <machine/cpu-features.h> because it pollutes the
|
||||
* namespace with macros like PLD.
|
||||
*/
|
||||
#if !defined __ARM_ARCH_5__ && !defined __ARM_ARCH_5T__ && \
|
||||
!defined __ARM_ARCH_5TE__ && !defined __ARM_ARCH_5TEJ__ && \
|
||||
!defined __ARM_ARCH_4T__ && !defined __ARM_ARCH_4__
|
||||
|
||||
/* According to RealView Assembler User's Guide, REV and REV16 are available
|
||||
* in Thumb code and 16-bit instructions when used in Thumb-2 code.
|
||||
*
|
||||
* REV Rd, Rm
|
||||
* Rd and Rm must both be Lo registers.
|
||||
*
|
||||
* REV16 Rd, Rm
|
||||
* Rd and Rm must both be Lo registers.
|
||||
*
|
||||
* The +l constraint takes care of this without constraining us in ARM mode.
|
||||
*/
|
||||
#define __swap16md(x) ({ \
|
||||
register u_int16_t _x = (x); \
|
||||
__asm volatile ("rev16 %0, %0" : "+l" (_x)); \
|
||||
_x; \
|
||||
})
|
||||
|
||||
#define __swap32md(x) ({ \
|
||||
register u_int32_t _x = (x); \
|
||||
__asm volatile ("rev %0, %0" : "+l" (_x)); \
|
||||
_x; \
|
||||
})
|
||||
|
||||
#define __swap64md(x) ({ \
|
||||
u_int64_t _swap64md_x = (x); \
|
||||
(u_int64_t) __swap32md(_swap64md_x >> 32) | \
|
||||
(u_int64_t) __swap32md(_swap64md_x & 0xffffffff) << 32; \
|
||||
})
|
||||
|
||||
/* Tell sys/endian.h we have MD variants of the swap macros. */
|
||||
#define MD_SWAP
|
||||
|
||||
#endif /* __ARM_ARCH__ */
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#ifdef __ARMEB__
|
||||
#define _BYTE_ORDER _BIG_ENDIAN
|
||||
#else
|
||||
#define _BYTE_ORDER _LITTLE_ENDIAN
|
||||
#endif
|
||||
#define __STRICT_ALIGNMENT
|
||||
#define __STRICT_ALIGNMENT
|
||||
#include <sys/types.h>
|
||||
#include <sys/endian.h>
|
||||
|
||||
#endif /* !_ARM_ENDIAN_H_ */
|
||||
|
@@ -46,8 +46,6 @@ typedef long ssize_t;
|
||||
typedef long ptrdiff_t;
|
||||
#endif
|
||||
|
||||
//#include <linux/types.h>
|
||||
|
||||
/* 7.18.1.1 Exact-width integer types */
|
||||
typedef __signed char __int8_t;
|
||||
typedef unsigned char __uint8_t;
|
||||
|
@@ -70,7 +70,13 @@
|
||||
#define _ASM_TYPE_FUNCTION #function
|
||||
#define _ASM_TYPE_OBJECT #object
|
||||
#define _ENTRY(x) \
|
||||
.text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x:
|
||||
.text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x: .fnstart
|
||||
|
||||
#define _ASM_SIZE(x) .size x, .-x;
|
||||
|
||||
#define _END(x) \
|
||||
.fnend; \
|
||||
_ASM_SIZE(x)
|
||||
|
||||
#ifdef GPROF
|
||||
# ifdef __ELF__
|
||||
@@ -86,8 +92,16 @@
|
||||
|
||||
#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
|
||||
#define ENTRY_NP(y) _ENTRY(_C_LABEL(y))
|
||||
#define END(y) _END(_C_LABEL(y))
|
||||
#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
|
||||
#define ASENTRY_NP(y) _ENTRY(_ASM_LABEL(y))
|
||||
#define ASEND(y) _END(_ASM_LABEL(y))
|
||||
|
||||
#ifdef __ELF__
|
||||
#define ENTRY_PRIVATE(y) ENTRY(y); .hidden _C_LABEL(y)
|
||||
#else
|
||||
#define ENTRY_PRIVATE(y) ENTRY(y)
|
||||
#endif
|
||||
|
||||
#define ASMSTR .asciz
|
||||
|
||||
|
@@ -38,7 +38,7 @@
|
||||
* IMPORTANT: We have no intention to support anything below an ARMv4T !
|
||||
*/
|
||||
|
||||
/* _ARM_ARCH_REVISION is a number corresponding to the ARM revision
|
||||
/* __ARM_ARCH__ is a number corresponding to the ARM revision
|
||||
* we're going to support
|
||||
*
|
||||
* it looks like our toolchain doesn't define __ARM_ARCH__
|
||||
@@ -142,15 +142,50 @@
|
||||
*
|
||||
* ldr pc, [<some address>]
|
||||
*
|
||||
* note that this affects any instruction that explicitely changes the
|
||||
* note that this affects any instruction that explicitly changes the
|
||||
* value of the pc register, including ldm { ...,pc } or 'add pc, #offset'
|
||||
*/
|
||||
#if __ARM_ARCH__ >= 5
|
||||
# define __ARM_HAVE_PC_INTERWORK
|
||||
#endif
|
||||
|
||||
/* define __ARM_HAVE_LDREX_STREX for ARMv6 and ARMv7 architecture to be
|
||||
* used in replacement of deprecated swp instruction
|
||||
*/
|
||||
#if __ARM_ARCH__ >= 6
|
||||
# define __ARM_HAVE_LDREX_STREX
|
||||
#endif
|
||||
|
||||
/* define __ARM_HAVE_DMB for ARMv7 architecture
|
||||
*/
|
||||
#if __ARM_ARCH__ >= 7
|
||||
# define __ARM_HAVE_DMB
|
||||
#endif
|
||||
|
||||
/* define __ARM_HAVE_LDREXD for ARMv7 architecture
|
||||
* (also present in ARMv6K, but not implemented in ARMv7-M, neither of which
|
||||
* we care about)
|
||||
*/
|
||||
#if __ARM_ARCH__ >= 7
|
||||
# define __ARM_HAVE_LDREXD
|
||||
#endif
|
||||
|
||||
/* define _ARM_HAVE_VFP if we have VFPv3
|
||||
*/
|
||||
#if __ARM_ARCH__ >= 7 && defined __VFP_FP__
|
||||
# define __ARM_HAVE_VFP
|
||||
#endif
|
||||
|
||||
/* define _ARM_HAVE_NEON for ARMv7 architecture if we support the
|
||||
* Neon SIMD instruction set extensions. This also implies
|
||||
* that VFPv3-D32 is supported.
|
||||
*/
|
||||
#if __ARM_ARCH__ >= 7 && defined __ARM_NEON__
|
||||
# define __ARM_HAVE_NEON
|
||||
#endif
|
||||
|
||||
/* Assembly-only macros */
|
||||
#ifdef __ASSEMBLY__
|
||||
|
||||
/* define a handy PLD(address) macro since the cache preload
|
||||
* is an optional opcode
|
||||
@@ -161,4 +196,6 @@
|
||||
# define PLD(reg,offset) /* nothing */
|
||||
#endif
|
||||
|
||||
#endif /* ! __ASSEMBLY__ */
|
||||
|
||||
#endif /* _ARM_MACHINE_CPU_FEATURES_H */
|
||||
|
@@ -1,87 +1,82 @@
|
||||
/* $OpenBSD: setjmp.h,v 1.1 2004/02/01 05:09:49 drahn Exp $ */
|
||||
/* $NetBSD: setjmp.h,v 1.2 2001/08/25 14:45:59 bjh21 Exp $ */
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* machine/setjmp.h: machine dependent setjmp-related information.
|
||||
*/
|
||||
|
||||
#ifdef __ELF__
|
||||
#define _JBLEN 64 /* size, in longs, of a jmp_buf */
|
||||
#else
|
||||
#define _JBLEN 29 /* size, in longs, of a jmp_buf */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* NOTE: The internal structure of a jmp_buf is *PRIVATE*
|
||||
* This information is provided as there is software
|
||||
* that fiddles with this with obtain the stack pointer
|
||||
* (yes really ! and its commercial !).
|
||||
/* _JBLEN is the size of a jmp_buf in longs.
|
||||
* Do not modify this value or you will break the ABI !
|
||||
*
|
||||
* Description of the setjmp buffer
|
||||
*
|
||||
* word 0 magic number (dependant on creator)
|
||||
* 1 - 3 f4 fp register 4
|
||||
* 4 - 6 f5 fp register 5
|
||||
* 7 - 9 f6 fp register 6
|
||||
* 10 - 12 f7 fp register 7
|
||||
* 13 fpsr fp status register
|
||||
* 14 r4 register 4
|
||||
* 15 r5 register 5
|
||||
* 16 r6 register 6
|
||||
* 17 r7 register 7
|
||||
* 18 r8 register 8
|
||||
* 19 r9 register 9
|
||||
* 20 r10 register 10 (sl)
|
||||
* 21 r11 register 11 (fp)
|
||||
* 22 r12 register 12 (ip)
|
||||
* 23 r13 register 13 (sp)
|
||||
* 24 r14 register 14 (lr)
|
||||
* 25 signal mask (dependant on magic)
|
||||
* 26 (con't)
|
||||
* 27 (con't)
|
||||
* 28 (con't)
|
||||
*
|
||||
* The magic number number identifies the jmp_buf and
|
||||
* how the buffer was created as well as providing
|
||||
* a sanity check
|
||||
*
|
||||
* A side note I should mention - Please do not tamper
|
||||
* with the floating point fields. While they are
|
||||
* always saved and restored at the moment this cannot
|
||||
* be garenteed especially if the compiler happens
|
||||
* to be generating soft-float code so no fp
|
||||
* registers will be used.
|
||||
*
|
||||
* Whilst this can be seen an encouraging people to
|
||||
* use the setjmp buffer in this way I think that it
|
||||
* is for the best then if changes occur compiles will
|
||||
* break rather than just having new builds falling over
|
||||
* mysteriously.
|
||||
* This value comes from the original OpenBSD ARM-specific header
|
||||
* that was replaced by this one.
|
||||
*/
|
||||
#define _JBLEN 64
|
||||
|
||||
/* According to the ARM AAPCS document, we only need to save
|
||||
* the following registers:
|
||||
*
|
||||
* Core r4-r14
|
||||
*
|
||||
* VFP d8-d15 (see section 5.1.2.1)
|
||||
*
|
||||
* Registers s16-s31 (d8-d15, q4-q7) must be preserved across subroutine
|
||||
* calls; registers s0-s15 (d0-d7, q0-q3) do not need to be preserved
|
||||
* (and can be used for passing arguments or returning results in standard
|
||||
* procedure-call variants). Registers d16-d31 (q8-q15), if present, do
|
||||
* not need to be preserved.
|
||||
*
|
||||
* FPSCR saved because GLibc does saves it too.
|
||||
*
|
||||
*/
|
||||
|
||||
/* The internal structure of a jmp_buf is totally private.
|
||||
* Current layout (may change in the future):
|
||||
*
|
||||
* word name description
|
||||
* 0 magic magic number
|
||||
* 1 sigmask signal mask (not used with _setjmp / _longjmp)
|
||||
* 2 float_base base of float registers (d8 to d15)
|
||||
* 18 float_state floating-point status and control register
|
||||
* 19 core_base base of core registers (r4 to r14)
|
||||
* 30 reserved reserved entries (room to grow)
|
||||
* 64
|
||||
*
|
||||
* NOTE: float_base must be at an even word index, since the
|
||||
* FP registers will be loaded/stored with instructions
|
||||
* that expect 8-byte alignment.
|
||||
*/
|
||||
|
||||
#define _JB_MAGIC 0
|
||||
#define _JB_SIGMASK (_JB_MAGIC+1)
|
||||
#define _JB_FLOAT_BASE (_JB_SIGMASK+1)
|
||||
#define _JB_FLOAT_STATE (_JB_FLOAT_BASE + (15-8+1)*2)
|
||||
#define _JB_CORE_BASE (_JB_FLOAT_STATE+1)
|
||||
|
||||
#define _JB_MAGIC__SETJMP 0x4278f500
|
||||
#define _JB_MAGIC_SETJMP 0x4278f501
|
||||
|
||||
/* Valid for all jmp_buf's */
|
||||
|
||||
#define _JB_MAGIC 0
|
||||
#define _JB_REG_F4 1
|
||||
#define _JB_REG_F5 4
|
||||
#define _JB_REG_F6 7
|
||||
#define _JB_REG_F7 10
|
||||
#define _JB_REG_FPSR 13
|
||||
#define _JB_REG_R4 14
|
||||
#define _JB_REG_R5 15
|
||||
#define _JB_REG_R6 16
|
||||
#define _JB_REG_R7 17
|
||||
#define _JB_REG_R8 18
|
||||
#define _JB_REG_R9 19
|
||||
#define _JB_REG_R10 20
|
||||
#define _JB_REG_R11 21
|
||||
#define _JB_REG_R12 22
|
||||
#define _JB_REG_R13 23
|
||||
#define _JB_REG_R14 24
|
||||
|
||||
/* Only valid with the _JB_MAGIC_SETJMP magic */
|
||||
|
||||
#define _JB_SIGMASK 25
|
||||
|
@@ -3,10 +3,10 @@ syscall_src :=
|
||||
syscall_src += arch-arm/syscalls/_exit.S
|
||||
syscall_src += arch-arm/syscalls/_exit_thread.S
|
||||
syscall_src += arch-arm/syscalls/__fork.S
|
||||
syscall_src += arch-arm/syscalls/waitid.S
|
||||
syscall_src += arch-arm/syscalls/__clone.S
|
||||
syscall_src += arch-arm/syscalls/__waitid.S
|
||||
syscall_src += arch-arm/syscalls/__sys_clone.S
|
||||
syscall_src += arch-arm/syscalls/execve.S
|
||||
syscall_src += arch-arm/syscalls/setuid.S
|
||||
syscall_src += arch-arm/syscalls/__setuid.S
|
||||
syscall_src += arch-arm/syscalls/getuid.S
|
||||
syscall_src += arch-arm/syscalls/getgid.S
|
||||
syscall_src += arch-arm/syscalls/geteuid.S
|
||||
@@ -14,13 +14,15 @@ syscall_src += arch-arm/syscalls/getegid.S
|
||||
syscall_src += arch-arm/syscalls/getresuid.S
|
||||
syscall_src += arch-arm/syscalls/getresgid.S
|
||||
syscall_src += arch-arm/syscalls/gettid.S
|
||||
syscall_src += arch-arm/syscalls/readahead.S
|
||||
syscall_src += arch-arm/syscalls/getgroups.S
|
||||
syscall_src += arch-arm/syscalls/getpgid.S
|
||||
syscall_src += arch-arm/syscalls/getppid.S
|
||||
syscall_src += arch-arm/syscalls/getsid.S
|
||||
syscall_src += arch-arm/syscalls/setsid.S
|
||||
syscall_src += arch-arm/syscalls/setgid.S
|
||||
syscall_src += arch-arm/syscalls/setreuid.S
|
||||
syscall_src += arch-arm/syscalls/setresuid.S
|
||||
syscall_src += arch-arm/syscalls/__setreuid.S
|
||||
syscall_src += arch-arm/syscalls/__setresuid.S
|
||||
syscall_src += arch-arm/syscalls/setresgid.S
|
||||
syscall_src += arch-arm/syscalls/__brk.S
|
||||
syscall_src += arch-arm/syscalls/__ptrace.S
|
||||
@@ -37,11 +39,12 @@ syscall_src += arch-arm/syscalls/chroot.S
|
||||
syscall_src += arch-arm/syscalls/prctl.S
|
||||
syscall_src += arch-arm/syscalls/capget.S
|
||||
syscall_src += arch-arm/syscalls/capset.S
|
||||
syscall_src += arch-arm/syscalls/sigaltstack.S
|
||||
syscall_src += arch-arm/syscalls/acct.S
|
||||
syscall_src += arch-arm/syscalls/read.S
|
||||
syscall_src += arch-arm/syscalls/write.S
|
||||
syscall_src += arch-arm/syscalls/__pread64.S
|
||||
syscall_src += arch-arm/syscalls/__pwrite64.S
|
||||
syscall_src += arch-arm/syscalls/pread64.S
|
||||
syscall_src += arch-arm/syscalls/pwrite64.S
|
||||
syscall_src += arch-arm/syscalls/__open.S
|
||||
syscall_src += arch-arm/syscalls/__openat.S
|
||||
syscall_src += arch-arm/syscalls/close.S
|
||||
@@ -56,6 +59,8 @@ syscall_src += arch-arm/syscalls/mprotect.S
|
||||
syscall_src += arch-arm/syscalls/madvise.S
|
||||
syscall_src += arch-arm/syscalls/mlock.S
|
||||
syscall_src += arch-arm/syscalls/munlock.S
|
||||
syscall_src += arch-arm/syscalls/mlockall.S
|
||||
syscall_src += arch-arm/syscalls/munlockall.S
|
||||
syscall_src += arch-arm/syscalls/mincore.S
|
||||
syscall_src += arch-arm/syscalls/__ioctl.S
|
||||
syscall_src += arch-arm/syscalls/readv.S
|
||||
@@ -65,21 +70,28 @@ syscall_src += arch-arm/syscalls/flock.S
|
||||
syscall_src += arch-arm/syscalls/fchmod.S
|
||||
syscall_src += arch-arm/syscalls/dup.S
|
||||
syscall_src += arch-arm/syscalls/pipe.S
|
||||
syscall_src += arch-arm/syscalls/pipe2.S
|
||||
syscall_src += arch-arm/syscalls/dup2.S
|
||||
syscall_src += arch-arm/syscalls/select.S
|
||||
syscall_src += arch-arm/syscalls/ftruncate.S
|
||||
syscall_src += arch-arm/syscalls/ftruncate64.S
|
||||
syscall_src += arch-arm/syscalls/getdents.S
|
||||
syscall_src += arch-arm/syscalls/fsync.S
|
||||
syscall_src += arch-arm/syscalls/fdatasync.S
|
||||
syscall_src += arch-arm/syscalls/fchown.S
|
||||
syscall_src += arch-arm/syscalls/sync.S
|
||||
syscall_src += arch-arm/syscalls/__fcntl64.S
|
||||
syscall_src += arch-arm/syscalls/fstatfs.S
|
||||
syscall_src += arch-arm/syscalls/__fstatfs64.S
|
||||
syscall_src += arch-arm/syscalls/sendfile.S
|
||||
syscall_src += arch-arm/syscalls/fstatat.S
|
||||
syscall_src += arch-arm/syscalls/mkdirat.S
|
||||
syscall_src += arch-arm/syscalls/fchownat.S
|
||||
syscall_src += arch-arm/syscalls/fchmodat.S
|
||||
syscall_src += arch-arm/syscalls/renameat.S
|
||||
syscall_src += arch-arm/syscalls/fsetxattr.S
|
||||
syscall_src += arch-arm/syscalls/fgetxattr.S
|
||||
syscall_src += arch-arm/syscalls/flistxattr.S
|
||||
syscall_src += arch-arm/syscalls/fremovexattr.S
|
||||
syscall_src += arch-arm/syscalls/link.S
|
||||
syscall_src += arch-arm/syscalls/unlink.S
|
||||
syscall_src += arch-arm/syscalls/unlinkat.S
|
||||
@@ -99,10 +111,20 @@ syscall_src += arch-arm/syscalls/rmdir.S
|
||||
syscall_src += arch-arm/syscalls/rename.S
|
||||
syscall_src += arch-arm/syscalls/__getcwd.S
|
||||
syscall_src += arch-arm/syscalls/access.S
|
||||
syscall_src += arch-arm/syscalls/faccessat.S
|
||||
syscall_src += arch-arm/syscalls/symlink.S
|
||||
syscall_src += arch-arm/syscalls/fchdir.S
|
||||
syscall_src += arch-arm/syscalls/truncate.S
|
||||
syscall_src += arch-arm/syscalls/setxattr.S
|
||||
syscall_src += arch-arm/syscalls/lsetxattr.S
|
||||
syscall_src += arch-arm/syscalls/getxattr.S
|
||||
syscall_src += arch-arm/syscalls/lgetxattr.S
|
||||
syscall_src += arch-arm/syscalls/listxattr.S
|
||||
syscall_src += arch-arm/syscalls/llistxattr.S
|
||||
syscall_src += arch-arm/syscalls/removexattr.S
|
||||
syscall_src += arch-arm/syscalls/lremovexattr.S
|
||||
syscall_src += arch-arm/syscalls/__statfs64.S
|
||||
syscall_src += arch-arm/syscalls/unshare.S
|
||||
syscall_src += arch-arm/syscalls/pause.S
|
||||
syscall_src += arch-arm/syscalls/gettimeofday.S
|
||||
syscall_src += arch-arm/syscalls/settimeofday.S
|
||||
@@ -120,6 +142,7 @@ syscall_src += arch-arm/syscalls/__timer_gettime.S
|
||||
syscall_src += arch-arm/syscalls/__timer_getoverrun.S
|
||||
syscall_src += arch-arm/syscalls/__timer_delete.S
|
||||
syscall_src += arch-arm/syscalls/utimes.S
|
||||
syscall_src += arch-arm/syscalls/utimensat.S
|
||||
syscall_src += arch-arm/syscalls/sigaction.S
|
||||
syscall_src += arch-arm/syscalls/sigprocmask.S
|
||||
syscall_src += arch-arm/syscalls/__sigsuspend.S
|
||||
@@ -150,6 +173,11 @@ syscall_src += arch-arm/syscalls/sched_getparam.S
|
||||
syscall_src += arch-arm/syscalls/sched_get_priority_max.S
|
||||
syscall_src += arch-arm/syscalls/sched_get_priority_min.S
|
||||
syscall_src += arch-arm/syscalls/sched_rr_get_interval.S
|
||||
syscall_src += arch-arm/syscalls/sched_setaffinity.S
|
||||
syscall_src += arch-arm/syscalls/__sched_getaffinity.S
|
||||
syscall_src += arch-arm/syscalls/__getcpu.S
|
||||
syscall_src += arch-arm/syscalls/ioprio_set.S
|
||||
syscall_src += arch-arm/syscalls/ioprio_get.S
|
||||
syscall_src += arch-arm/syscalls/uname.S
|
||||
syscall_src += arch-arm/syscalls/__wait4.S
|
||||
syscall_src += arch-arm/syscalls/umask.S
|
||||
@@ -158,6 +186,9 @@ syscall_src += arch-arm/syscalls/__syslog.S
|
||||
syscall_src += arch-arm/syscalls/init_module.S
|
||||
syscall_src += arch-arm/syscalls/delete_module.S
|
||||
syscall_src += arch-arm/syscalls/klogctl.S
|
||||
syscall_src += arch-arm/syscalls/sysinfo.S
|
||||
syscall_src += arch-arm/syscalls/personality.S
|
||||
syscall_src += arch-arm/syscalls/perf_event_open.S
|
||||
syscall_src += arch-arm/syscalls/futex.S
|
||||
syscall_src += arch-arm/syscalls/epoll_create.S
|
||||
syscall_src += arch-arm/syscalls/epoll_ctl.S
|
||||
@@ -166,5 +197,6 @@ syscall_src += arch-arm/syscalls/inotify_init.S
|
||||
syscall_src += arch-arm/syscalls/inotify_add_watch.S
|
||||
syscall_src += arch-arm/syscalls/inotify_rm_watch.S
|
||||
syscall_src += arch-arm/syscalls/poll.S
|
||||
syscall_src += arch-arm/syscalls/eventfd.S
|
||||
syscall_src += arch-arm/syscalls/__set_tls.S
|
||||
syscall_src += arch-arm/syscalls/cacheflush.S
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __brk, #function
|
||||
.globl __brk
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__brk:
|
||||
ENTRY(__brk)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_brk
|
||||
@@ -16,4 +11,4 @@ __brk:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__brk)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __fcntl, #function
|
||||
.globl __fcntl
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__fcntl:
|
||||
ENTRY(__fcntl)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_fcntl
|
||||
@@ -16,4 +11,4 @@ __fcntl:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__fcntl)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __fcntl64, #function
|
||||
.globl __fcntl64
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__fcntl64:
|
||||
ENTRY(__fcntl64)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_fcntl64
|
||||
@@ -16,4 +11,4 @@ __fcntl64:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__fcntl64)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __fork, #function
|
||||
.globl __fork
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__fork:
|
||||
ENTRY(__fork)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_fork
|
||||
@@ -16,4 +11,4 @@ __fork:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__fork)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type fstatfs, #function
|
||||
.globl fstatfs
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
fstatfs:
|
||||
ENTRY(__fstatfs64)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_fstatfs64
|
||||
@@ -16,4 +11,4 @@ fstatfs:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__fstatfs64)
|
@@ -1,19 +1,14 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __clone, #function
|
||||
.globl __clone
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__clone:
|
||||
ENTRY(__getcpu)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_clone
|
||||
ldr r7, =__NR_getcpu
|
||||
swi #0
|
||||
ldmfd sp!, {r4, r7}
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__getcpu)
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __getcwd, #function
|
||||
.globl __getcwd
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__getcwd:
|
||||
ENTRY(__getcwd)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_getcwd
|
||||
@@ -16,4 +11,4 @@ __getcwd:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__getcwd)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __getpriority, #function
|
||||
.globl __getpriority
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__getpriority:
|
||||
ENTRY(__getpriority)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_getpriority
|
||||
@@ -16,4 +11,4 @@ __getpriority:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__getpriority)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __ioctl, #function
|
||||
.globl __ioctl
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__ioctl:
|
||||
ENTRY(__ioctl)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_ioctl
|
||||
@@ -16,4 +11,4 @@ __ioctl:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__ioctl)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __llseek, #function
|
||||
.globl __llseek
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__llseek:
|
||||
ENTRY(__llseek)
|
||||
mov ip, sp
|
||||
.save {r4, r5, r6, r7}
|
||||
stmfd sp!, {r4, r5, r6, r7}
|
||||
@@ -18,4 +13,4 @@ __llseek:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__llseek)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __mmap2, #function
|
||||
.globl __mmap2
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__mmap2:
|
||||
ENTRY(__mmap2)
|
||||
mov ip, sp
|
||||
.save {r4, r5, r6, r7}
|
||||
stmfd sp!, {r4, r5, r6, r7}
|
||||
@@ -18,4 +13,4 @@ __mmap2:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__mmap2)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __open, #function
|
||||
.globl __open
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__open:
|
||||
ENTRY(__open)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_open
|
||||
@@ -16,4 +11,4 @@ __open:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__open)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __openat, #function
|
||||
.globl __openat
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__openat:
|
||||
ENTRY(__openat)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_openat
|
||||
@@ -16,4 +11,4 @@ __openat:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__openat)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __ptrace, #function
|
||||
.globl __ptrace
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__ptrace:
|
||||
ENTRY(__ptrace)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_ptrace
|
||||
@@ -16,4 +11,4 @@ __ptrace:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__ptrace)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __reboot, #function
|
||||
.globl __reboot
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__reboot:
|
||||
ENTRY(__reboot)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_reboot
|
||||
@@ -16,4 +11,4 @@ __reboot:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__reboot)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __rt_sigaction, #function
|
||||
.globl __rt_sigaction
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__rt_sigaction:
|
||||
ENTRY(__rt_sigaction)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_rt_sigaction
|
||||
@@ -16,4 +11,4 @@ __rt_sigaction:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__rt_sigaction)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __rt_sigprocmask, #function
|
||||
.globl __rt_sigprocmask
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__rt_sigprocmask:
|
||||
ENTRY(__rt_sigprocmask)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_rt_sigprocmask
|
||||
@@ -16,4 +11,4 @@ __rt_sigprocmask:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__rt_sigprocmask)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __rt_sigtimedwait, #function
|
||||
.globl __rt_sigtimedwait
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__rt_sigtimedwait:
|
||||
ENTRY(__rt_sigtimedwait)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_rt_sigtimedwait
|
||||
@@ -16,4 +11,4 @@ __rt_sigtimedwait:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__rt_sigtimedwait)
|
||||
|
14
libc/arch-arm/syscalls/__sched_getaffinity.S
Normal file
14
libc/arch-arm/syscalls/__sched_getaffinity.S
Normal file
@@ -0,0 +1,14 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
ENTRY(__sched_getaffinity)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_sched_getaffinity
|
||||
swi #0
|
||||
ldmfd sp!, {r4, r7}
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
END(__sched_getaffinity)
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __set_tls, #function
|
||||
.globl __set_tls
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__set_tls:
|
||||
ENTRY(__set_tls)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_ARM_set_tls
|
||||
@@ -16,4 +11,4 @@ __set_tls:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__set_tls)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type setresuid, #function
|
||||
.globl setresuid
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
setresuid:
|
||||
ENTRY(__setresuid)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_setresuid32
|
||||
@@ -16,4 +11,4 @@ setresuid:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__setresuid)
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type setreuid, #function
|
||||
.globl setreuid
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
setreuid:
|
||||
ENTRY(__setreuid)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_setreuid32
|
||||
@@ -16,4 +11,4 @@ setreuid:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__setreuid)
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type setuid, #function
|
||||
.globl setuid
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
setuid:
|
||||
ENTRY(__setuid)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_setuid32
|
||||
@@ -16,4 +11,4 @@ setuid:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__setuid)
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __sigsuspend, #function
|
||||
.globl __sigsuspend
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__sigsuspend:
|
||||
ENTRY(__sigsuspend)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_sigsuspend
|
||||
@@ -16,4 +11,4 @@ __sigsuspend:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__sigsuspend)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __statfs64, #function
|
||||
.globl __statfs64
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__statfs64:
|
||||
ENTRY(__statfs64)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_statfs64
|
||||
@@ -16,4 +11,4 @@ __statfs64:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__statfs64)
|
||||
|
16
libc/arch-arm/syscalls/__sys_clone.S
Normal file
16
libc/arch-arm/syscalls/__sys_clone.S
Normal file
@@ -0,0 +1,16 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
ENTRY(__sys_clone)
|
||||
mov ip, sp
|
||||
.save {r4, r5, r6, r7}
|
||||
stmfd sp!, {r4, r5, r6, r7}
|
||||
ldmfd ip, {r4, r5, r6}
|
||||
ldr r7, =__NR_clone
|
||||
swi #0
|
||||
ldmfd sp!, {r4, r5, r6, r7}
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
END(__sys_clone)
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __syslog, #function
|
||||
.globl __syslog
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__syslog:
|
||||
ENTRY(__syslog)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_syslog
|
||||
@@ -16,4 +11,4 @@ __syslog:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__syslog)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __timer_create, #function
|
||||
.globl __timer_create
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__timer_create:
|
||||
ENTRY(__timer_create)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_timer_create
|
||||
@@ -16,4 +11,4 @@ __timer_create:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__timer_create)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __timer_delete, #function
|
||||
.globl __timer_delete
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__timer_delete:
|
||||
ENTRY(__timer_delete)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_timer_delete
|
||||
@@ -16,4 +11,4 @@ __timer_delete:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__timer_delete)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __timer_getoverrun, #function
|
||||
.globl __timer_getoverrun
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__timer_getoverrun:
|
||||
ENTRY(__timer_getoverrun)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_timer_getoverrun
|
||||
@@ -16,4 +11,4 @@ __timer_getoverrun:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__timer_getoverrun)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __timer_gettime, #function
|
||||
.globl __timer_gettime
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__timer_gettime:
|
||||
ENTRY(__timer_gettime)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_timer_gettime
|
||||
@@ -16,4 +11,4 @@ __timer_gettime:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__timer_gettime)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __timer_settime, #function
|
||||
.globl __timer_settime
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__timer_settime:
|
||||
ENTRY(__timer_settime)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_timer_settime
|
||||
@@ -16,4 +11,4 @@ __timer_settime:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__timer_settime)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __wait4, #function
|
||||
.globl __wait4
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__wait4:
|
||||
ENTRY(__wait4)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_wait4
|
||||
@@ -16,4 +11,4 @@ __wait4:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__wait4)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type waitid, #function
|
||||
.globl waitid
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
waitid:
|
||||
ENTRY(__waitid)
|
||||
mov ip, sp
|
||||
.save {r4, r5, r6, r7}
|
||||
stmfd sp!, {r4, r5, r6, r7}
|
||||
@@ -18,4 +13,4 @@ waitid:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(__waitid)
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type _exit, #function
|
||||
.globl _exit
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
_exit:
|
||||
ENTRY(_exit)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_exit_group
|
||||
@@ -16,4 +11,4 @@ _exit:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(_exit)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type _exit_thread, #function
|
||||
.globl _exit_thread
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
_exit_thread:
|
||||
ENTRY(_exit_thread)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_exit
|
||||
@@ -16,4 +11,4 @@ _exit_thread:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(_exit_thread)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type accept, #function
|
||||
.globl accept
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
accept:
|
||||
ENTRY(accept)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_accept
|
||||
@@ -16,4 +11,4 @@ accept:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(accept)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type access, #function
|
||||
.globl access
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
access:
|
||||
ENTRY(access)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_access
|
||||
@@ -16,4 +11,4 @@ access:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(access)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type acct, #function
|
||||
.globl acct
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
acct:
|
||||
ENTRY(acct)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_acct
|
||||
@@ -16,4 +11,4 @@ acct:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(acct)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type bind, #function
|
||||
.globl bind
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
bind:
|
||||
ENTRY(bind)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_bind
|
||||
@@ -16,4 +11,4 @@ bind:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(bind)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type cacheflush, #function
|
||||
.globl cacheflush
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
cacheflush:
|
||||
ENTRY(cacheflush)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_ARM_cacheflush
|
||||
@@ -16,4 +11,4 @@ cacheflush:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(cacheflush)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type capget, #function
|
||||
.globl capget
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
capget:
|
||||
ENTRY(capget)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_capget
|
||||
@@ -16,4 +11,4 @@ capget:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(capget)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type capset, #function
|
||||
.globl capset
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
capset:
|
||||
ENTRY(capset)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_capset
|
||||
@@ -16,4 +11,4 @@ capset:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(capset)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type chdir, #function
|
||||
.globl chdir
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
chdir:
|
||||
ENTRY(chdir)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_chdir
|
||||
@@ -16,4 +11,4 @@ chdir:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(chdir)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type chmod, #function
|
||||
.globl chmod
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
chmod:
|
||||
ENTRY(chmod)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_chmod
|
||||
@@ -16,4 +11,4 @@ chmod:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(chmod)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type chown, #function
|
||||
.globl chown
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
chown:
|
||||
ENTRY(chown)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_chown32
|
||||
@@ -16,4 +11,4 @@ chown:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(chown)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type chroot, #function
|
||||
.globl chroot
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
chroot:
|
||||
ENTRY(chroot)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_chroot
|
||||
@@ -16,4 +11,4 @@ chroot:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(chroot)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type clock_getres, #function
|
||||
.globl clock_getres
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
clock_getres:
|
||||
ENTRY(clock_getres)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_clock_getres
|
||||
@@ -16,4 +11,4 @@ clock_getres:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(clock_getres)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type clock_gettime, #function
|
||||
.globl clock_gettime
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
clock_gettime:
|
||||
ENTRY(clock_gettime)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_clock_gettime
|
||||
@@ -16,4 +11,4 @@ clock_gettime:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(clock_gettime)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type clock_nanosleep, #function
|
||||
.globl clock_nanosleep
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
clock_nanosleep:
|
||||
ENTRY(clock_nanosleep)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_clock_nanosleep
|
||||
@@ -16,4 +11,4 @@ clock_nanosleep:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(clock_nanosleep)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type clock_settime, #function
|
||||
.globl clock_settime
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
clock_settime:
|
||||
ENTRY(clock_settime)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_clock_settime
|
||||
@@ -16,4 +11,4 @@ clock_settime:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(clock_settime)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type close, #function
|
||||
.globl close
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
close:
|
||||
ENTRY(close)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_close
|
||||
@@ -16,4 +11,4 @@ close:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(close)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type connect, #function
|
||||
.globl connect
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
connect:
|
||||
ENTRY(connect)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_connect
|
||||
@@ -16,4 +11,4 @@ connect:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(connect)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type delete_module, #function
|
||||
.globl delete_module
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
delete_module:
|
||||
ENTRY(delete_module)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_delete_module
|
||||
@@ -16,4 +11,4 @@ delete_module:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(delete_module)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type dup, #function
|
||||
.globl dup
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
dup:
|
||||
ENTRY(dup)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_dup
|
||||
@@ -16,4 +11,4 @@ dup:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(dup)
|
||||
|
@@ -1,13 +1,8 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <machine/asm.h>
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type dup2, #function
|
||||
.globl dup2
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
dup2:
|
||||
ENTRY(dup2)
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_dup2
|
||||
@@ -16,4 +11,4 @@ dup2:
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
END(dup2)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user