Compare commits
655 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
891cef7d9b | ||
|
9bce8e2449 | ||
|
55f9b2f336 | ||
|
f8b6352429 | ||
|
5e141990fb | ||
|
912e74c756 | ||
|
b84725ac52 | ||
|
7de85a2603 | ||
|
576d41c1c6 | ||
|
562d27c22f | ||
|
57a884df51 | ||
|
04dfce99db | ||
|
b05570344e | ||
|
52eb664223 | ||
|
0d8c061e19 | ||
|
56772a9401 | ||
|
4110c03341 | ||
|
4c8c128cd0 | ||
|
f684732e50 | ||
|
4562ca924e | ||
|
90028182f3 | ||
|
6919aa138f | ||
|
672c273c6d | ||
|
94498d7104 | ||
|
28742415b7 | ||
|
f2dc6d80c8 | ||
|
b2a5d6a477 | ||
|
fd99b9378d | ||
|
a3fcce8f5b | ||
|
84af04ddb6 | ||
|
b6b1340286 | ||
|
84ce3f0d05 | ||
|
5c04074052 | ||
|
4d0e748417 | ||
|
1d6c11d8df | ||
|
843493ecf7 | ||
|
bad9bc25a4 | ||
|
f790525bec | ||
|
fc147e70c0 | ||
|
8ccdd26200 | ||
|
d1c6bd89f3 | ||
|
e0c920a406 | ||
|
d228ee264c | ||
|
e6073613ef | ||
|
f147a68289 | ||
|
7ee3a099fa | ||
|
fe09f8496b | ||
|
16bcddd9d4 | ||
|
7545ecb969 | ||
|
a6c3c8f082 | ||
|
d895623061 | ||
|
a71fb3364e | ||
|
db0aca6b64 | ||
|
215844b31b | ||
|
80dc8803df | ||
|
3759f6f554 | ||
|
adee8bcb39 | ||
|
cee0dddd34 | ||
|
da335fc250 | ||
|
bcdeb85901 | ||
|
1321d9a8de | ||
|
3694befabb | ||
|
2a22f8c83a | ||
|
866b034132 | ||
|
17d43f4d58 | ||
|
b627ff6a1c | ||
|
98b4937fcb | ||
|
858f1e25fb | ||
|
e66bcabdd3 | ||
|
a2239731d4 | ||
|
c05efdcd33 | ||
|
6e4a12be24 | ||
|
7df147abdd | ||
|
2edf51cd28 | ||
|
3deee803bf | ||
|
8602ede777 | ||
|
8fb0e5b0d3 | ||
|
7ad4cfb1f2 | ||
|
c01972f342 | ||
|
b1fe12b88a | ||
|
0aaf98d346 | ||
|
c0d3a20ab3 | ||
|
4b90559c50 | ||
|
e0b3768e1a | ||
|
391f8204b0 | ||
|
b7ec01b44a | ||
|
db4105af40 | ||
|
eb398c7fb1 | ||
|
0d6e9e6a5b | ||
|
3ae68fd84a | ||
|
9647f3f8db | ||
|
0e0506dd37 | ||
|
1bfe0e3c3b | ||
|
83dbb2847c | ||
|
86d615d880 | ||
|
b182d5ff6b | ||
|
2a24f771d1 | ||
|
f445959efa | ||
|
16819750d2 | ||
|
d301a3c7b8 | ||
|
ff5dc29cd1 | ||
|
7d69d114a8 | ||
|
497de73bd7 | ||
|
c0ae016cb4 | ||
|
7c58fda150 | ||
|
313e678076 | ||
|
08f661c823 | ||
|
d40df5fcf2 | ||
|
e6bd153753 | ||
|
cc9b5fa3ba | ||
|
47b8ada335 | ||
|
ca8c0f7dc6 | ||
|
fa22fac534 | ||
|
216b951886 | ||
|
7a1512fd56 | ||
|
3139eaf997 | ||
|
da33ffbe57 | ||
|
b147991d7c | ||
|
e400728936 | ||
|
6af92eba78 | ||
|
e90615843b | ||
|
a6ea9c4518 | ||
|
402f1e9204 | ||
|
f36e50eab5 | ||
|
8f4badaa38 | ||
|
d69736566d | ||
|
544398b502 | ||
|
2cf19e11cb | ||
|
e987aff0a2 | ||
|
553b93f777 | ||
|
82e3c0071b | ||
|
6e856a1b72 | ||
|
ff60308ab9 | ||
|
9b6d8e7c01 | ||
|
23f4b29ddd | ||
|
42139e4c56 | ||
|
28eca72fa2 | ||
|
dc54e4f153 | ||
|
e3161c6575 | ||
|
5e51bccff0 | ||
|
ac2a849717 | ||
|
f5843a4192 | ||
|
7d28ff24f9 | ||
|
e8e4643647 | ||
|
e7ba2ccc61 | ||
|
dcf86feb99 | ||
|
7a880b1a75 | ||
|
fe7fce2ad1 | ||
|
45a2f253fb | ||
|
015c95afae | ||
|
0ec4e456b8 | ||
|
ecfa641ec4 | ||
|
3e19e07261 | ||
|
61f26fa336 | ||
|
5e173247a4 | ||
|
066310e826 | ||
|
6c2cfcacd9 | ||
|
88ff65fe51 | ||
|
4708d93f41 | ||
|
cc580afc17 | ||
|
9c103286cf | ||
|
f9528196b2 | ||
|
1c8b31bfd3 | ||
|
a15b5bd3a0 | ||
|
d4df112f70 | ||
|
03d47e4b9f | ||
|
9e5fffaae3 | ||
|
398cd1e186 | ||
|
4d72b19d1c | ||
|
3d5e14ec38 | ||
|
6ed6e5a4c3 | ||
|
98a12cbd71 | ||
|
4c8d27c4d6 | ||
|
557c86d25c | ||
|
16c6a8852b | ||
|
4839e4255b | ||
|
a3b64e0868 | ||
|
010b19f294 | ||
|
a96763b324 | ||
|
dcf3c8d360 | ||
|
8e4a3f2d33 | ||
|
50fa9e4ee3 | ||
|
31e7eb359b | ||
|
4f5892b0e1 | ||
|
39e0659a62 | ||
|
0ccb8bbebc | ||
|
f77ea1a1aa | ||
|
aece5e1599 | ||
|
fd1cb09e79 | ||
|
b66b3a4e1c | ||
|
bef1492459 | ||
|
ed49338072 | ||
|
47e7711955 | ||
|
34ff97e734 | ||
|
8297b8b107 | ||
|
aed55db9d5 | ||
|
005db08c91 | ||
|
f027054e0f | ||
|
773cefac2c | ||
|
8a240523f5 | ||
|
d9e1ca5983 | ||
|
89e370f159 | ||
|
ec74b26ecd | ||
|
cde96063b7 | ||
|
f7b06a7726 | ||
|
395869404d | ||
|
97475d9eac | ||
|
348f6fd9c9 | ||
|
2d005021d3 | ||
|
885401bf7e | ||
|
4be70d1ef3 | ||
|
314efdbb41 | ||
|
bd1b81e9ec | ||
|
d85626def8 | ||
|
cc2a83d686 | ||
|
9ac4480c60 | ||
|
9cda1c00f1 | ||
|
42a3075cdf | ||
|
a04a33c99f | ||
|
04e43e85d1 | ||
|
3af662e237 | ||
|
7469a333bd | ||
|
c2a1e7ae5d | ||
|
9e75c715be | ||
|
cd907e635a | ||
|
265c57ff22 | ||
|
9fb8c87d6b | ||
|
df1d6ea021 | ||
|
6534eed5ef | ||
|
c148037b80 | ||
|
274d6185bd | ||
|
99f1530af5 | ||
|
9d66f2aa7e | ||
|
1a6fe020a9 | ||
|
f0234e9c6f | ||
|
0bb9c97686 | ||
|
b5d17a9ac5 | ||
|
f3095e1332 | ||
|
7a229a5888 | ||
|
133d0a0f64 | ||
|
652db2243e | ||
|
19ca4dcbaa | ||
|
91c7bec969 | ||
|
7fcf30a7ea | ||
|
0bc6460875 | ||
|
addcbcb750 | ||
|
d752cf184d | ||
|
8ea1c62843 | ||
|
e6685fa969 | ||
|
8b4ef1c4cf | ||
|
5b794eb004 | ||
|
3f4ac1c552 | ||
|
e22880b36d | ||
|
305029d3ec | ||
|
a2ef59f731 | ||
|
19b59d9a23 | ||
|
6d4716823e | ||
|
d76b340928 | ||
|
8654925ece | ||
|
0215eb2e85 | ||
|
cf944628eb | ||
|
c728afb1bb | ||
|
83ca86ca70 | ||
|
314add3fda | ||
|
765b1cc36a | ||
|
ff74606e8e | ||
|
274be4f351 | ||
|
a6d3dcaca6 | ||
|
2f08a3f6d8 | ||
|
ff411575cc | ||
|
b8d50582fb | ||
|
7f99993652 | ||
|
06398e8981 | ||
|
b75648d9b2 | ||
|
79c442fecf | ||
|
4ac68e8f20 | ||
|
e3e00ff5dd | ||
|
b30271576a | ||
|
79ac3cdb38 | ||
|
f5f8bc6087 | ||
|
3438bcad98 | ||
|
4fa57fa088 | ||
|
a593d741ef | ||
|
8036281669 | ||
|
24eca83ae3 | ||
|
69d0fcbc90 | ||
|
0806d93e69 | ||
|
d048d4b08d | ||
|
af3b5a8175 | ||
|
69c89853de | ||
|
cc74938640 | ||
|
5a434b44d3 | ||
|
4503e5ecde | ||
|
c204df3143 | ||
|
b63748e323 | ||
|
a365d3e4eb | ||
|
17446a0ad9 | ||
|
78557d4f6e | ||
|
3e2f90cd29 | ||
|
4c9c56bc02 | ||
|
7e9585f371 | ||
|
4ec33619df | ||
|
8c3f968e67 | ||
|
593c3952f8 | ||
|
4d58f0308a | ||
|
b446c2e737 | ||
|
5a75d1ef76 | ||
|
fd8fd40120 | ||
|
033def827b | ||
|
99dddb3746 | ||
|
6d24375c60 | ||
|
d43d3d6446 | ||
|
d495ed6f81 | ||
|
83a8e4c260 | ||
|
58525d3c9e | ||
|
991ab254f2 | ||
|
594ac2c7d7 | ||
|
bd92d74066 | ||
|
14fee31c28 | ||
|
8e4bdb38f2 | ||
|
848872f40b | ||
|
c3342eaf1c | ||
|
a079048eee | ||
|
2a555c3cf9 | ||
|
7d55b59b7e | ||
|
8d0243eb05 | ||
|
39b12a1a1b | ||
|
39f49505ef | ||
|
57702a0fa8 | ||
|
cf2421524e | ||
|
308f1508a6 | ||
|
1bc0509b8f | ||
|
78dc96aa1e | ||
|
6809951262 | ||
|
8be72f05f6 | ||
|
1984ee75ad | ||
|
107d671c75 | ||
|
5652b86227 | ||
|
01c6d18afa | ||
|
e175f3e4b7 | ||
|
cf558d9039 | ||
|
cb3be801e6 | ||
|
6f858633ed | ||
|
d747bb409f | ||
|
f1ba2f493a | ||
|
7c9911eee8 | ||
|
e7ac0256f6 | ||
|
3abd19c007 | ||
|
f9bd6769eb | ||
|
c27a7db22e | ||
|
0e0fc2804a | ||
|
a19406ffe8 | ||
|
9584892771 | ||
|
9af2ab495c | ||
|
5c60aab4d1 | ||
|
4bcc1e4fe2 | ||
|
8938366a48 | ||
|
3b9c960514 | ||
|
c0371f2be9 | ||
|
694ef36d21 | ||
|
729b75087d | ||
|
220b984b00 | ||
|
89bd8eeaf5 | ||
|
2bea4b26c1 | ||
|
8799d226ba | ||
|
48c4d3a12f | ||
|
7789476ecb | ||
|
7c03367081 | ||
|
4ab034f8ca | ||
|
225104138d | ||
|
d23aa8964c | ||
|
218acd09ac | ||
|
b471196219 | ||
|
081310d587 | ||
|
c9aef059c5 | ||
|
af08a8b294 | ||
|
99eb194caf | ||
|
b9d5903bc3 | ||
|
5b97d78690 | ||
|
6980affb9b | ||
|
f16dbfc81a | ||
|
23db191d05 | ||
|
1f0b14bc67 | ||
|
95108be4ed | ||
|
e835ae255a | ||
|
30ee91c661 | ||
|
88d23c2975 | ||
|
171e01f806 | ||
|
8479884c4b | ||
|
079c4158d0 | ||
|
747298b149 | ||
|
f3ca3c472d | ||
|
dd781f028c | ||
|
b62b28279a | ||
|
1db9652d3f | ||
|
c7f844b164 | ||
|
a1b7d697b8 | ||
|
703be9734e | ||
|
5d9509e3f6 | ||
|
b5e6324f17 | ||
|
ed30c6bf51 | ||
|
8181de5ce0 | ||
|
1d285b5a5f | ||
|
b9d0acf940 | ||
|
e02177a0fa | ||
|
5ef5ca7845 | ||
|
a54b05b75c | ||
|
43ee372cff | ||
|
ee79e7e0ab | ||
|
8eaabf978c | ||
|
b1be385d8b | ||
|
83584bab04 | ||
|
d2bfdbf5fa | ||
|
23fc385ac6 | ||
|
63df62bec5 | ||
|
09d4d57e3f | ||
|
6fbf2051a5 | ||
|
3eca00bcb5 | ||
|
58da100211 | ||
|
76070518ae | ||
|
ceba2f7e86 | ||
|
8b74069114 | ||
|
055a7a490c | ||
|
02343d2d87 | ||
|
c886fb5bab | ||
|
52ed89edc9 | ||
|
2382f77e4f | ||
|
48fb608e1f | ||
|
9cf7da719f | ||
|
af901f0d9b | ||
|
f2ce251d7b | ||
|
21d9bf9a9a | ||
|
e3e70e5e70 | ||
|
c0579b832a | ||
|
15d1c7249f | ||
|
8529466512 | ||
|
cb86c036cc | ||
|
7673532492 | ||
|
9414f6f26c | ||
|
d962a92335 | ||
|
e1c663c977 | ||
|
a539bf4094 | ||
|
5c29a25740 | ||
|
de609bb65f | ||
|
7750bc9d3c | ||
|
c2adc6fa4b | ||
|
8647f27101 | ||
|
9e87f7a00a | ||
|
eae73016d7 | ||
|
758837f646 | ||
|
9679e72bfc | ||
|
03e379eaf6 | ||
|
9c16225727 | ||
|
55c286cdef | ||
|
d176bf367a | ||
|
3774a68ac6 | ||
|
a3e3a13e14 | ||
|
c365d99172 | ||
|
6b781854a6 | ||
|
055fab3c16 | ||
|
794381f06a | ||
|
f7f5fb5d3e | ||
|
2512207346 | ||
|
eaa63a4598 | ||
|
f9a19c1c37 | ||
|
37b9e831cd | ||
|
1c4059f5c4 | ||
|
f3bd36c606 | ||
|
759d90703d | ||
|
20b1a2c231 | ||
|
bb9f8664bb | ||
|
25220f3a3f | ||
|
8694567421 | ||
|
3e097055d1 | ||
|
bf880f673d | ||
|
60a4c4d537 | ||
|
2d7b03d247 | ||
|
e409bbf1b0 | ||
|
034cab8256 | ||
|
4b316cf2e5 | ||
|
4459e8aea1 | ||
|
b5a20a1d7e | ||
|
1074058107 | ||
|
121bd6bf21 | ||
|
8717b1d411 | ||
|
4572f2db82 | ||
|
36720823b7 | ||
|
52e0713736 | ||
|
fd1b3bc669 | ||
|
20c88e5918 | ||
|
2bd4446896 | ||
|
26c09a98ec | ||
|
13e93d2a5d | ||
|
2122c33f00 | ||
|
c55cbd53a6 | ||
|
23c1e2d22a | ||
|
e332e73999 | ||
|
82f78973b0 | ||
|
483ed19fc1 | ||
|
dc2c0a96e5 | ||
|
d6469194bd | ||
|
0a5caf80d3 | ||
|
1d0a646cc5 | ||
|
08e9ee2de5 | ||
|
bc7138a9a2 | ||
|
3b7f0ed37e | ||
|
108494b92d | ||
|
1fd246efa8 | ||
|
6e98f300dc | ||
|
462317c02b | ||
|
8f4400202c | ||
|
7e5ced8dfb | ||
|
aad3859b62 | ||
|
e2781b7b62 | ||
|
b90c67c32e | ||
|
ef4f83143f | ||
|
dad43f9003 | ||
|
d5843666e9 | ||
|
e29a68e7a9 | ||
|
153c32b01a | ||
|
d022d11749 | ||
|
a291f05d00 | ||
|
38ba9bfb90 | ||
|
116cffef39 | ||
|
1e5093a776 | ||
|
3b6291bcd4 | ||
|
cb4e33ae41 | ||
|
41ba330f5c | ||
|
a80cc6e7a4 | ||
|
2e22743b01 | ||
|
4644e4c6ba | ||
|
7c593b37fa | ||
|
183c086052 | ||
|
542b0e2cf2 | ||
|
5b3f12009d | ||
|
9d32d8a8bc | ||
|
3ebf1ff6bf | ||
|
48bc863929 | ||
|
aefc846ec6 | ||
|
b4b081811c | ||
|
54f2a73e85 | ||
|
326f95a149 | ||
|
07ae3828e7 | ||
|
0c755993b1 | ||
|
561373393e | ||
|
bbfc11ab8f | ||
|
057d3867f2 | ||
|
23f7769aa4 | ||
|
473419c647 | ||
|
eddb3f2c3a | ||
|
1418c181c1 | ||
|
c3b415bb00 | ||
|
7adee03fa5 | ||
|
0ebfd21c57 | ||
|
cdcb4d30f8 | ||
|
293a503065 | ||
|
f56bb064e4 | ||
|
babb47d673 | ||
|
a1dd9faa06 | ||
|
9ecc1a3a56 | ||
|
718ed1464b | ||
|
706509ff52 | ||
|
d5e4370952 | ||
|
31f39411a2 | ||
|
5a612cf11d | ||
|
8ac0ea7ebe | ||
|
caa5b98426 | ||
|
57f97f54f5 | ||
|
da33c910e9 | ||
|
00052d5c3a | ||
|
a404f5d9fb | ||
|
4786fd5d72 | ||
|
9d8aac18cb | ||
|
9fceea1844 | ||
|
3b4372beb4 | ||
|
ecb75e16b1 | ||
|
74d9670684 | ||
|
522700d7f6 | ||
|
d02d0c24e1 | ||
|
8318459afa | ||
|
bd553397cd | ||
|
32effdcb3a | ||
|
e6636958bd | ||
|
12092fe58a | ||
|
5563284fa7 | ||
|
9f6c7e39fa | ||
|
8cd2032d20 | ||
|
263fe1c06b | ||
|
fc70adad35 | ||
|
f29a19f5ea | ||
|
b281ffaf2a | ||
|
6bd32f1b6d | ||
|
5a5d8906df | ||
|
81c1aa90e1 | ||
|
7c07471093 | ||
|
d69d1f8218 | ||
|
5565b20a6b | ||
|
a3328a1d29 | ||
|
469bb9a944 | ||
|
8b55e223d6 | ||
|
34352b072b | ||
|
5127525464 | ||
|
cd9cbfcd14 | ||
|
1af11d046b | ||
|
e41a249027 | ||
|
b10732a3ee | ||
|
66f35a6aae | ||
|
dc4fc4efba | ||
|
f60b61efff | ||
|
a7c5134730 | ||
|
b22a29f08c | ||
|
e8d96b9005 | ||
|
002bb7bb04 | ||
|
9f5d8acce9 | ||
|
e1c771b901 | ||
|
5d277e24e6 | ||
|
7cd0f0de73 | ||
|
bae6176796 | ||
|
9dd31b0ca8 | ||
|
02167d8fc9 | ||
|
ae41cd9081 | ||
|
08a0a12f84 | ||
|
fdfaee17fd | ||
|
076c235049 | ||
|
c358f1d2d3 | ||
|
63fa8769db | ||
|
56a73f457c | ||
|
fa37083d6b | ||
|
69c085da3a | ||
|
d3981481e5 | ||
|
aa92b34140 | ||
|
9810a5be1b | ||
|
872d559c70 | ||
|
7112ded666 | ||
|
9acf9331f9 | ||
|
96e022d38e | ||
|
cbffc05bdd | ||
|
f659baaab5 | ||
|
11c26b9220 | ||
|
915778d052 | ||
|
18792bedb3 | ||
|
769378652e | ||
|
d854f22c92 | ||
|
c1c61f3fd5 | ||
|
8f50ce0235 | ||
|
1cefe55737 | ||
|
26315c4d94 | ||
|
9389c66798 | ||
|
9093a333b8 | ||
|
080629bad7 | ||
|
3daebbc617 | ||
|
293eaa4c37 | ||
|
56d2e81901 | ||
|
6d24351ab8 | ||
|
d8d9cbe2d6 |
@ -1 +0,0 @@
|
||||
gcc-4.1.2-20070925.tar.bz2
|
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/gcc-10.0.1-20200118.tar.xz
|
||||
/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||
/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
||||
/gcc-10.0.1-20200121.tar.xz
|
||||
/gcc-10.0.1-20200123.tar.xz
|
||||
/gcc-10.0.1-20200126.tar.xz
|
||||
/gcc-10.0.1-20200130.tar.xz
|
||||
/gcc-10.0.1-20200216.tar.xz
|
21
Makefile
21
Makefile
@ -1,21 +0,0 @@
|
||||
# Makefile for source rpm: gcc
|
||||
# $Id: Makefile,v 1.1 2004/09/09 04:57:24 cvsdist Exp $
|
||||
NAME := gcc
|
||||
SPECFILE = $(firstword $(wildcard *.spec))
|
||||
|
||||
define find-makefile-common
|
||||
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(find-makefile-common))
|
||||
|
||||
ifeq ($(MAKEFILE_COMMON),)
|
||||
# attempt a checkout
|
||||
define checkout-makefile-common
|
||||
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
|
||||
endif
|
||||
|
||||
include $(MAKEFILE_COMMON)
|
@ -1,56 +0,0 @@
|
||||
gcjwebplugin is a Firefox plugin for running Java applets. It is now
|
||||
included in the libgcj sub-package, though it is not enabled by
|
||||
default.
|
||||
|
||||
GNU Classpath and libgcj's security implementation is under active
|
||||
development, but it is not ready to be declared secure. Specifically,
|
||||
it cannot run untrusted applets safely.
|
||||
|
||||
When gcjwebplugin is enabled, it prompts you with a dialog before
|
||||
loading an applet. The dialog tells you that a certain URL would like
|
||||
to load an applet, and asks if you trust the applet. Be aware though
|
||||
that this dialog is mostly informative and doesn't provide much
|
||||
protection:
|
||||
|
||||
- http and DNS can be spoofed meaning that the URL named in the
|
||||
warning dialog cannot be trusted
|
||||
|
||||
- someone could create a browser denial-of-service attack by creating a
|
||||
page with hundreds of applet tags, causing gcjwebplugin to create
|
||||
warning dialog after warning dialog. The browser would have to be
|
||||
closed to eliminate the latest dialog
|
||||
|
||||
- the whitelist is provided as a convenience, but it is unsafe because a
|
||||
domain may change hands from a trusted owner to an untrusted owner.
|
||||
If that domain is in the whitelist then the warning dialog will not
|
||||
appear when loading the new malicious applet.
|
||||
|
||||
CURRENTLY GCJWEBPLUGIN RUNS WITH NO SECURITY MANAGER. THIS MEANS THAT
|
||||
APPLETS CAN DO ANYTHING A JAVA APPLICATION THAT YOU DOWNLOAD AND RUN
|
||||
COULD DO. BE *VERY* CAREFUL WHICH APPLETS YOU RUN. DO NOT USE
|
||||
GCJWEBPLUGIN ON YOUR SYSTEM IF YOUR SYSTEM STORES IMPORTANT DATA.
|
||||
THIS DATA CAN BE DESTROYED OR STOLEN.
|
||||
|
||||
The same warning applies to gappletviewer, which also runs with no
|
||||
security manager (in fact, gcjwebplugin spawns gappletviewer to do the
|
||||
applet loading). When run on the command line, gappletviewer issues a
|
||||
warning on startup and asks you if you want to continue.
|
||||
|
||||
Even considering the risks involved, you may still want to try
|
||||
gcjwebplugin. GNU Classpath's AWT and Swing implementations are now
|
||||
sufficiently mature that they're able to run many applets deployed on
|
||||
the web. If you're interested in trying gcjwebplugin, you can do so
|
||||
by creating a symbolic link in ~/.mozilla/plugins like so:
|
||||
|
||||
ln -s /usr/lib/gcj-@VERSION@/libgcjwebplugin.so ~/.mozilla/plugins/
|
||||
|
||||
Type about:plugins in Firefox's URL bar to confirm that the plugin has
|
||||
been loaded. To see gcjwebplugin debugging output, run:
|
||||
|
||||
firefox -g
|
||||
|
||||
then at the GDB prompt, type
|
||||
|
||||
run
|
||||
|
||||
Please report bugs in Red Hat Bugzilla: http://bugzilla.redhat.com
|
35
STAGE1-gcc
Normal file
35
STAGE1-gcc
Normal file
@ -0,0 +1,35 @@
|
||||
srpm gcc
|
||||
mcd $BUILDDIR/gcc
|
||||
|
||||
# These are for gcc cross-tools (politics sometime result in slightly
|
||||
# different arch names)
|
||||
GCC_CONFIGARGS="--prefix=$PREFIX
|
||||
--libdir=$PREFIX/lib${SUFFIX}
|
||||
--target=$TARGET
|
||||
${GCC_CONFIG_EXTRA}
|
||||
--enable-languages=c,c++
|
||||
--with-sysroot=$ROOTFS
|
||||
--with-build-sysroot=$ROOTFS
|
||||
--cache-file=config.cache
|
||||
--disable-bootstrap
|
||||
--enable-threads=posix
|
||||
--enable-64-bit-bfd
|
||||
--disable-lto
|
||||
$WITHPPL
|
||||
"
|
||||
|
||||
# prefill gcc cache
|
||||
echo 'lt_cv_shlibpath_overrides_runpath=no' > config.cache
|
||||
echo 'gcc_cv_libc_provides_ssp=yes' >> config.cache
|
||||
|
||||
if [ ! "$BUILDER_ARCH" = "$TARGET_ARCH" ]; then
|
||||
WITH_HEADERS="--with-headers=$ROOTFS/usr/include"
|
||||
fi
|
||||
|
||||
$SRC/gcc-*/configure $GCC_CONFIGARGS $WITH_HEADERS
|
||||
notparallel
|
||||
make $J
|
||||
make $J install
|
||||
mcd $ROOTFS/lib${SUFFIX}/gcc
|
||||
rsync -av $PREFIX/lib${SUFFIX}/gcc/ $ROOTFS/lib${SUFFIX}/gcc/
|
||||
rsync -av $PREFIX/$TARGET/lib/ $ROOTFS/lib${SUFFIX}/
|
48
STAGE1-gcc-host
Normal file
48
STAGE1-gcc-host
Normal file
@ -0,0 +1,48 @@
|
||||
srpm gcc
|
||||
mcd $BUILDDIR/gcc-host
|
||||
|
||||
# These are for gcc cross-tools (politics sometime result in slightly
|
||||
# different arch names)
|
||||
GCC_CONFIGARGS="--prefix=$PREFIX
|
||||
--libdir=$PREFIX/lib${SUFFIX}
|
||||
--target=$TARGET
|
||||
${GCC_CONFIG_EXTRA}
|
||||
--enable-languages=c,c++
|
||||
--with-sysroot=$ROOTFS
|
||||
--with-build-sysroot=$ROOTFS
|
||||
--cache-file=config.cache
|
||||
--disable-bootstrap
|
||||
--enable-threads=posix
|
||||
--enable-64-bit-bfd
|
||||
--disable-lto
|
||||
$WITHPPL
|
||||
"
|
||||
|
||||
# prefill gcc cache
|
||||
echo 'lt_cv_shlibpath_overrides_runpath=no' > config.cache
|
||||
echo 'gcc_cv_libc_provides_ssp=yes' >> config.cache
|
||||
|
||||
if [ ! "$BUILDER_ARCH" = "$TARGET_ARCH" ]; then
|
||||
WITH_HEADERS="--with-headers=$ROOTFS/usr/include"
|
||||
fi
|
||||
|
||||
$SRC/gcc-*/configure $GCC_CONFIGARGS $WITH_HEADERS
|
||||
notparallel
|
||||
|
||||
# Pass gcc_cv_libc_provides_ssp down, because the config.cache
|
||||
# version is not passed down to the gcc subdir.
|
||||
make $J all-host gcc_cv_libc_provides_ssp=yes
|
||||
make $J install-host gcc_cv_libc_provides_ssp=yes
|
||||
|
||||
|
||||
if false; then
|
||||
mkdirp $ROOTFS/usr/lib${SUFFIX}
|
||||
for o in crt Scrt1 crti crtbegin crtbeginS crtend crtendS crtn
|
||||
do
|
||||
$TARGET-gcc -nostdlib -nostartfiles -c -x c /dev/null -c -o $ROOTFS/usr/lib${SUFFIX}/$o.o
|
||||
done
|
||||
for so in gcc gcc_s c
|
||||
do
|
||||
$TARGET-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $ROOTFS/usr/lib${SUFFIX}/lib$so.so
|
||||
done
|
||||
fi
|
34
STAGE1-gcc-libgcc
Normal file
34
STAGE1-gcc-libgcc
Normal file
@ -0,0 +1,34 @@
|
||||
srpm gcc
|
||||
mcd $BUILDDIR/gcc-libgcc
|
||||
|
||||
# These are for gcc cross-tools (politics sometime result in slightly
|
||||
# different arch names)
|
||||
GCC_CONFIGARGS="--prefix=$PREFIX
|
||||
--libdir=$PREFIX/lib${SUFFIX}
|
||||
--target=$TARGET
|
||||
${GCC_CONFIG_EXTRA}
|
||||
--enable-languages=c,c++
|
||||
--with-sysroot=$ROOTFS
|
||||
--with-build-sysroot=$ROOTFS
|
||||
--cache-file=config.cache
|
||||
--disable-bootstrap
|
||||
--enable-threads=posix
|
||||
--enable-64-bit-bfd
|
||||
--disable-lto
|
||||
$WITHPPL
|
||||
"
|
||||
|
||||
# prefill gcc cache
|
||||
echo 'lt_cv_shlibpath_overrides_runpath=no' > config.cache
|
||||
echo 'gcc_cv_libc_provides_ssp=yes' >> config.cache
|
||||
|
||||
if [ ! "$BUILDER_ARCH" = "$TARGET_ARCH" ]; then
|
||||
WITH_HEADERS="--with-headers=$ROOTFS/usr/include"
|
||||
fi
|
||||
|
||||
$SRC/gcc-*/configure $GCC_CONFIGARGS $WITH_HEADERS
|
||||
notparallel
|
||||
# Pass gcc_cv_libc_provides_ssp down, because the config.cache
|
||||
# version is not passed down to the gcc subdir.
|
||||
make $J all-target-libgcc all-target-libssp gcc_cv_libc_provides_ssp=yes
|
||||
make $J install-target-libgcc install-target-libssp gcc_cv_libc_provides_ssp=yes
|
28
STAGE1-t-gcc
Normal file
28
STAGE1-t-gcc
Normal file
@ -0,0 +1,28 @@
|
||||
srpm gcc
|
||||
mcd $BUILDDIR/t-gcc
|
||||
|
||||
GCC_TCONFIGARGS="--prefix=/usr
|
||||
--libdir=/usr/lib${SUFFIX}
|
||||
--with-sysroot=/
|
||||
--with-build-sysroot=$ROOTFS
|
||||
--build=$BUILD
|
||||
--host=$TARGET
|
||||
--target=$TARGET
|
||||
--disable-bootstrap
|
||||
--enable-werror=no
|
||||
--enable-cxx
|
||||
${GCC_CONFIG_EXTRA}
|
||||
--enable-languages=c,c++
|
||||
--enable-threads=posix
|
||||
--enable-linker-build-id
|
||||
"
|
||||
|
||||
$SRC/gcc-*/configure $GCC_TCONFIGARGS
|
||||
notparallel
|
||||
make $J
|
||||
make $J install DESTDIR=${ROOTFS}
|
||||
test -e ${ROOTFS}/usr/bin/cc && rm ${ROOTFS}/usr/bin/cc
|
||||
ln -s gcc ${ROOTFS}/usr/bin/cc
|
||||
mkdir -p ${ROOTFS}/usr/share/gdb/auto-load/usr/lib${SUFFIX}
|
||||
mv -f ${ROOTFS}/usr/lib${SUFFIX}/libstdc++*gdb.py* \
|
||||
${ROOTFS}/usr/share/gdb/auto-load/usr/lib${SUFFIX}
|
27
gcc10-Wno-format-security.patch
Normal file
27
gcc10-Wno-format-security.patch
Normal file
@ -0,0 +1,27 @@
|
||||
2017-02-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* configure.ac: When adding -Wno-format, also add -Wno-format-security.
|
||||
* configure: Regenerated.
|
||||
|
||||
--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100
|
||||
+++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100
|
||||
@@ -480,7 +480,7 @@ AC_ARG_ENABLE(build-format-warnings,
|
||||
AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
|
||||
[],[enable_build_format_warnings=yes])
|
||||
AS_IF([test $enable_build_format_warnings = no],
|
||||
- [wf_opt=-Wno-format],[wf_opt=])
|
||||
+ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
|
||||
ACX_PROG_CXX_WARNING_OPTS(
|
||||
m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
|
||||
[-Wcast-qual -Wno-error=format-diag $wf_opt])),
|
||||
--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100
|
||||
+++ gcc/configure 2017-02-25 12:42:50.041946391 +0100
|
||||
@@ -6647,7 +6647,7 @@ else
|
||||
fi
|
||||
|
||||
if test $enable_build_format_warnings = no; then :
|
||||
- wf_opt=-Wno-format
|
||||
+ wf_opt="-Wno-format -Wno-format-security"
|
||||
else
|
||||
wf_opt=
|
||||
fi
|
20
gcc10-d-shared-libphobos.patch
Normal file
20
gcc10-d-shared-libphobos.patch
Normal file
@ -0,0 +1,20 @@
|
||||
2019-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* d-spec.cc (lang_specific_driver): Make -shared-libphobos
|
||||
the default rather than -static-libphobos.
|
||||
|
||||
--- gcc/d/d-spec.cc.jj 2019-01-01 12:37:49.502444257 +0100
|
||||
+++ gcc/d/d-spec.cc 2019-01-17 17:09:45.364949246 +0100
|
||||
@@ -405,9 +405,9 @@ lang_specific_driver (cl_decoded_option
|
||||
/* Add `-lgphobos' if we haven't already done so. */
|
||||
if (phobos_library != PHOBOS_NOLINK && need_phobos)
|
||||
{
|
||||
- /* Default to static linking. */
|
||||
- if (phobos_library != PHOBOS_DYNAMIC)
|
||||
- phobos_library = PHOBOS_STATIC;
|
||||
+ /* Default to shared linking. */
|
||||
+ if (phobos_library != PHOBOS_STATIC)
|
||||
+ phobos_library = PHOBOS_DYNAMIC;
|
||||
|
||||
#ifdef HAVE_LD_STATIC_DYNAMIC
|
||||
if (phobos_library == PHOBOS_DYNAMIC && static_link)
|
122
gcc10-foffload-default.patch
Normal file
122
gcc10-foffload-default.patch
Normal file
@ -0,0 +1,122 @@
|
||||
2019-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcc.c (offload_targets_default): New variable.
|
||||
(process_command): Set it if -foffload is defaulted.
|
||||
(driver::maybe_putenv_OFFLOAD_TARGETS): Add OFFLOAD_TARGET_DEFAULT=1
|
||||
into environment if -foffload has been defaulted.
|
||||
* lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define.
|
||||
(compile_offload_image): If OFFLOAD_TARGET_DEFAULT
|
||||
is in the environment, don't fail if corresponding mkoffload
|
||||
can't be found.
|
||||
(compile_images_for_offload_targets): Likewise. Free and clear
|
||||
offload_names if no valid offload is found.
|
||||
libgomp/
|
||||
* target.c (gomp_load_plugin_for_device): If a plugin can't be
|
||||
dlopened, assume it has no devices silently.
|
||||
|
||||
--- gcc/gcc.c.jj 2017-01-17 10:28:40.000000000 +0100
|
||||
+++ gcc/gcc.c 2017-01-20 16:26:29.649962902 +0100
|
||||
@@ -290,6 +290,10 @@ static const char *spec_host_machine = D
|
||||
|
||||
static char *offload_targets = NULL;
|
||||
|
||||
+/* Set to true if -foffload has not been used and offload_targets
|
||||
+ is set to the configured in default. */
|
||||
+static bool offload_targets_default;
|
||||
+
|
||||
/* Nonzero if cross-compiling.
|
||||
When -b is used, the value comes from the `specs' file. */
|
||||
|
||||
@@ -4457,7 +4461,10 @@ process_command (unsigned int decoded_op
|
||||
/* If the user didn't specify any, default to all configured offload
|
||||
targets. */
|
||||
if (ENABLE_OFFLOADING && offload_targets == NULL)
|
||||
- handle_foffload_option (OFFLOAD_TARGETS);
|
||||
+ {
|
||||
+ handle_foffload_option (OFFLOAD_TARGETS);
|
||||
+ offload_targets_default = true;
|
||||
+ }
|
||||
|
||||
if (output_file
|
||||
&& strcmp (output_file, "-") != 0
|
||||
@@ -7693,6 +7700,8 @@ driver::maybe_putenv_OFFLOAD_TARGETS ()
|
||||
obstack_grow (&collect_obstack, offload_targets,
|
||||
strlen (offload_targets) + 1);
|
||||
xputenv (XOBFINISH (&collect_obstack, char *));
|
||||
+ if (offload_targets_default)
|
||||
+ xputenv ("OFFLOAD_TARGET_DEFAULT=1");
|
||||
}
|
||||
|
||||
free (offload_targets);
|
||||
--- gcc/lto-wrapper.c.jj 2017-01-01 12:45:34.000000000 +0100
|
||||
+++ gcc/lto-wrapper.c 2017-01-20 16:34:18.294016997 +0100
|
||||
@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3.
|
||||
/* Environment variable, used for passing the names of offload targets from GCC
|
||||
driver to lto-wrapper. */
|
||||
#define OFFLOAD_TARGET_NAMES_ENV "OFFLOAD_TARGET_NAMES"
|
||||
+#define OFFLOAD_TARGET_DEFAULT_ENV "OFFLOAD_TARGET_DEFAULT"
|
||||
|
||||
enum lto_mode_d {
|
||||
LTO_MODE_NONE, /* Not doing LTO. */
|
||||
@@ -822,6 +823,12 @@ compile_offload_image (const char *targe
|
||||
break;
|
||||
}
|
||||
|
||||
+ if (!compiler && getenv (OFFLOAD_TARGET_DEFAULT_ENV))
|
||||
+ {
|
||||
+ free_array_of_ptrs ((void **) paths, n_paths);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
if (!compiler)
|
||||
fatal_error (input_location,
|
||||
"could not find %s in %s (consider using %<-B%>)",
|
||||
@@ -885,6 +892,7 @@ compile_images_for_offload_targets (unsi
|
||||
unsigned num_targets = parse_env_var (target_names, &names, NULL);
|
||||
|
||||
int next_name_entry = 0;
|
||||
+ bool hsa_seen = false;
|
||||
const char *compiler_path = getenv ("COMPILER_PATH");
|
||||
if (!compiler_path)
|
||||
goto out;
|
||||
@@ -897,18 +905,26 @@ compile_images_for_offload_targets (unsi
|
||||
/* HSA does not use LTO-like streaming and a different compiler, skip
|
||||
it. */
|
||||
if (strcmp (names[i], "hsa") == 0)
|
||||
- continue;
|
||||
+ {
|
||||
+ hsa_seen = true;
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
offload_names[next_name_entry]
|
||||
= compile_offload_image (names[i], compiler_path, in_argc, in_argv,
|
||||
compiler_opts, compiler_opt_count,
|
||||
linker_opts, linker_opt_count);
|
||||
if (!offload_names[next_name_entry])
|
||||
- fatal_error (input_location,
|
||||
- "problem with building target image for %s", names[i]);
|
||||
+ continue;
|
||||
next_name_entry++;
|
||||
}
|
||||
|
||||
+ if (next_name_entry == 0 && !hsa_seen)
|
||||
+ {
|
||||
+ free (offload_names);
|
||||
+ offload_names = NULL;
|
||||
+ }
|
||||
+
|
||||
out:
|
||||
free_array_of_ptrs ((void **) names, num_targets);
|
||||
}
|
||||
--- libgomp/target.c.jj 2017-01-01 12:45:52.000000000 +0100
|
||||
+++ libgomp/target.c 2017-01-20 20:12:13.756710875 +0100
|
||||
@@ -2356,7 +2356,7 @@ gomp_load_plugin_for_device (struct gomp
|
||||
|
||||
void *plugin_handle = dlopen (plugin_name, RTLD_LAZY);
|
||||
if (!plugin_handle)
|
||||
- goto dl_fail;
|
||||
+ return 0;
|
||||
|
||||
/* Check if all required functions are available in the plugin and store
|
||||
their handlers. None of the symbols can legitimately be NULL,
|
126
gcc10-hack.patch
Normal file
126
gcc10-hack.patch
Normal file
@ -0,0 +1,126 @@
|
||||
--- libada/Makefile.in.jj 2019-01-09 13:01:18.015608205 +0100
|
||||
+++ libada/Makefile.in 2019-01-11 18:16:23.441726931 +0100
|
||||
@@ -71,18 +71,40 @@ version := $(shell @get_gcc_base_ver@ $(
|
||||
libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
|
||||
ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
|
||||
|
||||
+DEFAULTMULTIFLAGS :=
|
||||
+ifeq ($(MULTISUBDIR),)
|
||||
+targ:=$(subst -, ,$(target))
|
||||
+arch:=$(word 1,$(targ))
|
||||
+ifeq ($(words $(targ)),2)
|
||||
+osys:=$(word 2,$(targ))
|
||||
+else
|
||||
+osys:=$(word 3,$(targ))
|
||||
+endif
|
||||
+ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),)
|
||||
+ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64)
|
||||
+DEFAULTMULTIFLAGS := -m64
|
||||
+else
|
||||
+ifeq ($(strip $(filter-out s390%, $(arch))),)
|
||||
+DEFAULTMULTIFLAGS := -m31
|
||||
+else
|
||||
+DEFAULTMULTIFLAGS := -m32
|
||||
+endif
|
||||
+endif
|
||||
+endif
|
||||
+endif
|
||||
+
|
||||
# exeext should not be used because it's the *host* exeext. We're building
|
||||
# a *target* library, aren't we?!? Likewise for CC. Still, provide bogus
|
||||
# definitions just in case something slips through the safety net provided
|
||||
# by recursive make invocations in gcc/ada/Makefile.in
|
||||
LIBADA_FLAGS_TO_PASS = \
|
||||
"MAKEOVERRIDES=" \
|
||||
- "LDFLAGS=$(LDFLAGS)" \
|
||||
+ "LDFLAGS=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \
|
||||
"LN_S=$(LN_S)" \
|
||||
"SHELL=$(SHELL)" \
|
||||
- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
|
||||
- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
|
||||
- "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \
|
||||
+ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
|
||||
+ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
|
||||
+ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
|
||||
"PICFLAG_FOR_TARGET=$(PICFLAG)" \
|
||||
"THREAD_KIND=$(THREAD_KIND)" \
|
||||
"TRACE=$(TRACE)" \
|
||||
@@ -93,7 +115,7 @@ LIBADA_FLAGS_TO_PASS = \
|
||||
"exeext=.exeext.should.not.be.used " \
|
||||
'CC=the.host.compiler.should.not.be.needed' \
|
||||
"GCC_FOR_TARGET=$(CC)" \
|
||||
- "CFLAGS=$(CFLAGS)"
|
||||
+ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)"
|
||||
|
||||
.PHONY: libada gnatlib gnatlib-shared gnatlib-sjlj gnatlib-zcx osconstool
|
||||
|
||||
--- config-ml.in.jj 2019-01-09 12:50:16.646501448 +0100
|
||||
+++ config-ml.in 2019-01-11 18:16:23.442726914 +0100
|
||||
@@ -511,6 +511,8 @@ multi-do:
|
||||
ADAFLAGS="$(ADAFLAGS) $${flags}" \
|
||||
prefix="$(prefix)" \
|
||||
exec_prefix="$(exec_prefix)" \
|
||||
+ mandir="$(mandir)" \
|
||||
+ infodir="$(infodir)" \
|
||||
GOCFLAGS="$(GOCFLAGS) $${flags}" \
|
||||
GDCFLAGS="$(GDCFLAGS) $${flags}" \
|
||||
CXXFLAGS="$(CXXFLAGS) $${flags}" \
|
||||
--- libcpp/macro.c.jj 2019-01-09 13:01:21.420552123 +0100
|
||||
+++ libcpp/macro.c 2019-01-11 18:18:17.736876285 +0100
|
||||
@@ -3256,8 +3256,6 @@ static cpp_macro *
|
||||
create_iso_definition (cpp_reader *pfile)
|
||||
{
|
||||
bool following_paste_op = false;
|
||||
- const char *paste_op_error_msg =
|
||||
- N_("'##' cannot appear at either end of a macro expansion");
|
||||
unsigned int num_extra_tokens = 0;
|
||||
unsigned nparms = 0;
|
||||
cpp_hashnode **params = NULL;
|
||||
@@ -3382,7 +3380,9 @@ create_iso_definition (cpp_reader *pfile
|
||||
function-like macros, but not at the end. */
|
||||
if (following_paste_op)
|
||||
{
|
||||
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
|
||||
+ cpp_error (pfile, CPP_DL_ERROR,
|
||||
+ "'##' cannot appear at either end of a macro "
|
||||
+ "expansion");
|
||||
goto out;
|
||||
}
|
||||
if (!vaopt_tracker.completed ())
|
||||
@@ -3397,7 +3397,9 @@ create_iso_definition (cpp_reader *pfile
|
||||
function-like macros, but not at the beginning. */
|
||||
if (macro->count == 1)
|
||||
{
|
||||
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
|
||||
+ cpp_error (pfile, CPP_DL_ERROR,
|
||||
+ "'##' cannot appear at either end of a macro "
|
||||
+ "expansion");
|
||||
goto out;
|
||||
}
|
||||
|
||||
--- libcpp/expr.c.jj 2019-01-09 13:01:22.415535734 +0100
|
||||
+++ libcpp/expr.c 2019-01-11 18:16:23.444726882 +0100
|
||||
@@ -788,16 +788,17 @@ cpp_classify_number (cpp_reader *pfile,
|
||||
if ((result & CPP_N_WIDTH) == CPP_N_LARGE
|
||||
&& CPP_OPTION (pfile, cpp_warn_long_long))
|
||||
{
|
||||
- const char *message = CPP_OPTION (pfile, cplusplus)
|
||||
- ? N_("use of C++11 long long integer constant")
|
||||
- : N_("use of C99 long long integer constant");
|
||||
-
|
||||
if (CPP_OPTION (pfile, c99))
|
||||
cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
|
||||
- 0, message);
|
||||
+ 0, CPP_OPTION (pfile, cplusplus)
|
||||
+ ? N_("use of C++11 long long integer constant")
|
||||
+ : N_("use of C99 long long integer constant"));
|
||||
else
|
||||
cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
|
||||
- virtual_location, 0, message);
|
||||
+ virtual_location, 0,
|
||||
+ CPP_OPTION (pfile, cplusplus)
|
||||
+ ? N_("use of C++11 long long integer constant")
|
||||
+ : N_("use of C99 long long integer constant"));
|
||||
}
|
||||
|
||||
result |= CPP_N_INTEGER;
|
11
gcc10-i386-libgomp.patch
Normal file
11
gcc10-i386-libgomp.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- libgomp/configure.tgt.jj 2008-01-10 20:53:48.000000000 +0100
|
||||
+++ libgomp/configure.tgt 2008-03-27 12:44:51.000000000 +0100
|
||||
@@ -67,7 +67,7 @@ if test $enable_linux_futex = yes; then
|
||||
;;
|
||||
*)
|
||||
if test -z "$with_arch"; then
|
||||
- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
|
||||
+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
|
||||
fi
|
||||
esac
|
||||
;;
|
715
gcc10-isl-dl.patch
Normal file
715
gcc10-isl-dl.patch
Normal file
@ -0,0 +1,715 @@
|
||||
--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
|
||||
+++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
|
||||
@@ -1063,7 +1063,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
|
||||
# and the system's installed libraries.
|
||||
LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
|
||||
$(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
|
||||
-BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
||||
+BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
||||
$(ZLIB) $(ZSTD_LIB)
|
||||
# Any system libraries needed just for GNAT.
|
||||
SYSLIBS = @GNAT_LIBEXC@
|
||||
@@ -2302,6 +2302,15 @@ $(out_object_file): $(out_file)
|
||||
$(common_out_object_file): $(common_out_file)
|
||||
$(COMPILE) $<
|
||||
$(POSTCOMPILE)
|
||||
+
|
||||
+graphite%.o : \
|
||||
+ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
|
||||
+graphite.o : \
|
||||
+ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
|
||||
+graphite%.o : \
|
||||
+ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
|
||||
+graphite.o : \
|
||||
+ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
|
||||
#
|
||||
# Generate header and source files from the machine description,
|
||||
# and compile them.
|
||||
--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
|
||||
+++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100
|
||||
@@ -39,6 +39,590 @@ along with GCC; see the file COPYING3.
|
||||
#include <isl/schedule_node.h>
|
||||
#include <isl/id.h>
|
||||
#include <isl/space.h>
|
||||
+#include <isl/version.h>
|
||||
+#include <dlfcn.h>
|
||||
+
|
||||
+#define DYNSYMS \
|
||||
+ DYNSYM (isl_aff_add_coefficient_si); \
|
||||
+ DYNSYM (isl_aff_free); \
|
||||
+ DYNSYM (isl_aff_get_space); \
|
||||
+ DYNSYM (isl_aff_set_coefficient_si); \
|
||||
+ DYNSYM (isl_aff_set_constant_si); \
|
||||
+ DYNSYM (isl_aff_zero_on_domain); \
|
||||
+ DYNSYM (isl_band_free); \
|
||||
+ DYNSYM (isl_band_get_children); \
|
||||
+ DYNSYM (isl_band_get_partial_schedule); \
|
||||
+ DYNSYM (isl_band_has_children); \
|
||||
+ DYNSYM (isl_band_list_free); \
|
||||
+ DYNSYM (isl_band_list_get_band); \
|
||||
+ DYNSYM (isl_band_list_get_ctx); \
|
||||
+ DYNSYM (isl_band_list_n_band); \
|
||||
+ DYNSYM (isl_band_n_member); \
|
||||
+ DYNSYM (isl_basic_map_add_constraint); \
|
||||
+ DYNSYM (isl_basic_map_project_out); \
|
||||
+ DYNSYM (isl_basic_map_universe); \
|
||||
+ DYNSYM (isl_constraint_set_coefficient_si); \
|
||||
+ DYNSYM (isl_constraint_set_constant_si); \
|
||||
+ DYNSYM (isl_ctx_alloc); \
|
||||
+ DYNSYM (isl_ctx_free); \
|
||||
+ DYNSYM (isl_equality_alloc); \
|
||||
+ DYNSYM (isl_id_alloc); \
|
||||
+ DYNSYM (isl_id_copy); \
|
||||
+ DYNSYM (isl_id_free); \
|
||||
+ DYNSYM (isl_inequality_alloc); \
|
||||
+ DYNSYM (isl_local_space_copy); \
|
||||
+ DYNSYM (isl_local_space_free); \
|
||||
+ DYNSYM (isl_local_space_from_space); \
|
||||
+ DYNSYM (isl_local_space_range); \
|
||||
+ DYNSYM (isl_map_add_constraint); \
|
||||
+ DYNSYM (isl_map_add_dims); \
|
||||
+ DYNSYM (isl_map_align_params); \
|
||||
+ DYNSYM (isl_map_apply_range); \
|
||||
+ DYNSYM (isl_map_copy); \
|
||||
+ DYNSYM (isl_map_dim); \
|
||||
+ DYNSYM (isl_map_dump); \
|
||||
+ DYNSYM (isl_map_equate); \
|
||||
+ DYNSYM (isl_map_fix_si); \
|
||||
+ DYNSYM (isl_map_flat_product); \
|
||||
+ DYNSYM (isl_map_flat_range_product); \
|
||||
+ DYNSYM (isl_map_free); \
|
||||
+ DYNSYM (isl_map_from_basic_map); \
|
||||
+ DYNSYM (isl_map_from_pw_aff); \
|
||||
+ DYNSYM (isl_map_from_union_map); \
|
||||
+ DYNSYM (isl_map_get_ctx); \
|
||||
+ DYNSYM (isl_map_get_space); \
|
||||
+ DYNSYM (isl_map_get_tuple_id); \
|
||||
+ DYNSYM (isl_map_insert_dims); \
|
||||
+ DYNSYM (isl_map_intersect); \
|
||||
+ DYNSYM (isl_map_intersect_domain); \
|
||||
+ DYNSYM (isl_map_intersect_range); \
|
||||
+ DYNSYM (isl_map_is_empty); \
|
||||
+ DYNSYM (isl_map_lex_ge); \
|
||||
+ DYNSYM (isl_map_lex_le); \
|
||||
+ DYNSYM (isl_map_n_out); \
|
||||
+ DYNSYM (isl_map_range); \
|
||||
+ DYNSYM (isl_map_set_tuple_id); \
|
||||
+ DYNSYM (isl_map_universe); \
|
||||
+ DYNSYM (isl_options_set_on_error); \
|
||||
+ DYNSYM (isl_options_set_schedule_serialize_sccs); \
|
||||
+ DYNSYM (isl_printer_set_yaml_style); \
|
||||
+ DYNSYM (isl_options_set_schedule_max_constant_term); \
|
||||
+ DYNSYM (isl_options_set_schedule_maximize_band_depth); \
|
||||
+ DYNSYM (isl_printer_free); \
|
||||
+ DYNSYM (isl_printer_print_aff); \
|
||||
+ DYNSYM (isl_printer_print_constraint); \
|
||||
+ DYNSYM (isl_printer_print_map); \
|
||||
+ DYNSYM (isl_printer_print_set); \
|
||||
+ DYNSYM (isl_printer_to_file); \
|
||||
+ DYNSYM (isl_pw_aff_add); \
|
||||
+ DYNSYM (isl_pw_aff_alloc); \
|
||||
+ DYNSYM (isl_pw_aff_copy); \
|
||||
+ DYNSYM (isl_pw_aff_eq_set); \
|
||||
+ DYNSYM (isl_pw_aff_free); \
|
||||
+ DYNSYM (isl_pw_aff_from_aff); \
|
||||
+ DYNSYM (isl_pw_aff_ge_set); \
|
||||
+ DYNSYM (isl_pw_aff_gt_set); \
|
||||
+ DYNSYM (isl_pw_aff_is_cst); \
|
||||
+ DYNSYM (isl_pw_aff_le_set); \
|
||||
+ DYNSYM (isl_pw_aff_lt_set); \
|
||||
+ DYNSYM (isl_pw_aff_mul); \
|
||||
+ DYNSYM (isl_pw_aff_ne_set); \
|
||||
+ DYNSYM (isl_pw_aff_nonneg_set); \
|
||||
+ DYNSYM (isl_pw_aff_set_tuple_id); \
|
||||
+ DYNSYM (isl_pw_aff_sub); \
|
||||
+ DYNSYM (isl_pw_aff_zero_set); \
|
||||
+ DYNSYM (isl_schedule_free); \
|
||||
+ DYNSYM (isl_schedule_get_band_forest); \
|
||||
+ DYNSYM (isl_set_add_constraint); \
|
||||
+ DYNSYM (isl_set_add_dims); \
|
||||
+ DYNSYM (isl_set_apply); \
|
||||
+ DYNSYM (isl_set_coalesce); \
|
||||
+ DYNSYM (isl_set_copy); \
|
||||
+ DYNSYM (isl_set_dim); \
|
||||
+ DYNSYM (isl_set_fix_si); \
|
||||
+ DYNSYM (isl_set_free); \
|
||||
+ DYNSYM (isl_set_get_space); \
|
||||
+ DYNSYM (isl_set_get_tuple_id); \
|
||||
+ DYNSYM (isl_set_intersect); \
|
||||
+ DYNSYM (isl_set_is_empty); \
|
||||
+ DYNSYM (isl_set_n_dim); \
|
||||
+ DYNSYM (isl_set_nat_universe); \
|
||||
+ DYNSYM (isl_set_project_out); \
|
||||
+ DYNSYM (isl_set_set_tuple_id); \
|
||||
+ DYNSYM (isl_set_universe); \
|
||||
+ DYNSYM (isl_space_add_dims); \
|
||||
+ DYNSYM (isl_space_alloc); \
|
||||
+ DYNSYM (isl_space_copy); \
|
||||
+ DYNSYM (isl_space_dim); \
|
||||
+ DYNSYM (isl_space_domain); \
|
||||
+ DYNSYM (isl_space_find_dim_by_id); \
|
||||
+ DYNSYM (isl_space_free); \
|
||||
+ DYNSYM (isl_space_from_domain); \
|
||||
+ DYNSYM (isl_space_get_tuple_id); \
|
||||
+ DYNSYM (isl_space_params_alloc); \
|
||||
+ DYNSYM (isl_space_range); \
|
||||
+ DYNSYM (isl_space_set_alloc); \
|
||||
+ DYNSYM (isl_space_set_dim_id); \
|
||||
+ DYNSYM (isl_space_set_tuple_id); \
|
||||
+ DYNSYM (isl_union_map_add_map); \
|
||||
+ DYNSYM (isl_union_map_align_params); \
|
||||
+ DYNSYM (isl_union_map_apply_domain); \
|
||||
+ DYNSYM (isl_union_map_apply_range); \
|
||||
+ DYNSYM (isl_union_map_compute_flow); \
|
||||
+ DYNSYM (isl_union_map_copy); \
|
||||
+ DYNSYM (isl_union_map_empty); \
|
||||
+ DYNSYM (isl_union_map_flat_range_product); \
|
||||
+ DYNSYM (isl_union_map_foreach_map); \
|
||||
+ DYNSYM (isl_union_map_free); \
|
||||
+ DYNSYM (isl_union_map_from_map); \
|
||||
+ DYNSYM (isl_union_map_get_ctx); \
|
||||
+ DYNSYM (isl_union_map_get_space); \
|
||||
+ DYNSYM (isl_union_map_gist_domain); \
|
||||
+ DYNSYM (isl_union_map_gist_range); \
|
||||
+ DYNSYM (isl_union_map_intersect_domain); \
|
||||
+ DYNSYM (isl_union_map_is_empty); \
|
||||
+ DYNSYM (isl_union_map_subtract); \
|
||||
+ DYNSYM (isl_union_map_union); \
|
||||
+ DYNSYM (isl_union_set_add_set); \
|
||||
+ DYNSYM (isl_union_set_compute_schedule); \
|
||||
+ DYNSYM (isl_union_set_copy); \
|
||||
+ DYNSYM (isl_union_set_empty); \
|
||||
+ DYNSYM (isl_union_set_from_set); \
|
||||
+ DYNSYM (isl_aff_add_constant_val); \
|
||||
+ DYNSYM (isl_aff_get_coefficient_val); \
|
||||
+ DYNSYM (isl_aff_get_ctx); \
|
||||
+ DYNSYM (isl_aff_mod_val); \
|
||||
+ DYNSYM (isl_ast_build_ast_from_schedule); \
|
||||
+ DYNSYM (isl_ast_build_free); \
|
||||
+ DYNSYM (isl_ast_build_from_context); \
|
||||
+ DYNSYM (isl_ast_build_get_ctx); \
|
||||
+ DYNSYM (isl_ast_build_get_schedule); \
|
||||
+ DYNSYM (isl_ast_build_get_schedule_space); \
|
||||
+ DYNSYM (isl_ast_build_set_before_each_for); \
|
||||
+ DYNSYM (isl_ast_build_set_options); \
|
||||
+ DYNSYM (isl_ast_expr_free); \
|
||||
+ DYNSYM (isl_ast_expr_from_val); \
|
||||
+ DYNSYM (isl_ast_expr_get_ctx); \
|
||||
+ DYNSYM (isl_ast_expr_get_id); \
|
||||
+ DYNSYM (isl_ast_expr_get_op_arg); \
|
||||
+ DYNSYM (isl_ast_expr_get_op_n_arg); \
|
||||
+ DYNSYM (isl_ast_expr_get_op_type); \
|
||||
+ DYNSYM (isl_ast_expr_get_type); \
|
||||
+ DYNSYM (isl_ast_expr_get_val); \
|
||||
+ DYNSYM (isl_ast_expr_sub); \
|
||||
+ DYNSYM (isl_ast_node_block_get_children); \
|
||||
+ DYNSYM (isl_ast_node_for_get_body); \
|
||||
+ DYNSYM (isl_ast_node_for_get_cond); \
|
||||
+ DYNSYM (isl_ast_node_for_get_inc); \
|
||||
+ DYNSYM (isl_ast_node_for_get_init); \
|
||||
+ DYNSYM (isl_ast_node_for_get_iterator); \
|
||||
+ DYNSYM (isl_ast_node_free); \
|
||||
+ DYNSYM (isl_ast_node_get_annotation); \
|
||||
+ DYNSYM (isl_ast_node_get_type); \
|
||||
+ DYNSYM (isl_ast_node_if_get_cond); \
|
||||
+ DYNSYM (isl_ast_node_if_get_else); \
|
||||
+ DYNSYM (isl_ast_node_if_get_then); \
|
||||
+ DYNSYM (isl_ast_node_list_free); \
|
||||
+ DYNSYM (isl_ast_node_list_get_ast_node); \
|
||||
+ DYNSYM (isl_ast_node_list_n_ast_node); \
|
||||
+ DYNSYM (isl_ast_node_user_get_expr); \
|
||||
+ DYNSYM (isl_constraint_set_coefficient_val); \
|
||||
+ DYNSYM (isl_constraint_set_constant_val); \
|
||||
+ DYNSYM (isl_id_get_user); \
|
||||
+ DYNSYM (isl_local_space_get_ctx); \
|
||||
+ DYNSYM (isl_map_fix_val); \
|
||||
+ DYNSYM (isl_options_set_ast_build_atomic_upper_bound); \
|
||||
+ DYNSYM (isl_printer_print_ast_node); \
|
||||
+ DYNSYM (isl_printer_print_str); \
|
||||
+ DYNSYM (isl_printer_set_output_format); \
|
||||
+ DYNSYM (isl_pw_aff_mod_val); \
|
||||
+ DYNSYM (isl_schedule_constraints_compute_schedule); \
|
||||
+ DYNSYM (isl_schedule_constraints_on_domain); \
|
||||
+ DYNSYM (isl_schedule_constraints_set_coincidence); \
|
||||
+ DYNSYM (isl_schedule_constraints_set_proximity); \
|
||||
+ DYNSYM (isl_schedule_constraints_set_validity); \
|
||||
+ DYNSYM (isl_set_get_dim_id); \
|
||||
+ DYNSYM (isl_set_max_val); \
|
||||
+ DYNSYM (isl_set_min_val); \
|
||||
+ DYNSYM (isl_set_params); \
|
||||
+ DYNSYM (isl_space_align_params); \
|
||||
+ DYNSYM (isl_space_map_from_domain_and_range); \
|
||||
+ DYNSYM (isl_space_set_tuple_name); \
|
||||
+ DYNSYM (isl_space_wrap); \
|
||||
+ DYNSYM (isl_union_map_from_domain_and_range); \
|
||||
+ DYNSYM (isl_union_map_range); \
|
||||
+ DYNSYM (isl_union_set_union); \
|
||||
+ DYNSYM (isl_union_set_universe); \
|
||||
+ DYNSYM (isl_val_2exp); \
|
||||
+ DYNSYM (isl_val_add_ui); \
|
||||
+ DYNSYM (isl_val_copy); \
|
||||
+ DYNSYM (isl_val_free); \
|
||||
+ DYNSYM (isl_val_int_from_si); \
|
||||
+ DYNSYM (isl_val_int_from_ui); \
|
||||
+ DYNSYM (isl_val_mul); \
|
||||
+ DYNSYM (isl_val_neg); \
|
||||
+ DYNSYM (isl_val_sub); \
|
||||
+ DYNSYM (isl_printer_print_union_map); \
|
||||
+ DYNSYM (isl_pw_aff_get_ctx); \
|
||||
+ DYNSYM (isl_val_is_int); \
|
||||
+ DYNSYM (isl_ctx_get_max_operations); \
|
||||
+ DYNSYM (isl_ctx_set_max_operations); \
|
||||
+ DYNSYM (isl_ctx_last_error); \
|
||||
+ DYNSYM (isl_ctx_reset_operations); \
|
||||
+ DYNSYM (isl_map_coalesce); \
|
||||
+ DYNSYM (isl_printer_print_schedule); \
|
||||
+ DYNSYM (isl_set_set_dim_id); \
|
||||
+ DYNSYM (isl_union_map_coalesce); \
|
||||
+ DYNSYM (isl_multi_val_set_val); \
|
||||
+ DYNSYM (isl_multi_val_zero); \
|
||||
+ DYNSYM (isl_options_set_schedule_max_coefficient); \
|
||||
+ DYNSYM (isl_options_set_tile_scale_tile_loops); \
|
||||
+ DYNSYM (isl_schedule_copy); \
|
||||
+ DYNSYM (isl_schedule_get_map); \
|
||||
+ DYNSYM (isl_schedule_map_schedule_node_bottom_up); \
|
||||
+ DYNSYM (isl_schedule_node_band_get_permutable); \
|
||||
+ DYNSYM (isl_schedule_node_band_get_space); \
|
||||
+ DYNSYM (isl_schedule_node_band_tile); \
|
||||
+ DYNSYM (isl_schedule_node_child); \
|
||||
+ DYNSYM (isl_schedule_node_free); \
|
||||
+ DYNSYM (isl_schedule_node_get_child); \
|
||||
+ DYNSYM (isl_schedule_node_get_ctx); \
|
||||
+ DYNSYM (isl_schedule_node_get_type); \
|
||||
+ DYNSYM (isl_schedule_node_n_children); \
|
||||
+ DYNSYM (isl_union_map_is_equal); \
|
||||
+ DYNSYM (isl_union_access_info_compute_flow); \
|
||||
+ DYNSYM (isl_union_access_info_from_sink); \
|
||||
+ DYNSYM (isl_union_access_info_set_may_source); \
|
||||
+ DYNSYM (isl_union_access_info_set_must_source); \
|
||||
+ DYNSYM (isl_union_access_info_set_schedule); \
|
||||
+ DYNSYM (isl_union_flow_free); \
|
||||
+ DYNSYM (isl_union_flow_get_may_dependence); \
|
||||
+ DYNSYM (isl_union_flow_get_must_dependence); \
|
||||
+ DYNSYM (isl_aff_var_on_domain); \
|
||||
+ DYNSYM (isl_multi_aff_from_aff); \
|
||||
+ DYNSYM (isl_schedule_get_ctx); \
|
||||
+ DYNSYM (isl_multi_aff_set_tuple_id); \
|
||||
+ DYNSYM (isl_multi_aff_dim); \
|
||||
+ DYNSYM (isl_schedule_get_domain); \
|
||||
+ DYNSYM (isl_union_set_is_empty); \
|
||||
+ DYNSYM (isl_union_set_get_space); \
|
||||
+ DYNSYM (isl_union_pw_multi_aff_empty); \
|
||||
+ DYNSYM (isl_union_set_foreach_set); \
|
||||
+ DYNSYM (isl_union_set_free); \
|
||||
+ DYNSYM (isl_multi_union_pw_aff_from_union_pw_multi_aff); \
|
||||
+ DYNSYM (isl_multi_union_pw_aff_apply_multi_aff); \
|
||||
+ DYNSYM (isl_schedule_insert_partial_schedule); \
|
||||
+ DYNSYM (isl_union_pw_multi_aff_free); \
|
||||
+ DYNSYM (isl_pw_multi_aff_project_out_map); \
|
||||
+ DYNSYM (isl_union_pw_multi_aff_add_pw_multi_aff); \
|
||||
+ DYNSYM (isl_schedule_from_domain); \
|
||||
+ DYNSYM (isl_schedule_sequence); \
|
||||
+ DYNSYM (isl_ast_build_node_from_schedule); \
|
||||
+ DYNSYM (isl_ast_node_mark_get_node); \
|
||||
+ DYNSYM (isl_schedule_node_band_member_get_ast_loop_type); \
|
||||
+ DYNSYM (isl_schedule_node_band_member_set_ast_loop_type); \
|
||||
+ DYNSYM (isl_val_n_abs_num_chunks); \
|
||||
+ DYNSYM (isl_val_get_abs_num_chunks); \
|
||||
+ DYNSYM (isl_val_int_from_chunks); \
|
||||
+ DYNSYM (isl_val_is_neg); \
|
||||
+ DYNSYM (isl_version); \
|
||||
+ DYNSYM (isl_options_get_on_error); \
|
||||
+ DYNSYM (isl_ctx_reset_error);
|
||||
+
|
||||
+extern struct isl_pointers_s__
|
||||
+{
|
||||
+ bool inited;
|
||||
+ void *h;
|
||||
+#define DYNSYM(x) __typeof (x) *p_##x
|
||||
+ DYNSYMS
|
||||
+#undef DYNSYM
|
||||
+} isl_pointers__;
|
||||
+
|
||||
+#define isl_aff_add_coefficient_si (*isl_pointers__.p_isl_aff_add_coefficient_si)
|
||||
+#define isl_aff_free (*isl_pointers__.p_isl_aff_free)
|
||||
+#define isl_aff_get_space (*isl_pointers__.p_isl_aff_get_space)
|
||||
+#define isl_aff_set_coefficient_si (*isl_pointers__.p_isl_aff_set_coefficient_si)
|
||||
+#define isl_aff_set_constant_si (*isl_pointers__.p_isl_aff_set_constant_si)
|
||||
+#define isl_aff_zero_on_domain (*isl_pointers__.p_isl_aff_zero_on_domain)
|
||||
+#define isl_band_free (*isl_pointers__.p_isl_band_free)
|
||||
+#define isl_band_get_children (*isl_pointers__.p_isl_band_get_children)
|
||||
+#define isl_band_get_partial_schedule (*isl_pointers__.p_isl_band_get_partial_schedule)
|
||||
+#define isl_band_has_children (*isl_pointers__.p_isl_band_has_children)
|
||||
+#define isl_band_list_free (*isl_pointers__.p_isl_band_list_free)
|
||||
+#define isl_band_list_get_band (*isl_pointers__.p_isl_band_list_get_band)
|
||||
+#define isl_band_list_get_ctx (*isl_pointers__.p_isl_band_list_get_ctx)
|
||||
+#define isl_band_list_n_band (*isl_pointers__.p_isl_band_list_n_band)
|
||||
+#define isl_band_n_member (*isl_pointers__.p_isl_band_n_member)
|
||||
+#define isl_basic_map_add_constraint (*isl_pointers__.p_isl_basic_map_add_constraint)
|
||||
+#define isl_basic_map_project_out (*isl_pointers__.p_isl_basic_map_project_out)
|
||||
+#define isl_basic_map_universe (*isl_pointers__.p_isl_basic_map_universe)
|
||||
+#define isl_constraint_set_coefficient_si (*isl_pointers__.p_isl_constraint_set_coefficient_si)
|
||||
+#define isl_constraint_set_constant_si (*isl_pointers__.p_isl_constraint_set_constant_si)
|
||||
+#define isl_ctx_alloc (*isl_pointers__.p_isl_ctx_alloc)
|
||||
+#define isl_ctx_free (*isl_pointers__.p_isl_ctx_free)
|
||||
+#define isl_equality_alloc (*isl_pointers__.p_isl_equality_alloc)
|
||||
+#define isl_id_alloc (*isl_pointers__.p_isl_id_alloc)
|
||||
+#define isl_id_copy (*isl_pointers__.p_isl_id_copy)
|
||||
+#define isl_id_free (*isl_pointers__.p_isl_id_free)
|
||||
+#define isl_inequality_alloc (*isl_pointers__.p_isl_inequality_alloc)
|
||||
+#define isl_local_space_copy (*isl_pointers__.p_isl_local_space_copy)
|
||||
+#define isl_local_space_free (*isl_pointers__.p_isl_local_space_free)
|
||||
+#define isl_local_space_from_space (*isl_pointers__.p_isl_local_space_from_space)
|
||||
+#define isl_local_space_range (*isl_pointers__.p_isl_local_space_range)
|
||||
+#define isl_map_add_constraint (*isl_pointers__.p_isl_map_add_constraint)
|
||||
+#define isl_map_add_dims (*isl_pointers__.p_isl_map_add_dims)
|
||||
+#define isl_map_align_params (*isl_pointers__.p_isl_map_align_params)
|
||||
+#define isl_map_apply_range (*isl_pointers__.p_isl_map_apply_range)
|
||||
+#define isl_map_copy (*isl_pointers__.p_isl_map_copy)
|
||||
+#define isl_map_dim (*isl_pointers__.p_isl_map_dim)
|
||||
+#define isl_map_dump (*isl_pointers__.p_isl_map_dump)
|
||||
+#define isl_map_equate (*isl_pointers__.p_isl_map_equate)
|
||||
+#define isl_map_fix_si (*isl_pointers__.p_isl_map_fix_si)
|
||||
+#define isl_map_flat_product (*isl_pointers__.p_isl_map_flat_product)
|
||||
+#define isl_map_flat_range_product (*isl_pointers__.p_isl_map_flat_range_product)
|
||||
+#define isl_map_free (*isl_pointers__.p_isl_map_free)
|
||||
+#define isl_map_from_basic_map (*isl_pointers__.p_isl_map_from_basic_map)
|
||||
+#define isl_map_from_pw_aff (*isl_pointers__.p_isl_map_from_pw_aff)
|
||||
+#define isl_map_from_union_map (*isl_pointers__.p_isl_map_from_union_map)
|
||||
+#define isl_map_get_ctx (*isl_pointers__.p_isl_map_get_ctx)
|
||||
+#define isl_map_get_space (*isl_pointers__.p_isl_map_get_space)
|
||||
+#define isl_map_get_tuple_id (*isl_pointers__.p_isl_map_get_tuple_id)
|
||||
+#define isl_map_insert_dims (*isl_pointers__.p_isl_map_insert_dims)
|
||||
+#define isl_map_intersect (*isl_pointers__.p_isl_map_intersect)
|
||||
+#define isl_map_intersect_domain (*isl_pointers__.p_isl_map_intersect_domain)
|
||||
+#define isl_map_intersect_range (*isl_pointers__.p_isl_map_intersect_range)
|
||||
+#define isl_map_is_empty (*isl_pointers__.p_isl_map_is_empty)
|
||||
+#define isl_map_lex_ge (*isl_pointers__.p_isl_map_lex_ge)
|
||||
+#define isl_map_lex_le (*isl_pointers__.p_isl_map_lex_le)
|
||||
+#define isl_map_n_out (*isl_pointers__.p_isl_map_n_out)
|
||||
+#define isl_map_range (*isl_pointers__.p_isl_map_range)
|
||||
+#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id)
|
||||
+#define isl_map_universe (*isl_pointers__.p_isl_map_universe)
|
||||
+#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error)
|
||||
+#define isl_options_set_schedule_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs)
|
||||
+#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style)
|
||||
+#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term)
|
||||
+#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth)
|
||||
+#define isl_printer_free (*isl_pointers__.p_isl_printer_free)
|
||||
+#define isl_printer_print_aff (*isl_pointers__.p_isl_printer_print_aff)
|
||||
+#define isl_printer_print_constraint (*isl_pointers__.p_isl_printer_print_constraint)
|
||||
+#define isl_printer_print_map (*isl_pointers__.p_isl_printer_print_map)
|
||||
+#define isl_printer_print_set (*isl_pointers__.p_isl_printer_print_set)
|
||||
+#define isl_printer_to_file (*isl_pointers__.p_isl_printer_to_file)
|
||||
+#define isl_pw_aff_add (*isl_pointers__.p_isl_pw_aff_add)
|
||||
+#define isl_pw_aff_alloc (*isl_pointers__.p_isl_pw_aff_alloc)
|
||||
+#define isl_pw_aff_copy (*isl_pointers__.p_isl_pw_aff_copy)
|
||||
+#define isl_pw_aff_eq_set (*isl_pointers__.p_isl_pw_aff_eq_set)
|
||||
+#define isl_pw_aff_free (*isl_pointers__.p_isl_pw_aff_free)
|
||||
+#define isl_pw_aff_from_aff (*isl_pointers__.p_isl_pw_aff_from_aff)
|
||||
+#define isl_pw_aff_ge_set (*isl_pointers__.p_isl_pw_aff_ge_set)
|
||||
+#define isl_pw_aff_gt_set (*isl_pointers__.p_isl_pw_aff_gt_set)
|
||||
+#define isl_pw_aff_is_cst (*isl_pointers__.p_isl_pw_aff_is_cst)
|
||||
+#define isl_pw_aff_le_set (*isl_pointers__.p_isl_pw_aff_le_set)
|
||||
+#define isl_pw_aff_lt_set (*isl_pointers__.p_isl_pw_aff_lt_set)
|
||||
+#define isl_pw_aff_mul (*isl_pointers__.p_isl_pw_aff_mul)
|
||||
+#define isl_pw_aff_ne_set (*isl_pointers__.p_isl_pw_aff_ne_set)
|
||||
+#define isl_pw_aff_nonneg_set (*isl_pointers__.p_isl_pw_aff_nonneg_set)
|
||||
+#define isl_pw_aff_set_tuple_id (*isl_pointers__.p_isl_pw_aff_set_tuple_id)
|
||||
+#define isl_pw_aff_sub (*isl_pointers__.p_isl_pw_aff_sub)
|
||||
+#define isl_pw_aff_zero_set (*isl_pointers__.p_isl_pw_aff_zero_set)
|
||||
+#define isl_schedule_free (*isl_pointers__.p_isl_schedule_free)
|
||||
+#define isl_schedule_get_band_forest (*isl_pointers__.p_isl_schedule_get_band_forest)
|
||||
+#define isl_set_add_constraint (*isl_pointers__.p_isl_set_add_constraint)
|
||||
+#define isl_set_add_dims (*isl_pointers__.p_isl_set_add_dims)
|
||||
+#define isl_set_apply (*isl_pointers__.p_isl_set_apply)
|
||||
+#define isl_set_coalesce (*isl_pointers__.p_isl_set_coalesce)
|
||||
+#define isl_set_copy (*isl_pointers__.p_isl_set_copy)
|
||||
+#define isl_set_dim (*isl_pointers__.p_isl_set_dim)
|
||||
+#define isl_set_fix_si (*isl_pointers__.p_isl_set_fix_si)
|
||||
+#define isl_set_free (*isl_pointers__.p_isl_set_free)
|
||||
+#define isl_set_get_space (*isl_pointers__.p_isl_set_get_space)
|
||||
+#define isl_set_get_tuple_id (*isl_pointers__.p_isl_set_get_tuple_id)
|
||||
+#define isl_set_intersect (*isl_pointers__.p_isl_set_intersect)
|
||||
+#define isl_set_is_empty (*isl_pointers__.p_isl_set_is_empty)
|
||||
+#define isl_set_n_dim (*isl_pointers__.p_isl_set_n_dim)
|
||||
+#define isl_set_nat_universe (*isl_pointers__.p_isl_set_nat_universe)
|
||||
+#define isl_set_project_out (*isl_pointers__.p_isl_set_project_out)
|
||||
+#define isl_set_set_tuple_id (*isl_pointers__.p_isl_set_set_tuple_id)
|
||||
+#define isl_set_universe (*isl_pointers__.p_isl_set_universe)
|
||||
+#define isl_space_add_dims (*isl_pointers__.p_isl_space_add_dims)
|
||||
+#define isl_space_alloc (*isl_pointers__.p_isl_space_alloc)
|
||||
+#define isl_space_copy (*isl_pointers__.p_isl_space_copy)
|
||||
+#define isl_space_dim (*isl_pointers__.p_isl_space_dim)
|
||||
+#define isl_space_domain (*isl_pointers__.p_isl_space_domain)
|
||||
+#define isl_space_find_dim_by_id (*isl_pointers__.p_isl_space_find_dim_by_id)
|
||||
+#define isl_space_free (*isl_pointers__.p_isl_space_free)
|
||||
+#define isl_space_from_domain (*isl_pointers__.p_isl_space_from_domain)
|
||||
+#define isl_space_get_tuple_id (*isl_pointers__.p_isl_space_get_tuple_id)
|
||||
+#define isl_space_params_alloc (*isl_pointers__.p_isl_space_params_alloc)
|
||||
+#define isl_space_range (*isl_pointers__.p_isl_space_range)
|
||||
+#define isl_space_set_alloc (*isl_pointers__.p_isl_space_set_alloc)
|
||||
+#define isl_space_set_dim_id (*isl_pointers__.p_isl_space_set_dim_id)
|
||||
+#define isl_space_set_tuple_id (*isl_pointers__.p_isl_space_set_tuple_id)
|
||||
+#define isl_union_map_add_map (*isl_pointers__.p_isl_union_map_add_map)
|
||||
+#define isl_union_map_align_params (*isl_pointers__.p_isl_union_map_align_params)
|
||||
+#define isl_union_map_apply_domain (*isl_pointers__.p_isl_union_map_apply_domain)
|
||||
+#define isl_union_map_apply_range (*isl_pointers__.p_isl_union_map_apply_range)
|
||||
+#define isl_union_map_compute_flow (*isl_pointers__.p_isl_union_map_compute_flow)
|
||||
+#define isl_union_map_copy (*isl_pointers__.p_isl_union_map_copy)
|
||||
+#define isl_union_map_empty (*isl_pointers__.p_isl_union_map_empty)
|
||||
+#define isl_union_map_flat_range_product (*isl_pointers__.p_isl_union_map_flat_range_product)
|
||||
+#define isl_union_map_foreach_map (*isl_pointers__.p_isl_union_map_foreach_map)
|
||||
+#define isl_union_map_free (*isl_pointers__.p_isl_union_map_free)
|
||||
+#define isl_union_map_from_map (*isl_pointers__.p_isl_union_map_from_map)
|
||||
+#define isl_union_map_get_ctx (*isl_pointers__.p_isl_union_map_get_ctx)
|
||||
+#define isl_union_map_get_space (*isl_pointers__.p_isl_union_map_get_space)
|
||||
+#define isl_union_map_gist_domain (*isl_pointers__.p_isl_union_map_gist_domain)
|
||||
+#define isl_union_map_gist_range (*isl_pointers__.p_isl_union_map_gist_range)
|
||||
+#define isl_union_map_intersect_domain (*isl_pointers__.p_isl_union_map_intersect_domain)
|
||||
+#define isl_union_map_is_empty (*isl_pointers__.p_isl_union_map_is_empty)
|
||||
+#define isl_union_map_subtract (*isl_pointers__.p_isl_union_map_subtract)
|
||||
+#define isl_union_map_union (*isl_pointers__.p_isl_union_map_union)
|
||||
+#define isl_union_set_add_set (*isl_pointers__.p_isl_union_set_add_set)
|
||||
+#define isl_union_set_compute_schedule (*isl_pointers__.p_isl_union_set_compute_schedule)
|
||||
+#define isl_union_set_copy (*isl_pointers__.p_isl_union_set_copy)
|
||||
+#define isl_union_set_empty (*isl_pointers__.p_isl_union_set_empty)
|
||||
+#define isl_union_set_from_set (*isl_pointers__.p_isl_union_set_from_set)
|
||||
+#define isl_aff_add_constant_val (*isl_pointers__.p_isl_aff_add_constant_val)
|
||||
+#define isl_aff_get_coefficient_val (*isl_pointers__.p_isl_aff_get_coefficient_val)
|
||||
+#define isl_aff_get_ctx (*isl_pointers__.p_isl_aff_get_ctx)
|
||||
+#define isl_aff_mod_val (*isl_pointers__.p_isl_aff_mod_val)
|
||||
+#define isl_ast_build_ast_from_schedule (*isl_pointers__.p_isl_ast_build_ast_from_schedule)
|
||||
+#define isl_ast_build_free (*isl_pointers__.p_isl_ast_build_free)
|
||||
+#define isl_ast_build_from_context (*isl_pointers__.p_isl_ast_build_from_context)
|
||||
+#define isl_ast_build_get_ctx (*isl_pointers__.p_isl_ast_build_get_ctx)
|
||||
+#define isl_ast_build_get_schedule (*isl_pointers__.p_isl_ast_build_get_schedule)
|
||||
+#define isl_ast_build_get_schedule_space (*isl_pointers__.p_isl_ast_build_get_schedule_space)
|
||||
+#define isl_ast_build_set_before_each_for (*isl_pointers__.p_isl_ast_build_set_before_each_for)
|
||||
+#define isl_ast_build_set_options (*isl_pointers__.p_isl_ast_build_set_options)
|
||||
+#define isl_ast_expr_free (*isl_pointers__.p_isl_ast_expr_free)
|
||||
+#define isl_ast_expr_from_val (*isl_pointers__.p_isl_ast_expr_from_val)
|
||||
+#define isl_ast_expr_get_ctx (*isl_pointers__.p_isl_ast_expr_get_ctx)
|
||||
+#define isl_ast_expr_get_id (*isl_pointers__.p_isl_ast_expr_get_id)
|
||||
+#define isl_ast_expr_get_op_arg (*isl_pointers__.p_isl_ast_expr_get_op_arg)
|
||||
+#define isl_ast_expr_get_op_n_arg (*isl_pointers__.p_isl_ast_expr_get_op_n_arg)
|
||||
+#define isl_ast_expr_get_op_type (*isl_pointers__.p_isl_ast_expr_get_op_type)
|
||||
+#define isl_ast_expr_get_type (*isl_pointers__.p_isl_ast_expr_get_type)
|
||||
+#define isl_ast_expr_get_val (*isl_pointers__.p_isl_ast_expr_get_val)
|
||||
+#define isl_ast_expr_sub (*isl_pointers__.p_isl_ast_expr_sub)
|
||||
+#define isl_ast_node_block_get_children (*isl_pointers__.p_isl_ast_node_block_get_children)
|
||||
+#define isl_ast_node_for_get_body (*isl_pointers__.p_isl_ast_node_for_get_body)
|
||||
+#define isl_ast_node_for_get_cond (*isl_pointers__.p_isl_ast_node_for_get_cond)
|
||||
+#define isl_ast_node_for_get_inc (*isl_pointers__.p_isl_ast_node_for_get_inc)
|
||||
+#define isl_ast_node_for_get_init (*isl_pointers__.p_isl_ast_node_for_get_init)
|
||||
+#define isl_ast_node_for_get_iterator (*isl_pointers__.p_isl_ast_node_for_get_iterator)
|
||||
+#define isl_ast_node_free (*isl_pointers__.p_isl_ast_node_free)
|
||||
+#define isl_ast_node_get_annotation (*isl_pointers__.p_isl_ast_node_get_annotation)
|
||||
+#define isl_ast_node_get_type (*isl_pointers__.p_isl_ast_node_get_type)
|
||||
+#define isl_ast_node_if_get_cond (*isl_pointers__.p_isl_ast_node_if_get_cond)
|
||||
+#define isl_ast_node_if_get_else (*isl_pointers__.p_isl_ast_node_if_get_else)
|
||||
+#define isl_ast_node_if_get_then (*isl_pointers__.p_isl_ast_node_if_get_then)
|
||||
+#define isl_ast_node_list_free (*isl_pointers__.p_isl_ast_node_list_free)
|
||||
+#define isl_ast_node_list_get_ast_node (*isl_pointers__.p_isl_ast_node_list_get_ast_node)
|
||||
+#define isl_ast_node_list_n_ast_node (*isl_pointers__.p_isl_ast_node_list_n_ast_node)
|
||||
+#define isl_ast_node_user_get_expr (*isl_pointers__.p_isl_ast_node_user_get_expr)
|
||||
+#define isl_constraint_set_coefficient_val (*isl_pointers__.p_isl_constraint_set_coefficient_val)
|
||||
+#define isl_constraint_set_constant_val (*isl_pointers__.p_isl_constraint_set_constant_val)
|
||||
+#define isl_id_get_user (*isl_pointers__.p_isl_id_get_user)
|
||||
+#define isl_local_space_get_ctx (*isl_pointers__.p_isl_local_space_get_ctx)
|
||||
+#define isl_map_fix_val (*isl_pointers__.p_isl_map_fix_val)
|
||||
+#define isl_options_set_ast_build_atomic_upper_bound (*isl_pointers__.p_isl_options_set_ast_build_atomic_upper_bound)
|
||||
+#define isl_printer_print_ast_node (*isl_pointers__.p_isl_printer_print_ast_node)
|
||||
+#define isl_printer_print_str (*isl_pointers__.p_isl_printer_print_str)
|
||||
+#define isl_printer_set_output_format (*isl_pointers__.p_isl_printer_set_output_format)
|
||||
+#define isl_pw_aff_mod_val (*isl_pointers__.p_isl_pw_aff_mod_val)
|
||||
+#define isl_schedule_constraints_compute_schedule (*isl_pointers__.p_isl_schedule_constraints_compute_schedule)
|
||||
+#define isl_schedule_constraints_on_domain (*isl_pointers__.p_isl_schedule_constraints_on_domain)
|
||||
+#define isl_schedule_constraints_set_coincidence (*isl_pointers__.p_isl_schedule_constraints_set_coincidence)
|
||||
+#define isl_schedule_constraints_set_proximity (*isl_pointers__.p_isl_schedule_constraints_set_proximity)
|
||||
+#define isl_schedule_constraints_set_validity (*isl_pointers__.p_isl_schedule_constraints_set_validity)
|
||||
+#define isl_set_get_dim_id (*isl_pointers__.p_isl_set_get_dim_id)
|
||||
+#define isl_set_max_val (*isl_pointers__.p_isl_set_max_val)
|
||||
+#define isl_set_min_val (*isl_pointers__.p_isl_set_min_val)
|
||||
+#define isl_set_params (*isl_pointers__.p_isl_set_params)
|
||||
+#define isl_space_align_params (*isl_pointers__.p_isl_space_align_params)
|
||||
+#define isl_space_map_from_domain_and_range (*isl_pointers__.p_isl_space_map_from_domain_and_range)
|
||||
+#define isl_space_set_tuple_name (*isl_pointers__.p_isl_space_set_tuple_name)
|
||||
+#define isl_space_wrap (*isl_pointers__.p_isl_space_wrap)
|
||||
+#define isl_union_map_from_domain_and_range (*isl_pointers__.p_isl_union_map_from_domain_and_range)
|
||||
+#define isl_union_map_range (*isl_pointers__.p_isl_union_map_range)
|
||||
+#define isl_union_set_union (*isl_pointers__.p_isl_union_set_union)
|
||||
+#define isl_union_set_universe (*isl_pointers__.p_isl_union_set_universe)
|
||||
+#define isl_val_2exp (*isl_pointers__.p_isl_val_2exp)
|
||||
+#define isl_val_add_ui (*isl_pointers__.p_isl_val_add_ui)
|
||||
+#define isl_val_copy (*isl_pointers__.p_isl_val_copy)
|
||||
+#define isl_val_free (*isl_pointers__.p_isl_val_free)
|
||||
+#define isl_val_int_from_si (*isl_pointers__.p_isl_val_int_from_si)
|
||||
+#define isl_val_int_from_ui (*isl_pointers__.p_isl_val_int_from_ui)
|
||||
+#define isl_val_mul (*isl_pointers__.p_isl_val_mul)
|
||||
+#define isl_val_neg (*isl_pointers__.p_isl_val_neg)
|
||||
+#define isl_val_sub (*isl_pointers__.p_isl_val_sub)
|
||||
+#define isl_printer_print_union_map (*isl_pointers__.p_isl_printer_print_union_map)
|
||||
+#define isl_pw_aff_get_ctx (*isl_pointers__.p_isl_pw_aff_get_ctx)
|
||||
+#define isl_val_is_int (*isl_pointers__.p_isl_val_is_int)
|
||||
+#define isl_ctx_get_max_operations (*isl_pointers__.p_isl_ctx_get_max_operations)
|
||||
+#define isl_ctx_set_max_operations (*isl_pointers__.p_isl_ctx_set_max_operations)
|
||||
+#define isl_ctx_last_error (*isl_pointers__.p_isl_ctx_last_error)
|
||||
+#define isl_ctx_reset_operations (*isl_pointers__.p_isl_ctx_reset_operations)
|
||||
+#define isl_map_coalesce (*isl_pointers__.p_isl_map_coalesce)
|
||||
+#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule)
|
||||
+#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id)
|
||||
+#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce)
|
||||
+#define isl_multi_val_set_val (*isl_pointers__.p_isl_multi_val_set_val)
|
||||
+#define isl_multi_val_zero (*isl_pointers__.p_isl_multi_val_zero)
|
||||
+#define isl_options_set_schedule_max_coefficient (*isl_pointers__.p_isl_options_set_schedule_max_coefficient)
|
||||
+#define isl_options_set_tile_scale_tile_loops (*isl_pointers__.p_isl_options_set_tile_scale_tile_loops)
|
||||
+#define isl_schedule_copy (*isl_pointers__.p_isl_schedule_copy)
|
||||
+#define isl_schedule_get_map (*isl_pointers__.p_isl_schedule_get_map)
|
||||
+#define isl_schedule_map_schedule_node_bottom_up (*isl_pointers__.p_isl_schedule_map_schedule_node_bottom_up)
|
||||
+#define isl_schedule_node_band_get_permutable (*isl_pointers__.p_isl_schedule_node_band_get_permutable)
|
||||
+#define isl_schedule_node_band_get_space (*isl_pointers__.p_isl_schedule_node_band_get_space)
|
||||
+#define isl_schedule_node_band_tile (*isl_pointers__.p_isl_schedule_node_band_tile)
|
||||
+#define isl_schedule_node_child (*isl_pointers__.p_isl_schedule_node_child)
|
||||
+#define isl_schedule_node_free (*isl_pointers__.p_isl_schedule_node_free)
|
||||
+#define isl_schedule_node_get_child (*isl_pointers__.p_isl_schedule_node_get_child)
|
||||
+#define isl_schedule_node_get_ctx (*isl_pointers__.p_isl_schedule_node_get_ctx)
|
||||
+#define isl_schedule_node_get_type (*isl_pointers__.p_isl_schedule_node_get_type)
|
||||
+#define isl_schedule_node_n_children (*isl_pointers__.p_isl_schedule_node_n_children)
|
||||
+#define isl_union_map_is_equal (*isl_pointers__.p_isl_union_map_is_equal)
|
||||
+#define isl_union_access_info_compute_flow (*isl_pointers__.p_isl_union_access_info_compute_flow)
|
||||
+#define isl_union_access_info_from_sink (*isl_pointers__.p_isl_union_access_info_from_sink)
|
||||
+#define isl_union_access_info_set_may_source (*isl_pointers__.p_isl_union_access_info_set_may_source)
|
||||
+#define isl_union_access_info_set_must_source (*isl_pointers__.p_isl_union_access_info_set_must_source)
|
||||
+#define isl_union_access_info_set_schedule (*isl_pointers__.p_isl_union_access_info_set_schedule)
|
||||
+#define isl_union_flow_free (*isl_pointers__.p_isl_union_flow_free)
|
||||
+#define isl_union_flow_get_may_dependence (*isl_pointers__.p_isl_union_flow_get_may_dependence)
|
||||
+#define isl_union_flow_get_must_dependence (*isl_pointers__.p_isl_union_flow_get_must_dependence)
|
||||
+#define isl_aff_var_on_domain (*isl_pointers__.p_isl_aff_var_on_domain)
|
||||
+#define isl_multi_aff_from_aff (*isl_pointers__.p_isl_multi_aff_from_aff)
|
||||
+#define isl_schedule_get_ctx (*isl_pointers__.p_isl_schedule_get_ctx)
|
||||
+#define isl_multi_aff_set_tuple_id (*isl_pointers__.p_isl_multi_aff_set_tuple_id)
|
||||
+#define isl_multi_aff_dim (*isl_pointers__.p_isl_multi_aff_dim)
|
||||
+#define isl_schedule_get_domain (*isl_pointers__.p_isl_schedule_get_domain)
|
||||
+#define isl_union_set_is_empty (*isl_pointers__.p_isl_union_set_is_empty)
|
||||
+#define isl_union_set_get_space (*isl_pointers__.p_isl_union_set_get_space)
|
||||
+#define isl_union_pw_multi_aff_empty (*isl_pointers__.p_isl_union_pw_multi_aff_empty)
|
||||
+#define isl_union_set_foreach_set (*isl_pointers__.p_isl_union_set_foreach_set)
|
||||
+#define isl_union_set_free (*isl_pointers__.p_isl_union_set_free)
|
||||
+#define isl_multi_union_pw_aff_from_union_pw_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_from_union_pw_multi_aff)
|
||||
+#define isl_multi_union_pw_aff_apply_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_apply_multi_aff)
|
||||
+#define isl_schedule_insert_partial_schedule (*isl_pointers__.p_isl_schedule_insert_partial_schedule)
|
||||
+#define isl_union_pw_multi_aff_free (*isl_pointers__.p_isl_union_pw_multi_aff_free)
|
||||
+#define isl_pw_multi_aff_project_out_map (*isl_pointers__.p_isl_pw_multi_aff_project_out_map)
|
||||
+#define isl_union_pw_multi_aff_add_pw_multi_aff (*isl_pointers__.p_isl_union_pw_multi_aff_add_pw_multi_aff)
|
||||
+#define isl_schedule_from_domain (*isl_pointers__.p_isl_schedule_from_domain)
|
||||
+#define isl_schedule_sequence (*isl_pointers__.p_isl_schedule_sequence)
|
||||
+#define isl_ast_build_node_from_schedule (*isl_pointers__.p_isl_ast_build_node_from_schedule)
|
||||
+#define isl_ast_node_mark_get_node (*isl_pointers__.p_isl_ast_node_mark_get_node)
|
||||
+#define isl_schedule_node_band_member_get_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_get_ast_loop_type)
|
||||
+#define isl_schedule_node_band_member_set_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_set_ast_loop_type)
|
||||
+#define isl_val_n_abs_num_chunks (*isl_pointers__.p_isl_val_n_abs_num_chunks)
|
||||
+#define isl_val_get_abs_num_chunks (*isl_pointers__.p_isl_val_get_abs_num_chunks)
|
||||
+#define isl_val_int_from_chunks (*isl_pointers__.p_isl_val_int_from_chunks)
|
||||
+#define isl_val_is_neg (*isl_pointers__.p_isl_val_is_neg)
|
||||
+#define isl_version (*isl_pointers__.p_isl_version)
|
||||
+#define isl_options_get_on_error (*isl_pointers__.p_isl_options_get_on_error)
|
||||
+#define isl_ctx_reset_error (*isl_pointers__.p_isl_ctx_reset_error)
|
||||
|
||||
typedef struct poly_dr *poly_dr_p;
|
||||
|
||||
@@ -461,5 +1045,6 @@ extern void build_scops (vec<scop_p> *);
|
||||
extern void dot_all_sese (FILE *, vec<sese_l> &);
|
||||
extern void dot_sese (sese_l &);
|
||||
extern void dot_cfg ();
|
||||
+extern const char *get_isl_version (bool);
|
||||
|
||||
#endif
|
||||
--- gcc/graphite.c.jj 2015-11-04 14:15:32.000000000 +0100
|
||||
+++ gcc/graphite.c 2015-11-04 14:56:02.645536409 +0100
|
||||
@@ -60,6 +60,35 @@ along with GCC; see the file COPYING3.
|
||||
#include "tree-into-ssa.h"
|
||||
#include "graphite.h"
|
||||
|
||||
+__typeof (isl_pointers__) isl_pointers__;
|
||||
+
|
||||
+static bool
|
||||
+init_isl_pointers (void)
|
||||
+{
|
||||
+ void *h;
|
||||
+
|
||||
+ if (isl_pointers__.inited)
|
||||
+ return isl_pointers__.h != NULL;
|
||||
+ h = dlopen ("libisl.so.15", RTLD_LAZY);
|
||||
+ isl_pointers__.h = h;
|
||||
+ if (h == NULL)
|
||||
+ return false;
|
||||
+#define DYNSYM(x) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ union { __typeof (isl_pointers__.p_##x) p; void *q; } u; \
|
||||
+ u.q = dlsym (h, #x); \
|
||||
+ if (u.q == NULL) \
|
||||
+ return false; \
|
||||
+ isl_pointers__.p_##x = u.p; \
|
||||
+ } \
|
||||
+ while (0)
|
||||
+ DYNSYMS
|
||||
+#undef DYNSYM
|
||||
+ isl_pointers__.inited = true;
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
/* Print global statistics to FILE. */
|
||||
|
||||
static void
|
||||
@@ -365,6 +394,15 @@ graphite_transform_loops (void)
|
||||
if (parallelized_function_p (cfun->decl))
|
||||
return;
|
||||
|
||||
+ if (number_of_loops (cfun) <= 1)
|
||||
+ return;
|
||||
+
|
||||
+ if (!init_isl_pointers ())
|
||||
+ {
|
||||
+ sorry ("Graphite loop optimizations cannot be used");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
calculate_dominance_info (CDI_DOMINATORS);
|
||||
|
||||
/* We rely on post-dominators during merging of SESE regions so those
|
||||
@@ -455,6 +493,14 @@ graphite_transform_loops (void)
|
||||
}
|
||||
}
|
||||
|
||||
+const char *
|
||||
+get_isl_version (bool force)
|
||||
+{
|
||||
+ if (force)
|
||||
+ init_isl_pointers ();
|
||||
+ return (isl_pointers__.inited && isl_version) ? isl_version () : "none";
|
||||
+}
|
||||
+
|
||||
#else /* If isl is not available: #ifndef HAVE_isl. */
|
||||
|
||||
static void
|
||||
--- gcc/toplev.c.jj 2017-02-19 13:02:31.000000000 +0100
|
||||
+++ gcc/toplev.c 2017-02-19 16:50:25.536301350 +0100
|
||||
@@ -94,6 +94,7 @@ along with GCC; see the file COPYING3.
|
||||
|
||||
#ifdef HAVE_isl
|
||||
#include <isl/version.h>
|
||||
+extern const char *get_isl_version (bool);
|
||||
#endif
|
||||
|
||||
static void general_init (const char *, bool);
|
||||
@@ -683,7 +684,7 @@ print_version (FILE *file, const char *i
|
||||
#ifndef HAVE_isl
|
||||
"none"
|
||||
#else
|
||||
- isl_version ()
|
||||
+ get_isl_version (*indent == 0)
|
||||
#endif
|
||||
);
|
||||
if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
|
17
gcc10-libgomp-omp_h-multilib.patch
Normal file
17
gcc10-libgomp-omp_h-multilib.patch
Normal file
@ -0,0 +1,17 @@
|
||||
2008-06-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs.
|
||||
|
||||
--- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200
|
||||
+++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200
|
||||
@@ -42,8 +42,8 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
- unsigned char _x[@OMP_NEST_LOCK_SIZE@]
|
||||
- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@)));
|
||||
+ unsigned char _x[8 + sizeof (void *)]
|
||||
+ __attribute__((__aligned__(sizeof (void *))));
|
||||
} omp_nest_lock_t;
|
||||
#endif
|
||||
|
24
gcc10-libstdc++-docs.patch
Normal file
24
gcc10-libstdc++-docs.patch
Normal file
@ -0,0 +1,24 @@
|
||||
--- libstdc++-v3/doc/html/index.html.jj 2011-01-03 12:53:21.282829010 +0100
|
||||
+++ libstdc++-v3/doc/html/index.html 2011-01-04 18:06:28.999851145 +0100
|
||||
@@ -5,6 +5,8 @@
|
||||
<a class="link" href="https://www.fsf.org" target="_top">FSF
|
||||
</a>
|
||||
</p><p>
|
||||
+ Release 10.0.1
|
||||
+ </p><p>
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License, Version 1.2 or any later version published by the
|
||||
--- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100
|
||||
+++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100
|
||||
@@ -20,7 +20,9 @@
|
||||
member functions for the library classes, finding out what is in a
|
||||
particular include file, looking at inheritance diagrams, etc.
|
||||
</p><p>
|
||||
- The API documentation, rendered into HTML, can be viewed online
|
||||
+ The API documentation, rendered into HTML, can be viewed locally
|
||||
+ <a class="link" href="api/index.html" target="_top">for the 10.0.1 release</a>,
|
||||
+ online
|
||||
<a class="link" href="http://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
|
||||
and
|
||||
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">
|
27
gcc10-libtool-no-rpath.patch
Normal file
27
gcc10-libtool-no-rpath.patch
Normal file
@ -0,0 +1,27 @@
|
||||
libtool sucks.
|
||||
--- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100
|
||||
+++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200
|
||||
@@ -5394,6 +5394,7 @@ EOF
|
||||
rpath="$finalize_rpath"
|
||||
test "$mode" != relink && rpath="$compile_rpath$rpath"
|
||||
for libdir in $rpath; do
|
||||
+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
|
||||
if test -n "$hardcode_libdir_flag_spec"; then
|
||||
if test -n "$hardcode_libdir_separator"; then
|
||||
if test -z "$hardcode_libdirs"; then
|
||||
@@ -6071,6 +6072,7 @@ EOF
|
||||
rpath=
|
||||
hardcode_libdirs=
|
||||
for libdir in $compile_rpath $finalize_rpath; do
|
||||
+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
|
||||
if test -n "$hardcode_libdir_flag_spec"; then
|
||||
if test -n "$hardcode_libdir_separator"; then
|
||||
if test -z "$hardcode_libdirs"; then
|
||||
@@ -6120,6 +6122,7 @@ EOF
|
||||
rpath=
|
||||
hardcode_libdirs=
|
||||
for libdir in $finalize_rpath; do
|
||||
+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
|
||||
if test -n "$hardcode_libdir_flag_spec"; then
|
||||
if test -n "$hardcode_libdir_separator"; then
|
||||
if test -z "$hardcode_libdirs"; then
|
37
gcc10-no-add-needed.patch
Normal file
37
gcc10-no-add-needed.patch
Normal file
@ -0,0 +1,37 @@
|
||||
2010-02-08 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* config/gnu-user.h (LINK_EH_SPEC): Pass --no-add-needed to the linker.
|
||||
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
|
||||
* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
|
||||
|
||||
--- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100
|
||||
+++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100
|
||||
@@ -168,5 +168,5 @@ extern int alpha_this_gpdisp_sequence_nu
|
||||
I imagine that other systems will catch up. In the meantime, it
|
||||
doesn't harm to make sure that the data exists to be used later. */
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
|
||||
#endif
|
||||
--- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100
|
||||
+++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100
|
||||
@@ -76,7 +76,7 @@ do { \
|
||||
Signalize that because we have fde-glibc, we don't need all C shared libs
|
||||
linked against -lgcc_s. */
|
||||
#undef LINK_EH_SPEC
|
||||
-#define LINK_EH_SPEC ""
|
||||
+#define LINK_EH_SPEC "--no-add-needed "
|
||||
|
||||
#undef TARGET_INIT_LIBFUNCS
|
||||
#define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs
|
||||
--- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100
|
||||
+++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100
|
||||
@@ -106,7 +106,7 @@ see the files COPYING3 and COPYING.RUNTI
|
||||
#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
|
||||
#endif
|
||||
|
||||
#define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \
|
30
gcc10-rh1574936.patch
Normal file
30
gcc10-rh1574936.patch
Normal file
@ -0,0 +1,30 @@
|
||||
crt files and statically linked libgcc objects cause false positives
|
||||
in annobin coverage, so we add the assembler flag to generate notes
|
||||
for them.
|
||||
|
||||
The patch also adds notes to libgcc_s.so, but this is harmless because
|
||||
these notes only confer that there is no other annobin markup.
|
||||
|
||||
2018-07-25 Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
* Makefile.in (LIBGCC2_CFLAGS, CRTSTUFF_CFLAGS): Add
|
||||
-Wa,--generate-missing-build-notes=yes.
|
||||
|
||||
--- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100
|
||||
+++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200
|
||||
@@ -246,6 +246,7 @@ LIBGCC2_DEBUG_CFLAGS = -g
|
||||
LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
|
||||
$(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \
|
||||
-fbuilding-libgcc -fno-stack-protector \
|
||||
+ -Wa,--generate-missing-build-notes=yes \
|
||||
$(INHIBIT_LIBC_CFLAGS)
|
||||
|
||||
# Additional options to use when compiling libgcc2.a.
|
||||
@@ -301,6 +302,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(IN
|
||||
$(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
|
||||
-fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
|
||||
-fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \
|
||||
+ -Wa,--generate-missing-build-notes=yes \
|
||||
$(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY)
|
||||
|
||||
# Extra flags to use when compiling crt{begin,end}.o.
|
40
gcc10-sparc-config-detection.patch
Normal file
40
gcc10-sparc-config-detection.patch
Normal file
@ -0,0 +1,40 @@
|
||||
--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500
|
||||
+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500
|
||||
@@ -2790,7 +2790,7 @@ sparc-*-rtems*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
|
||||
tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems"
|
||||
;;
|
||||
-sparc-*-linux*)
|
||||
+sparc-*-linux* | sparcv9-*-linux*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h"
|
||||
extra_options="${extra_options} sparc/long-double-switch.opt"
|
||||
case ${target} in
|
||||
@@ -2844,7 +2844,7 @@ sparc64-*-rtems*)
|
||||
extra_options="${extra_options}"
|
||||
tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64"
|
||||
;;
|
||||
-sparc64-*-linux*)
|
||||
+sparc64*-*-linux*)
|
||||
tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default64.h sparc/linux64.h sparc/tso.h"
|
||||
extra_options="${extra_options} sparc/long-double-switch.opt"
|
||||
tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64"
|
||||
--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500
|
||||
+++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500
|
||||
@@ -1002,7 +1002,7 @@ sparc-*-elf*)
|
||||
tmake_file="${tmake_file} t-fdpbit t-crtfm"
|
||||
extra_parts="$extra_parts crti.o crtn.o crtfastmath.o"
|
||||
;;
|
||||
-sparc-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||
+sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||
tmake_file="${tmake_file} t-crtfm"
|
||||
if test "${host_address}" = 64; then
|
||||
tmake_file="$tmake_file sparc/t-linux64"
|
||||
@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
|
||||
tmake_file="$tmake_file t-crtfm"
|
||||
extra_parts="$extra_parts crtfastmath.o"
|
||||
;;
|
||||
-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
|
||||
+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux
|
||||
extra_parts="$extra_parts crtfastmath.o"
|
||||
tmake_file="${tmake_file} t-crtfm sparc/t-linux"
|
||||
if test "${host_address}" = 64; then
|
@ -1,19 +0,0 @@
|
||||
--- gcc/testsuite/ada/acats/run_all.sh 26 Apr 2004 21:15:54 -0000 1.18
|
||||
+++ gcc/testsuite/ada/acats/run_all.sh 17 Feb 2005 14:24:49 -0000
|
||||
@@ -11,9 +11,16 @@
|
||||
|
||||
gccflags="-O2"
|
||||
gnatflags="-gnatws"
|
||||
+timeout=120
|
||||
|
||||
target_run () {
|
||||
+ sh -c "(sleep $timeout; kill \$\$) &
|
||||
+x=\$!
|
||||
$*
|
||||
+s=\$?
|
||||
+kill \$x
|
||||
+exit \$s
|
||||
+"
|
||||
}
|
||||
|
||||
# End of customization section.
|
@ -1,67 +0,0 @@
|
||||
2004-10-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gnat_ugn.texi: Add : and . to direntry.
|
||||
* gnat-style.texi: Change dircategory to GNU Ada tools.
|
||||
|
||||
2005-02-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* Makefile.in (gnatlib-shared-default): Disallow dlopening of
|
||||
libgnat.so.
|
||||
|
||||
--- gcc/ada/gnat-style.texi (.../gcc-4_0-branch) (revision 107266)
|
||||
+++ gcc/ada/gnat-style.texi (.../redhat/gcc-4_0-branch) (revision 107414)
|
||||
@@ -28,7 +28,7 @@
|
||||
@setchapternewpage odd
|
||||
|
||||
|
||||
-@dircategory Programming
|
||||
+@dircategory GNU Ada tools
|
||||
@direntry
|
||||
* gnat-style: (gnat-style). GNAT Coding Style
|
||||
@end direntry
|
||||
--- gcc/ada/Makefile.in (.../gcc-4_0-branch) (revision 107266)
|
||||
+++ gcc/ada/Makefile.in (.../redhat/gcc-4_0-branch) (revision 107414)
|
||||
@@ -1316,7 +1316,7 @@
|
||||
LIBRARY_VERSION := $(LIB_VERSION)
|
||||
endif
|
||||
|
||||
-ifeq ($(strip $(filter-out powerpc% linux%,$(arch) $(osys))),)
|
||||
+ifeq ($(strip $(filter-out powerpc% ppc% linux%,$(arch) $(osys))),)
|
||||
LIBGNAT_TARGET_PAIRS = \
|
||||
a-intnam.ads<a-intnam-linux.ads \
|
||||
s-inmaop.adb<s-inmaop-posix.adb \
|
||||
@@ -1862,7 +1862,7 @@
|
||||
THREAD_KIND="$(THREAD_KIND)" \
|
||||
gnatlib
|
||||
$(RM) rts/libgna*$(soext)
|
||||
- cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
|
||||
+ cd rts; ../../xgcc -B../../ -shared -Wl,-z,nodlopen $(TARGET_LIBGCC2_CFLAGS) \
|
||||
-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
|
||||
$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
|
||||
$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
|
||||
--- gcc/ada/gnat_ugn.texi (.../gcc-4_0-branch) (revision 107266)
|
||||
+++ gcc/ada/gnat_ugn.texi (.../redhat/gcc-4_0-branch) (revision 107414)
|
||||
@@ -101,7 +101,7 @@
|
||||
@settitle @value{EDITION} User's Guide @value{PLATFORM}
|
||||
@dircategory GNU Ada tools
|
||||
@direntry
|
||||
-* @value{EDITION} User's Guide (@value{FILE}) @value{PLATFORM}
|
||||
+* @value{EDITION} User's Guide: (@value{FILE}). User's Guide for GNU Ada Tools.
|
||||
@end direntry
|
||||
|
||||
@include gcc-common.texi
|
||||
--- gcc/ada/link.c (.../gcc-4_0-branch) (revision 107266)
|
||||
+++ gcc/ada/link.c (.../redhat/gcc-4_0-branch) (revision 107414)
|
||||
@@ -164,9 +164,9 @@
|
||||
|
||||
#elif defined (linux)
|
||||
const char *__gnat_object_file_option = "";
|
||||
-const char *__gnat_run_path_option = "-Wl,-rpath,";
|
||||
-char __gnat_shared_libgnat_default = STATIC;
|
||||
-int __gnat_link_max = 8192;
|
||||
+const char *__gnat_run_path_option = "";
|
||||
+char __gnat_shared_libgnat_default = SHARED;
|
||||
+int __gnat_link_max = 131072;
|
||||
unsigned char __gnat_objlist_file_supported = 1;
|
||||
unsigned char __gnat_using_gnu_linker = 1;
|
||||
const char *__gnat_object_library_extension = ".a";
|
File diff suppressed because it is too large
Load Diff
@ -1,74 +0,0 @@
|
||||
2007-07-22 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* config/rs6000/sysv4.h (LINK_EH_SPEC): Add --build-id for
|
||||
non-relocatable link.
|
||||
* config/linux.h (LINK_EH_SPEC): Likewise.
|
||||
* config/sparc/linux.h (LINK_EH_SPEC): Likewise.
|
||||
* config/sparc/linux64.h (LINK_EH_SPEC): Likewise.
|
||||
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
|
||||
* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
|
||||
|
||||
--- gcc/config/rs6000/sysv4.h.~1~
|
||||
+++ gcc/config/rs6000/sysv4.h
|
||||
@@ -1044,7 +1044,7 @@ extern int fixuplabelno;
|
||||
%{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
||||
#endif
|
||||
|
||||
#define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
|
||||
--- gcc/config/linux.h.~1~
|
||||
+++ gcc/config/linux.h
|
||||
@@ -85,7 +85,7 @@ Boston, MA 02110-1301, USA. */
|
||||
} while (0)
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
||||
#endif
|
||||
|
||||
/* Define this so we can compile MS code for use with WINE. */
|
||||
--- gcc/config/sparc/linux64.h.~1~
|
||||
+++ gcc/config/sparc/linux64.h
|
||||
@@ -316,7 +316,7 @@ do { \
|
||||
#define DITF_CONVERSION_LIBFUNCS 1
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_AS_TLS
|
||||
--- gcc/config/sparc/linux.h.~1~
|
||||
+++ gcc/config/sparc/linux.h
|
||||
@@ -188,7 +188,7 @@ do { \
|
||||
#define DITF_CONVERSION_LIBFUNCS 1
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_AS_TLS
|
||||
--- gcc/config/alpha/elf.h.~1~
|
||||
+++ gcc/config/alpha/elf.h
|
||||
@@ -453,5 +453,5 @@ extern int alpha_this_gpdisp_sequence_nu
|
||||
I imagine that other systems will catch up. In the meantime, it
|
||||
doesn't harm to make sure that the data exists to be used later. */
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
||||
#endif
|
||||
--- gcc/config/ia64/linux.h.~1~
|
||||
+++ gcc/config/ia64/linux.h
|
||||
@@ -56,7 +56,7 @@ do { \
|
||||
Signalize that because we have fde-glibc, we don't need all C shared libs
|
||||
linked against -lgcc_s. */
|
||||
#undef LINK_EH_SPEC
|
||||
-#define LINK_EH_SPEC ""
|
||||
+#define LINK_EH_SPEC "%{!r:--build-id} "
|
||||
|
||||
#define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h"
|
||||
|
@ -1,102 +0,0 @@
|
||||
2007-10-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* decl.c (duplicate_decls): When redeclaring a builtin function,
|
||||
keep the merged decl builtin whenever types match, even if new
|
||||
decl defines a function.
|
||||
|
||||
* gcc.dg/builtins-65.c: New test.
|
||||
* g++.dg/ext/builtin10.C: New test.
|
||||
|
||||
--- gcc/cp/decl.c.jj 2007-10-01 22:11:09.000000000 +0200
|
||||
+++ gcc/cp/decl.c 2007-10-02 11:39:46.000000000 +0200
|
||||
@@ -1988,23 +1988,21 @@ duplicate_decls (tree newdecl, tree oldd
|
||||
DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
|
||||
DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
|
||||
}
|
||||
+ /* If redeclaring a builtin function, it stays built in. */
|
||||
+ if (types_match && DECL_BUILT_IN (olddecl))
|
||||
+ {
|
||||
+ DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
|
||||
+ DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
|
||||
+ /* If we're keeping the built-in definition, keep the rtl,
|
||||
+ regardless of declaration matches. */
|
||||
+ COPY_DECL_RTL (olddecl, newdecl);
|
||||
+ }
|
||||
if (new_defines_function)
|
||||
/* If defining a function declared with other language
|
||||
linkage, use the previously declared language linkage. */
|
||||
SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
|
||||
else if (types_match)
|
||||
{
|
||||
- /* If redeclaring a builtin function, and not a definition,
|
||||
- it stays built in. */
|
||||
- if (DECL_BUILT_IN (olddecl))
|
||||
- {
|
||||
- DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
|
||||
- DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
|
||||
- /* If we're keeping the built-in definition, keep the rtl,
|
||||
- regardless of declaration matches. */
|
||||
- COPY_DECL_RTL (olddecl, newdecl);
|
||||
- }
|
||||
-
|
||||
DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
|
||||
/* Don't clear out the arguments if we're redefining a function. */
|
||||
if (DECL_ARGUMENTS (olddecl))
|
||||
--- gcc/testsuite/gcc.dg/builtins-65.c.jj 2007-10-02 11:23:51.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/builtins-65.c 2007-10-02 11:24:12.000000000 +0200
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+typedef __SIZE_TYPE__ size_t;
|
||||
+extern void __chk_fail (void);
|
||||
+extern int snprintf (char *, size_t, const char *, ...);
|
||||
+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...)
|
||||
+{
|
||||
+ if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b)
|
||||
+ __chk_fail ();
|
||||
+ return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ());
|
||||
+}
|
||||
+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf");
|
||||
+
|
||||
+char buf[10];
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ snprintf (buf, 10, "%d%d\n", 10, 10);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "mysnprintf" } } */
|
||||
+/* { dg-final { scan-assembler-not "__chk_fail" } } */
|
||||
--- gcc/testsuite/g++.dg/ext/builtin10.C.jj 2007-10-02 11:19:45.000000000 +0200
|
||||
+++ gcc/testsuite/g++.dg/ext/builtin10.C 2007-10-02 11:23:26.000000000 +0200
|
||||
@@ -0,0 +1,27 @@
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-O2" }
|
||||
+
|
||||
+typedef __SIZE_TYPE__ size_t;
|
||||
+extern "C" {
|
||||
+extern void __chk_fail (void);
|
||||
+extern int snprintf (char *, size_t, const char *, ...);
|
||||
+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...)
|
||||
+{
|
||||
+ if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b)
|
||||
+ __chk_fail ();
|
||||
+ return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ());
|
||||
+}
|
||||
+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf");
|
||||
+}
|
||||
+
|
||||
+char buf[10];
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ snprintf (buf, 10, "%d%d\n", 10, 10);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+// { dg-final { scan-assembler "mysnprintf" } }
|
||||
+// { dg-final { scan-assembler-not "__chk_fail" } }
|
@ -1,65 +0,0 @@
|
||||
2007-10-01 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* decl.c (duplicate_decls): Preserve linkage flags for mere
|
||||
redeclarations of gnu_inline definitions.
|
||||
|
||||
* g++.dg/ext/gnu-inline-global-redecl.C: New.
|
||||
|
||||
--- gcc/cp/decl.c.orig 2007-09-28 00:02:33.000000000 -0300
|
||||
+++ gcc/cp/decl.c 2007-10-01 16:33:10.000000000 -0300
|
||||
@@ -1846,24 +1846,24 @@ duplicate_decls (tree newdecl, tree oldd
|
||||
new_template = NULL_TREE;
|
||||
if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
|
||||
{
|
||||
- bool old_decl_gnu_inline;
|
||||
+ bool new_redefines_gnu_inline = false;
|
||||
|
||||
- if ((DECL_INTERFACE_KNOWN (olddecl)
|
||||
- && TREE_CODE (olddecl) == FUNCTION_DECL)
|
||||
- || (TREE_CODE (olddecl) == TEMPLATE_DECL
|
||||
- && TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL))
|
||||
+ if (new_defines_function
|
||||
+ && ((DECL_INTERFACE_KNOWN (olddecl)
|
||||
+ && TREE_CODE (olddecl) == FUNCTION_DECL)
|
||||
+ || (TREE_CODE (olddecl) == TEMPLATE_DECL
|
||||
+ && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
|
||||
+ == FUNCTION_DECL))))
|
||||
{
|
||||
tree fn = olddecl;
|
||||
|
||||
if (TREE_CODE (fn) == TEMPLATE_DECL)
|
||||
fn = DECL_TEMPLATE_RESULT (olddecl);
|
||||
|
||||
- old_decl_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
|
||||
+ new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
|
||||
}
|
||||
- else
|
||||
- old_decl_gnu_inline = false;
|
||||
|
||||
- if (!old_decl_gnu_inline)
|
||||
+ if (!new_redefines_gnu_inline)
|
||||
{
|
||||
DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
|
||||
DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
|
||||
--- gcc/testsuite/g++.dg/ext/gnu-inline-global-redecl.C 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc/testsuite/g++.dg/ext/gnu-inline-global-redecl.C 2007-10-01 16:45:49.000000000 -0300
|
||||
@@ -0,0 +1,19 @@
|
||||
+/* Test __attribute__((gnu_inline)).
|
||||
+
|
||||
+ Check that we don't get out-of-line definitions for extern inline
|
||||
+ gnu_inline functions, regardless of redeclaration.
|
||||
+
|
||||
+ */
|
||||
+
|
||||
+/* { dg-do link } */
|
||||
+/* { dg-options "-O" } */ // such that static functions are optimized out
|
||||
+
|
||||
+#include "gnu-inline-common.h"
|
||||
+
|
||||
+decl(extern, fn)
|
||||
+gnuindef(fn, 0)
|
||||
+decl(extern, fn)
|
||||
+
|
||||
+int main () {
|
||||
+ fn ();
|
||||
+}
|
@ -1,47 +0,0 @@
|
||||
2007-09-06 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* decl2.c (get_guard): Copy visibility from the guarded variable.
|
||||
|
||||
--- gcc/cp/decl2.c (revision 128225)
|
||||
+++ gcc/cp/decl2.c (revision 128226)
|
||||
@@ -2215,6 +2215,8 @@ get_guard (tree decl)
|
||||
DECL_ONE_ONLY (guard) = DECL_ONE_ONLY (decl);
|
||||
if (TREE_PUBLIC (decl))
|
||||
DECL_WEAK (guard) = DECL_WEAK (decl);
|
||||
+ DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
|
||||
+ DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
|
||||
|
||||
DECL_ARTIFICIAL (guard) = 1;
|
||||
DECL_IGNORED_P (guard) = 1;
|
||||
--- gcc/testsuite/g++.dg/ext/visibility/guard1.C (revision 0)
|
||||
+++ gcc/testsuite/g++.dg/ext/visibility/guard1.C (revision 128226)
|
||||
@@ -0,0 +1,29 @@
|
||||
+// { dg-options "-fvisibility=hidden" }
|
||||
+// { dg-require-visibility "" }
|
||||
+// { dg-final { scan-not-hidden "_ZGVZN5otherclEvE4s_cd" } }
|
||||
+
|
||||
+extern "C" int printf (const char *, ...);
|
||||
+
|
||||
+#define DLLEXPORT __attribute__ ((visibility("default")))
|
||||
+
|
||||
+struct class_data
|
||||
+{
|
||||
+ int apple;
|
||||
+ class_data() { printf("non trivial ctor\n"); }
|
||||
+};
|
||||
+
|
||||
+struct DLLEXPORT other
|
||||
+{
|
||||
+ class_data* operator ()()
|
||||
+ {
|
||||
+ static class_data s_cd;
|
||||
+ return &s_cd;
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+int main()
|
||||
+{
|
||||
+ other aFoo;
|
||||
+ aFoo();
|
||||
+ return 0;
|
||||
+}
|
@ -1,22 +0,0 @@
|
||||
2006-05-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* crtstuff.c (__dso_handle): Make __dso_handle const.
|
||||
|
||||
--- gcc/crtstuff.c.jj 2005-11-16 10:02:51.000000000 +0100
|
||||
+++ gcc/crtstuff.c 2006-05-12 18:28:18.000000000 +0200
|
||||
@@ -226,12 +226,12 @@ STATIC void *__JCR_LIST__[]
|
||||
dynamic linker takes care of this. */
|
||||
|
||||
#ifdef HAVE_GAS_HIDDEN
|
||||
-extern void *__dso_handle __attribute__ ((__visibility__ ("hidden")));
|
||||
+extern void *const __dso_handle __attribute__ ((__visibility__ ("hidden")));
|
||||
#endif
|
||||
#ifdef CRTSTUFFS_O
|
||||
-void *__dso_handle = &__dso_handle;
|
||||
+void *const __dso_handle = (void *) &__dso_handle;
|
||||
#else
|
||||
-void *__dso_handle = 0;
|
||||
+void *const __dso_handle = 0;
|
||||
#endif
|
||||
|
||||
/* The __cxa_finalize function may not be available so we use only a
|
@ -1,295 +0,0 @@
|
||||
2007-09-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* expr.c (expand_expr_real_1) <case CALL_EXPR>: Use get_callee_fndecl
|
||||
instead of checking CALL_EXPR_FN directly to test for builtins.
|
||||
If error or warning attributes are present, print
|
||||
error resp. warning.
|
||||
* c-common.c (handle_error_attribute): New function.
|
||||
(c_common_attribute_table): Add error and warning
|
||||
attributes.
|
||||
* doc/extend.texi: Document error and warning attributes.
|
||||
|
||||
* gcc.dg/va-arg-pack-len-1.c: Use error and warning
|
||||
attributes.
|
||||
* gcc.dg/va-arg-pack-len-2.c: New test.
|
||||
* g++.dg/ext/va-arg-pack-len-1.C: Use error and warning
|
||||
attributes.
|
||||
* g++.dg/ext/va-arg-pack-len-2.C: New test.
|
||||
|
||||
--- gcc/doc/extend.texi.jj 2007-09-25 15:04:15.000000000 +0200
|
||||
+++ gcc/doc/extend.texi 2007-09-25 15:32:22.000000000 +0200
|
||||
@@ -1589,8 +1589,8 @@ attributes are currently defined for fun
|
||||
@code{section}, @code{constructor}, @code{destructor}, @code{used},
|
||||
@code{unused}, @code{deprecated}, @code{weak}, @code{malloc},
|
||||
@code{alias}, @code{warn_unused_result}, @code{nonnull},
|
||||
-@code{gnu_inline}, @code{externally_visible} and @code{artificial}.
|
||||
-Several other
|
||||
+@code{gnu_inline}, @code{externally_visible}, @code{artificial},
|
||||
+@code{error} and @code{warning}. Several other
|
||||
attributes are defined for functions on particular target systems. Other
|
||||
attributes, including @code{section} are supported for variables declarations
|
||||
(@pxref{Variable Attributes}) and for types (@pxref{Type Attributes}).
|
||||
@@ -1688,6 +1688,30 @@ Whether the function itself is considere
|
||||
the current inlining parameters. The @code{flatten} attribute only works
|
||||
reliably in unit-at-a-time mode.
|
||||
|
||||
+@item error ("@var{message}")
|
||||
+@cindex @code{error} function attribute
|
||||
+If this attribute is used on a function declaration and a call to such a function
|
||||
+is not eliminated through dead code elimination or other optimizations, an error
|
||||
+which will include @var{message} will be diagnosed. This is useful
|
||||
+for compile time checking, especially together with @code{__builtin_constant_p}
|
||||
+and inline functions where checking the inline function arguments is not
|
||||
+possible through @code{extern char [(condition) ? 1 : -1];} tricks.
|
||||
+While it is possible to leave the function undefined and thus invoke
|
||||
+a link failure, when using this attribute the problem will be diagnosed
|
||||
+earlier and with exact location of the call even in presence of inline
|
||||
+functions or when not emitting debugging information.
|
||||
+
|
||||
+@item warning ("@var{message}")
|
||||
+@cindex @code{warning} function attribute
|
||||
+If this attribute is used on a function declaration and a call to such a function
|
||||
+is not eliminated through dead code elimination or other optimizations, a warning
|
||||
+which will include @var{message} will be diagnosed. This is useful
|
||||
+for compile time checking, especially together with @code{__builtin_constant_p}
|
||||
+and inline functions. While it is possible to define the function with
|
||||
+a message in @code{.gnu.warning*} section, when using this attribute the problem
|
||||
+will be diagnosed earlier and with exact location of the call even in presence
|
||||
+of inline functions or when not emitting debugging information.
|
||||
+
|
||||
@item cdecl
|
||||
@cindex functions that do pop the argument stack on the 386
|
||||
@opindex mrtd
|
||||
--- gcc/expr.c.jj 2007-09-25 14:58:40.000000000 +0200
|
||||
+++ gcc/expr.c 2007-09-25 15:19:15.000000000 +0200
|
||||
@@ -7513,19 +7513,31 @@ expand_expr_real_1 (tree exp, rtx target
|
||||
inlining. */
|
||||
if (CALL_EXPR_VA_ARG_PACK (exp))
|
||||
error ("invalid use of %<__builtin_va_arg_pack ()%>");
|
||||
- /* Check for a built-in function. */
|
||||
- if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
|
||||
- && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
|
||||
- == FUNCTION_DECL)
|
||||
- && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)))
|
||||
- {
|
||||
- if (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
|
||||
- == BUILT_IN_FRONTEND)
|
||||
- return lang_hooks.expand_expr (exp, original_target,
|
||||
- tmode, modifier,
|
||||
- alt_rtl);
|
||||
- else
|
||||
- return expand_builtin (exp, target, subtarget, tmode, ignore);
|
||||
+ {
|
||||
+ tree fndecl = get_callee_fndecl (exp), attr;
|
||||
+
|
||||
+ if (fndecl
|
||||
+ && (attr = lookup_attribute ("error",
|
||||
+ DECL_ATTRIBUTES (fndecl))) != NULL)
|
||||
+ error ("call to %qs declared with attribute error: %s",
|
||||
+ lang_hooks.decl_printable_name (fndecl, 1),
|
||||
+ TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
|
||||
+ if (fndecl
|
||||
+ && (attr = lookup_attribute ("warning",
|
||||
+ DECL_ATTRIBUTES (fndecl))) != NULL)
|
||||
+ warning (0, "call to %qs declared with attribute warning: %s",
|
||||
+ lang_hooks.decl_printable_name (fndecl, 1),
|
||||
+ TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
|
||||
+
|
||||
+ /* Check for a built-in function. */
|
||||
+ if (fndecl && DECL_BUILT_IN (fndecl))
|
||||
+ {
|
||||
+ if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_FRONTEND)
|
||||
+ return lang_hooks.expand_expr (exp, original_target,
|
||||
+ tmode, modifier, alt_rtl);
|
||||
+ else
|
||||
+ return expand_builtin (exp, target, subtarget, tmode, ignore);
|
||||
+ }
|
||||
}
|
||||
|
||||
return expand_call (exp, target, ignore);
|
||||
--- gcc/c-common.c.jj 2007-09-25 15:01:49.000000000 +0200
|
||||
+++ gcc/c-common.c 2007-09-25 15:24:34.000000000 +0200
|
||||
@@ -508,6 +508,7 @@ static tree handle_always_inline_attribu
|
||||
static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
|
||||
static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
|
||||
static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
|
||||
+static tree handle_error_attribute (tree *, tree, tree, int, bool *);
|
||||
static tree handle_used_attribute (tree *, tree, tree, int, bool *);
|
||||
static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
|
||||
static tree handle_externally_visible_attribute (tree *, tree, tree, int,
|
||||
@@ -641,6 +642,10 @@ const struct attribute_spec c_common_att
|
||||
handle_warn_unused_result_attribute },
|
||||
{ "sentinel", 0, 1, false, true, true,
|
||||
handle_sentinel_attribute },
|
||||
+ { "warning", 1, 1, true, false, false,
|
||||
+ handle_error_attribute },
|
||||
+ { "error", 1, 1, true, false, false,
|
||||
+ handle_error_attribute },
|
||||
{ NULL, 0, 0, false, false, false, NULL }
|
||||
};
|
||||
|
||||
@@ -4226,6 +4231,26 @@ handle_flatten_attribute (tree *node, tr
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
+/* Handle a "warning" or "error" attribute; arguments as in
|
||||
+ struct attribute_spec.handler. */
|
||||
+
|
||||
+static tree
|
||||
+handle_error_attribute (tree *node, tree name, tree args,
|
||||
+ int ARG_UNUSED (flags), bool *no_add_attrs)
|
||||
+{
|
||||
+ if (TREE_CODE (*node) == FUNCTION_DECL
|
||||
+ || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
|
||||
+ /* Do nothing else, just set the attribute. We'll get at
|
||||
+ it later with lookup_attribute. */
|
||||
+ ;
|
||||
+ else
|
||||
+ {
|
||||
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
|
||||
+ *no_add_attrs = true;
|
||||
+ }
|
||||
+
|
||||
+ return NULL_TREE;
|
||||
+}
|
||||
|
||||
/* Handle a "used" attribute; arguments as in
|
||||
struct attribute_spec.handler. */
|
||||
--- gcc/testsuite/gcc.dg/va-arg-pack-len-1.c.jj 2007-09-25 12:23:05.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/va-arg-pack-len-1.c 2007-09-25 15:16:03.000000000 +0200
|
||||
@@ -3,8 +3,10 @@
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
-extern int warn_open_missing_mode (void);
|
||||
-extern int warn_open_too_many_arguments (void);
|
||||
+extern int error_open_missing_mode (void)
|
||||
+ __attribute__((__error__ ("open with O_CREAT needs 3 arguments, only 2 were given")));
|
||||
+extern int warn_open_too_many_arguments (void)
|
||||
+ __attribute__((__warning__ ("open called with more than 3 arguments")));
|
||||
extern void abort (void);
|
||||
|
||||
char expected_char;
|
||||
@@ -83,7 +85,7 @@ myopen (const char *path, int oflag, ...
|
||||
{
|
||||
if ((oflag & 0x40) != 0 && __builtin_va_arg_pack_len () < 1)
|
||||
{
|
||||
- warn_open_missing_mode ();
|
||||
+ error_open_missing_mode ();
|
||||
return myopen2 (path, oflag);
|
||||
}
|
||||
return myopenva (path, oflag, __builtin_va_arg_pack ());
|
||||
--- gcc/testsuite/gcc.dg/va-arg-pack-len-2.c.jj 2007-09-25 15:16:03.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/va-arg-pack-len-2.c 2007-09-25 15:16:03.000000000 +0200
|
||||
@@ -0,0 +1,42 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+extern int error_open_missing_mode (void)
|
||||
+ __attribute__((__error__ ("open with O_CREAT needs 3 arguments, only 2 were given")));
|
||||
+extern int warn_open_too_many_arguments (void)
|
||||
+ __attribute__((__warning__ ("open called with more than 3 arguments")));
|
||||
+
|
||||
+extern int myopen2 (const char *path, int oflag);
|
||||
+extern int myopenva (const char *path, int oflag, ...);
|
||||
+
|
||||
+extern inline __attribute__((always_inline, gnu_inline)) int
|
||||
+myopen (const char *path, int oflag, ...)
|
||||
+{
|
||||
+ if (__builtin_va_arg_pack_len () > 1)
|
||||
+ warn_open_too_many_arguments (); /* { dg-warning "called with more than 3" } */
|
||||
+
|
||||
+ if (__builtin_constant_p (oflag))
|
||||
+ {
|
||||
+ if ((oflag & 0x40) != 0 && __builtin_va_arg_pack_len () < 1)
|
||||
+ {
|
||||
+ error_open_missing_mode (); /* { dg-error "needs 3 arguments, only 2 were given" } */
|
||||
+ return myopen2 (path, oflag);
|
||||
+ }
|
||||
+ return myopenva (path, oflag, __builtin_va_arg_pack ());
|
||||
+ }
|
||||
+
|
||||
+ if (__builtin_va_arg_pack_len () < 1)
|
||||
+ return myopen2 (path, oflag);
|
||||
+
|
||||
+ return myopenva (path, oflag, __builtin_va_arg_pack ());
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ myopen ("h", 0x43);
|
||||
+ myopen ("i", 0x43, 0644, 0655);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/g++.dg/ext/va-arg-pack-len-1.C.jj 2007-09-25 12:23:05.000000000 +0200
|
||||
+++ gcc/testsuite/g++.dg/ext/va-arg-pack-len-1.C 2007-09-25 15:16:03.000000000 +0200
|
||||
@@ -3,8 +3,10 @@
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
-extern "C" int warn_open_missing_mode (void);
|
||||
-extern "C" int warn_open_too_many_arguments (void);
|
||||
+extern "C" int error_open_missing_mode (void)
|
||||
+ __attribute__((__error__ ("open with O_CREAT needs 3 arguments, only 2 were given")));
|
||||
+extern "C" int warn_open_too_many_arguments (void)
|
||||
+ __attribute__((__warning__ ("open called with more than 3 arguments")));
|
||||
extern "C" void abort (void);
|
||||
|
||||
char expected_char;
|
||||
@@ -83,7 +85,7 @@ myopen (const char *path, int oflag, ...
|
||||
{
|
||||
if ((oflag & 0x40) != 0 && __builtin_va_arg_pack_len () < 1)
|
||||
{
|
||||
- warn_open_missing_mode ();
|
||||
+ error_open_missing_mode ();
|
||||
return myopen2 (path, oflag);
|
||||
}
|
||||
return myopenva (path, oflag, __builtin_va_arg_pack ());
|
||||
--- gcc/testsuite/g++.dg/ext/va-arg-pack-len-2.C.jj 2007-09-25 15:16:03.000000000 +0200
|
||||
+++ gcc/testsuite/g++.dg/ext/va-arg-pack-len-2.C 2007-09-25 15:16:03.000000000 +0200
|
||||
@@ -0,0 +1,42 @@
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-O2" }
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+extern int error_open_missing_mode (void)
|
||||
+ __attribute__((__error__ ("open with O_CREAT needs 3 arguments, only 2 were given")));
|
||||
+extern int warn_open_too_many_arguments (void)
|
||||
+ __attribute__((__warning__ ("open called with more than 3 arguments")));
|
||||
+
|
||||
+extern int myopen2 (const char *path, int oflag);
|
||||
+extern int myopenva (const char *path, int oflag, ...);
|
||||
+
|
||||
+extern inline __attribute__((always_inline, gnu_inline)) int
|
||||
+myopen (const char *path, int oflag, ...)
|
||||
+{
|
||||
+ if (__builtin_va_arg_pack_len () > 1)
|
||||
+ warn_open_too_many_arguments (); // { dg-warning "called with more than 3" }
|
||||
+
|
||||
+ if (__builtin_constant_p (oflag))
|
||||
+ {
|
||||
+ if ((oflag & 0x40) != 0 && __builtin_va_arg_pack_len () < 1)
|
||||
+ {
|
||||
+ error_open_missing_mode (); // { dg-error "needs 3 arguments, only 2 were given" }
|
||||
+ return myopen2 (path, oflag);
|
||||
+ }
|
||||
+ return myopenva (path, oflag, __builtin_va_arg_pack ());
|
||||
+ }
|
||||
+
|
||||
+ if (__builtin_va_arg_pack_len () < 1)
|
||||
+ return myopen2 (path, oflag);
|
||||
+
|
||||
+ return myopenva (path, oflag, __builtin_va_arg_pack ());
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ myopen ("h", 0x43);
|
||||
+ myopen ("i", 0x43, 0644, 0655);
|
||||
+ return 0;
|
||||
+}
|
@ -1,50 +0,0 @@
|
||||
2004-10-19 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* c-cppbuiltin.c (define__GNUC__): Also define __GNUC_RH_RELEASE__.
|
||||
|
||||
--- gcc/c-cppbuiltin.c.jj 2004-10-07 21:27:38.000000000 +0200
|
||||
+++ gcc/c-cppbuiltin.c 2004-10-19 11:41:50.000000000 +0200
|
||||
@@ -257,13 +257,13 @@ define__GNUC__ (void)
|
||||
{
|
||||
/* The format of the version string, enforced below, is
|
||||
([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? */
|
||||
- const char *q, *v = version_string;
|
||||
+ const char *q, *v = version_string, *vstart, *vend;
|
||||
|
||||
while (*v && !ISDIGIT (*v))
|
||||
v++;
|
||||
gcc_assert (*v && (v <= version_string || v[-1] == '-'));
|
||||
|
||||
- q = v;
|
||||
+ vstart = q = v;
|
||||
while (ISDIGIT (*v))
|
||||
v++;
|
||||
builtin_define_with_value_n ("__GNUC__", q, v - q);
|
||||
@@ -289,6 +289,27 @@ define__GNUC__ (void)
|
||||
builtin_define_with_value_n ("__GNUC_PATCHLEVEL__", "0", 1);
|
||||
|
||||
gcc_assert (!*v || *v == ' ' || *v == '-');
|
||||
+
|
||||
+ vend = v;
|
||||
+ v = strchr (v, '(');
|
||||
+ if (v != NULL && strncmp (v + 1, "Red Hat ", 8) == 0)
|
||||
+ {
|
||||
+ v += 9;
|
||||
+ if (strncmp (v, "Linux ", 6) == 0)
|
||||
+ v += 6;
|
||||
+
|
||||
+ gcc_assert (strncmp (v, vstart, vend - vstart) == 0);
|
||||
+ gcc_assert (v[vend - vstart] == '-');
|
||||
+
|
||||
+ v += vend - vstart + 1;
|
||||
+ q = v;
|
||||
+ gcc_assert (ISDIGIT (*v));
|
||||
+ while (ISDIGIT (*v))
|
||||
+ v++;
|
||||
+ builtin_define_with_value_n ("__GNUC_RH_RELEASE__", q, v - q);
|
||||
+
|
||||
+ gcc_assert (!*v || *v == ')' || *v == '.');
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Define macros used by <stdint.h>. Currently only defines limits
|
@ -1,136 +0,0 @@
|
||||
2006-07-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/i386/linux.h (LINK_SPEC): Add --hash-style=gnu.
|
||||
* config/i386/linux64.h (LINK_SPEC): Likewise.
|
||||
* config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
|
||||
* config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
|
||||
LINK_OS_LINUX_SPEC64): Likewise.
|
||||
* config/s390/linux.h (LINK_SPEC): Likewise.
|
||||
* config/ia64/linux.h (LINK_SPEC): Likewise.
|
||||
* config/sparc/linux.h (LINK_SPEC): Likewise.
|
||||
* config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
|
||||
LINK_ARCH64_SPEC): Likewise.
|
||||
* config/alpha/linux-elf.h (LINK_SPEC): Likewise.
|
||||
|
||||
--- gcc/config/rs6000/sysv4.h.jj 2006-07-11 10:54:00.000000000 +0200
|
||||
+++ gcc/config/rs6000/sysv4.h 2006-07-11 12:51:39.000000000 +0200
|
||||
@@ -1039,7 +1039,7 @@ extern int fixuplabelno;
|
||||
|
||||
#define LINK_START_LINUX_SPEC ""
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
%{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
|
||||
|
||||
--- gcc/config/rs6000/linux64.h.jj 2006-07-11 10:54:00.000000000 +0200
|
||||
+++ gcc/config/rs6000/linux64.h 2006-07-11 12:52:14.000000000 +0200
|
||||
@@ -337,11 +337,11 @@ extern int dot_symbols;
|
||||
#undef LINK_OS_DEFAULT_SPEC
|
||||
#define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=gnu %{!shared: %{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
%{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=gnu %{!shared: %{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
%{!dynamic-linker:-dynamic-linker /lib64/ld64.so.1}}}"
|
||||
|
||||
--- gcc/config/alpha/linux-elf.h.jj 2006-07-11 10:54:01.000000000 +0200
|
||||
+++ gcc/config/alpha/linux-elf.h 2006-07-11 12:53:48.000000000 +0200
|
||||
@@ -29,7 +29,7 @@ Boston, MA 02110-1301, USA. */
|
||||
|
||||
#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
||||
|
||||
-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
|
||||
+#define LINK_SPEC "-m elf64alpha --hash-style=gnu %{G*} %{relax:-relax} \
|
||||
%{O*:-O3} %{!O*:-O1} \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
--- gcc/config/s390/linux.h.jj 2006-07-11 10:54:02.000000000 +0200
|
||||
+++ gcc/config/s390/linux.h 2006-07-11 12:52:39.000000000 +0200
|
||||
@@ -79,7 +79,7 @@ Software Foundation, 51 Franklin Street,
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC \
|
||||
- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
|
||||
+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=gnu \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{static:-static} \
|
||||
--- gcc/config/sparc/linux.h.jj 2006-07-11 10:54:03.000000000 +0200
|
||||
+++ gcc/config/sparc/linux.h 2006-07-11 12:54:16.000000000 +0200
|
||||
@@ -127,7 +127,7 @@ Boston, MA 02110-1301, USA. */
|
||||
/* If ELF is the default format, we should not use /lib/elf. */
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
|
||||
+#define LINK_SPEC "-m elf32_sparc --hash-style=gnu -Y P,/usr/lib %{shared:-shared} \
|
||||
%{!mno-relax:%{!r:-relax}} \
|
||||
%{!shared: \
|
||||
%{!ibcs: \
|
||||
--- gcc/config/sparc/linux64.h.jj 2006-07-11 10:54:03.000000000 +0200
|
||||
+++ gcc/config/sparc/linux64.h 2006-07-11 12:55:10.000000000 +0200
|
||||
@@ -157,7 +157,7 @@ Boston, MA 02110-1301, USA. */
|
||||
{ "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \
|
||||
{ "link_arch", LINK_ARCH_SPEC },
|
||||
|
||||
-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
|
||||
+#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=gnu -Y P,/usr/lib %{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!ibcs: \
|
||||
%{!static: \
|
||||
@@ -166,7 +166,7 @@ Boston, MA 02110-1301, USA. */
|
||||
%{static:-static}}} \
|
||||
"
|
||||
|
||||
-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
|
||||
+#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=gnu -Y P,/usr/lib64 %{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!ibcs: \
|
||||
%{!static: \
|
||||
@@ -247,7 +247,7 @@ Boston, MA 02110-1301, USA. */
|
||||
#else /* !SPARC_BI_ARCH */
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "-m elf64_sparc -Y P,/usr/lib64 %{shared:-shared} \
|
||||
+#define LINK_SPEC "-m elf64_sparc --hash-style=gnu -Y P,/usr/lib64 %{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!ibcs: \
|
||||
%{!static: \
|
||||
--- gcc/config/i386/linux.h.jj 2006-07-11 10:54:05.000000000 +0200
|
||||
+++ gcc/config/i386/linux.h 2006-07-11 12:44:45.000000000 +0200
|
||||
@@ -113,7 +113,7 @@ Boston, MA 02110-1301, USA. */
|
||||
{ "dynamic_linker", DYNAMIC_LINKER }
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
|
||||
+#define LINK_SPEC "-m %(link_emulation) --hash-style=gnu %{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!ibcs: \
|
||||
%{!static: \
|
||||
--- gcc/config/i386/linux64.h.jj 2006-07-11 10:54:04.000000000 +0200
|
||||
+++ gcc/config/i386/linux64.h 2006-07-11 12:45:02.000000000 +0200
|
||||
@@ -55,7 +55,7 @@ Boston, MA 02110-1301, USA. */
|
||||
done. */
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
|
||||
+#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} --hash-style=gnu \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
--- gcc/config/ia64/linux.h.jj 2006-07-11 10:54:06.000000000 +0200
|
||||
+++ gcc/config/ia64/linux.h 2006-07-11 12:48:19.000000000 +0200
|
||||
@@ -40,7 +40,7 @@ do { \
|
||||
linux.h file. */
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "\
|
||||
+#define LINK_SPEC "--hash-style=gnu \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
@ -1,538 +0,0 @@
|
||||
2004-11-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config.gcc (ia64*-*-linux*): If native and libelf is installed,
|
||||
use ia64/t-glibc-no-libunwind instead of the other t-*unwind*
|
||||
fragments.
|
||||
* config/ia64/t-glibc-no-libunwind: New file.
|
||||
* config/ia64/change-symver.c: New file.
|
||||
* config/ia64/unwind-ia64.c: If USE_SYMVER_GLOBAL and SHARED,
|
||||
define _Unwind_* to __symverglobal_Unwind_*.
|
||||
(alias): Undefine.
|
||||
(symverglobal): Define. Use it on _Unwind_*.
|
||||
* config/ia64/mkmap-symver-multi.awk: New file.
|
||||
* config/ia64/libgcc-ia64-no-libunwind.ver: New file.
|
||||
|
||||
--- gcc/config.gcc.jj 2004-10-04 08:55:44.000000000 -0400
|
||||
+++ gcc/config.gcc 2004-11-13 05:23:50.000000000 -0500
|
||||
@@ -1185,9 +1185,16 @@ ia64*-*-freebsd*)
|
||||
;;
|
||||
ia64*-*-linux*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h ia64/sysv4.h ia64/linux.h"
|
||||
- tmake_file="${tmake_file} ia64/t-ia64 t-libunwind ia64/t-glibc"
|
||||
- if test x$with_system_libunwind != xyes ; then
|
||||
- tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind"
|
||||
+ tmake_file="${tmake_file} ia64/t-ia64"
|
||||
+ if test x${target} = x${host} && test x${target} = x${build} \
|
||||
+ && grep gelf_getverdef /usr/include/gelf.h > /dev/null 2>&1 \
|
||||
+ && test -f /usr/lib/libelf.so; then
|
||||
+ tmake_file="${tmake_file} ia64/t-glibc-no-libunwind"
|
||||
+ else
|
||||
+ tmake_file="${tmake_file} t-libunwind ia64/t-glibc"
|
||||
+ if test x$with_system_libunwind != xyes ; then
|
||||
+ tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind"
|
||||
+ fi
|
||||
fi
|
||||
target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
|
||||
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
|
||||
--- gcc/config/ia64/t-glibc-no-libunwind.jj 2004-02-18 10:27:36.000000000 -0500
|
||||
+++ gcc/config/ia64/t-glibc-no-libunwind 2004-11-15 09:56:33.000000000 -0500
|
||||
@@ -0,0 +1,30 @@
|
||||
+# Don't use system libunwind library on IA-64 GLIBC based system,
|
||||
+# but make _Unwind_* symbols unversioned, so that created programs
|
||||
+# are usable even when libgcc_s uses libunwind.
|
||||
+LIB2ADDEH += $(srcdir)/config/ia64/fde-glibc.c
|
||||
+SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64-no-libunwind.ver
|
||||
+SHLIB_MKMAP = $(srcdir)/config/ia64/mkmap-symver-multi.awk
|
||||
+
|
||||
+SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||
+ -Wl,--soname=$(SHLIB_SONAME) \
|
||||
+ -Wl,--version-script=$(SHLIB_MAP) \
|
||||
+ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ $(SHLIB_OBJS) -lc && \
|
||||
+ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
|
||||
+ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
|
||||
+ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
|
||||
+ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
|
||||
+ else true; fi && \
|
||||
+ gcc -O2 -o $(SHLIB_DIR)/$(SHLIB_SONAME).tweak \
|
||||
+ $(srcdir)/config/ia64/change-symver.c -lelf && \
|
||||
+ $(SHLIB_DIR)/$(SHLIB_SONAME).tweak $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
|
||||
+ GCC_3.4.2 _GLOBAL_ \
|
||||
+ _Unwind_GetGR _Unwind_RaiseException _Unwind_GetRegionStart _Unwind_SetIP \
|
||||
+ _Unwind_GetIP _Unwind_GetLanguageSpecificData _Unwind_Resume \
|
||||
+ _Unwind_DeleteException _Unwind_SetGR _Unwind_ForcedUnwind \
|
||||
+ _Unwind_Backtrace _Unwind_FindEnclosingFunction _Unwind_GetCFA \
|
||||
+ _Unwind_Resume_or_Rethrow _Unwind_GetBSP && \
|
||||
+ rm -f $(SHLIB_DIR)/$(SHLIB_SONAME).tweak && \
|
||||
+ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
|
||||
+ $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
|
||||
+
|
||||
+TARGET_LIBGCC2_CFLAGS += -DUSE_SYMVER_GLOBAL
|
||||
--- gcc/config/ia64/change-symver.c.jj 2004-02-18 10:27:36.000000000 -0500
|
||||
+++ gcc/config/ia64/change-symver.c 2004-11-13 05:23:50.000000000 -0500
|
||||
@@ -0,0 +1,211 @@
|
||||
+#define _GNU_SOURCE 1
|
||||
+#define _FILE_OFFSET_BITS 64
|
||||
+#include <endian.h>
|
||||
+#include <errno.h>
|
||||
+#include <error.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <fnmatch.h>
|
||||
+#include <gelf.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <string.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+int
|
||||
+compute_veridx (const char *name, Elf *elf, Elf_Data *verd, GElf_Shdr *verd_shdr)
|
||||
+{
|
||||
+ if (strcmp (name, "_GLOBAL_") == 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ int cnt;
|
||||
+ size_t offset = 0;
|
||||
+ for (cnt = verd_shdr->sh_info; --cnt >= 0; )
|
||||
+ {
|
||||
+ GElf_Verdef defmem;
|
||||
+ GElf_Verdef *def;
|
||||
+ GElf_Verdaux auxmem;
|
||||
+ GElf_Verdaux *aux;
|
||||
+ unsigned int auxoffset;
|
||||
+
|
||||
+ /* Get the data at the next offset. */
|
||||
+ def = gelf_getverdef (verd, offset, &defmem);
|
||||
+ if (def == NULL)
|
||||
+ break;
|
||||
+
|
||||
+ auxoffset = offset + def->vd_aux;
|
||||
+ aux = gelf_getverdaux (verd, auxoffset, &auxmem);
|
||||
+ if (aux == NULL)
|
||||
+ break;
|
||||
+
|
||||
+ if (strcmp (name, elf_strptr (elf, verd_shdr->sh_link,
|
||||
+ aux->vda_name)) == 0)
|
||||
+ return def->vd_ndx;
|
||||
+
|
||||
+ /* Find the next offset. */
|
||||
+ offset += def->vd_next;
|
||||
+ }
|
||||
+
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (int argc, char **argv)
|
||||
+{
|
||||
+ if (argc < 4)
|
||||
+ error (1, 0, "Usage: change_symver library from_symver to_symver symbol...\nExample: change_symver libfoo.so FOO_1.0 *global* bar baz");
|
||||
+
|
||||
+ const char *fname = argv[1];
|
||||
+
|
||||
+ /* Open the file. */
|
||||
+ int fd;
|
||||
+ fd = open (fname, O_RDWR);
|
||||
+ if (fd == -1)
|
||||
+ error (1, errno, fname);
|
||||
+
|
||||
+ elf_version (EV_CURRENT);
|
||||
+
|
||||
+ /* Now get the ELF descriptor. */
|
||||
+ Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
|
||||
+ if (elf == NULL || elf_kind (elf) != ELF_K_ELF)
|
||||
+ error (1, 0, "Couldn't open %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ size_t shstrndx;
|
||||
+ /* Get the section header string table index. */
|
||||
+ if (elf_getshstrndx (elf, &shstrndx) < 0)
|
||||
+ error (1, 0, "cannot get shstrndx from %s", fname);
|
||||
+
|
||||
+ GElf_Ehdr ehdr_mem;
|
||||
+ GElf_Ehdr *ehdr;
|
||||
+
|
||||
+ /* We need the ELF header in a few places. */
|
||||
+ ehdr = gelf_getehdr (elf, &ehdr_mem);
|
||||
+ if (ehdr == NULL)
|
||||
+ error (1, 0, "couldn't get ELF headers %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ Elf_Scn *scn = NULL;
|
||||
+ GElf_Shdr shdr_mem, verd_shdr, ver_shdr, dynsym_shdr;
|
||||
+ Elf_Data *ver = NULL, *verd = NULL, *dynsym = NULL;
|
||||
+
|
||||
+ while ((scn = elf_nextscn (elf, scn)) != NULL)
|
||||
+ {
|
||||
+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
|
||||
+
|
||||
+ if (shdr == NULL)
|
||||
+ error (1, 0, "couldn't get shdr from %s", fname);
|
||||
+
|
||||
+ if ((shdr->sh_flags & SHF_ALLOC) != 0)
|
||||
+ {
|
||||
+ const char *name = elf_strptr (elf, shstrndx, shdr->sh_name);
|
||||
+ Elf_Data **p;
|
||||
+
|
||||
+ if (strcmp (name, ".gnu.version") == 0)
|
||||
+ {
|
||||
+ p = &ver;
|
||||
+ ver_shdr = *shdr;
|
||||
+ }
|
||||
+ else if (strcmp (name, ".gnu.version_d") == 0)
|
||||
+ {
|
||||
+ p = &verd;
|
||||
+ verd_shdr = *shdr;
|
||||
+ }
|
||||
+ else if (strcmp (name, ".dynsym") == 0)
|
||||
+ {
|
||||
+ p = &dynsym;
|
||||
+ dynsym_shdr = *shdr;
|
||||
+ }
|
||||
+ else
|
||||
+ continue;
|
||||
+
|
||||
+ if (*p != NULL)
|
||||
+ error (1, 0, "Two %s sections in %s", name, fname);
|
||||
+ *p = elf_getdata (scn, NULL);
|
||||
+ if (*p == NULL || elf_getdata (scn, *p) != NULL)
|
||||
+ error (1, 0, "No data or non-contiguous data in %s section in %s",
|
||||
+ name, fname);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (ver == NULL || verd == NULL || dynsym == NULL)
|
||||
+ error (1, 0, "Couldn't find one of the needed sections in %s", fname);
|
||||
+
|
||||
+ int from_idx = compute_veridx (argv[2], elf, verd, &verd_shdr);
|
||||
+ if (from_idx == -1)
|
||||
+ error (1, 0, "Could not find symbol version %s in %s", argv[2], fname);
|
||||
+
|
||||
+ int to_idx = compute_veridx (argv[3], elf, verd, &verd_shdr);
|
||||
+ if (to_idx == -1)
|
||||
+ error (1, 0, "Could not find symbol version %s in %s", argv[3], fname);
|
||||
+
|
||||
+ if (dynsym_shdr.sh_entsize != gelf_fsize (elf, ELF_T_SYM, 1, ehdr->e_version)
|
||||
+ || dynsym_shdr.sh_size % dynsym_shdr.sh_entsize
|
||||
+ || ver_shdr.sh_entsize != 2
|
||||
+ || (ver_shdr.sh_size & 1)
|
||||
+ || dynsym_shdr.sh_size / dynsym_shdr.sh_entsize != ver_shdr.sh_size / 2)
|
||||
+ error (1, 0, "Unexpected sh_size or sh_entsize in %s", fname);
|
||||
+
|
||||
+ size_t nentries = ver_shdr.sh_size / 2;
|
||||
+ size_t cnt;
|
||||
+ GElf_Versym array[nentries];
|
||||
+ for (cnt = 0; cnt < nentries; ++cnt)
|
||||
+ {
|
||||
+ GElf_Versym vsymmem;
|
||||
+ GElf_Versym *vsym;
|
||||
+
|
||||
+ vsym = gelf_getversym (ver, cnt, &vsymmem);
|
||||
+ if (vsym == NULL)
|
||||
+ error (1, 0, "gelt_getversym failed in %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ array[cnt] = *vsym;
|
||||
+ if (*vsym != from_idx)
|
||||
+ continue;
|
||||
+
|
||||
+ GElf_Sym sym_mem;
|
||||
+ GElf_Sym *sym;
|
||||
+ sym = gelf_getsym (dynsym, cnt, &sym_mem);
|
||||
+ if (sym == NULL)
|
||||
+ error (1, 0, "gelt_getsym failed in %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ const char *name = elf_strptr (elf, dynsym_shdr.sh_link, sym->st_name);
|
||||
+
|
||||
+ int argn;
|
||||
+ for (argn = 4; argn < argc; ++argn)
|
||||
+ if (fnmatch (argv[argn], name, 0) == 0)
|
||||
+ {
|
||||
+ array[cnt] = to_idx;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (sizeof (array[0]) != 2)
|
||||
+ abort ();
|
||||
+
|
||||
+#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
+ if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB)
|
||||
+ ;
|
||||
+ else if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB)
|
||||
+#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
+ if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB)
|
||||
+ ;
|
||||
+ else if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB)
|
||||
+#else
|
||||
+# error Unsupported endianity
|
||||
+#endif
|
||||
+ {
|
||||
+ for (cnt = 0; cnt < nentries; ++cnt)
|
||||
+ array[cnt] = ((array[cnt] & 0xff) << 8) | ((array[cnt] & 0xff00) >> 8);
|
||||
+ }
|
||||
+ else
|
||||
+ error (1, 0, "Unknown EI_DATA %d in %s", ehdr->e_ident[EI_DATA], fname);
|
||||
+
|
||||
+ if (elf_end (elf) != 0)
|
||||
+ error (1, 0, "couldn't close %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ if (lseek (fd, ver_shdr.sh_offset, SEEK_SET) != (off_t) ver_shdr.sh_offset)
|
||||
+ error (1, 0, "failed to seek to %zd in %s", (size_t) ver_shdr.sh_offset,
|
||||
+ fname);
|
||||
+
|
||||
+ if (write (fd, array, 2 * nentries) != (ssize_t) (2 * nentries))
|
||||
+ error (1, 0, "failed to write .gnu.version section into %s", fname);
|
||||
+
|
||||
+ close (fd);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/config/ia64/unwind-ia64.c.jj 2004-10-04 08:55:57.000000000 -0400
|
||||
+++ gcc/config/ia64/unwind-ia64.c 2004-11-15 09:07:45.000000000 -0500
|
||||
@@ -51,6 +51,51 @@
|
||||
#define UNW_FLAG_UHANDLER(x) ((x) & 0x0000000200000000L)
|
||||
#define UNW_LENGTH(x) ((x) & 0x00000000ffffffffL)
|
||||
|
||||
+#if defined (USE_SYMVER_GLOBAL) && defined (SHARED)
|
||||
+extern _Unwind_Reason_Code __symverglobal_Unwind_Backtrace
|
||||
+ (_Unwind_Trace_Fn, void *);
|
||||
+extern void __symverglobal_Unwind_DeleteException
|
||||
+ (struct _Unwind_Exception *);
|
||||
+extern void * __symverglobal_Unwind_FindEnclosingFunction (void *);
|
||||
+extern _Unwind_Reason_Code __symverglobal_Unwind_ForcedUnwind
|
||||
+ (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
|
||||
+extern _Unwind_Word __symverglobal_Unwind_GetCFA
|
||||
+ (struct _Unwind_Context *);
|
||||
+extern _Unwind_Word __symverglobal_Unwind_GetBSP
|
||||
+ (struct _Unwind_Context *);
|
||||
+extern _Unwind_Word __symverglobal_Unwind_GetGR
|
||||
+ (struct _Unwind_Context *, int );
|
||||
+extern _Unwind_Ptr __symverglobal_Unwind_GetIP (struct _Unwind_Context *);
|
||||
+extern void *__symverglobal_Unwind_GetLanguageSpecificData
|
||||
+ (struct _Unwind_Context *);
|
||||
+extern _Unwind_Ptr __symverglobal_Unwind_GetRegionStart
|
||||
+ (struct _Unwind_Context *);
|
||||
+extern _Unwind_Reason_Code __symverglobal_Unwind_RaiseException
|
||||
+ (struct _Unwind_Exception *);
|
||||
+extern void __symverglobal_Unwind_Resume (struct _Unwind_Exception *);
|
||||
+extern _Unwind_Reason_Code __symverglobal_Unwind_Resume_or_Rethrow
|
||||
+ (struct _Unwind_Exception *);
|
||||
+extern void __symverglobal_Unwind_SetGR
|
||||
+ (struct _Unwind_Context *, int, _Unwind_Word);
|
||||
+extern void __symverglobal_Unwind_SetIP
|
||||
+ (struct _Unwind_Context *, _Unwind_Ptr);
|
||||
+#define _Unwind_Backtrace __symverglobal_Unwind_Backtrace
|
||||
+#define _Unwind_DeleteException __symverglobal_Unwind_DeleteException
|
||||
+#define _Unwind_FindEnclosingFunction __symverglobal_Unwind_FindEnclosingFunction
|
||||
+#define _Unwind_ForcedUnwind __symverglobal_Unwind_ForcedUnwind
|
||||
+#define _Unwind_GetBSP __symverglobal_Unwind_GetBSP
|
||||
+#define _Unwind_GetCFA __symverglobal_Unwind_GetCFA
|
||||
+#define _Unwind_GetGR __symverglobal_Unwind_GetGR
|
||||
+#define _Unwind_GetIP __symverglobal_Unwind_GetIP
|
||||
+#define _Unwind_GetLanguageSpecificData __symverglobal_Unwind_GetLanguageSpecificData
|
||||
+#define _Unwind_GetRegionStart __symverglobal_Unwind_GetRegionStart
|
||||
+#define _Unwind_RaiseException __symverglobal_Unwind_RaiseException
|
||||
+#define _Unwind_Resume __symverglobal_Unwind_Resume
|
||||
+#define _Unwind_Resume_or_Rethrow __symverglobal_Unwind_Resume_or_Rethrow
|
||||
+#define _Unwind_SetGR __symverglobal_Unwind_SetGR
|
||||
+#define _Unwind_SetIP __symverglobal_Unwind_SetIP
|
||||
+#endif
|
||||
+
|
||||
enum unw_application_register
|
||||
{
|
||||
UNW_AR_BSP,
|
||||
@@ -2402,4 +2447,44 @@ alias (_Unwind_SetGR);
|
||||
alias (_Unwind_SetIP);
|
||||
#endif
|
||||
|
||||
+#if defined (USE_SYMVER_GLOBAL) && defined (SHARED)
|
||||
+#undef alias
|
||||
+#define symverglobal(name, version) \
|
||||
+__typeof (__symverglobal##name) __symverlocal##name \
|
||||
+ __attribute__ ((alias ("__symverglobal" #name))); \
|
||||
+__asm__ (".symver __symverglobal" #name"," #name "@@GCC_3.4.2");\
|
||||
+__asm__ (".symver __symverlocal" #name"," #name "@" #version)
|
||||
+
|
||||
+#undef _Unwind_Backtrace
|
||||
+#undef _Unwind_DeleteException
|
||||
+#undef _Unwind_FindEnclosingFunction
|
||||
+#undef _Unwind_ForcedUnwind
|
||||
+#undef _Unwind_GetBSP
|
||||
+#undef _Unwind_GetCFA
|
||||
+#undef _Unwind_GetGR
|
||||
+#undef _Unwind_GetIP
|
||||
+#undef _Unwind_GetLanguageSpecificData
|
||||
+#undef _Unwind_GetRegionStart
|
||||
+#undef _Unwind_RaiseException
|
||||
+#undef _Unwind_Resume
|
||||
+#undef _Unwind_Resume_or_Rethrow
|
||||
+#undef _Unwind_SetGR
|
||||
+#undef _Unwind_SetIP
|
||||
+symverglobal (_Unwind_Backtrace, GCC_3.3);
|
||||
+symverglobal (_Unwind_DeleteException, GCC_3.0);
|
||||
+symverglobal (_Unwind_FindEnclosingFunction, GCC_3.3);
|
||||
+symverglobal (_Unwind_ForcedUnwind, GCC_3.0);
|
||||
+symverglobal (_Unwind_GetBSP, GCC_3.3.2);
|
||||
+symverglobal (_Unwind_GetCFA, GCC_3.3);
|
||||
+symverglobal (_Unwind_GetGR, GCC_3.0);
|
||||
+symverglobal (_Unwind_GetIP, GCC_3.0);
|
||||
+symverglobal (_Unwind_GetLanguageSpecificData, GCC_3.0);
|
||||
+symverglobal (_Unwind_GetRegionStart, GCC_3.0);
|
||||
+symverglobal (_Unwind_RaiseException, GCC_3.0);
|
||||
+symverglobal (_Unwind_Resume, GCC_3.0);
|
||||
+symverglobal (_Unwind_Resume_or_Rethrow, GCC_3.3);
|
||||
+symverglobal (_Unwind_SetGR, GCC_3.0);
|
||||
+symverglobal (_Unwind_SetIP, GCC_3.0);
|
||||
+#endif
|
||||
+
|
||||
#endif
|
||||
--- gcc/config/ia64/mkmap-symver-multi.awk.jj 2004-02-18 10:27:36.000000000 -0500
|
||||
+++ gcc/config/ia64/mkmap-symver-multi.awk 2004-11-15 09:46:50.000000000 -0500
|
||||
@@ -0,0 +1,133 @@
|
||||
+# Generate an ELF symbol version map a-la Solaris and GNU ld.
|
||||
+# Contributed by Richard Henderson <rth@cygnus.com>
|
||||
+#
|
||||
+# This file is part of GCC.
|
||||
+#
|
||||
+# GCC is free software; you can redistribute it and/or modify it under
|
||||
+# the terms of the GNU General Public License as published by the Free
|
||||
+# Software Foundation; either version 2, or (at your option) any later
|
||||
+# version.
|
||||
+#
|
||||
+# GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
+# License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with GCC; see the file COPYING. If not, write to the Free
|
||||
+# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
+# 02110-1301, USA.
|
||||
+
|
||||
+BEGIN {
|
||||
+ state = "nm";
|
||||
+ sawsymbol = 0;
|
||||
+}
|
||||
+
|
||||
+# Remove comment and blank lines.
|
||||
+/^ *#/ || /^ *$/ {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# We begin with nm input. Collect the set of symbols that are present
|
||||
+# so that we can not emit them into the final version script -- Solaris
|
||||
+# complains at us if we do.
|
||||
+
|
||||
+state == "nm" && /^%%/ {
|
||||
+ state = "ver";
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+state == "nm" && ($1 == "U" || $2 == "U") {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+state == "nm" && NF == 3 {
|
||||
+ if ($3 ~ /^[^@]*@GCC_[0-9.]*$/) {
|
||||
+ def[$3] = 1
|
||||
+ tl=$3
|
||||
+ sub(/^.*@/,"",tl)
|
||||
+ ver[$3] = tl
|
||||
+ } else {
|
||||
+ sub(/@@?GCC_[0-9.]*$/,"",$3)
|
||||
+ def[$3] = 1;
|
||||
+ }
|
||||
+ sawsymbol = 1;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+state == "nm" {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# Now we process a simplified variant of the Solaris symbol version
|
||||
+# script. We have one symbol per line, no semicolons, simple markers
|
||||
+# for beginning and ending each section, and %inherit markers for
|
||||
+# describing version inheritence. A symbol may appear in more than
|
||||
+# one symbol version, and the last seen takes effect.
|
||||
+
|
||||
+NF == 3 && $1 == "%inherit" {
|
||||
+ inherit[$2] = $3;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+NF == 2 && $2 == "{" {
|
||||
+ libs[$1] = 1;
|
||||
+ thislib = $1;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+$1 == "}" {
|
||||
+ thislib = "";
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+{
|
||||
+ ver[$1] = thislib;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+END {
|
||||
+ if (!sawsymbol)
|
||||
+ {
|
||||
+ print "No symbols seen -- broken or mis-installed nm?" | "cat 1>&2";
|
||||
+ exit 1;
|
||||
+ }
|
||||
+ for (l in libs)
|
||||
+ output(l);
|
||||
+}
|
||||
+
|
||||
+function output(lib) {
|
||||
+ if (done[lib])
|
||||
+ return;
|
||||
+ done[lib] = 1;
|
||||
+ if (inherit[lib])
|
||||
+ output(inherit[lib]);
|
||||
+
|
||||
+ empty=1
|
||||
+ for (sym in ver)
|
||||
+ if ((ver[sym] == lib) && (sym in def))
|
||||
+ {
|
||||
+ if (empty)
|
||||
+ {
|
||||
+ printf("%s {\n", lib);
|
||||
+ printf(" global:\n");
|
||||
+ empty = 0;
|
||||
+ }
|
||||
+ symp = sym;
|
||||
+ sub(/@GCC_[0-9.]*$/,"",symp);
|
||||
+ printf("\t%s;\n", symp);
|
||||
+ if (dotsyms)
|
||||
+ printf("\t.%s;\n", symp);
|
||||
+ }
|
||||
+
|
||||
+ if (empty)
|
||||
+ {
|
||||
+ for (l in libs)
|
||||
+ if (inherit[l] == lib)
|
||||
+ inherit[l] = inherit[lib];
|
||||
+ }
|
||||
+ else if (inherit[lib])
|
||||
+ printf("} %s;\n", inherit[lib]);
|
||||
+ else
|
||||
+ printf ("\n local:\n\t*;\n};\n");
|
||||
+}
|
||||
--- gcc/config/ia64/libgcc-ia64-no-libunwind.ver.jj 2004-02-18 10:27:36.000000000 -0500
|
||||
+++ gcc/config/ia64/libgcc-ia64-no-libunwind.ver 2004-11-15 09:19:56.000000000 -0500
|
||||
@@ -0,0 +1,17 @@
|
||||
+GCC_3.4.2 {
|
||||
+ _Unwind_GetGR
|
||||
+ _Unwind_RaiseException
|
||||
+ _Unwind_GetRegionStart
|
||||
+ _Unwind_SetIP
|
||||
+ _Unwind_GetIP
|
||||
+ _Unwind_GetLanguageSpecificData
|
||||
+ _Unwind_Resume
|
||||
+ _Unwind_DeleteException
|
||||
+ _Unwind_SetGR
|
||||
+ _Unwind_ForcedUnwind
|
||||
+ _Unwind_Backtrace
|
||||
+ _Unwind_FindEnclosingFunction
|
||||
+ _Unwind_GetCFA
|
||||
+ _Unwind_Resume_or_Rethrow
|
||||
+ _Unwind_GetBSP
|
||||
+}
|
@ -1,316 +0,0 @@
|
||||
2004-01-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* system.h (ICE_EXIT_CODE): Define.
|
||||
* gcc.c (execute): Don't free first string early, but at the end
|
||||
of the function. Call retry_ice if compiler exited with
|
||||
ICE_EXIT_CODE.
|
||||
(retry_ice): New function.
|
||||
* diagnostic.c (diagnostic_count_diagnostic,
|
||||
diagnostic_action_after_output, error_recursion): Exit with
|
||||
ICE_EXIT_CODE instead of FATAL_EXIT_CODE.
|
||||
|
||||
--- gcc/system.h.jj 2004-01-19 17:29:30.000000000 +0100
|
||||
+++ gcc/system.h 2004-01-21 11:53:41.000000000 +0100
|
||||
@@ -153,6 +153,10 @@ extern int errno;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
+#ifndef ICE_EXIT_CODE
|
||||
+# define ICE_EXIT_CODE 27
|
||||
+#endif
|
||||
+
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
--- gcc/gcc.c.jj 2004-01-21 11:45:20.000000000 +0100
|
||||
+++ gcc/gcc.c 2004-01-21 11:56:46.000000000 +0100
|
||||
@@ -346,6 +346,9 @@ static void init_gcc_specs (struct obsta
|
||||
#if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
|
||||
static const char *convert_filename (const char *, int, int);
|
||||
#endif
|
||||
+#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
|
||||
+static void retry_ice (const char *prog, const char **argv);
|
||||
+#endif
|
||||
|
||||
static const char *if_exists_spec_function (int, const char **);
|
||||
static const char *if_exists_else_spec_function (int, const char **);
|
||||
@@ -2841,7 +2844,7 @@ execute (void)
|
||||
}
|
||||
}
|
||||
|
||||
- if (string != commands[i].prog)
|
||||
+ if (i && string != commands[i].prog)
|
||||
free ((void *) string);
|
||||
}
|
||||
|
||||
@@ -2897,6 +2900,16 @@ See %s for instructions.",
|
||||
else if (WIFEXITED (status)
|
||||
&& WEXITSTATUS (status) >= MIN_FATAL_STATUS)
|
||||
{
|
||||
+#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
|
||||
+ /* For ICEs in cc1, cc1obj, cc1plus see if it is
|
||||
+ reproducible or not. */
|
||||
+ char *p;
|
||||
+ if (WEXITSTATUS (status) == ICE_EXIT_CODE
|
||||
+ && i == 0
|
||||
+ && (p = strrchr (commands[0].argv[0], DIR_SEPARATOR))
|
||||
+ && ! strncmp (p + 1, "cc1", 3))
|
||||
+ retry_ice (commands[0].prog, commands[0].argv);
|
||||
+#endif
|
||||
if (WEXITSTATUS (status) > greatest_status)
|
||||
greatest_status = WEXITSTATUS (status);
|
||||
ret_code = -1;
|
||||
@@ -2917,6 +2930,9 @@ See %s for instructions.",
|
||||
}
|
||||
}
|
||||
|
||||
+ if (commands[0].argv[0] != commands[0].prog)
|
||||
+ free ((PTR) commands[0].argv[0]);
|
||||
+
|
||||
return ret_code;
|
||||
}
|
||||
}
|
||||
@@ -5898,6 +5914,224 @@ give_switch (int switchnum, int omit_fir
|
||||
switches[switchnum].validated = 1;
|
||||
}
|
||||
|
||||
+#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
|
||||
+#define RETRY_ICE_ATTEMPTS 2
|
||||
+
|
||||
+static void
|
||||
+retry_ice (const char *prog, const char **argv)
|
||||
+{
|
||||
+ int nargs, out_arg = -1, quiet = 0, attempt;
|
||||
+ int pid, retries, sleep_interval;
|
||||
+ const char **new_argv;
|
||||
+ char *temp_filenames[RETRY_ICE_ATTEMPTS * 2 + 2];
|
||||
+
|
||||
+ if (input_filename == NULL || ! strcmp (input_filename, "-"))
|
||||
+ return;
|
||||
+
|
||||
+ for (nargs = 0; argv[nargs] != NULL; ++nargs)
|
||||
+ /* Only retry compiler ICEs, not preprocessor ones. */
|
||||
+ if (! strcmp (argv[nargs], "-E"))
|
||||
+ return;
|
||||
+ else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o')
|
||||
+ {
|
||||
+ if (out_arg == -1)
|
||||
+ out_arg = nargs;
|
||||
+ else
|
||||
+ return;
|
||||
+ }
|
||||
+ /* If the compiler is going to output any time information,
|
||||
+ it might varry between invocations. */
|
||||
+ else if (! strcmp (argv[nargs], "-quiet"))
|
||||
+ quiet = 1;
|
||||
+ else if (! strcmp (argv[nargs], "-ftime-report"))
|
||||
+ return;
|
||||
+
|
||||
+ if (out_arg == -1 || !quiet)
|
||||
+ return;
|
||||
+
|
||||
+ memset (temp_filenames, '\0', sizeof (temp_filenames));
|
||||
+ new_argv = alloca ((nargs + 3) * sizeof (const char *));
|
||||
+ memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *));
|
||||
+ new_argv[nargs++] = "-frandom-seed=0";
|
||||
+ new_argv[nargs] = NULL;
|
||||
+ if (new_argv[out_arg][2] == '\0')
|
||||
+ new_argv[out_arg + 1] = "-";
|
||||
+ else
|
||||
+ new_argv[out_arg] = "-o-";
|
||||
+
|
||||
+ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS + 1; ++attempt)
|
||||
+ {
|
||||
+ int fd = -1;
|
||||
+ int status;
|
||||
+
|
||||
+ temp_filenames[attempt * 2] = make_temp_file (".out");
|
||||
+ temp_filenames[attempt * 2 + 1] = make_temp_file (".err");
|
||||
+
|
||||
+ if (attempt == RETRY_ICE_ATTEMPTS)
|
||||
+ {
|
||||
+ int i;
|
||||
+ int fd1, fd2;
|
||||
+ struct stat st1, st2;
|
||||
+ size_t n, len;
|
||||
+ char *buf;
|
||||
+
|
||||
+ buf = xmalloc (8192);
|
||||
+
|
||||
+ for (i = 0; i < 2; ++i)
|
||||
+ {
|
||||
+ fd1 = open (temp_filenames[i], O_RDONLY);
|
||||
+ fd2 = open (temp_filenames[2 + i], O_RDONLY);
|
||||
+
|
||||
+ if (fd1 < 0 || fd2 < 0)
|
||||
+ {
|
||||
+ i = -1;
|
||||
+ close (fd1);
|
||||
+ close (fd2);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0)
|
||||
+ {
|
||||
+ i = -1;
|
||||
+ close (fd1);
|
||||
+ close (fd2);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (st1.st_size != st2.st_size)
|
||||
+ {
|
||||
+ close (fd1);
|
||||
+ close (fd2);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ len = 0;
|
||||
+ for (n = st1.st_size; n; n -= len)
|
||||
+ {
|
||||
+ len = n;
|
||||
+ if (len > 4096)
|
||||
+ len = 4096;
|
||||
+
|
||||
+ if (read (fd1, buf, len) != (int) len
|
||||
+ || read (fd2, buf + 4096, len) != (int) len)
|
||||
+ {
|
||||
+ i = -1;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (memcmp (buf, buf + 4096, len) != 0)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ close (fd1);
|
||||
+ close (fd2);
|
||||
+
|
||||
+ if (n)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ free (buf);
|
||||
+ if (i == -1)
|
||||
+ break;
|
||||
+
|
||||
+ if (i != 2)
|
||||
+ {
|
||||
+ notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n");
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ fd = open (temp_filenames[attempt * 2], O_RDWR);
|
||||
+ if (fd < 0)
|
||||
+ break;
|
||||
+ write (fd, "//", 2);
|
||||
+ for (i = 0; i < nargs; i++)
|
||||
+ {
|
||||
+ write (fd, " ", 1);
|
||||
+ write (fd, new_argv[i], strlen (new_argv[i]));
|
||||
+ }
|
||||
+ write (fd, "\n", 1);
|
||||
+ new_argv[nargs] = "-E";
|
||||
+ new_argv[nargs + 1] = NULL;
|
||||
+ }
|
||||
+
|
||||
+ /* Fork a subprocess; wait and retry if it fails. */
|
||||
+ sleep_interval = 1;
|
||||
+ pid = -1;
|
||||
+ for (retries = 0; retries < 4; retries++)
|
||||
+ {
|
||||
+ pid = fork ();
|
||||
+ if (pid >= 0)
|
||||
+ break;
|
||||
+ sleep (sleep_interval);
|
||||
+ sleep_interval *= 2;
|
||||
+ }
|
||||
+
|
||||
+ if (pid < 0)
|
||||
+ break;
|
||||
+ else if (pid == 0)
|
||||
+ {
|
||||
+ if (attempt != RETRY_ICE_ATTEMPTS)
|
||||
+ fd = open (temp_filenames[attempt * 2], O_RDWR);
|
||||
+ if (fd < 0)
|
||||
+ exit (-1);
|
||||
+ if (fd != 1)
|
||||
+ {
|
||||
+ close (1);
|
||||
+ dup (fd);
|
||||
+ close (fd);
|
||||
+ }
|
||||
+
|
||||
+ fd = open (temp_filenames[attempt * 2 + 1], O_RDWR);
|
||||
+ if (fd < 0)
|
||||
+ exit (-1);
|
||||
+ if (fd != 2)
|
||||
+ {
|
||||
+ close (2);
|
||||
+ dup (fd);
|
||||
+ close (fd);
|
||||
+ }
|
||||
+
|
||||
+ if (prog == new_argv[0])
|
||||
+ execvp (prog, (char *const *) new_argv);
|
||||
+ else
|
||||
+ execv (new_argv[0], (char *const *) new_argv);
|
||||
+ exit (-1);
|
||||
+ }
|
||||
+
|
||||
+ if (waitpid (pid, &status, 0) < 0)
|
||||
+ break;
|
||||
+
|
||||
+ if (attempt < RETRY_ICE_ATTEMPTS
|
||||
+ && (! WIFEXITED (status) || WEXITSTATUS (status) != ICE_EXIT_CODE))
|
||||
+ {
|
||||
+ notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n");
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (attempt == RETRY_ICE_ATTEMPTS)
|
||||
+ {
|
||||
+ close (fd);
|
||||
+ if (WIFEXITED (status)
|
||||
+ && WEXITSTATUS (status) == SUCCESS_EXIT_CODE)
|
||||
+ {
|
||||
+ notice ("Preprocessed source stored into %s file, please attach this to your bugreport.\n",
|
||||
+ temp_filenames[attempt * 2]);
|
||||
+ /* Make sure it is not deleted. */
|
||||
+ free (temp_filenames[attempt * 2]);
|
||||
+ temp_filenames[attempt * 2] = NULL;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS * 2 + 2; attempt++)
|
||||
+ if (temp_filenames[attempt])
|
||||
+ {
|
||||
+ unlink (temp_filenames[attempt]);
|
||||
+ free (temp_filenames[attempt]);
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
/* Search for a file named NAME trying various prefixes including the
|
||||
user's -B prefix and some standard ones.
|
||||
Return the absolute file name found. If nothing is found, return NAME. */
|
||||
--- gcc/diagnostic.c.jj 2003-10-01 12:09:21.000000000 +0200
|
||||
+++ gcc/diagnostic.c 2004-01-21 11:54:47.000000000 +0100
|
||||
@@ -237,14 +237,14 @@ diagnostic_action_after_output (diagnost
|
||||
fnotice (stderr, "Please submit a full bug report,\n"
|
||||
"with preprocessed source if appropriate.\n"
|
||||
"See %s for instructions.\n", bug_report_url);
|
||||
- exit (FATAL_EXIT_CODE);
|
||||
+ exit (ICE_EXIT_CODE);
|
||||
|
||||
case DK_FATAL:
|
||||
if (context->abort_on_error)
|
||||
real_abort ();
|
||||
|
||||
fnotice (stderr, "compilation terminated.\n");
|
||||
- exit (FATAL_EXIT_CODE);
|
||||
+ exit (ICE_EXIT_CODE);
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
@ -1,36 +0,0 @@
|
||||
2007-03-16 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* class.c (push_class): Don't bogusly guess the source filename.
|
||||
* jcf-parse.c (give_name_to_class): Don't set input_location from
|
||||
DECL_ARTIFICIAL decls.
|
||||
|
||||
--- gcc/java/class.c (revision 122746)
|
||||
+++ gcc/java/class.c (working copy)
|
||||
@@ -426,8 +426,7 @@
|
||||
tree decl, signature;
|
||||
location_t saved_loc = input_location;
|
||||
#ifndef USE_MAPPED_LOCATION
|
||||
- tree source_name = identifier_subst (class_name, "", '.', '/', ".java");
|
||||
- input_filename = IDENTIFIER_POINTER (source_name);
|
||||
+ input_filename = "<unknown>";
|
||||
input_line = 0;
|
||||
#endif
|
||||
CLASS_P (class_type) = 1;
|
||||
--- gcc/java/jcf-parse.c (revision 122746)
|
||||
+++ gcc/java/jcf-parse.c (working copy)
|
||||
@@ -1221,9 +1221,12 @@ give_name_to_class (JCF *jcf, int i)
|
||||
main_input_filename = sfname;
|
||||
}
|
||||
#else
|
||||
- input_location = DECL_SOURCE_LOCATION (TYPE_NAME (this_class));
|
||||
- if (main_input_filename == NULL && jcf == main_jcf)
|
||||
- main_input_filename = input_filename;
|
||||
+ if (! DECL_ARTIFICIAL (TYPE_NAME (this_class)))
|
||||
+ {
|
||||
+ input_location = DECL_SOURCE_LOCATION (TYPE_NAME (this_class));
|
||||
+ if (main_input_filename == NULL && jcf == main_jcf)
|
||||
+ main_input_filename = input_filename;
|
||||
+ }
|
||||
#endif
|
||||
|
||||
jcf->cpool.data[i].t = this_class;
|
@ -1,48 +0,0 @@
|
||||
2006-07-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* configure.ac (toolexeclibdir, dbexecdir): Canonicalize /lib/../lib
|
||||
to /lib.
|
||||
* configure: Rebuilt.
|
||||
|
||||
--- libjava/configure.ac.jj 2006-07-20 14:01:02.000000000 +0200
|
||||
+++ libjava/configure.ac 2006-07-20 16:36:31.000000000 +0200
|
||||
@@ -1262,6 +1262,7 @@ case ${version_specific_libs} in
|
||||
multi_os_directory=`$CC -print-multi-os-directory`
|
||||
case $multi_os_directory in
|
||||
.) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
|
||||
+ ../lib*) toolexeclibdir='$(subst /lib/../lib,/lib,'$toolexecmainlibdir/$multi_os_directory')' ;;
|
||||
*) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
|
||||
esac
|
||||
;;
|
||||
@@ -1278,6 +1279,10 @@ case $multi_os_directory in
|
||||
dbexecdir='$(libdir)/gcj-$(gcc_version)' # Avoid /.
|
||||
ac_configure_args="$ac_configure_args --with-native-libdir=\$\(libdir\)/gcj-`cat $srcdir/../gcc/BASE-VER`"
|
||||
;;
|
||||
+ ../lib*)
|
||||
+ dbexecdir='$(subst /lib/../lib,/lib,$(libdir)/'$multi_os_directory'/gcj-$(gcc_version))'
|
||||
+ ac_configure_args="$ac_configure_args --with-native-libdir=\$\(libdir\)/$multi_os_directory/gcj-`cat $srcdir/../gcc/BASE-VER`"
|
||||
+ ;;
|
||||
*)
|
||||
dbexecdir='$(libdir)/'$multi_os_directory'/gcj-$(gcc_version)'
|
||||
ac_configure_args="$ac_configure_args --with-native-libdir=\$\(libdir\)/$multi_os_directory/gcj-`cat $srcdir/../gcc/BASE-VER`"
|
||||
--- libjava/configure.jj 2006-07-20 14:01:02.000000000 +0200
|
||||
+++ libjava/configure 2006-07-20 16:45:24.000000000 +0200
|
||||
@@ -14863,6 +14864,7 @@ case ${version_specific_libs} in
|
||||
multi_os_directory=`$CC -print-multi-os-directory`
|
||||
case $multi_os_directory in
|
||||
.) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
|
||||
+ ../lib*) toolexeclibdir='$(subst /lib/../lib,/lib,'$toolexecmainlibdir/$multi_os_directory')' ;;
|
||||
*) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
|
||||
esac
|
||||
;;
|
||||
@@ -14879,6 +14881,10 @@ case $multi_os_directory in
|
||||
dbexecdir='$(libdir)/gcj-$(gcc_version)' # Avoid /.
|
||||
ac_configure_args="$ac_configure_args --with-native-libdir=\$\(libdir\)/gcj-`cat $srcdir/../gcc/BASE-VER`"
|
||||
;;
|
||||
+ ../lib*)
|
||||
+ dbexecdir='$(subst /lib/../lib,/lib,$(libdir)/'$multi_os_directory'/gcj-$(gcc_version))'
|
||||
+ ac_configure_args="$ac_configure_args --with-native-libdir=\$\(libdir\)/$multi_os_directory/gcj-`cat $srcdir/../gcc/BASE-VER`"
|
||||
+ ;;
|
||||
*)
|
||||
dbexecdir='$(libdir)/'$multi_os_directory'/gcj-$(gcc_version)'
|
||||
ac_configure_args="$ac_configure_args --with-native-libdir=\$\(libdir\)/$multi_os_directory/gcj-`cat $srcdir/../gcc/BASE-VER`"
|
@ -1,25 +0,0 @@
|
||||
--- libjava/configure.ac.jj 2004-08-16 21:13:29.000000000 +0200
|
||||
+++ libjava/configure.ac 2004-08-21 11:44:59.020755542 +0200
|
||||
@@ -367,6 +367,10 @@ use_gtk_awt=""
|
||||
TOOLKIT=
|
||||
AC_SUBST(TOOLKIT)
|
||||
|
||||
+if test -n "${with_multisubdir}"; then
|
||||
+ peerlibs=no
|
||||
+fi
|
||||
+
|
||||
for peer in $peerlibs ; do
|
||||
case $peer in
|
||||
xlib)
|
||||
--- libjava/configure.jj 2004-08-16 21:22:14.000000000 +0200
|
||||
+++ libjava/configure 2004-08-21 11:45:16.260738060 +0200
|
||||
@@ -4118,6 +4118,9 @@ use_gtk_awt=""
|
||||
# The default toolkit to use is the first one specified.
|
||||
TOOLKIT=
|
||||
|
||||
+if test -n "${with_multisubdir}"; then
|
||||
+ peerlibs=no
|
||||
+fi
|
||||
|
||||
for peer in $peerlibs ; do
|
||||
case $peer in
|
@ -1,15 +0,0 @@
|
||||
2005-05-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* configure.host (slow_pthread_self): Set to empty unconditionally
|
||||
on Linux targets.
|
||||
|
||||
--- libjava/configure.host (.../gcc-4_0-branch) (revision 107266)
|
||||
+++ libjava/configure.host (.../redhat/gcc-4_0-branch) (revision 107414)
|
||||
@@ -174,6 +174,7 @@
|
||||
sh-linux* | sh[34]*-linux*)
|
||||
can_unwind_signal=yes
|
||||
libgcj_ld_symbolic='-Wl,-Bsymbolic'
|
||||
+ slow_pthread_self=
|
||||
if test x$slow_pthread_self = xyes \
|
||||
&& test x$cross_compiling != xyes; then
|
||||
cat > conftest.c <<EOF
|
242
gcc41-jdwp.patch
242
gcc41-jdwp.patch
@ -1,242 +0,0 @@
|
||||
2007-09-24 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
* include/jvm.h (struct natThread): Add new field 'frame'.
|
||||
* include/java-interp.h (_Jv_Frame): Use _Jv_ThreadStackPeek,
|
||||
_Jv_ThreadStackPop, and _Jv_ThreadStackPush instead of
|
||||
java.lang.Thread.frame.
|
||||
(~_Jv_Frame): Use _Jv_ThreadStackPop.
|
||||
* java/lang/natThread.cc (_Jv_ThreadStackPeek): New function.
|
||||
(_Jv_ThreadStackPush): New function.
|
||||
(_Jv_ThreadStackPop): New function.
|
||||
* java/lang/Thread.java (frame): Remove field to restore
|
||||
C++ ABI compatibility.
|
||||
* gnu/classpath/jdwp/natVMVirtualMachine.cc (getFrames): Use
|
||||
_Jv_ThreadStackPeek.
|
||||
(getFrame): Likewise.
|
||||
* gnu/classpath/jdwp/natVMFrame.cc (getFrameDepth): Likewise.
|
||||
* jvmti.cc (getLocalFrame): Likewise.
|
||||
(_Jv_JVMTI_GetFrameCount): Likewise.
|
||||
(_Jv_JVMTI_GetThreadState): Likewise.
|
||||
(_Jv_JVMTI_GetStackTrace): Likewise.
|
||||
* interpret.cc (_Jv_ReportJVMTIExceptionThrow): Likewise.
|
||||
* headers.txt (java/lang/Thread.h): Prepend declarations
|
||||
for _Jv_ThreadStackPeek, _Jv_ThreadStackPush, and _Jv_ThreadStackPop.
|
||||
Add as friend functions.
|
||||
* jni.cc (_Jv_JNIMethod::call): Push a frame onto the stack when
|
||||
calling a JNI method.
|
||||
|
||||
--- libjava/interpret.cc (revision 128603)
|
||||
+++ libjava/interpret.cc (working copy)
|
||||
@@ -1709,7 +1709,7 @@
|
||||
_Jv_ReportJVMTIExceptionThrow (jthrowable ex)
|
||||
{
|
||||
jthread thread = ::java::lang::Thread::currentThread ();
|
||||
- _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
|
||||
+ _Jv_Frame *frame = _Jv_ThreadStackPeek (thread);
|
||||
jmethodID throw_meth = frame->self->get_method ();
|
||||
jlocation throw_loc = -1;
|
||||
if (frame->frame_type == frame_interpreter)
|
||||
--- libjava/include/java-interp.h (revision 128603)
|
||||
+++ libjava/include/java-interp.h (working copy)
|
||||
@@ -391,14 +391,14 @@
|
||||
{
|
||||
self = s;
|
||||
frame_type = type;
|
||||
- next = (_Jv_Frame *) thr->frame;
|
||||
- thr->frame = (gnu::gcj::RawData *) this;
|
||||
+ next = _Jv_ThreadStackPeek (thr);
|
||||
+ _Jv_ThreadStackPush (thr, this);
|
||||
thread = thr;
|
||||
}
|
||||
|
||||
~_Jv_Frame ()
|
||||
{
|
||||
- thread->frame = (gnu::gcj::RawData *) next;
|
||||
+ _Jv_ThreadStackPop (thread);
|
||||
}
|
||||
|
||||
int depth ()
|
||||
--- libjava/include/jvm.h (revision 128603)
|
||||
+++ libjava/include/jvm.h (working copy)
|
||||
@@ -34,6 +34,8 @@
|
||||
|
||||
#include <sysdep/locks.h>
|
||||
|
||||
+class _Jv_Frame;
|
||||
+
|
||||
/* Macro for possible unused arguments. */
|
||||
#define MAYBE_UNUSED __attribute__((__unused__))
|
||||
|
||||
@@ -767,6 +769,12 @@
|
||||
|
||||
// Each thread has its own JNI object.
|
||||
_Jv_JNIEnv *jni_env;
|
||||
+
|
||||
+ // Describes the topmost frame in the thread's composite
|
||||
+ // (interp + JNI) stack. Added here to maintain C++ ABI
|
||||
+ // compatibility with previous versions. Newer versions
|
||||
+ // of gcj put this in java/lang/Thread.java.
|
||||
+ _Jv_Frame *frame;
|
||||
};
|
||||
|
||||
#endif /* __JAVA_JVM_H__ */
|
||||
--- libjava/jni.cc (revision 128603)
|
||||
+++ libjava/jni.cc (working copy)
|
||||
@@ -2343,6 +2343,10 @@
|
||||
// Copy over passed-in arguments.
|
||||
memcpy (&real_args[offset], args, _this->args_raw_size);
|
||||
|
||||
+ // Add a frame to the composite (interpreted + JNI) call stack
|
||||
+ java::lang::Thread *thread = java::lang::Thread::currentThread ();
|
||||
+ _Jv_NativeFrame nat_frame (_this, thread);
|
||||
+
|
||||
// The actual call to the JNI function.
|
||||
#if FFI_NATIVE_RAW_API
|
||||
ffi_raw_call (&_this->jni_cif, (void (*)()) _this->function,
|
||||
--- libjava/jvmti.cc (revision 128603)
|
||||
+++ libjava/jvmti.cc (working copy)
|
||||
@@ -228,7 +228,7 @@
|
||||
THREAD_CHECK_VALID (thread);
|
||||
THREAD_CHECK_IS_ALIVE (thread);
|
||||
|
||||
- _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
|
||||
+ _Jv_Frame *frame = _Jv_ThreadStackPeek (thread);
|
||||
|
||||
for (int i = 0; i < depth; i++)
|
||||
{
|
||||
@@ -516,7 +516,7 @@
|
||||
THREAD_CHECK_VALID (thread);
|
||||
THREAD_CHECK_IS_ALIVE (thread);
|
||||
|
||||
- _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
|
||||
+ _Jv_Frame *frame = _Jv_ThreadStackPeek (thread);
|
||||
(*frame_count) = frame->depth ();
|
||||
return JVMTI_ERROR_NONE;
|
||||
}
|
||||
@@ -543,7 +543,7 @@
|
||||
if (thread->isInterrupted ())
|
||||
state |= JVMTI_THREAD_STATE_INTERRUPTED;
|
||||
|
||||
- _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
|
||||
+ _Jv_Frame *frame = _Jv_ThreadStackPeek (thread);
|
||||
if (frame != NULL && frame->frame_type == frame_native)
|
||||
state |= JVMTI_THREAD_STATE_IN_NATIVE;
|
||||
|
||||
@@ -1273,7 +1273,7 @@
|
||||
ILLEGAL_ARGUMENT (start_depth >= (*frame_count));
|
||||
ILLEGAL_ARGUMENT (start_depth < (-(*frame_count)));
|
||||
|
||||
- _Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
|
||||
+ _Jv_Frame *frame = _Jv_ThreadStackPeek (thread);
|
||||
|
||||
// If start_depth is negative use this to determine at what depth to start
|
||||
// the trace by adding it to the length of the call stack. This allows the
|
||||
--- libjava/headers.txt (revision 128603)
|
||||
+++ libjava/headers.txt (working copy)
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
class java/lang/Thread
|
||||
prepend class _Jv_JNIEnv;
|
||||
+prepend class _Jv_Frame;
|
||||
prepend #define _JV_NOT_OWNER 1
|
||||
prepend #define _JV_INTERRUPTED 2
|
||||
prepend _Jv_JNIEnv * _Jv_GetCurrentJNIEnv ();
|
||||
@@ -17,6 +18,9 @@
|
||||
prepend jint _Jv_DetachCurrentThread ();
|
||||
prepend struct _Jv_Thread_t;
|
||||
prepend _Jv_Thread_t* _Jv_ThreadGetData (java::lang::Thread* thread);
|
||||
+prepend _Jv_Frame *_Jv_ThreadStackPeek (java::lang::Thread *thread);
|
||||
+prepend void _Jv_ThreadStackPush (java::lang::Thread *thread, _Jv_Frame *frame);
|
||||
+prepend void _Jv_ThreadStackPop (java::lang::Thread *thread);
|
||||
friend _Jv_JNIEnv * ::_Jv_GetCurrentJNIEnv ();
|
||||
friend void ::_Jv_SetCurrentJNIEnv (_Jv_JNIEnv *env);
|
||||
friend void ::_Jv_ThreadRun (java::lang::Thread* thread);
|
||||
@@ -24,6 +28,9 @@
|
||||
friend java::lang::Thread* ::_Jv_AttachCurrentThread (jstring name, java::lang::ThreadGroup* group);
|
||||
friend java::lang::Thread* ::_Jv_AttachCurrentThreadAsDaemon (jstring name, java::lang::ThreadGroup* group);
|
||||
friend jint (::_Jv_DetachCurrentThread) ();
|
||||
+friend _Jv_Frame *::_Jv_ThreadStackPeek (java::lang::Thread *thread);
|
||||
+friend void ::_Jv_ThreadStackPush (java::lang::Thread *thread, _Jv_Frame *frame);
|
||||
+friend void ::_Jv_ThreadStackPop (java::lang::Thread *thread);
|
||||
|
||||
class java/lang/String
|
||||
prepend jchar* _Jv_GetStringChars (jstring str);
|
||||
--- libjava/gnu/classpath/jdwp/natVMFrame.cc (revision 128603)
|
||||
+++ libjava/gnu/classpath/jdwp/natVMFrame.cc (working copy)
|
||||
@@ -181,7 +181,7 @@
|
||||
getFrameDepth (_Jv_Frame *frame)
|
||||
{
|
||||
jint depth = 0;
|
||||
- _Jv_Frame *top_frame = (_Jv_Frame *) frame->thread->frame;
|
||||
+ _Jv_Frame *top_frame = _Jv_ThreadStackPeek (frame->thread);
|
||||
jint num_frames = VMVirtualMachine::getFrameCount (frame->thread);
|
||||
|
||||
while (frame != top_frame)
|
||||
--- libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc (revision 128603)
|
||||
+++ libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc (working copy)
|
||||
@@ -553,7 +553,7 @@
|
||||
|
||||
frame_list = new ::java::util::ArrayList (num_frames);
|
||||
|
||||
- _Jv_Frame *vm_frame = reinterpret_cast<_Jv_Frame *> (thread->frame);
|
||||
+ _Jv_Frame *vm_frame = _Jv_ThreadStackPeek (thread);
|
||||
|
||||
// Take start frames off the top of the stack
|
||||
while (vm_frame != NULL && start > 0)
|
||||
@@ -584,7 +584,7 @@
|
||||
{
|
||||
using namespace gnu::classpath::jdwp::exception;
|
||||
|
||||
- _Jv_Frame *vm_frame = (_Jv_Frame *) thread->frame;
|
||||
+ _Jv_Frame *vm_frame = _Jv_ThreadStackPeek (thread);
|
||||
jint depth = 0;
|
||||
_Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (frameID);
|
||||
|
||||
--- libjava/java/lang/Thread.java (revision 128603)
|
||||
+++ libjava/java/lang/Thread.java (working copy)
|
||||
@@ -186,9 +186,6 @@
|
||||
// This describes the top-most interpreter frame for this thread.
|
||||
RawData interp_frame;
|
||||
|
||||
- // This describes the top most frame in the composite (interp + JNI) stack
|
||||
- RawData frame;
|
||||
-
|
||||
// Current state.
|
||||
volatile int state;
|
||||
|
||||
--- libjava/java/lang/natThread.cc (revision 128603)
|
||||
+++ libjava/java/lang/natThread.cc (working copy)
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <gcj/cni.h>
|
||||
#include <jvm.h>
|
||||
#include <java-threads.h>
|
||||
+#include <java-interp.h>
|
||||
|
||||
#include <gnu/gcj/RawDataManaged.h>
|
||||
#include <java/lang/Thread.h>
|
||||
@@ -525,3 +526,25 @@
|
||||
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+_Jv_Frame *
|
||||
+_Jv_ThreadStackPeek (java::lang::Thread *thread)
|
||||
+{
|
||||
+ struct natThread *nt = (natThread *) thread->data;
|
||||
+ return nt->frame;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+_Jv_ThreadStackPush (java::lang::Thread *thread, _Jv_Frame *frame)
|
||||
+{
|
||||
+ struct natThread *nt = (natThread *) thread->data;
|
||||
+ nt->frame = frame;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+_Jv_ThreadStackPop (java::lang::Thread *thread)
|
||||
+{
|
||||
+ struct natThread *nt = (natThread *) thread->data;
|
||||
+ _Jv_Frame *next = nt->frame->next;
|
||||
+ nt->frame = next;
|
||||
+}
|
@ -1,145 +0,0 @@
|
||||
2007-03-29 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* jvgenmain.c (main): Change main to use class$, not class$$.
|
||||
(do_mangle_classname): Likewise.
|
||||
* class.c (hide): New function.
|
||||
(add_field): Hide everything that shouldn't be visible outside a
|
||||
DSO.
|
||||
(build_static_class_ref): Likewise.
|
||||
(build_classdollar_field): Likewise.
|
||||
(make_class_data): Likewise.
|
||||
(layout_class_method): Likewise.
|
||||
* expr.c (special_method_p): New function.
|
||||
|
||||
--- gcc/java/class.c (revision 122746)
|
||||
+++ gcc/java/class.c (working copy)
|
||||
@@ -689,6 +688,13 @@
|
||||
return fntype;
|
||||
}
|
||||
|
||||
+static void
|
||||
+hide (tree decl)
|
||||
+{
|
||||
+ DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
|
||||
+ DECL_VISIBILITY_SPECIFIED (decl) = 1;
|
||||
+}
|
||||
+
|
||||
tree
|
||||
add_method_1 (tree this_class, int access_flags, tree name, tree function_type)
|
||||
{
|
||||
@@ -799,6 +805,10 @@
|
||||
/* Always make field externally visible. This is required so
|
||||
that native methods can always access the field. */
|
||||
TREE_PUBLIC (field) = 1;
|
||||
+ /* Hide everything that shouldn't be visible outside a DSO. */
|
||||
+ if (flag_indirect_classes
|
||||
+ || (FIELD_PRIVATE (field)))
|
||||
+ hide (field);
|
||||
/* Considered external unless we are compiling it into this
|
||||
object file. */
|
||||
DECL_EXTERNAL (field) = (is_compiled_class (class) != 2);
|
||||
@@ -956,7 +966,11 @@
|
||||
decl = build_decl (VAR_DECL, decl_name, class_type_node);
|
||||
TREE_STATIC (decl) = 1;
|
||||
if (! flag_indirect_classes)
|
||||
- TREE_PUBLIC (decl) = 1;
|
||||
+ {
|
||||
+ TREE_PUBLIC (decl) = 1;
|
||||
+ if (CLASS_PRIVATE (TYPE_NAME (type)))
|
||||
+ hide (decl);
|
||||
+ }
|
||||
DECL_IGNORED_P (decl) = 1;
|
||||
DECL_ARTIFICIAL (decl) = 1;
|
||||
if (is_compiled_class (type) == 1)
|
||||
@@ -995,6 +1009,7 @@
|
||||
TREE_CONSTANT (decl) = 1;
|
||||
TREE_READONLY (decl) = 1;
|
||||
TREE_PUBLIC (decl) = 1;
|
||||
+ hide (decl);
|
||||
DECL_IGNORED_P (decl) = 1;
|
||||
DECL_ARTIFICIAL (decl) = 1;
|
||||
MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (decl);
|
||||
@@ -1640,6 +1655,10 @@
|
||||
|
||||
TREE_PUBLIC (dtable_decl) = 1;
|
||||
DECL_INITIAL (dtable_decl) = dtable;
|
||||
+ /* The only dispatch table exported from a DSO is the dispatch
|
||||
+ table for java.lang.Class. */
|
||||
+ if (DECL_NAME (type_decl) != id_class)
|
||||
+ hide (dtable_decl);
|
||||
if (! flag_indirect_classes)
|
||||
rest_of_decl_compilation (dtable_decl, 1, 0);
|
||||
/* Maybe we're compiling Class as the first class. If so, set
|
||||
@@ -2509,6 +2528,12 @@
|
||||
|
||||
TREE_PUBLIC (method_decl) = 1;
|
||||
|
||||
+ if (flag_indirect_classes
|
||||
+ || (METHOD_PRIVATE (method_decl) && METHOD_STATIC (method_decl)
|
||||
+ && ! METHOD_NATIVE (method_decl)
|
||||
+ && ! special_method_p (method_decl)))
|
||||
+ hide (method_decl);
|
||||
+
|
||||
/* Considered external unless it is being compiled into this object
|
||||
file, or it was already flagged as external. */
|
||||
if (!DECL_EXTERNAL (method_decl))
|
||||
--- gcc/java/jvgenmain.c (revision 122746)
|
||||
+++ gcc/java/jvgenmain.c (working copy)
|
||||
@@ -143,8 +143,8 @@
|
||||
fprintf (stream, " JvRunMainName (\"%s\", argc, argv);\n", classname);
|
||||
else
|
||||
{
|
||||
- fprintf (stream, " extern void *%s;\n", mangled_classname);
|
||||
- fprintf (stream, " JvRunMain (%s, argc, argv);\n", mangled_classname);
|
||||
+ fprintf (stream, " extern char %s;\n", mangled_classname);
|
||||
+ fprintf (stream, " JvRunMain (&%s, argc, argv);\n", mangled_classname);
|
||||
}
|
||||
fprintf (stream, "}\n");
|
||||
if (stream != stdout && fclose (stream) != 0)
|
||||
@@ -176,7 +176,7 @@
|
||||
count++;
|
||||
}
|
||||
append_gpp_mangled_name (&ptr [-count], count);
|
||||
- obstack_grow (mangle_obstack, "7class$$E", strlen ("7class$$E"));
|
||||
+ obstack_grow (mangle_obstack, "6class$E", strlen ("6class$E"));
|
||||
obstack_1grow (mangle_obstack, '\0');
|
||||
return obstack_finish (mangle_obstack);
|
||||
}
|
||||
--- gcc/java/expr.c (revision 122746)
|
||||
+++ gcc/java/expr.c (working copy)
|
||||
@@ -2121,6 +2121,25 @@
|
||||
|
||||
{NULL, NULL, NULL, NULL, 0, NULL}};
|
||||
|
||||
+/* True if this method is special, i.e. it's a private method that
|
||||
+ should be exported fro a DSO. */
|
||||
+
|
||||
+bool
|
||||
+special_method_p (tree candidate_method)
|
||||
+{
|
||||
+ tree context = DECL_NAME (TYPE_NAME (DECL_CONTEXT (candidate_method)));
|
||||
+ tree method = DECL_NAME (candidate_method);
|
||||
+ rewrite_rule *p;
|
||||
+
|
||||
+ for (p = rules; p->classname; p++)
|
||||
+ {
|
||||
+ if (get_identifier (p->classname) == context
|
||||
+ && get_identifier (p->method) == method)
|
||||
+ return true;
|
||||
+ }
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
/* Scan the rules list for replacements for *METHOD_P and replace the
|
||||
args accordingly. If the rewrite results in an access to a private
|
||||
method, update SPECIAL.*/
|
||||
--- gcc/java/java-tree.h (revision 122746)
|
||||
+++ gcc/java/java-tree.h (working copy)
|
||||
@@ -1171,6 +1171,7 @@
|
||||
extern void initialize_builtins (void);
|
||||
|
||||
extern tree lookup_name (tree);
|
||||
+extern bool special_method_p (tree);
|
||||
extern void maybe_rewrite_invocation (tree *, tree *, tree *, tree *);
|
||||
extern tree build_known_method_ref (tree, tree, tree, tree, tree, tree);
|
||||
extern tree build_class_init (tree, tree);
|
@ -1,86 +0,0 @@
|
||||
2005-11-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0,
|
||||
read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx
|
||||
instead of doing an extran indirection from frame_pointer_rtx.
|
||||
|
||||
* gcc.dg/20051128-1.c: New test.
|
||||
|
||||
--- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100
|
||||
+++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100
|
||||
@@ -13166,17 +13166,22 @@ rs6000_return_addr (int count, rtx frame
|
||||
don't try to be too clever here. */
|
||||
if (count != 0 || (DEFAULT_ABI != ABI_AIX && flag_pic))
|
||||
{
|
||||
+ rtx x;
|
||||
cfun->machine->ra_needs_full_frame = 1;
|
||||
|
||||
- return
|
||||
- gen_rtx_MEM
|
||||
- (Pmode,
|
||||
- memory_address
|
||||
- (Pmode,
|
||||
- plus_constant (copy_to_reg
|
||||
- (gen_rtx_MEM (Pmode,
|
||||
- memory_address (Pmode, frame))),
|
||||
- RETURN_ADDRESS_OFFSET)));
|
||||
+ if (count == 0)
|
||||
+ {
|
||||
+ gcc_assert (frame == frame_pointer_rtx);
|
||||
+ x = arg_pointer_rtx;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ x = memory_address (Pmode, frame);
|
||||
+ x = copy_to_reg (gen_rtx_MEM (Pmode, x));
|
||||
+ }
|
||||
+
|
||||
+ x = plus_constant (x, RETURN_ADDRESS_OFFSET);
|
||||
+ return gen_rtx_MEM (Pmode, memory_address (Pmode, x));
|
||||
}
|
||||
|
||||
cfun->machine->ra_need_lr = 1;
|
||||
--- gcc/testsuite/gcc.dg/20051128-1.c.jj 2005-10-10 11:21:41.096999000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/20051128-1.c 2005-11-28 12:30:57.000000000 +0100
|
||||
@@ -0,0 +1,41 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2 -fpic" } */
|
||||
+
|
||||
+extern void exit (int);
|
||||
+extern void abort (void);
|
||||
+
|
||||
+int b;
|
||||
+
|
||||
+struct A
|
||||
+{
|
||||
+ void *pad[147];
|
||||
+ void *ra, *h;
|
||||
+ long o;
|
||||
+};
|
||||
+
|
||||
+void
|
||||
+__attribute__((noinline))
|
||||
+foo (struct A *a, void *x)
|
||||
+{
|
||||
+ __builtin_memset (a, 0, sizeof (a));
|
||||
+ if (!b)
|
||||
+ exit (0);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+__attribute__((noinline))
|
||||
+bar (void)
|
||||
+{
|
||||
+ struct A a;
|
||||
+
|
||||
+ __builtin_unwind_init ();
|
||||
+ foo (&a, __builtin_return_address (0));
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ bar ();
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
@ -1,86 +0,0 @@
|
||||
2007-08-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_elf_end_indicate_exec_stack): New.
|
||||
* config/rs6000/linux64.h (TARGET_ASM_FILE_END): Use
|
||||
rs6000_elf_end_indicate_exec_stack.
|
||||
* config/ia64/ia64.c (ia64_linux_file_end): new.
|
||||
* config/ia64/linux.h (TARGET_ASM_FILE_END): Use ia64_linux_file_end.
|
||||
|
||||
--- gcc/config/rs6000/rs6000.c.jj 2007-06-27 12:10:19.000000000 +0200
|
||||
+++ gcc/config/rs6000/rs6000.c 2007-08-27 19:27:24.000000000 +0200
|
||||
@@ -638,6 +638,7 @@ static void rs6000_file_start (void);
|
||||
static unsigned int rs6000_elf_section_type_flags (tree, const char *, int);
|
||||
static void rs6000_elf_asm_out_constructor (rtx, int);
|
||||
static void rs6000_elf_asm_out_destructor (rtx, int);
|
||||
+static void rs6000_elf_end_indicate_exec_stack (void) ATTRIBUTE_UNUSED;
|
||||
static void rs6000_elf_select_section (tree, int, unsigned HOST_WIDE_INT);
|
||||
static void rs6000_elf_unique_section (tree, int);
|
||||
static void rs6000_elf_select_rtx_section (enum machine_mode, rtx,
|
||||
@@ -18896,6 +18897,20 @@ rs6000_elf_declare_function_name (FILE *
|
||||
}
|
||||
ASM_OUTPUT_LABEL (file, name);
|
||||
}
|
||||
+
|
||||
+static void
|
||||
+rs6000_elf_end_indicate_exec_stack (void)
|
||||
+{
|
||||
+ if (TARGET_32BIT)
|
||||
+ file_end_indicate_exec_stack ();
|
||||
+ else
|
||||
+ {
|
||||
+ int saved_trampolines_created = trampolines_created;
|
||||
+ trampolines_created = 0;
|
||||
+ file_end_indicate_exec_stack ();
|
||||
+ trampolines_created = saved_trampolines_created;
|
||||
+ }
|
||||
+}
|
||||
#endif
|
||||
|
||||
#if TARGET_XCOFF
|
||||
--- gcc/config/rs6000/linux64.h.jj 2006-11-08 17:53:15.000000000 +0100
|
||||
+++ gcc/config/rs6000/linux64.h 2007-08-27 19:25:09.000000000 +0200
|
||||
@@ -549,7 +549,7 @@ while (0)
|
||||
#undef DRAFT_V4_STRUCT_RET
|
||||
#define DRAFT_V4_STRUCT_RET (!TARGET_64BIT)
|
||||
|
||||
-#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
+#define TARGET_ASM_FILE_END rs6000_elf_end_indicate_exec_stack
|
||||
|
||||
#define TARGET_POSIX_IO
|
||||
|
||||
--- gcc/config/ia64/linux.h.jj 2006-07-14 18:00:58.000000000 +0200
|
||||
+++ gcc/config/ia64/linux.h 2007-08-27 19:21:12.000000000 +0200
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
#define TARGET_VERSION fprintf (stderr, " (IA-64) Linux");
|
||||
|
||||
-#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
+#define TARGET_ASM_FILE_END ia64_linux_file_end
|
||||
|
||||
/* This is for -profile to use -lc_p instead of -lc. */
|
||||
#undef CC1_SPEC
|
||||
--- gcc/config/ia64/ia64.c.jj 2007-01-05 23:54:11.000000000 +0100
|
||||
+++ gcc/config/ia64/ia64.c 2007-08-27 19:21:43.000000000 +0200
|
||||
@@ -246,6 +246,8 @@ static void ia64_hpux_add_extern_decl (t
|
||||
ATTRIBUTE_UNUSED;
|
||||
static void ia64_hpux_file_end (void)
|
||||
ATTRIBUTE_UNUSED;
|
||||
+static void ia64_linux_file_end (void)
|
||||
+ ATTRIBUTE_UNUSED;
|
||||
static void ia64_init_libfuncs (void)
|
||||
ATTRIBUTE_UNUSED;
|
||||
static void ia64_hpux_init_libfuncs (void)
|
||||
@@ -9096,4 +9098,13 @@ ia64_invalid_binary_op (int op ATTRIBUTE
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static void
|
||||
+ia64_linux_file_end (void)
|
||||
+{
|
||||
+ int saved_trampolines_created = trampolines_created;
|
||||
+ trampolines_created = 0;
|
||||
+ file_end_indicate_exec_stack ();
|
||||
+ trampolines_created = saved_trampolines_created;
|
||||
+}
|
||||
+
|
||||
#include "gt-ia64.h"
|
@ -1,22 +0,0 @@
|
||||
--- gcc/config/rs6000/t-linux64 2003-06-03 05:11:45.000000000 -0400
|
||||
+++ gcc/config/rs6000/t-linux64 2003-06-11 17:07:16.000000000 -0400
|
||||
@@ -4,13 +4,13 @@ LIB2FUNCS_EXTRA = tramp.S $(srcdir)/conf
|
||||
# Modify the shared lib version file
|
||||
SHLIB_MKMAP_OPTS = -v dotsyms=1
|
||||
|
||||
-MULTILIB_OPTIONS = m64/m32 msoft-float
|
||||
-MULTILIB_DIRNAMES = 64 32 nof
|
||||
+MULTILIB_OPTIONS = m64/m32
|
||||
+MULTILIB_DIRNAMES = 64 32
|
||||
MULTILIB_EXTRA_OPTS = fPIC mstrict-align
|
||||
-MULTILIB_EXCEPTIONS = m64/msoft-float
|
||||
-MULTILIB_EXCLUSIONS = m64/!m32/msoft-float
|
||||
-MULTILIB_OSDIRNAMES = ../lib64 ../lib nof
|
||||
-MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT)
|
||||
+MULTILIB_EXCEPTIONS =
|
||||
+MULTILIB_EXCLUSIONS =
|
||||
+MULTILIB_OSDIRNAMES = ../lib64 ../lib
|
||||
+MULTILIB_MATCHES =
|
||||
|
||||
TARGET_LIBGCC2_CFLAGS = -mno-minimal-toc -fPIC
|
||||
|
@ -1,62 +0,0 @@
|
||||
2006-04-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/20297
|
||||
* gcc.dg/visibility-11.c: Moved to...
|
||||
* gcc.target/i386/visibility-1.c: ... here. Only run on
|
||||
32-bit linux and bsds.
|
||||
|
||||
--- gcc/testsuite/gcc.dg/visibility-11.c.jj 2006-03-24 17:07:15.000000000 +0100
|
||||
+++ gcc/testsuite/gcc.dg/visibility-11.c 2006-03-28 14:59:27.000000000 +0200
|
||||
@@ -1,24 +0,0 @@
|
||||
-/* PR middle-end/20297 */
|
||||
-/* The memcpy FUNCTION_DECL built in the middle-end for block moves got
|
||||
- hidden visibility from the first push, so the call didn't use the PLT. */
|
||||
-
|
||||
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
||||
-/* { dg-require-visibility "" } */
|
||||
-/* { dg-options "-Os -fpic" }
|
||||
-/* { dg-final { scan-assembler "memcpy@PLT" } } */
|
||||
-
|
||||
-#pragma GCC visibility push(hidden)
|
||||
-#pragma GCC visibility push(default)
|
||||
-extern void* memcpy (void *, const void *, __SIZE_TYPE__);
|
||||
-#pragma GCC visibility pop
|
||||
-
|
||||
-struct a { int a[1024]; };
|
||||
-
|
||||
-extern void *bar (struct a *, struct a *, int);
|
||||
-
|
||||
-void *
|
||||
-foo (struct a *a, struct a *b, int c)
|
||||
-{
|
||||
- struct a cc = *b;
|
||||
- return bar (a, &cc, 4 * c);
|
||||
-}
|
||||
--- gcc/testsuite/gcc.target/i386/visibility-1.c.jj 2006-03-28 14:30:17.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.target/i386/visibility-1.c 2006-03-28 14:58:48.000000000 +0200
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* PR middle-end/20297 */
|
||||
+/* The memcpy FUNCTION_DECL built in the middle-end for block moves got
|
||||
+ hidden visibility from the first push, so the call didn't use the PLT. */
|
||||
+
|
||||
+/* { dg-do compile { target { { *-*-linux* *-*-*bsd* *-*-solaris2* *-*-elf* *-*-gnu* *-*-sysv[45]* } && ilp32 } } } */
|
||||
+/* { dg-require-effective-target fpic } */
|
||||
+/* { dg-require-visibility "" } */
|
||||
+/* { dg-options "-Os -fpic" } */
|
||||
+/* { dg-final { scan-assembler "memcpy@PLT" } } */
|
||||
+
|
||||
+#pragma GCC visibility push(hidden)
|
||||
+#pragma GCC visibility push(default)
|
||||
+extern void* memcpy (void *, const void *, __SIZE_TYPE__);
|
||||
+#pragma GCC visibility pop
|
||||
+
|
||||
+struct a { int a[1024]; };
|
||||
+
|
||||
+extern void *bar (struct a *, struct a *, int);
|
||||
+
|
||||
+void *
|
||||
+foo (struct a *a, struct a *b, int c)
|
||||
+{
|
||||
+ struct a cc = *b;
|
||||
+ return bar (a, &cc, 4 * c);
|
||||
+}
|
@ -1,59 +0,0 @@
|
||||
2006-11-24 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/20880
|
||||
* parse.c (parse_interface): Error if procedure name is that of
|
||||
encompassing scope.
|
||||
|
||||
* gfortran.dg/interface_3a.f90: New test.
|
||||
|
||||
--- gcc/fortran/parse.c (revision 119172)
|
||||
+++ gcc/fortran/parse.c (revision 119173)
|
||||
@@ -1694,6 +1694,7 @@ parse_interface (void)
|
||||
gfc_interface_info save;
|
||||
gfc_state_data s1, s2;
|
||||
gfc_statement st;
|
||||
+ locus proc_locus;
|
||||
|
||||
accept_statement (ST_INTERFACE);
|
||||
|
||||
@@ -1781,6 +1782,7 @@ loop:
|
||||
accept_statement (st);
|
||||
prog_unit = gfc_new_block;
|
||||
prog_unit->formal_ns = gfc_current_ns;
|
||||
+ proc_locus = gfc_current_locus;
|
||||
|
||||
decl:
|
||||
/* Read data declaration statements. */
|
||||
@@ -1796,8 +1798,15 @@ decl:
|
||||
|
||||
current_interface = save;
|
||||
gfc_add_interface (prog_unit);
|
||||
-
|
||||
pop_state ();
|
||||
+
|
||||
+ if (current_interface.ns
|
||||
+ && current_interface.ns->proc_name
|
||||
+ && strcmp (current_interface.ns->proc_name->name,
|
||||
+ prog_unit->name) == 0)
|
||||
+ gfc_error ("INTERFACE procedure '%s' at %L has the same name as the "
|
||||
+ "enclosing procedure", prog_unit->name, &proc_locus);
|
||||
+
|
||||
goto loop;
|
||||
|
||||
done:
|
||||
--- gcc/testsuite/gfortran.dg/interface_3a.f90
|
||||
+++ gcc/testsuite/gfortran.dg/interface_3a.f90
|
||||
@@ -0,0 +1,13 @@
|
||||
+! { dg-do compile }
|
||||
+! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
|
||||
+!
|
||||
+! This was found whilst investigating => segfault
|
||||
+subroutine thy_sub (a)
|
||||
+ interface
|
||||
+ subroutine thy_sub (a) ! { dg-error "enclosing procedure" }
|
||||
+ real a
|
||||
+ end subroutine
|
||||
+ end interface
|
||||
+ real a
|
||||
+ print *, a
|
||||
+end subroutine
|
@ -1,92 +0,0 @@
|
||||
2006-07-06 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR c/27898
|
||||
* c-typeck.c (tagged_types_tu_compatible_p): Enable exact
|
||||
matches between anonymous union fields.
|
||||
|
||||
2006-08-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/27898
|
||||
* gcc.dg/pr27898.c: New test.
|
||||
|
||||
--- gcc/testsuite/gcc.dg/pr27898.c.jj 2006-08-18 09:19:33.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/pr27898.c 2006-08-18 09:19:27.000000000 +0200
|
||||
@@ -0,0 +1,8 @@
|
||||
+/* PR c/27898 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "--combine" } */
|
||||
+/* { dg-additional-sources "pr27898.c" } */
|
||||
+
|
||||
+union u { struct { int i; }; };
|
||||
+
|
||||
+extern int foo (union u *);
|
||||
--- gcc/c-typeck.c.jj 2006-08-17 09:55:11.000000000 +0200
|
||||
+++ gcc/c-typeck.c 2006-08-18 09:14:15.000000000 +0200
|
||||
@@ -1072,11 +1072,12 @@ tagged_types_tu_compatible_p (tree t1, t
|
||||
{
|
||||
int result;
|
||||
|
||||
-
|
||||
- if (DECL_NAME (s1) == NULL
|
||||
- || DECL_NAME (s1) != DECL_NAME (s2))
|
||||
+ if (DECL_NAME (s1) != DECL_NAME (s2))
|
||||
break;
|
||||
result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2));
|
||||
+
|
||||
+ if (result != 1 && !DECL_NAME (s1))
|
||||
+ break;
|
||||
if (result == 0)
|
||||
{
|
||||
tu->val = 0;
|
||||
@@ -1103,28 +1104,31 @@ tagged_types_tu_compatible_p (tree t1, t
|
||||
{
|
||||
bool ok = false;
|
||||
|
||||
- if (DECL_NAME (s1) != NULL)
|
||||
- for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
|
||||
- if (DECL_NAME (s1) == DECL_NAME (s2))
|
||||
- {
|
||||
- int result;
|
||||
- result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2));
|
||||
- if (result == 0)
|
||||
- {
|
||||
- tu->val = 0;
|
||||
- return 0;
|
||||
- }
|
||||
- if (result == 2)
|
||||
- needs_warning = true;
|
||||
-
|
||||
- if (TREE_CODE (s1) == FIELD_DECL
|
||||
- && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
|
||||
- DECL_FIELD_BIT_OFFSET (s2)) != 1)
|
||||
- break;
|
||||
+ for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
|
||||
+ if (DECL_NAME (s1) == DECL_NAME (s2))
|
||||
+ {
|
||||
+ int result;
|
||||
+
|
||||
+ result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2));
|
||||
|
||||
- ok = true;
|
||||
+ if (result != 1 && !DECL_NAME (s1))
|
||||
+ continue;
|
||||
+ if (result == 0)
|
||||
+ {
|
||||
+ tu->val = 0;
|
||||
+ return 0;
|
||||
+ }
|
||||
+ if (result == 2)
|
||||
+ needs_warning = true;
|
||||
+
|
||||
+ if (TREE_CODE (s1) == FIELD_DECL
|
||||
+ && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
|
||||
+ DECL_FIELD_BIT_OFFSET (s2)) != 1)
|
||||
break;
|
||||
- }
|
||||
+
|
||||
+ ok = true;
|
||||
+ break;
|
||||
+ }
|
||||
if (!ok)
|
||||
{
|
||||
tu->val = 0;
|
@ -1,155 +0,0 @@
|
||||
2007-06-26 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* defaults.h (TARGET_INDEX_OPERAND_FIRST): Define.
|
||||
* config/rs6000/rs6000.h (TARGET_INDEX_OPERAND_FIRST): Define.
|
||||
* optabs.c (emit_cmp_and_jump_insns): Don't call swap_operand
|
||||
twice.
|
||||
* rtlanal.c (commutative_operand_precedence): Only prefer
|
||||
REG_POINTER and MEM_POINTER operands over REG and MEM operands
|
||||
if TARGET_INDEX_OPERAND_FIRST.
|
||||
(swap_commutative_operands_p): Only sort on REGNO if
|
||||
TARGET_INDEX_OPERAND_FIRST.
|
||||
* tree-ssa-address.c (gen_addr_rtx): Only use simplify_gen_binary
|
||||
instead of gen_rtx_PLUS if TARGET_INDEX_OPERAND_FIRST.
|
||||
|
||||
2007-06-20 Peter Bergner <bergner@vnet.ibm.com>
|
||||
|
||||
PR middle-end/28690
|
||||
* optabs.c (emit_cmp_and_jump_insns): Allow EQ compares.
|
||||
* rtlanal.c (commutative_operand_precedence): Prefer both REG_POINTER
|
||||
and MEM_POINTER operands over REG and MEM operands.
|
||||
(swap_commutative_operands_p): In case of a tie, sort on REGNO.
|
||||
* tree-ssa-address.c (gen_addr_rtx): Use simplify_gen_binary
|
||||
instead of gen_rtx_PLUS.
|
||||
|
||||
--- gcc/defaults.h.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/defaults.h 2007-06-26 00:32:16.000000000 +0200
|
||||
@@ -785,6 +785,10 @@ Software Foundation, 51 Franklin Street,
|
||||
#define TARGET_C99_FUNCTIONS 0
|
||||
#endif
|
||||
|
||||
+#ifndef TARGET_INDEX_OPERAND_FIRST
|
||||
+#define TARGET_INDEX_OPERAND_FIRST 0
|
||||
+#endif
|
||||
+
|
||||
/* Indicate that CLZ and CTZ are undefined at zero. */
|
||||
#ifndef CLZ_DEFINED_VALUE_AT_ZERO
|
||||
#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) 0
|
||||
--- gcc/config/rs6000/rs6000.h.jj 2007-02-20 22:39:00.000000000 +0100
|
||||
+++ gcc/config/rs6000/rs6000.h 2007-06-26 00:33:32.000000000 +0200
|
||||
@@ -57,6 +57,8 @@
|
||||
#define PPC405_ERRATUM77 0
|
||||
#endif
|
||||
|
||||
+#define TARGET_INDEX_OPERAND_FIRST (rs6000_cpu == PROCESSOR_POWER6)
|
||||
+
|
||||
/* Common ASM definitions used by ASM_SPEC among the various targets
|
||||
for handling -mcpu=xxx switches. */
|
||||
#define ASM_CPU_SPEC \
|
||||
--- gcc/optabs.c.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/optabs.c 2007-06-26 00:30:27.000000000 +0200
|
||||
@@ -3673,12 +3673,16 @@ emit_cmp_and_jump_insns (rtx x, rtx y, e
|
||||
/* Swap operands and condition to ensure canonical RTL. */
|
||||
if (swap_commutative_operands_p (x, y))
|
||||
{
|
||||
- /* If we're not emitting a branch, this means some caller
|
||||
- is out of sync. */
|
||||
- gcc_assert (label);
|
||||
+ enum rtx_code swapped_comparison = swap_condition (comparison);
|
||||
+
|
||||
+ /* If we're not emitting a branch, callers are required to pass
|
||||
+ operands in an order conforming to canonical RTL. We relax this
|
||||
+ for commutative comparsions so callers using EQ don't need to do
|
||||
+ swapping by hand. */
|
||||
+ gcc_assert (label || swapped_comparison == comparison);
|
||||
|
||||
op0 = y, op1 = x;
|
||||
- comparison = swap_condition (comparison);
|
||||
+ comparison = swapped_comparison;
|
||||
}
|
||||
|
||||
#ifdef HAVE_cc0
|
||||
--- gcc/rtlanal.c.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/rtlanal.c 2007-06-26 00:28:56.000000000 +0200
|
||||
@@ -2890,9 +2890,9 @@ commutative_operand_precedence (rtx op)
|
||||
|
||||
/* Constants always come the second operand. Prefer "nice" constants. */
|
||||
if (code == CONST_INT)
|
||||
- return -7;
|
||||
+ return -10;
|
||||
if (code == CONST_DOUBLE)
|
||||
- return -6;
|
||||
+ return -9;
|
||||
op = avoid_constant_pool_reference (op);
|
||||
code = GET_CODE (op);
|
||||
|
||||
@@ -2900,26 +2900,31 @@ commutative_operand_precedence (rtx op)
|
||||
{
|
||||
case RTX_CONST_OBJ:
|
||||
if (code == CONST_INT)
|
||||
- return -5;
|
||||
+ return -8;
|
||||
if (code == CONST_DOUBLE)
|
||||
- return -4;
|
||||
- return -3;
|
||||
+ return -7;
|
||||
+ return -6;
|
||||
|
||||
case RTX_EXTRA:
|
||||
/* SUBREGs of objects should come second. */
|
||||
if (code == SUBREG && OBJECT_P (SUBREG_REG (op)))
|
||||
- return -2;
|
||||
+ return -5;
|
||||
|
||||
if (!CONSTANT_P (op))
|
||||
return 0;
|
||||
else
|
||||
/* As for RTX_CONST_OBJ. */
|
||||
- return -3;
|
||||
+ return -6;
|
||||
|
||||
case RTX_OBJ:
|
||||
/* Complex expressions should be the first, so decrease priority
|
||||
of objects. */
|
||||
- return -1;
|
||||
+ if (!TARGET_INDEX_OPERAND_FIRST)
|
||||
+ return -1;
|
||||
+ if (REG_P (op))
|
||||
+ return (REG_POINTER (op)) ? -1 : -3;
|
||||
+ else
|
||||
+ return (MEM_P (op) && MEM_POINTER (op)) ? -2 : -4;
|
||||
|
||||
case RTX_COMM_ARITH:
|
||||
/* Prefer operands that are themselves commutative to be first.
|
||||
@@ -2949,8 +2954,16 @@ commutative_operand_precedence (rtx op)
|
||||
int
|
||||
swap_commutative_operands_p (rtx x, rtx y)
|
||||
{
|
||||
- return (commutative_operand_precedence (x)
|
||||
- < commutative_operand_precedence (y));
|
||||
+ int result = (commutative_operand_precedence (x)
|
||||
+ - commutative_operand_precedence (y));
|
||||
+ if (!TARGET_INDEX_OPERAND_FIRST || result)
|
||||
+ return result < 0;
|
||||
+
|
||||
+ /* Group together equal REGs to do more simplification. */
|
||||
+ if (REG_P (x) && REG_P (y))
|
||||
+ return REGNO (x) > REGNO (y);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
/* Return 1 if X is an autoincrement side effect and the register is
|
||||
--- gcc/tree-ssa-address.c.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/tree-ssa-address.c 2007-06-26 00:29:49.000000000 +0200
|
||||
@@ -124,7 +124,9 @@ gen_addr_rtx (rtx symbol, rtx base, rtx
|
||||
if (base)
|
||||
{
|
||||
if (*addr)
|
||||
- *addr = gen_rtx_PLUS (Pmode, *addr, base);
|
||||
+ *addr = (TARGET_INDEX_OPERAND_FIRST
|
||||
+ ? simplify_gen_binary (PLUS, Pmode, base, *addr)
|
||||
+ : gen_rtx_PLUS (Pmode, *addr, base));
|
||||
else
|
||||
*addr = base;
|
||||
}
|
@ -1,230 +0,0 @@
|
||||
2007-09-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/28755
|
||||
* expr.c (expand_constructor): New function.
|
||||
(expand_expr_real_1) <case CONSTRUCTOR>: Call it.
|
||||
(expand_expr_real_1) <case ARRAY_REF>: Call it if VALUE is
|
||||
CONSTRUCTOR.
|
||||
|
||||
* gcc.dg/pr28755.c: New test.
|
||||
|
||||
--- gcc/expr.c (revision 128684)
|
||||
+++ gcc/expr.c (revision 128685)
|
||||
@@ -6435,6 +6435,89 @@ expand_expr_addr_expr (tree exp, rtx tar
|
||||
return result;
|
||||
}
|
||||
|
||||
+/* Generate code for computing CONSTRUCTOR EXP.
|
||||
+ An rtx for the computed value is returned. If AVOID_TEMP_MEM
|
||||
+ is TRUE, instead of creating a temporary variable in memory
|
||||
+ NULL is returned and the caller needs to handle it differently. */
|
||||
+
|
||||
+static rtx
|
||||
+expand_constructor (tree exp, rtx target, enum expand_modifier modifier,
|
||||
+ bool avoid_temp_mem)
|
||||
+{
|
||||
+ tree type = TREE_TYPE (exp);
|
||||
+ enum machine_mode mode = TYPE_MODE (type);
|
||||
+
|
||||
+ /* Try to avoid creating a temporary at all. This is possible
|
||||
+ if all of the initializer is zero.
|
||||
+ FIXME: try to handle all [0..255] initializers we can handle
|
||||
+ with memset. */
|
||||
+ if (TREE_STATIC (exp)
|
||||
+ && !TREE_ADDRESSABLE (exp)
|
||||
+ && target != 0 && mode == BLKmode
|
||||
+ && all_zeros_p (exp))
|
||||
+ {
|
||||
+ clear_storage (target, expr_size (exp), BLOCK_OP_NORMAL);
|
||||
+ return target;
|
||||
+ }
|
||||
+
|
||||
+ /* All elts simple constants => refer to a constant in memory. But
|
||||
+ if this is a non-BLKmode mode, let it store a field at a time
|
||||
+ since that should make a CONST_INT or CONST_DOUBLE when we
|
||||
+ fold. Likewise, if we have a target we can use, it is best to
|
||||
+ store directly into the target unless the type is large enough
|
||||
+ that memcpy will be used. If we are making an initializer and
|
||||
+ all operands are constant, put it in memory as well.
|
||||
+
|
||||
+ FIXME: Avoid trying to fill vector constructors piece-meal.
|
||||
+ Output them with output_constant_def below unless we're sure
|
||||
+ they're zeros. This should go away when vector initializers
|
||||
+ are treated like VECTOR_CST instead of arrays. */
|
||||
+ if ((TREE_STATIC (exp)
|
||||
+ && ((mode == BLKmode
|
||||
+ && ! (target != 0 && safe_from_p (target, exp, 1)))
|
||||
+ || TREE_ADDRESSABLE (exp)
|
||||
+ || (host_integerp (TYPE_SIZE_UNIT (type), 1)
|
||||
+ && (! MOVE_BY_PIECES_P
|
||||
+ (tree_low_cst (TYPE_SIZE_UNIT (type), 1),
|
||||
+ TYPE_ALIGN (type)))
|
||||
+ && ! mostly_zeros_p (exp))))
|
||||
+ || ((modifier == EXPAND_INITIALIZER || modifier == EXPAND_CONST_ADDRESS)
|
||||
+ && TREE_CONSTANT (exp)))
|
||||
+ {
|
||||
+ rtx constructor;
|
||||
+
|
||||
+ if (avoid_temp_mem)
|
||||
+ return NULL_RTX;
|
||||
+
|
||||
+ constructor = output_constant_def (exp, 1);
|
||||
+
|
||||
+ if (modifier != EXPAND_CONST_ADDRESS
|
||||
+ && modifier != EXPAND_INITIALIZER
|
||||
+ && modifier != EXPAND_SUM)
|
||||
+ constructor = validize_mem (constructor);
|
||||
+
|
||||
+ return constructor;
|
||||
+ }
|
||||
+
|
||||
+ /* Handle calls that pass values in multiple non-contiguous
|
||||
+ locations. The Irix 6 ABI has examples of this. */
|
||||
+ if (target == 0 || ! safe_from_p (target, exp, 1)
|
||||
+ || GET_CODE (target) == PARALLEL || modifier == EXPAND_STACK_PARM)
|
||||
+ {
|
||||
+ if (avoid_temp_mem)
|
||||
+ return NULL_RTX;
|
||||
+
|
||||
+ target
|
||||
+ = assign_temp (build_qualified_type (type, (TYPE_QUALS (type)
|
||||
+ | (TREE_READONLY (exp)
|
||||
+ * TYPE_QUAL_CONST))),
|
||||
+ 0, TREE_ADDRESSABLE (exp), 1);
|
||||
+ }
|
||||
+
|
||||
+ store_constructor (exp, target, 0, int_expr_size (exp));
|
||||
+ return target;
|
||||
+}
|
||||
+
|
||||
|
||||
/* expand_expr: generate code for computing expression EXP.
|
||||
An rtx for the computed value is returned. The value is never null.
|
||||
@@ -6899,71 +6982,7 @@ expand_expr_real_1 (tree exp, rtx target
|
||||
return const0_rtx;
|
||||
}
|
||||
|
||||
- /* Try to avoid creating a temporary at all. This is possible
|
||||
- if all of the initializer is zero.
|
||||
- FIXME: try to handle all [0..255] initializers we can handle
|
||||
- with memset. */
|
||||
- else if (TREE_STATIC (exp)
|
||||
- && !TREE_ADDRESSABLE (exp)
|
||||
- && target != 0 && mode == BLKmode
|
||||
- && all_zeros_p (exp))
|
||||
- {
|
||||
- clear_storage (target, expr_size (exp), BLOCK_OP_NORMAL);
|
||||
- return target;
|
||||
- }
|
||||
-
|
||||
- /* All elts simple constants => refer to a constant in memory. But
|
||||
- if this is a non-BLKmode mode, let it store a field at a time
|
||||
- since that should make a CONST_INT or CONST_DOUBLE when we
|
||||
- fold. Likewise, if we have a target we can use, it is best to
|
||||
- store directly into the target unless the type is large enough
|
||||
- that memcpy will be used. If we are making an initializer and
|
||||
- all operands are constant, put it in memory as well.
|
||||
-
|
||||
- FIXME: Avoid trying to fill vector constructors piece-meal.
|
||||
- Output them with output_constant_def below unless we're sure
|
||||
- they're zeros. This should go away when vector initializers
|
||||
- are treated like VECTOR_CST instead of arrays.
|
||||
- */
|
||||
- else if ((TREE_STATIC (exp)
|
||||
- && ((mode == BLKmode
|
||||
- && ! (target != 0 && safe_from_p (target, exp, 1)))
|
||||
- || TREE_ADDRESSABLE (exp)
|
||||
- || (host_integerp (TYPE_SIZE_UNIT (type), 1)
|
||||
- && (! MOVE_BY_PIECES_P
|
||||
- (tree_low_cst (TYPE_SIZE_UNIT (type), 1),
|
||||
- TYPE_ALIGN (type)))
|
||||
- && ! mostly_zeros_p (exp))))
|
||||
- || ((modifier == EXPAND_INITIALIZER
|
||||
- || modifier == EXPAND_CONST_ADDRESS)
|
||||
- && TREE_CONSTANT (exp)))
|
||||
- {
|
||||
- rtx constructor = output_constant_def (exp, 1);
|
||||
-
|
||||
- if (modifier != EXPAND_CONST_ADDRESS
|
||||
- && modifier != EXPAND_INITIALIZER
|
||||
- && modifier != EXPAND_SUM)
|
||||
- constructor = validize_mem (constructor);
|
||||
-
|
||||
- return constructor;
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- /* Handle calls that pass values in multiple non-contiguous
|
||||
- locations. The Irix 6 ABI has examples of this. */
|
||||
- if (target == 0 || ! safe_from_p (target, exp, 1)
|
||||
- || GET_CODE (target) == PARALLEL
|
||||
- || modifier == EXPAND_STACK_PARM)
|
||||
- target
|
||||
- = assign_temp (build_qualified_type (type,
|
||||
- (TYPE_QUALS (type)
|
||||
- | (TREE_READONLY (exp)
|
||||
- * TYPE_QUAL_CONST))),
|
||||
- 0, TREE_ADDRESSABLE (exp), 1);
|
||||
-
|
||||
- store_constructor (exp, target, 0, int_expr_size (exp));
|
||||
- return target;
|
||||
- }
|
||||
+ return expand_constructor (exp, target, modifier, false);
|
||||
|
||||
case MISALIGNED_INDIRECT_REF:
|
||||
case ALIGN_INDIRECT_REF:
|
||||
@@ -7105,10 +7124,25 @@ expand_expr_real_1 (tree exp, rtx target
|
||||
field, value)
|
||||
if (tree_int_cst_equal (field, index))
|
||||
{
|
||||
- if (!TREE_SIDE_EFFECTS (value))
|
||||
- return expand_expr (fold (value), target, tmode,
|
||||
- modifier);
|
||||
- break;
|
||||
+ if (TREE_SIDE_EFFECTS (value))
|
||||
+ break;
|
||||
+
|
||||
+ if (TREE_CODE (value) == CONSTRUCTOR)
|
||||
+ {
|
||||
+ /* If VALUE is a CONSTRUCTOR, this
|
||||
+ optimization is only useful if
|
||||
+ this doesn't store the CONSTRUCTOR
|
||||
+ into memory. If it does, it is more
|
||||
+ efficient to just load the data from
|
||||
+ the array directly. */
|
||||
+ rtx ret = expand_constructor (value, target,
|
||||
+ modifier, true);
|
||||
+ if (ret == NULL_RTX)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return expand_expr (fold (value), target, tmode,
|
||||
+ modifier);
|
||||
}
|
||||
}
|
||||
else if(TREE_CODE (init) == STRING_CST)
|
||||
--- gcc/testsuite/gcc.dg/pr28755.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr28755.c (revision 128685)
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* PR middle-end/28755 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-Os" } */
|
||||
+/* { dg-final { scan-assembler-times "2112543726\|7deadbee" 2 } } */
|
||||
+
|
||||
+struct S
|
||||
+{
|
||||
+ void *s1;
|
||||
+ unsigned s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;
|
||||
+};
|
||||
+
|
||||
+const struct S array[] = {
|
||||
+ { (void *) 0, 60, 640, 2112543726, 39682, 48, 16, 33, 10, 96, 2, 0, 0, 4 },
|
||||
+ { (void *) 0, 60, 2112543726, 192, 18251, 16, 33, 10, 96, 2, 0, 0, 4, 212 }
|
||||
+};
|
||||
+
|
||||
+void
|
||||
+foo (struct S *x)
|
||||
+{
|
||||
+ x[0] = array[0];
|
||||
+ x[5] = array[1];
|
||||
+}
|
@ -1,132 +0,0 @@
|
||||
2007-10-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/32121
|
||||
* parser.c (cp_parser_compound_statement): Handle label-declarations
|
||||
at the beginning of the compound statement.
|
||||
(cp_parser_block_declaration): Issue diagnostics about __label__
|
||||
not at the beginning of a block.
|
||||
|
||||
* g++.dg/ext/label4.C: Adjust error regexp.
|
||||
* g++.dg/ext/label7.C: New test.
|
||||
* g++.dg/ext/label8.C: New test.
|
||||
* g++.dg/ext/label9.C: New test.
|
||||
|
||||
--- gcc/cp/parser.c (revision 129252)
|
||||
+++ gcc/cp/parser.c (revision 129253)
|
||||
@@ -6821,6 +6821,15 @@ cp_parser_expression_statement (cp_parse
|
||||
compound-statement:
|
||||
{ statement-seq [opt] }
|
||||
|
||||
+ GNU extension:
|
||||
+
|
||||
+ compound-statement:
|
||||
+ { label-declaration-seq [opt] statement-seq [opt] }
|
||||
+
|
||||
+ label-declaration-seq:
|
||||
+ label-declaration
|
||||
+ label-declaration-seq label-declaration
|
||||
+
|
||||
Returns a tree representing the statement. */
|
||||
|
||||
static tree
|
||||
@@ -6834,6 +6843,9 @@ cp_parser_compound_statement (cp_parser
|
||||
return error_mark_node;
|
||||
/* Begin the compound-statement. */
|
||||
compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
|
||||
+ /* If the next keyword is `__label__' we have a label declaration. */
|
||||
+ while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
|
||||
+ cp_parser_label_declaration (parser);
|
||||
/* Parse an (optional) statement-seq. */
|
||||
cp_parser_statement_seq_opt (parser, in_statement_expr);
|
||||
/* Finish the compound-statement. */
|
||||
@@ -7711,7 +7723,6 @@ cp_parser_declaration (cp_parser* parser
|
||||
|
||||
block-declaration:
|
||||
__extension__ block-declaration
|
||||
- label-declaration
|
||||
|
||||
C++0x Extension:
|
||||
|
||||
@@ -7772,12 +7783,16 @@ cp_parser_block_declaration (cp_parser *
|
||||
cp_parser_using_declaration (parser,
|
||||
/*access_declaration_p=*/false);
|
||||
}
|
||||
- /* If the next keyword is `__label__' we have a label declaration. */
|
||||
+ /* If the next keyword is `__label__' we have a misplaced label
|
||||
+ declaration. */
|
||||
else if (token1->keyword == RID_LABEL)
|
||||
{
|
||||
- if (statement_p)
|
||||
- cp_parser_commit_to_tentative_parse (parser);
|
||||
- cp_parser_label_declaration (parser);
|
||||
+ cp_lexer_consume_token (parser->lexer);
|
||||
+ error ("%<__label__%> not at the beginning of a block");
|
||||
+ cp_parser_skip_to_end_of_statement (parser);
|
||||
+ /* If the next token is now a `;', consume it. */
|
||||
+ if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
|
||||
+ cp_lexer_consume_token (parser->lexer);
|
||||
}
|
||||
/* If the next token is `static_assert' we have a static assertion. */
|
||||
else if (token1->keyword == RID_STATIC_ASSERT)
|
||||
|
||||
--- gcc/testsuite/g++.dg/ext/label9.C (revision 0)
|
||||
+++ gcc/testsuite/g++.dg/ext/label9.C (revision 129253)
|
||||
@@ -0,0 +1,10 @@
|
||||
+// PR c++/32121
|
||||
+// { dg-do compile }
|
||||
+
|
||||
+int f (void)
|
||||
+{
|
||||
+ while (1)
|
||||
+ __label__ a; // { dg-error "not at the beginning" }
|
||||
+ for (;;)
|
||||
+ __label__ b; // { dg-error "not at the beginning" }
|
||||
+}
|
||||
--- gcc/testsuite/g++.dg/ext/label4.C (revision 129252)
|
||||
+++ gcc/testsuite/g++.dg/ext/label4.C (revision 129253)
|
||||
@@ -3,4 +3,4 @@
|
||||
|
||||
// { dg-do compile }
|
||||
|
||||
-__label__ *l; // { dg-error "before" }
|
||||
+__label__ *l; // { dg-error "not at the beginning of" }
|
||||
--- gcc/testsuite/g++.dg/ext/label7.C (revision 0)
|
||||
+++ gcc/testsuite/g++.dg/ext/label7.C (revision 129253)
|
||||
@@ -0,0 +1,12 @@
|
||||
+// PR c++/32121
|
||||
+// { dg-do compile }
|
||||
+
|
||||
+int f (void)
|
||||
+{
|
||||
+ a:;
|
||||
+ __label__ a; // { dg-error "not at the beginning" }
|
||||
+ int b;
|
||||
+ __label__ c; // { dg-error "not at the beginning" }
|
||||
+ a:; // { dg-error "duplicate label" }
|
||||
+ c:;
|
||||
+}
|
||||
--- gcc/testsuite/g++.dg/ext/label8.C (revision 0)
|
||||
+++ gcc/testsuite/g++.dg/ext/label8.C (revision 129253)
|
||||
@@ -0,0 +1,22 @@
|
||||
+// PR c++/32121
|
||||
+// { dg-do compile }
|
||||
+
|
||||
+int f (void)
|
||||
+{
|
||||
+ __label__ a, b;
|
||||
+ __label__ c;
|
||||
+ a:;
|
||||
+ b:;
|
||||
+ c:;
|
||||
+ {
|
||||
+ __label__ d;
|
||||
+ d:;
|
||||
+ if (0)
|
||||
+ {
|
||||
+ __label__ e;
|
||||
+ __label__ f;
|
||||
+ f:;
|
||||
+ e:;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
@ -1,58 +0,0 @@
|
||||
2007-06-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/32139
|
||||
* c-typeck.c (common_pointer_type): Set TYPE_READONLY
|
||||
and TYPE_VOLATILE on the merged pointed to FUNCTION_TYPE
|
||||
only if both pointed_to_1 and pointed_to_2 are TYPE_READONLY
|
||||
resp. TYPE_VOLATILE.
|
||||
|
||||
* gcc.c-torture/compile/20070531-1.c: New test.
|
||||
|
||||
--- gcc/c-typeck.c.jj 2007-04-25 10:13:52.000000000 +0200
|
||||
+++ gcc/c-typeck.c 2007-06-01 10:51:53.000000000 +0200
|
||||
@@ -499,6 +499,7 @@ common_pointer_type (tree t1, tree t2)
|
||||
tree pointed_to_1, mv1;
|
||||
tree pointed_to_2, mv2;
|
||||
tree target;
|
||||
+ int type_quals;
|
||||
|
||||
/* Save time if the two types are the same. */
|
||||
|
||||
@@ -526,10 +527,19 @@ common_pointer_type (tree t1, tree t2)
|
||||
if (TREE_CODE (mv2) != ARRAY_TYPE)
|
||||
mv2 = TYPE_MAIN_VARIANT (pointed_to_2);
|
||||
target = composite_type (mv1, mv2);
|
||||
- t1 = build_pointer_type (c_build_qualified_type
|
||||
- (target,
|
||||
- TYPE_QUALS (pointed_to_1) |
|
||||
- TYPE_QUALS (pointed_to_2)));
|
||||
+ type_quals = TYPE_QUALS (pointed_to_1) | TYPE_QUALS (pointed_to_2);
|
||||
+ if (TREE_CODE (pointed_to_1) == FUNCTION_TYPE)
|
||||
+ {
|
||||
+ /* TYPE_READONLY and TYPE_VOLATILE on FUNCTION_TYPE should be
|
||||
+ logically ANDed, not ORed, as if one function is
|
||||
+ __attribute__((const)) and the other is not, the common type
|
||||
+ must be conservatively not __attribute__((const))
|
||||
+ and similarly for __attribute__((noreturn)). */
|
||||
+ type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
|
||||
+ type_quals |= (TYPE_QUALS (pointed_to_1) & TYPE_QUALS (pointed_to_2))
|
||||
+ & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
|
||||
+ }
|
||||
+ t1 = build_pointer_type (c_build_qualified_type (target, type_quals));
|
||||
return build_type_attribute_variant (t1, attributes);
|
||||
}
|
||||
|
||||
--- gcc/testsuite/gcc.c-torture/compile/20070531-1.c.jj 2007-05-31 13:47:22.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.c-torture/compile/20070531-1.c 2007-06-01 10:57:15.000000000 +0200
|
||||
@@ -0,0 +1,11 @@
|
||||
+/* PR tree-optimization/32139 */
|
||||
+int foo (void);
|
||||
+int bar (void) __attribute__ ((const));
|
||||
+
|
||||
+int
|
||||
+test (int x)
|
||||
+{
|
||||
+ int a = (x == 10000 ? foo : bar) ();
|
||||
+ int b = (x == 10000 ? foo : bar) ();
|
||||
+ return a + b;
|
||||
+}
|
@ -1,46 +0,0 @@
|
||||
2007-09-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/32694
|
||||
2006-11-08 Roger Sayle <roger@eyesopen.com>
|
||||
* tree-ssa-propagate.c (set_rhs): Verify tcc_comparison the same way
|
||||
as tcc_binary.
|
||||
|
||||
* gcc.c-torture/compile/20070925-1.c: New test.
|
||||
|
||||
--- gcc/tree-ssa-propagate.c.jj 2007-09-23 19:43:36.000000000 +0200
|
||||
+++ gcc/tree-ssa-propagate.c 2007-09-25 09:30:50.000000000 +0200
|
||||
@@ -570,7 +570,8 @@ set_rhs (tree *stmt_p, tree expr)
|
||||
ssa_op_iter iter;
|
||||
|
||||
/* Verify the constant folded result is valid gimple. */
|
||||
- if (TREE_CODE_CLASS (code) == tcc_binary)
|
||||
+ if (TREE_CODE_CLASS (code) == tcc_binary
|
||||
+ || TREE_CODE_CLASS (code) == tcc_comparison)
|
||||
{
|
||||
if (!is_gimple_val (TREE_OPERAND (expr, 0))
|
||||
|| !is_gimple_val (TREE_OPERAND (expr, 1)))
|
||||
--- gcc/testsuite/gcc.c-torture/compile/20070925-1.c.jj 2007-09-25 09:28:37.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.c-torture/compile/20070925-1.c 2007-09-25 09:29:41.000000000 +0200
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* PR tree-optimization/32694 */
|
||||
+
|
||||
+typedef signed long long int WordS64;
|
||||
+typedef unsigned long long int Word64;
|
||||
+
|
||||
+int
|
||||
+foo (Word64 * p)
|
||||
+{
|
||||
+ while (1)
|
||||
+ {
|
||||
+ WordS64 c = 0x1llu;
|
||||
+ WordS64 x = *p;
|
||||
+ if (c >= 0)
|
||||
+ {
|
||||
+ if (x > (WordS64) 0x7FFFFFFFFFFFFFFFll - c)
|
||||
+ return 6;
|
||||
+ }
|
||||
+ else if (x < (WordS64) 0x8000000000000000ll - c)
|
||||
+ return 7;
|
||||
+ p++;
|
||||
+ }
|
||||
+}
|
@ -1,230 +0,0 @@
|
||||
2007-10-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/33136
|
||||
* opts.c (decode_options): Don't enable flag_ipa_type_escape.
|
||||
|
||||
* gcc.c-torture/execute/20070824-1.c: New test.
|
||||
* gcc.dg/pr33136-1.c: New test.
|
||||
* gcc.dg/pr33136-2.c: New test.
|
||||
* gcc.dg/pr33136-3.c: New test.
|
||||
|
||||
--- gcc/opts.c (revision 129365)
|
||||
+++ gcc/opts.c (revision 129366)
|
||||
@@ -473,7 +473,6 @@ decode_options (unsigned int argc, const
|
||||
flag_cse_skip_blocks = 1;
|
||||
flag_gcse = 1;
|
||||
flag_expensive_optimizations = 1;
|
||||
- flag_ipa_type_escape = 1;
|
||||
flag_strength_reduce = 1;
|
||||
flag_rerun_cse_after_loop = 1;
|
||||
flag_rerun_loop_opt = 1;
|
||||
--- gcc/testsuite/gcc.c-torture/execute/20070824-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.c-torture/execute/20070824-1.c (revision 129366)
|
||||
@@ -0,0 +1,24 @@
|
||||
+/* PR tree-optimization/33136 */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+struct S
|
||||
+{
|
||||
+ struct S *a;
|
||||
+ int b;
|
||||
+};
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ struct S *s = (struct S *) 0, **p, *n;
|
||||
+ for (p = &s; *p; p = &(*p)->a);
|
||||
+ n = (struct S *) __builtin_alloca (sizeof (*n));
|
||||
+ n->a = *p;
|
||||
+ n->b = 1;
|
||||
+ *p = n;
|
||||
+
|
||||
+ if (!s)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/pr33136-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr33136-1.c (revision 129366)
|
||||
@@ -0,0 +1,54 @@
|
||||
+/* PR tree-optimization/33136 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+struct S
|
||||
+{
|
||||
+ struct S *a;
|
||||
+ int b;
|
||||
+ float f;
|
||||
+};
|
||||
+
|
||||
+static struct S s;
|
||||
+
|
||||
+static int *
|
||||
+__attribute__((noinline, const))
|
||||
+foo (void)
|
||||
+{
|
||||
+ return &s.b;
|
||||
+}
|
||||
+
|
||||
+float
|
||||
+__attribute__((noinline))
|
||||
+bar (float *f)
|
||||
+{
|
||||
+ s.f = 1.0;
|
||||
+ *f = 4.0;
|
||||
+ return s.f;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+__attribute__((noinline))
|
||||
+baz (int *x)
|
||||
+{
|
||||
+ s.b = 1;
|
||||
+ *x = 4;
|
||||
+ return s.b;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+t (void)
|
||||
+{
|
||||
+ float f = 8.0;
|
||||
+ return bar (&f) + baz (foo ());
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (t () != 5)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/pr33136-3.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr33136-3.c (revision 129366)
|
||||
@@ -0,0 +1,60 @@
|
||||
+/* PR tree-optimization/33136 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+struct S
|
||||
+{
|
||||
+ void *a;
|
||||
+ int b[3];
|
||||
+ double *c;
|
||||
+};
|
||||
+static double d, e;
|
||||
+
|
||||
+static struct S s;
|
||||
+
|
||||
+static int *
|
||||
+__attribute__((noinline, const))
|
||||
+foo (void)
|
||||
+{
|
||||
+ return (int *) &s.b;
|
||||
+}
|
||||
+
|
||||
+double *
|
||||
+__attribute__((noinline))
|
||||
+bar (double **f)
|
||||
+{
|
||||
+ s.c = &d;
|
||||
+ *f = &e;
|
||||
+ /* As nothing ever takes the address of any double * field in struct S,
|
||||
+ the write to *f can't alias with the s.c field. */
|
||||
+ return s.c;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+__attribute__((noinline))
|
||||
+baz (int *x)
|
||||
+{
|
||||
+ s.b[0] = 1;
|
||||
+ *x = 4;
|
||||
+ /* Function foo takes address of an int array field in struct S,
|
||||
+ so *x can alias with the s.b field (and it does in this testcase). */
|
||||
+ return s.b[0];
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+__attribute__((noinline))
|
||||
+t (void)
|
||||
+{
|
||||
+ double *f = (double *) 0;
|
||||
+ return 10 * (bar (&f) != &d) + baz (foo ());
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (t () != 4)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/pr33136-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr33136-2.c (revision 129366)
|
||||
@@ -0,0 +1,60 @@
|
||||
+/* PR tree-optimization/33136 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+struct S
|
||||
+{
|
||||
+ void *a;
|
||||
+ int b;
|
||||
+ int *c;
|
||||
+};
|
||||
+static int d, e;
|
||||
+
|
||||
+static struct S s;
|
||||
+
|
||||
+static int *
|
||||
+__attribute__((noinline, const))
|
||||
+foo (void)
|
||||
+{
|
||||
+ return &s.b;
|
||||
+}
|
||||
+
|
||||
+int *
|
||||
+__attribute__((noinline))
|
||||
+bar (int **f)
|
||||
+{
|
||||
+ s.c = &d;
|
||||
+ *f = &e;
|
||||
+ /* As nothing ever takes the address of any int * field in struct S,
|
||||
+ the write to *f can't alias with the s.c field. */
|
||||
+ return s.c;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+__attribute__((noinline))
|
||||
+baz (int *x)
|
||||
+{
|
||||
+ s.b = 1;
|
||||
+ *x = 4;
|
||||
+ /* Function foo takes address of an int field in struct S,
|
||||
+ so *x can alias with the s.b field (and it does in this testcase). */
|
||||
+ return s.b;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+__attribute__((noinline))
|
||||
+t (void)
|
||||
+{
|
||||
+ int *f = (int *) 0;
|
||||
+ return 10 * (bar (&f) != &d) + baz (foo ());
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (t () != 4)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
@ -1,194 +0,0 @@
|
||||
2007-09-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/33238
|
||||
PR c/27301
|
||||
* gimplify.c (gimplify_vla_decl): New function.
|
||||
(gimplify_decl_expr): Move VLA decl handling to gimplify_vla_decl.
|
||||
Call it.
|
||||
(gimplify_target_expr): Handle variable length TARGET_EXPRs.
|
||||
|
||||
* gcc.c-torture/execute/20070919-1.c: New test.
|
||||
* gcc.dg/pr33238.c: New test.
|
||||
* gcc.dg/pr27301.c: New test.
|
||||
|
||||
--- gcc/gimplify.c (revision 128628)
|
||||
+++ gcc/gimplify.c (revision 128629)
|
||||
@@ -1144,6 +1144,42 @@ gimplify_return_expr (tree stmt, tree *p
|
||||
return GS_ALL_DONE;
|
||||
}
|
||||
|
||||
+static void
|
||||
+gimplify_vla_decl (tree decl, tree *stmt_p)
|
||||
+{
|
||||
+ /* This is a variable-sized decl. Simplify its size and mark it
|
||||
+ for deferred expansion. Note that mudflap depends on the format
|
||||
+ of the emitted code: see mx_register_decls(). */
|
||||
+ tree t, args, addr, ptr_type;
|
||||
+
|
||||
+ gimplify_one_sizepos (&DECL_SIZE (decl), stmt_p);
|
||||
+ gimplify_one_sizepos (&DECL_SIZE_UNIT (decl), stmt_p);
|
||||
+
|
||||
+ /* All occurrences of this decl in final gimplified code will be
|
||||
+ replaced by indirection. Setting DECL_VALUE_EXPR does two
|
||||
+ things: First, it lets the rest of the gimplifier know what
|
||||
+ replacement to use. Second, it lets the debug info know
|
||||
+ where to find the value. */
|
||||
+ ptr_type = build_pointer_type (TREE_TYPE (decl));
|
||||
+ addr = create_tmp_var (ptr_type, get_name (decl));
|
||||
+ DECL_IGNORED_P (addr) = 0;
|
||||
+ t = build_fold_indirect_ref (addr);
|
||||
+ SET_DECL_VALUE_EXPR (decl, t);
|
||||
+ DECL_HAS_VALUE_EXPR_P (decl) = 1;
|
||||
+
|
||||
+ args = tree_cons (NULL, DECL_SIZE_UNIT (decl), NULL);
|
||||
+ t = built_in_decls[BUILT_IN_ALLOCA];
|
||||
+ t = build_function_call_expr (t, args);
|
||||
+ t = fold_convert (ptr_type, t);
|
||||
+ t = build2 (MODIFY_EXPR, void_type_node, addr, t);
|
||||
+
|
||||
+ gimplify_and_add (t, stmt_p);
|
||||
+
|
||||
+ /* Indicate that we need to restore the stack level when the
|
||||
+ enclosing BIND_EXPR is exited. */
|
||||
+ gimplify_ctxp->save_stack = true;
|
||||
+}
|
||||
+
|
||||
/* Gimplifies a DECL_EXPR node *STMT_P by making any necessary allocation
|
||||
and initialization explicit. */
|
||||
|
||||
@@ -1168,39 +1204,7 @@ gimplify_decl_expr (tree *stmt_p)
|
||||
tree init = DECL_INITIAL (decl);
|
||||
|
||||
if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
|
||||
- {
|
||||
- /* This is a variable-sized decl. Simplify its size and mark it
|
||||
- for deferred expansion. Note that mudflap depends on the format
|
||||
- of the emitted code: see mx_register_decls(). */
|
||||
- tree t, args, addr, ptr_type;
|
||||
-
|
||||
- gimplify_one_sizepos (&DECL_SIZE (decl), stmt_p);
|
||||
- gimplify_one_sizepos (&DECL_SIZE_UNIT (decl), stmt_p);
|
||||
-
|
||||
- /* All occurrences of this decl in final gimplified code will be
|
||||
- replaced by indirection. Setting DECL_VALUE_EXPR does two
|
||||
- things: First, it lets the rest of the gimplifier know what
|
||||
- replacement to use. Second, it lets the debug info know
|
||||
- where to find the value. */
|
||||
- ptr_type = build_pointer_type (TREE_TYPE (decl));
|
||||
- addr = create_tmp_var (ptr_type, get_name (decl));
|
||||
- DECL_IGNORED_P (addr) = 0;
|
||||
- t = build_fold_indirect_ref (addr);
|
||||
- SET_DECL_VALUE_EXPR (decl, t);
|
||||
- DECL_HAS_VALUE_EXPR_P (decl) = 1;
|
||||
-
|
||||
- args = tree_cons (NULL, DECL_SIZE_UNIT (decl), NULL);
|
||||
- t = built_in_decls[BUILT_IN_ALLOCA];
|
||||
- t = build_function_call_expr (t, args);
|
||||
- t = fold_convert (ptr_type, t);
|
||||
- t = build2 (MODIFY_EXPR, void_type_node, addr, t);
|
||||
-
|
||||
- gimplify_and_add (t, stmt_p);
|
||||
-
|
||||
- /* Indicate that we need to restore the stack level when the
|
||||
- enclosing BIND_EXPR is exited. */
|
||||
- gimplify_ctxp->save_stack = true;
|
||||
- }
|
||||
+ gimplify_vla_decl (decl, stmt_p);
|
||||
|
||||
if (init && init != error_mark_node)
|
||||
{
|
||||
@@ -4146,8 +4150,15 @@ gimplify_target_expr (tree *expr_p, tree
|
||||
if (init)
|
||||
{
|
||||
/* TARGET_EXPR temps aren't part of the enclosing block, so add it
|
||||
- to the temps list. */
|
||||
- gimple_add_tmp_var (temp);
|
||||
+ to the temps list. Handle also variable length TARGET_EXPRs. */
|
||||
+ if (TREE_CODE (DECL_SIZE (temp)) != INTEGER_CST)
|
||||
+ {
|
||||
+ if (!TYPE_SIZES_GIMPLIFIED (TREE_TYPE (temp)))
|
||||
+ gimplify_type_sizes (TREE_TYPE (temp), pre_p);
|
||||
+ gimplify_vla_decl (temp, pre_p);
|
||||
+ }
|
||||
+ else
|
||||
+ gimple_add_tmp_var (temp);
|
||||
|
||||
/* If TARGET_EXPR_INITIAL is void, then the mere evaluation of the
|
||||
expression is supposed to initialize the slot. */
|
||||
--- gcc/testsuite/gcc.c-torture/execute/20070919-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.c-torture/execute/20070919-1.c (revision 128629)
|
||||
@@ -0,0 +1,41 @@
|
||||
+/* PR c/33238 */
|
||||
+
|
||||
+typedef __SIZE_TYPE__ size_t;
|
||||
+int memcmp (const void *, const void *, size_t);
|
||||
+void abort (void);
|
||||
+
|
||||
+void
|
||||
+__attribute__((noinline))
|
||||
+bar (void *x, void *y)
|
||||
+{
|
||||
+ struct S { char w[8]; } *p = x, *q = y;
|
||||
+ if (memcmp (p->w, "zyxwvut", 8) != 0)
|
||||
+ abort ();
|
||||
+ if (memcmp (q[0].w, "abcdefg", 8) != 0)
|
||||
+ abort ();
|
||||
+ if (memcmp (q[1].w, "ABCDEFG", 8) != 0)
|
||||
+ abort ();
|
||||
+ if (memcmp (q[2].w, "zyxwvut", 8) != 0)
|
||||
+ abort ();
|
||||
+ if (memcmp (q[3].w, "zyxwvut", 8) != 0)
|
||||
+ abort ();
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+__attribute__((noinline))
|
||||
+foo (void *x, int y)
|
||||
+{
|
||||
+ struct S { char w[y]; } *p = x, a;
|
||||
+ int i;
|
||||
+ a = ({ struct S b; b = p[2]; p[3] = b; });
|
||||
+ bar (&a, x);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ struct S { char w[8]; } p[4]
|
||||
+ = { "abcdefg", "ABCDEFG", "zyxwvut", "ZYXWVUT" };
|
||||
+ foo (p, 8);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/pr33238.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr33238.c (revision 128629)
|
||||
@@ -0,0 +1,12 @@
|
||||
+/* PR c/33238 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-std=gnu89" } */
|
||||
+
|
||||
+void
|
||||
+reverse (void *x, int y, int z)
|
||||
+{
|
||||
+ struct { char w[z]; } *p = x, a;
|
||||
+ int i, j;
|
||||
+ for (i = y - 1, j = 0; j < y / 2; i--, j++)
|
||||
+ ({ a = p[i]; p[i] = p[j]; p[j] = a; });
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/pr27301.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr27301.c (revision 128629)
|
||||
@@ -0,0 +1,15 @@
|
||||
+/* PR c/27301 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -std=gnu89" } */
|
||||
+
|
||||
+void
|
||||
+foo (void *ptr, long n)
|
||||
+{
|
||||
+ __asm__ __volatile__ ("" :: "m" (({ struct { char x[n]; } *p = ptr; *p; })));
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+bar (void *ptr, long n)
|
||||
+{
|
||||
+ __asm__ __volatile__ ("" :: "m" (*({ struct { char x[n]; } *p = ptr; p; })));
|
||||
+}
|
@ -1,168 +0,0 @@
|
||||
2007-09-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/33506
|
||||
* langhooks.h (struct lang_hooks_for_types): Add type_hash_eq
|
||||
field.
|
||||
* langhooks.c (lhd_type_hash_eq): New function.
|
||||
* langhooks-def.h (lhd_type_hash_eq): New prototype.
|
||||
(LANG_HOOKS_TYPE_HASH_EQ): Define.
|
||||
(LANG_HOOKS_FOR_TYPES_INITIALIZER): Add LANG_HOOKS_TYPE_HASH_EQ.
|
||||
* tree.c (type_hash_eq): For FUNCTION_TYPE use
|
||||
lang_hooks.type.type_hash_eq in addition to generic tests.
|
||||
|
||||
* cp-tree.h (cxx_type_hash_eq): New prototype.
|
||||
* cp-objcp-common.h (LANG_HOOKS_TYPE_HASH_EQ): Redefine.
|
||||
* tree.c (cxx_type_hash_eq): New function.
|
||||
|
||||
* g++.dg/ext/attrib29.C: New test.
|
||||
|
||||
--- gcc/langhooks.h.jj 2007-02-20 16:39:12.000000000 -0500
|
||||
+++ gcc/langhooks.h 2007-09-22 03:46:10.000000000 -0400
|
||||
@@ -148,6 +148,10 @@ struct lang_hooks_for_types
|
||||
firstprivate variables. */
|
||||
void (*omp_firstprivatize_type_sizes) (struct gimplify_omp_ctx *, tree);
|
||||
|
||||
+ /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
|
||||
+ Called only after doing all language independent checks. */
|
||||
+ bool (*type_hash_eq) (tree, tree);
|
||||
+
|
||||
/* Nonzero if types that are identical are to be hashed so that only
|
||||
one copy is kept. If a language requires unique types for each
|
||||
user-specified type, such as Ada, this should be set to TRUE. */
|
||||
--- gcc/langhooks.c.jj 2007-02-20 16:39:12.000000000 -0500
|
||||
+++ gcc/langhooks.c 2007-09-22 03:46:10.000000000 -0400
|
||||
@@ -411,6 +411,16 @@ lhd_tree_dump_type_quals (tree t)
|
||||
/* lang_hooks.expr_size: Determine the size of the value of an expression T
|
||||
in a language-specific way. Returns a tree for the size in bytes. */
|
||||
|
||||
+/* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
|
||||
+ Called only after doing all language independent checks. */
|
||||
+
|
||||
+bool
|
||||
+lhd_type_hash_eq (tree typea ATTRIBUTE_UNUSED,
|
||||
+ tree typeb ATTRIBUTE_UNUSED)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
tree
|
||||
lhd_expr_size (tree exp)
|
||||
{
|
||||
--- gcc/langhooks-def.h.jj 2007-02-20 16:39:13.000000000 -0500
|
||||
+++ gcc/langhooks-def.h 2007-09-22 03:46:56.000000000 -0400
|
||||
@@ -70,6 +70,7 @@ extern tree lhd_expr_size (tree);
|
||||
extern size_t lhd_tree_size (enum tree_code);
|
||||
extern HOST_WIDE_INT lhd_to_target_charset (HOST_WIDE_INT);
|
||||
extern tree lhd_expr_to_decl (tree, bool *, bool *, bool *);
|
||||
+extern bool lhd_type_hash_eq (tree, tree);
|
||||
|
||||
/* Declarations of default tree inlining hooks. */
|
||||
extern tree lhd_tree_inlining_walk_subtrees (tree *, int *, walk_tree_fn,
|
||||
@@ -220,6 +221,7 @@ extern tree lhd_make_node (enum tree_cod
|
||||
#define LANG_HOOKS_TYPE_MAX_SIZE lhd_return_null_tree
|
||||
#define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
|
||||
lhd_omp_firstprivatize_type_sizes
|
||||
+#define LANG_HOOKS_TYPE_HASH_EQ lhd_type_hash_eq
|
||||
#define LANG_HOOKS_HASH_TYPES true
|
||||
|
||||
#define LANG_HOOKS_FOR_TYPES_INITIALIZER { \
|
||||
@@ -234,6 +236,7 @@ extern tree lhd_make_node (enum tree_cod
|
||||
LANG_HOOKS_INCOMPLETE_TYPE_ERROR, \
|
||||
LANG_HOOKS_TYPE_MAX_SIZE, \
|
||||
LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES, \
|
||||
+ LANG_HOOKS_TYPE_HASH_EQ, \
|
||||
LANG_HOOKS_HASH_TYPES \
|
||||
}
|
||||
|
||||
--- gcc/tree.c.jj 2007-04-03 07:18:26.000000000 -0400
|
||||
+++ gcc/tree.c 2007-09-22 03:46:10.000000000 -0400
|
||||
@@ -4168,17 +4168,21 @@ type_hash_eq (const void *va, const void
|
||||
TYPE_FIELDS (b->type))));
|
||||
|
||||
case FUNCTION_TYPE:
|
||||
- return (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
|
||||
- || (TYPE_ARG_TYPES (a->type)
|
||||
- && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
|
||||
- && TYPE_ARG_TYPES (b->type)
|
||||
- && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
|
||||
- && type_list_equal (TYPE_ARG_TYPES (a->type),
|
||||
- TYPE_ARG_TYPES (b->type))));
|
||||
+ if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
|
||||
+ || (TYPE_ARG_TYPES (a->type)
|
||||
+ && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
|
||||
+ && TYPE_ARG_TYPES (b->type)
|
||||
+ && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
|
||||
+ && type_list_equal (TYPE_ARG_TYPES (a->type),
|
||||
+ TYPE_ARG_TYPES (b->type))))
|
||||
+ break;
|
||||
+ return 0;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+ return lang_hooks.types.type_hash_eq (a->type, b->type);
|
||||
}
|
||||
|
||||
/* Return the cached hash value. */
|
||||
--- gcc/cp/cp-tree.h.jj 2007-06-26 07:57:09.000000000 -0400
|
||||
+++ gcc/cp/cp-tree.h 2007-09-22 03:50:22.000000000 -0400
|
||||
@@ -4421,7 +4421,8 @@ extern tree cp_add_pending_fn_decls (vo
|
||||
extern int cp_auto_var_in_fn_p (tree,tree);
|
||||
extern tree fold_if_not_in_template (tree);
|
||||
extern tree rvalue (tree);
|
||||
-
|
||||
+extern bool cxx_type_hash_eq (tree, tree);
|
||||
+
|
||||
/* in typeck.c */
|
||||
extern int string_conv_p (tree, tree, int);
|
||||
extern tree cp_truthvalue_conversion (tree);
|
||||
--- gcc/cp/cp-objcp-common.h.jj 2007-02-20 16:37:34.000000000 -0500
|
||||
+++ gcc/cp/cp-objcp-common.h 2007-09-22 03:49:38.000000000 -0400
|
||||
@@ -85,6 +85,8 @@ extern tree objcp_tsubst_copy_and_build
|
||||
#define LANG_HOOKS_WRITE_GLOBALS lhd_do_nothing
|
||||
#undef LANG_HOOKS_COMDAT_GROUP
|
||||
#define LANG_HOOKS_COMDAT_GROUP cxx_comdat_group
|
||||
+#undef LANG_HOOKS_TYPE_HASH_EQ
|
||||
+#define LANG_HOOKS_TYPE_HASH_EQ cxx_type_hash_eq
|
||||
|
||||
#undef LANG_HOOKS_FUNCTION_INIT
|
||||
#define LANG_HOOKS_FUNCTION_INIT cxx_push_function_context
|
||||
--- gcc/cp/tree.c.jj 2007-03-12 03:28:01.000000000 -0400
|
||||
+++ gcc/cp/tree.c 2007-09-22 03:46:10.000000000 -0400
|
||||
@@ -1959,6 +1959,22 @@ cp_build_type_attribute_variant (tree ty
|
||||
return new_type;
|
||||
}
|
||||
|
||||
+/* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
|
||||
+ Called only after doing all language independent checks. Only
|
||||
+ to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
|
||||
+ compared in type_hash_eq. */
|
||||
+
|
||||
+bool
|
||||
+cxx_type_hash_eq (tree typea, tree typeb)
|
||||
+{
|
||||
+ if (TREE_CODE (typea) != FUNCTION_TYPE
|
||||
+ || TYPE_RAISES_EXCEPTIONS (typea) == TYPE_RAISES_EXCEPTIONS (typeb))
|
||||
+ return true;
|
||||
+
|
||||
+ return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
|
||||
+ TYPE_RAISES_EXCEPTIONS (typeb), 1);
|
||||
+}
|
||||
+
|
||||
/* Apply FUNC to all language-specific sub-trees of TP in a pre-order
|
||||
traversal. Called from walk_tree. */
|
||||
|
||||
--- gcc/testsuite/g++.dg/ext/attrib29.C.jj 2007-09-22 03:46:10.000000000 -0400
|
||||
+++ gcc/testsuite/g++.dg/ext/attrib29.C 2007-09-22 03:46:10.000000000 -0400
|
||||
@@ -0,0 +1,10 @@
|
||||
+// PR c++/33506
|
||||
+// { dg-do compile }
|
||||
+
|
||||
+extern int f1 (char *) __attribute__ ((warn_unused_result));
|
||||
+extern int f2 (char *) throw () __attribute__ ((warn_unused_result));
|
||||
+extern int f2 (char *) throw ();
|
||||
+
|
||||
+extern int f3 (char *) __attribute__ ((nonnull (1)));
|
||||
+extern int f4 (char *) throw () __attribute__ ((nonnull (1)));
|
||||
+extern int f4 (char *) throw ();
|
@ -1,77 +0,0 @@
|
||||
2007-10-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/33619
|
||||
* tree-outof-ssa.c (check_replaceable): Return false for all
|
||||
calls other than __builtin_expect.
|
||||
|
||||
* gcc.dg/pr33619.c: New test.
|
||||
|
||||
--- gcc/tree-outof-ssa.c 2007-10-11 22:01:41.000000000 +0200
|
||||
+++ gcc/tree-outof-ssa.c 2007-10-16 14:28:42.000000000 +0200
|
||||
@@ -1570,12 +1570,14 @@ check_replaceable (temp_expr_table_p tab
|
||||
if (flag_float_store && FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (stmt, 1))))
|
||||
return false;
|
||||
|
||||
- /* Calls to functions with side-effects cannot be replaced. */
|
||||
+ /* No calls to functions other than __builtin_expect are replaceable. */
|
||||
if ((call_expr = get_call_expr_in (stmt)) != NULL_TREE)
|
||||
{
|
||||
- int call_flags = call_expr_flags (call_expr);
|
||||
- if (TREE_SIDE_EFFECTS (call_expr)
|
||||
- && !(call_flags & (ECF_PURE | ECF_CONST | ECF_NORETURN)))
|
||||
+ tree fndecl = get_callee_fndecl (call_expr);
|
||||
+
|
||||
+ if (fndecl == NULL_TREE
|
||||
+ || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL
|
||||
+ || DECL_FUNCTION_CODE (fndecl) != BUILT_IN_EXPECT)
|
||||
return false;
|
||||
}
|
||||
|
||||
--- gcc/testsuite/gcc.dg/pr33619.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr33619.c (revision 129350)
|
||||
@@ -0,0 +1,45 @@
|
||||
+/* PR tree-optimization/33619 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+#ifdef __powerpc__
|
||||
+# define REG1 __asm__ ("3")
|
||||
+# define REG2 __asm__ ("4")
|
||||
+#elif defined __x86_64__
|
||||
+# define REG1 __asm__ ("rdi")
|
||||
+# define REG2 __asm__ ("rsi")
|
||||
+#else
|
||||
+# define REG1
|
||||
+# define REG2
|
||||
+#endif
|
||||
+
|
||||
+static inline void
|
||||
+bar (unsigned long x, int y)
|
||||
+{
|
||||
+ register unsigned long p1 REG1 = x;
|
||||
+ register unsigned long p2 REG2 = y;
|
||||
+ __asm__ volatile ("" : "=r" (p1), "=r" (p2) : "0" (p1), "1" (p2) : "memory");
|
||||
+ if (p1 != 0xdeadUL || p2 != 0xbefUL)
|
||||
+ __builtin_abort ();
|
||||
+}
|
||||
+
|
||||
+__attribute__((const, noinline)) int
|
||||
+baz (int x)
|
||||
+{
|
||||
+ return x;
|
||||
+}
|
||||
+
|
||||
+__attribute__((noinline)) void
|
||||
+foo (unsigned long *x, int y)
|
||||
+{
|
||||
+ unsigned long a = *x;
|
||||
+ bar (a, baz (y));
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ unsigned long a = 0xdeadUL;
|
||||
+ foo (&a, 0xbefUL);
|
||||
+ return 0;
|
||||
+}
|
@ -1,84 +0,0 @@
|
||||
2007-10-03 Andrew Haley <aph@redhat.com>
|
||||
|
||||
PR java/33639
|
||||
* class.c (mangled_classname): Detect and replace illegal
|
||||
characters in assembly language symbols.
|
||||
(gen_indirect_dispatch_tables): Call mangled_classname() on
|
||||
the type.
|
||||
|
||||
--- gcc/java/class.c (revision 128980)
|
||||
+++ gcc/java/class.c (revision 128981)
|
||||
@@ -314,10 +314,63 @@ identifier_subst (const tree old_id,
|
||||
tree
|
||||
mangled_classname (const char *prefix, tree type)
|
||||
{
|
||||
+ tree result;
|
||||
tree ident = TYPE_NAME (type);
|
||||
if (TREE_CODE (ident) != IDENTIFIER_NODE)
|
||||
ident = DECL_NAME (ident);
|
||||
- return identifier_subst (ident, prefix, '.', '_', "");
|
||||
+ result = identifier_subst (ident, prefix, '.', '_', "");
|
||||
+
|
||||
+ /* Replace any characters that aren't in the set [0-9a-zA-Z_$] with
|
||||
+ "_0xXX". Class names containing such chracters are uncommon, but
|
||||
+ they do sometimes occur in class files. Without this check,
|
||||
+ these names cause assembly errors.
|
||||
+
|
||||
+ There is a possibility that a real class name could conflict with
|
||||
+ the identifier we generate, but it is unlikely and will
|
||||
+ immediately be detected as an assembler error. At some point we
|
||||
+ should do something more elaborate (perhaps using the full
|
||||
+ unicode mangling scheme) in order to prevent such a conflict. */
|
||||
+ {
|
||||
+ int i;
|
||||
+ const int len = IDENTIFIER_LENGTH (result);
|
||||
+ const char *p = IDENTIFIER_POINTER (result);
|
||||
+ int illegal_chars = 0;
|
||||
+
|
||||
+ /* Make two passes over the identifier. The first pass is merely
|
||||
+ to count illegal characters; we need to do this in order to
|
||||
+ allocate a buffer. */
|
||||
+ for (i = 0; i < len; i++)
|
||||
+ {
|
||||
+ char c = p[i];
|
||||
+ illegal_chars += (! ISALNUM (c) && c != '_' && c != '$');
|
||||
+ }
|
||||
+
|
||||
+ /* And the second pass, which is rarely executed, does the
|
||||
+ rewriting. */
|
||||
+ if (illegal_chars != 0)
|
||||
+ {
|
||||
+ char *buffer = alloca (illegal_chars * 4 + len + 1);
|
||||
+ int j;
|
||||
+
|
||||
+ for (i = 0, j = 0; i < len; i++)
|
||||
+ {
|
||||
+ char c = p[i];
|
||||
+ if (! ISALNUM (c) && c != '_' && c != '$')
|
||||
+ {
|
||||
+ buffer[j++] = '_';
|
||||
+ sprintf (&buffer[j], "0x%02x", c);
|
||||
+ j += 4;
|
||||
+ }
|
||||
+ else
|
||||
+ buffer[j++] = c;
|
||||
+ }
|
||||
+
|
||||
+ buffer[j] = 0;
|
||||
+ result = get_identifier (buffer);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return result;
|
||||
}
|
||||
|
||||
tree
|
||||
@@ -389,7 +442,7 @@ while (0)
|
||||
void
|
||||
gen_indirect_dispatch_tables (tree type)
|
||||
{
|
||||
- const char *typename = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
|
||||
+ const char *typename = IDENTIFIER_POINTER (mangled_classname ("", type));
|
||||
{
|
||||
tree field = NULL;
|
||||
char *buf = alloca (strlen (typename) + strlen ("_catch_classes_") + 1);
|
@ -1,67 +0,0 @@
|
||||
2007-10-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/33744
|
||||
* parser.c (cp_parser_parenthesized_expression_list): Set
|
||||
greater_than_is_operator_p to true in between the parens.
|
||||
|
||||
* g++.dg/template/arg6.C: New test.
|
||||
|
||||
--- gcc/cp/parser.c.jj 2007-10-12 00:28:24.000000000 +0200
|
||||
+++ gcc/cp/parser.c 2007-10-15 14:52:02.000000000 +0200
|
||||
@@ -4976,6 +4976,7 @@ cp_parser_parenthesized_expression_list
|
||||
tree expression_list = NULL_TREE;
|
||||
bool fold_expr_p = is_attribute_list;
|
||||
tree identifier = NULL_TREE;
|
||||
+ bool saved_greater_than_is_operator_p;
|
||||
|
||||
/* Assume all the expressions will be constant. */
|
||||
if (non_constant_p)
|
||||
@@ -4984,6 +4985,12 @@ cp_parser_parenthesized_expression_list
|
||||
if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
|
||||
return error_mark_node;
|
||||
|
||||
+ /* Within a parenthesized expression, a `>' token is always
|
||||
+ the greater-than operator. */
|
||||
+ saved_greater_than_is_operator_p
|
||||
+ = parser->greater_than_is_operator_p;
|
||||
+ parser->greater_than_is_operator_p = true;
|
||||
+
|
||||
/* Consume expressions until there are no more. */
|
||||
if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
|
||||
while (true)
|
||||
@@ -5069,9 +5076,16 @@ cp_parser_parenthesized_expression_list
|
||||
if (ending < 0)
|
||||
goto get_comma;
|
||||
if (!ending)
|
||||
- return error_mark_node;
|
||||
+ {
|
||||
+ parser->greater_than_is_operator_p
|
||||
+ = saved_greater_than_is_operator_p;
|
||||
+ return error_mark_node;
|
||||
+ }
|
||||
}
|
||||
|
||||
+ parser->greater_than_is_operator_p
|
||||
+ = saved_greater_than_is_operator_p;
|
||||
+
|
||||
/* We built up the list in reverse order so we must reverse it now. */
|
||||
expression_list = nreverse (expression_list);
|
||||
if (identifier)
|
||||
--- gcc/testsuite/g++.dg/template/arg6.C.jj 2007-10-15 14:59:13.000000000 +0200
|
||||
+++ gcc/testsuite/g++.dg/template/arg6.C 2007-10-15 14:57:31.000000000 +0200
|
||||
@@ -0,0 +1,15 @@
|
||||
+// PR c++/33744
|
||||
+// { dg-do run }
|
||||
+
|
||||
+template <bool B> struct A { bool b; A() : b(B) {}; };
|
||||
+A<bool(1)> a;
|
||||
+A<bool(1<2)> b;
|
||||
+A<(bool)(2>1)> c;
|
||||
+A<bool((2>1))> d;
|
||||
+A<bool(2>1)> e;
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ return (a.b && b.b && c.b && d.b && e.b) ? 0 : 1;
|
||||
+}
|
@ -1,153 +0,0 @@
|
||||
2007-10-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/33763
|
||||
* gcc.dg/pr33763.c: New test.
|
||||
* g++.dg/opt/inline12.C: New test.
|
||||
|
||||
2007-10-14 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR tree-optimization/33763
|
||||
* tree-inline.c (expand_call_inline): Silently ignore always_inline
|
||||
attribute for redefined extern inline functions.
|
||||
|
||||
--- gcc/tree-inline.c.jj 2007-09-25 12:23:05.000000000 +0200
|
||||
+++ gcc/tree-inline.c 2007-10-16 15:27:51.000000000 +0200
|
||||
@@ -2059,6 +2059,12 @@ expand_call_inline (basic_block bb, tree
|
||||
if (!cgraph_inline_p (cg_edge, &reason))
|
||||
{
|
||||
if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn))
|
||||
+ /* For extern inline functions that get redefined we always
|
||||
+ silently ignored alway_inline flag. Better behaviour would
|
||||
+ be to be able to keep both bodies and use extern inline body
|
||||
+ for inlining, but we can't do that because frontends overwrite
|
||||
+ the body. */
|
||||
+ && !cg_edge->callee->local.redefined_extern_inline
|
||||
/* Avoid warnings during early inline pass. */
|
||||
&& (!flag_unit_at_a_time || cgraph_global_info_ready))
|
||||
{
|
||||
--- gcc/testsuite/gcc.dg/pr33763.c.jj 2007-10-16 15:20:41.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/pr33763.c 2007-10-16 15:20:35.000000000 +0200
|
||||
@@ -0,0 +1,60 @@
|
||||
+/* PR tree-optimization/33763 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ void *a;
|
||||
+ void *b;
|
||||
+} T;
|
||||
+extern void *foo (const char *, const char *);
|
||||
+extern void *bar (void *, const char *, T);
|
||||
+extern int baz (const char *, int);
|
||||
+
|
||||
+extern inline __attribute__ ((always_inline, gnu_inline)) int
|
||||
+baz (const char *x, int y)
|
||||
+{
|
||||
+ return 2;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+baz (const char *x, int y)
|
||||
+{
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int xa, xb;
|
||||
+
|
||||
+static void *
|
||||
+inl (const char *x, const char *y)
|
||||
+{
|
||||
+ T t = { &xa, &xb };
|
||||
+ int *f = (int *) __builtin_malloc (sizeof (int));
|
||||
+ const char *z;
|
||||
+ int o = 0;
|
||||
+ void *r = 0;
|
||||
+
|
||||
+ for (z = y; *z; z++)
|
||||
+ {
|
||||
+ if (*z == 'r')
|
||||
+ o |= 1;
|
||||
+ if (*z == 'w')
|
||||
+ o |= 2;
|
||||
+ }
|
||||
+ if (o == 1)
|
||||
+ *f = baz (x, 0);
|
||||
+ if (o == 2)
|
||||
+ *f = baz (x, 1);
|
||||
+ if (o == 3)
|
||||
+ *f = baz (x, 2);
|
||||
+
|
||||
+ if (o && *f > 0)
|
||||
+ r = bar (f, "w", t);
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+void *
|
||||
+foo (const char *x, const char *y)
|
||||
+{
|
||||
+ return inl (x, y);
|
||||
+}
|
||||
--- gcc/testsuite/g++.dg/opt/inline12.C.jj 2007-10-16 15:26:01.000000000 +0200
|
||||
+++ gcc/testsuite/g++.dg/opt/inline12.C 2007-10-16 15:26:20.000000000 +0200
|
||||
@@ -0,0 +1,60 @@
|
||||
+// PR tree-optimization/33763
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-O2" }
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ void *a;
|
||||
+ void *b;
|
||||
+} T;
|
||||
+extern void *foo (const char *, const char *);
|
||||
+extern void *bar (void *, const char *, T);
|
||||
+extern int baz (const char *, int);
|
||||
+
|
||||
+extern inline __attribute__ ((always_inline, gnu_inline)) int
|
||||
+baz (const char *x, int y)
|
||||
+{
|
||||
+ return 2;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+baz (const char *x, int y)
|
||||
+{
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int xa, xb;
|
||||
+
|
||||
+static void *
|
||||
+inl (const char *x, const char *y)
|
||||
+{
|
||||
+ T t = { &xa, &xb };
|
||||
+ int *f = (int *) __builtin_malloc (sizeof (int));
|
||||
+ const char *z;
|
||||
+ int o = 0;
|
||||
+ void *r = 0;
|
||||
+
|
||||
+ for (z = y; *z; z++)
|
||||
+ {
|
||||
+ if (*z == 'r')
|
||||
+ o |= 1;
|
||||
+ if (*z == 'w')
|
||||
+ o |= 2;
|
||||
+ }
|
||||
+ if (o == 1)
|
||||
+ *f = baz (x, 0);
|
||||
+ if (o == 2)
|
||||
+ *f = baz (x, 1);
|
||||
+ if (o == 3)
|
||||
+ *f = baz (x, 2);
|
||||
+
|
||||
+ if (o && *f > 0)
|
||||
+ r = bar (f, "w", t);
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+void *
|
||||
+foo (const char *x, const char *y)
|
||||
+{
|
||||
+ return inl (x, y);
|
||||
+}
|
@ -1,18 +0,0 @@
|
||||
2006-03-09 Richard Henderson <rth@redhat.com>
|
||||
Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Use
|
||||
secure-plt-compatible load sequence to compute the GOT address
|
||||
for -fPIC -msecure-plt.
|
||||
|
||||
--- gcc/config/rs6000/rs6000.c.orig 2006-03-09 20:02:13.000000000 -0300
|
||||
+++ gcc/config/rs6000/rs6000.c 2006-03-09 22:00:43.000000000 -0300
|
||||
@@ -3081,7 +3081,7 @@ rs6000_legitimize_tls_address (rtx addr,
|
||||
{
|
||||
rtx gsym = rs6000_got_sym ();
|
||||
got = gen_reg_rtx (Pmode);
|
||||
- if (flag_pic == 0)
|
||||
+ if (flag_pic == 0 || (flag_pic && TARGET_SECURE_PLT))
|
||||
rs6000_emit_move (got, gsym, Pmode);
|
||||
else
|
||||
{
|
@ -1,97 +0,0 @@
|
||||
2007-04-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* fr.po: Use %s rather than %S.
|
||||
* sr.po: Likewise.
|
||||
* tr.po: Likewise.
|
||||
* sv.po: Likewise.
|
||||
* rw.po: Comment out translations with bogus format
|
||||
strings.
|
||||
|
||||
--- gcc/po/fr.po (revision 123636)
|
||||
+++ gcc/po/fr.po (working copy)
|
||||
@@ -31416,7 +31416,7 @@ msgstr "attribut « %s » ignoré"
|
||||
#~ msgstr "prise de l'adresse de la borne de l'expression d'un pointeur-vers-un membre"
|
||||
|
||||
#~ msgid "%s from type `%T' to type `%T' casts away constness"
|
||||
-#~ msgstr "%S à partir du « %T » vers le type « %T » provoque un transtypage sans constante"
|
||||
+#~ msgstr "%s à partir du « %T » vers le type « %T » provoque un transtypage sans constante"
|
||||
|
||||
#~ msgid "invalid reinterpret_cast from type `%T' to type `%T'"
|
||||
#~ msgstr "reinterpret_cast invalide à partir du type « %T » vers le type « %T »"
|
||||
--- gcc/po/sr.po (revision 123636)
|
||||
+++ gcc/po/sr.po (working copy)
|
||||
@@ -8516,7 +8516,7 @@ msgstr "Ð<>е могу Ñ<>е променÐ
|
||||
#: fortran/symbol.c:592
|
||||
#, no-c-format
|
||||
msgid "Duplicate %s attribute specified at %L"
|
||||
-msgstr "ДвоÑ<C2BE>труки атрибут %S наведен код %L"
|
||||
+msgstr "ДвоÑ<C2BE>труки атрибут %s наведен код %L"
|
||||
|
||||
#: fortran/symbol.c:733
|
||||
#, no-c-format
|
||||
--- gcc/po/tr.po (revision 123636)
|
||||
+++ gcc/po/tr.po (working copy)
|
||||
@@ -6951,7 +6951,7 @@ msgstr "INTERFACE gövdesinde umulmadık
|
||||
#: fortran/parse.c:1604
|
||||
#, no-c-format
|
||||
msgid "%s statement must appear in a MODULE"
|
||||
-msgstr "%S deyimi bir MODULE'de görünmemeli"
|
||||
+msgstr "%s deyimi bir MODULE'de görünmemeli"
|
||||
|
||||
#: fortran/parse.c:1611
|
||||
#, no-c-format
|
||||
--- gcc/po/rw.po (revision 123636)
|
||||
+++ gcc/po/rw.po (working copy)
|
||||
@@ -2168,8 +2168,8 @@ msgstr ""
|
||||
|
||||
#: tlink.c:480
|
||||
#, fuzzy, c-format
|
||||
-msgid "renaming .rpo file"
|
||||
-msgstr "Gufungura %s%S Ibisohoka IDOSIYE"
|
||||
+#~ msgid "renaming .rpo file"
|
||||
+#~ msgstr "Gufungura %s%S Ibisohoka IDOSIYE"
|
||||
|
||||
#: tlink.c:534
|
||||
#, c-format
|
||||
@@ -17500,8 +17500,8 @@ msgstr "-Umutekano"
|
||||
|
||||
#: c-opts.c:1040
|
||||
#, fuzzy, gcc-internal-format
|
||||
-msgid "opening output file %s: %m"
|
||||
-msgstr "Gufungura %s%S Ibisohoka IDOSIYE"
|
||||
+#~ msgid "opening output file %s: %m"
|
||||
+#~ msgstr "Gufungura %s%S Ibisohoka IDOSIYE"
|
||||
|
||||
#: c-opts.c:1045
|
||||
#, fuzzy, gcc-internal-format
|
||||
@@ -17515,8 +17515,8 @@ msgstr ""
|
||||
|
||||
#: c-opts.c:1177
|
||||
#, fuzzy, gcc-internal-format
|
||||
-msgid "opening dependency file %s: %m"
|
||||
-msgstr "Gufungura %s%S IDOSIYE"
|
||||
+#~ msgid "opening dependency file %s: %m"
|
||||
+#~ msgstr "Gufungura %s%S IDOSIYE"
|
||||
|
||||
#: c-opts.c:1187
|
||||
#, fuzzy, gcc-internal-format
|
||||
--- gcc/po/sv.po 2007-02-20 22:38:45.000000000 +0100
|
||||
+++ gcc/po/sv.po 2007-04-13 00:18:11.000000000 +0200
|
||||
@@ -3328,7 +3328,7 @@ msgstr "ogiltig operand till %%R"
|
||||
#: config/sh/sh.c:773
|
||||
#, c-format
|
||||
msgid "invalid operand to %%S"
|
||||
-msgstr "ogiltig operand till %%R"
|
||||
+msgstr "ogiltig operand till %%S"
|
||||
|
||||
#: config/sh/sh.c:7679
|
||||
msgid "created and used with different architectures / ABIs"
|
||||
@@ -8019,7 +8019,7 @@ msgstr "PROCEDURE-attribut i konflikt me
|
||||
#: fortran/resolve.c:4943
|
||||
#, no-c-format
|
||||
msgid "Parameter array '%s' at %L cannot be automatic or assumed shape"
|
||||
-msgstr "Parametervektor \"%S\" vid %L kan inte ha automatisk eller antagen form"
|
||||
+msgstr "Parametervektor \"%s\" vid %L kan inte ha automatisk eller antagen form"
|
||||
|
||||
#: fortran/resolve.c:4955
|
||||
#, no-c-format
|
@ -1,16 +0,0 @@
|
||||
2007-04-18 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* java/lang/reflect/VMProxy.java (HAVE_NATIVE_GENERATE_PROXY_CLASS):
|
||||
Set to false.
|
||||
|
||||
--- libjava/java/lang/reflect/VMProxy.java (revision 123861)
|
||||
+++ libjava/java/lang/reflect/VMProxy.java (working copy)
|
||||
@@ -65,7 +65,7 @@
|
||||
* If this is true, HAVE_NATIVE_GET_PROXY_CLASS should be false.
|
||||
* @see java.lang.reflect.Proxy
|
||||
*/
|
||||
- static boolean HAVE_NATIVE_GENERATE_PROXY_CLASS = true;
|
||||
+ static boolean HAVE_NATIVE_GENERATE_PROXY_CLASS = false;
|
||||
|
||||
/**
|
||||
* Optional native method to replace (and speed up) the pure Java
|
@ -1,42 +0,0 @@
|
||||
2007-07-10 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* simplify-rtx.c (simplify_plus_minus_op_data_cmp): If both operands
|
||||
are REGs and TARGET_INDEX_OPERAND_FIRST, sort lower REGNOs first.
|
||||
|
||||
* gcc.dg/20070710-1.c: New test.
|
||||
|
||||
--- gcc/simplify-rtx.c.jj 2006-08-11 17:32:05.000000000 +0200
|
||||
+++ gcc/simplify-rtx.c 2007-07-09 22:53:26.000000000 +0200
|
||||
@@ -2608,6 +2608,12 @@ simplify_plus_minus_op_data_cmp (const v
|
||||
- commutative_operand_precedence (d1->op));
|
||||
if (result)
|
||||
return result;
|
||||
+
|
||||
+ /* Group together equal REGs to do more simplification. */
|
||||
+ if (TARGET_INDEX_OPERAND_FIRST && REG_P (d1->op) && REG_P (d2->op)
|
||||
+ && REGNO (d1->op) != REGNO (d2->op))
|
||||
+ return REGNO (d1->op) - REGNO (d2->op);
|
||||
+
|
||||
return d1->ix - d2->ix;
|
||||
}
|
||||
|
||||
--- gcc/testsuite/gcc.dg/20070710-1.c.jj 2007-07-10 09:32:43.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/20070710-1.c 2007-07-10 09:31:39.000000000 +0200
|
||||
@@ -0,0 +1,17 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -ffast-math" } */
|
||||
+
|
||||
+extern float sqrtf (float);
|
||||
+
|
||||
+float
|
||||
+foo (const float *m)
|
||||
+{
|
||||
+ float x = m[0] + m[1] + m[2] + 1.0f;
|
||||
+ float s;
|
||||
+
|
||||
+ if (x > 0.001)
|
||||
+ s = 0.5f / sqrtf (x);
|
||||
+ else
|
||||
+ s = 2.0f * sqrtf (1.0f + m[0] - m[1] - m[2]);
|
||||
+ return s;
|
||||
+}
|
@ -1,291 +0,0 @@
|
||||
2006-07-26 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
* intrinsic.c (add_functions): Add INT2, SHORT, INT8, LONG,
|
||||
LSTAT, MCLOCK and MCLOCK8 intrinsic functions.
|
||||
(add_subroutines): Add LSTAT intrinsic subroutine.
|
||||
* gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_INT2,
|
||||
GFC_ISYM_INT8, GFC_ISYM_LONG, GFC_ISYM_LSTAT, GFC_ISYM_MCLOCK
|
||||
and GFC_ISYM_MCLOCK8.
|
||||
* iresolve.c (gfc_resolve_int2, gfc_resolve_int8,
|
||||
gfc_resolve_long, gfc_resolve_lstat, gfc_resolve_mclock,
|
||||
gfc_resolve_mclock8, gfc_resolve_lstat_sub): New functions.
|
||||
* check.c (gfc_check_intconv): New function.
|
||||
* trans-intrinsic.c (gfc_conv_intrinsic_function): Add cases for
|
||||
the added GFC_ISYM_*.
|
||||
* simplify.c (gfc_simplify_intconv, gfc_simplify_int2,
|
||||
gfc_simplify_int8, gfc_simplify_long): New functions.
|
||||
* intrinsic.h (gfc_check_intconv, gfc_simplify_int2,
|
||||
gfc_simplify_int8, gfc_simplify_long, gfc_resolve_int2,
|
||||
gfc_resolve_int8, gfc_resolve_long, gfc_resolve_lstat,
|
||||
gfc_resolve_mclock, gfc_resolve_mclock8, gfc_resolve_lstat_sub):
|
||||
Add prototypes.
|
||||
|
||||
* gfortran.dg/int_conv_1.f90: New test.
|
||||
|
||||
--- gcc/testsuite/gfortran.dg/int_conv_1.f90 (revision 0)
|
||||
+++ gcc/testsuite/gfortran.dg/int_conv_1.f90 (revision 115754)
|
||||
@@ -0,0 +1,36 @@
|
||||
+! { dg-do run }
|
||||
+! { dg-options "-std=gnu" }
|
||||
+ integer(kind=2) :: i2, j2, k2, l2, m2, n2, o2
|
||||
+ integer(kind=4) :: i4, j4
|
||||
+ integer(kind=8) :: i8, j8
|
||||
+ real :: x
|
||||
+ complex :: z
|
||||
+
|
||||
+ i2 = huge(i2) / 3
|
||||
+ i8 = int8(i2)
|
||||
+ i4 = long(i2)
|
||||
+ j2 = short(i2)
|
||||
+ k2 = int2(i2)
|
||||
+ l2 = int2(i8)
|
||||
+ m2 = short(i8)
|
||||
+ n2 = int2(i4)
|
||||
+ o2 = short(i4)
|
||||
+
|
||||
+ if (i8 /= i2 .or. i4 /= i2 .or. j2 /= i2 .or. k2 /= i2 &
|
||||
+ .or. l2 /= i2 .or. m2 /= i2 .or. n2 /= i2 .or. o2 /= i2) call abort
|
||||
+
|
||||
+ x = i2
|
||||
+ i8 = int8(x)
|
||||
+ i4 = long(x)
|
||||
+ j2 = short(x)
|
||||
+ k2 = int2(x)
|
||||
+ if (i8 /= i2 .or. i4 /= i2 .or. j2 /= i2 .or. k2 /= i2) call abort
|
||||
+
|
||||
+ z = i2 + (0.,-42.)
|
||||
+ i8 = int8(z)
|
||||
+ i4 = long(z)
|
||||
+ j2 = short(z)
|
||||
+ k2 = int2(z)
|
||||
+ if (i8 /= i2 .or. i4 /= i2 .or. j2 /= i2 .or. k2 /= i2) call abort
|
||||
+
|
||||
+ end
|
||||
--- gcc/fortran/intrinsic.c (revision 115753)
|
||||
+++ gcc/fortran/intrinsic.c (revision 115754)
|
||||
@@ -1535,6 +1535,26 @@ add_functions (void)
|
||||
|
||||
make_generic ("int", GFC_ISYM_INT, GFC_STD_F77);
|
||||
|
||||
+ add_sym_1 ("int2", 1, 0, BT_INTEGER, di, GFC_STD_GNU,
|
||||
+ gfc_check_intconv, gfc_simplify_int2, gfc_resolve_int2,
|
||||
+ a, BT_REAL, dr, REQUIRED);
|
||||
+
|
||||
+ make_alias ("short", GFC_STD_GNU);
|
||||
+
|
||||
+ make_generic ("int2", GFC_ISYM_INT2, GFC_STD_GNU);
|
||||
+
|
||||
+ add_sym_1 ("int8", 1, 0, BT_INTEGER, di, GFC_STD_GNU,
|
||||
+ gfc_check_intconv, gfc_simplify_int8, gfc_resolve_int8,
|
||||
+ a, BT_REAL, dr, REQUIRED);
|
||||
+
|
||||
+ make_generic ("int8", GFC_ISYM_INT8, GFC_STD_GNU);
|
||||
+
|
||||
+ add_sym_1 ("long", 1, 0, BT_INTEGER, di, GFC_STD_GNU,
|
||||
+ gfc_check_intconv, gfc_simplify_long, gfc_resolve_long,
|
||||
+ a, BT_REAL, dr, REQUIRED);
|
||||
+
|
||||
+ make_generic ("long", GFC_ISYM_LONG, GFC_STD_GNU);
|
||||
+
|
||||
add_sym_2 ("ior", 1, 1, BT_INTEGER, di, GFC_STD_F95,
|
||||
gfc_check_ior, gfc_simplify_ior, gfc_resolve_ior,
|
||||
i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED);
|
||||
--- gcc/fortran/intrinsic.h (revision 115753)
|
||||
+++ gcc/fortran/intrinsic.h (revision 115754)
|
||||
@@ -74,6 +74,7 @@ try gfc_check_idnint (gfc_expr *);
|
||||
try gfc_check_ieor (gfc_expr *, gfc_expr *);
|
||||
try gfc_check_index (gfc_expr *, gfc_expr *, gfc_expr *);
|
||||
try gfc_check_int (gfc_expr *, gfc_expr *);
|
||||
+try gfc_check_intconv (gfc_expr *);
|
||||
try gfc_check_ior (gfc_expr *, gfc_expr *);
|
||||
try gfc_check_irand (gfc_expr *);
|
||||
try gfc_check_isatty (gfc_expr *);
|
||||
@@ -222,6 +223,9 @@ gfc_expr *gfc_simplify_ichar (gfc_expr *
|
||||
gfc_expr *gfc_simplify_ieor (gfc_expr *, gfc_expr *);
|
||||
gfc_expr *gfc_simplify_index (gfc_expr *, gfc_expr *, gfc_expr *);
|
||||
gfc_expr *gfc_simplify_int (gfc_expr *, gfc_expr *);
|
||||
+gfc_expr *gfc_simplify_int2 (gfc_expr *);
|
||||
+gfc_expr *gfc_simplify_int8 (gfc_expr *);
|
||||
+gfc_expr *gfc_simplify_long (gfc_expr *);
|
||||
gfc_expr *gfc_simplify_ifix (gfc_expr *);
|
||||
gfc_expr *gfc_simplify_idint (gfc_expr *);
|
||||
gfc_expr *gfc_simplify_ior (gfc_expr *, gfc_expr *);
|
||||
@@ -352,6 +356,9 @@ void gfc_resolve_ieor (gfc_expr *, gfc_e
|
||||
void gfc_resolve_ichar (gfc_expr *, gfc_expr *);
|
||||
void gfc_resolve_idnint (gfc_expr *, gfc_expr *);
|
||||
void gfc_resolve_int (gfc_expr *, gfc_expr *, gfc_expr *);
|
||||
+void gfc_resolve_int2 (gfc_expr *, gfc_expr *);
|
||||
+void gfc_resolve_int8 (gfc_expr *, gfc_expr *);
|
||||
+void gfc_resolve_long (gfc_expr *, gfc_expr *);
|
||||
void gfc_resolve_ior (gfc_expr *, gfc_expr *, gfc_expr *);
|
||||
void gfc_resolve_isatty (gfc_expr *, gfc_expr *);
|
||||
void gfc_resolve_ishft (gfc_expr *, gfc_expr *, gfc_expr *);
|
||||
--- gcc/fortran/gfortran.h (revision 115753)
|
||||
+++ gcc/fortran/gfortran.h (revision 115754)
|
||||
@@ -377,6 +377,8 @@ enum gfc_generic_isym_id
|
||||
GFC_ISYM_IERRNO,
|
||||
GFC_ISYM_INDEX,
|
||||
GFC_ISYM_INT,
|
||||
+ GFC_ISYM_INT2,
|
||||
+ GFC_ISYM_INT8,
|
||||
GFC_ISYM_IOR,
|
||||
GFC_ISYM_IRAND,
|
||||
GFC_ISYM_ISATTY,
|
||||
@@ -391,10 +393,11 @@ enum gfc_generic_isym_id
|
||||
GFC_ISYM_LGT,
|
||||
GFC_ISYM_LLE,
|
||||
GFC_ISYM_LLT,
|
||||
- GFC_ISYM_LOG,
|
||||
GFC_ISYM_LOC,
|
||||
+ GFC_ISYM_LOG,
|
||||
GFC_ISYM_LOG10,
|
||||
GFC_ISYM_LOGICAL,
|
||||
+ GFC_ISYM_LONG,
|
||||
GFC_ISYM_MALLOC,
|
||||
GFC_ISYM_MATMUL,
|
||||
GFC_ISYM_MAX,
|
||||
--- gcc/fortran/iresolve.c (revision 115753)
|
||||
+++ gcc/fortran/iresolve.c (revision 115754)
|
||||
@@ -854,6 +854,42 @@ gfc_resolve_int (gfc_expr * f, gfc_expr
|
||||
|
||||
|
||||
void
|
||||
+gfc_resolve_int2 (gfc_expr * f, gfc_expr * a)
|
||||
+{
|
||||
+ f->ts.type = BT_INTEGER;
|
||||
+ f->ts.kind = 2;
|
||||
+
|
||||
+ f->value.function.name =
|
||||
+ gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
|
||||
+ a->ts.kind);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+void
|
||||
+gfc_resolve_int8 (gfc_expr * f, gfc_expr * a)
|
||||
+{
|
||||
+ f->ts.type = BT_INTEGER;
|
||||
+ f->ts.kind = 8;
|
||||
+
|
||||
+ f->value.function.name =
|
||||
+ gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
|
||||
+ a->ts.kind);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+void
|
||||
+gfc_resolve_long (gfc_expr * f, gfc_expr * a)
|
||||
+{
|
||||
+ f->ts.type = BT_INTEGER;
|
||||
+ f->ts.kind = 4;
|
||||
+
|
||||
+ f->value.function.name =
|
||||
+ gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
|
||||
+ a->ts.kind);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+void
|
||||
gfc_resolve_isatty (gfc_expr * f, gfc_expr * u)
|
||||
{
|
||||
gfc_typespec ts;
|
||||
--- gcc/fortran/check.c (revision 115753)
|
||||
+++ gcc/fortran/check.c (revision 115754)
|
||||
@@ -1200,6 +1200,16 @@ gfc_check_int (gfc_expr * x, gfc_expr *
|
||||
|
||||
|
||||
try
|
||||
+gfc_check_intconv (gfc_expr * x)
|
||||
+{
|
||||
+ if (numeric_check (x, 0) == FAILURE)
|
||||
+ return FAILURE;
|
||||
+
|
||||
+ return SUCCESS;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+try
|
||||
gfc_check_ior (gfc_expr * i, gfc_expr * j)
|
||||
{
|
||||
if (type_check (i, 0, BT_INTEGER) == FAILURE)
|
||||
--- gcc/fortran/trans-intrinsic.c (revision 115753)
|
||||
+++ gcc/fortran/trans-intrinsic.c (revision 115754)
|
||||
@@ -3477,6 +3477,9 @@ gfc_conv_intrinsic_function (gfc_se * se
|
||||
/* Integer conversions are handled separately to make sure we get the
|
||||
correct rounding mode. */
|
||||
case GFC_ISYM_INT:
|
||||
+ case GFC_ISYM_INT2:
|
||||
+ case GFC_ISYM_INT8:
|
||||
+ case GFC_ISYM_LONG:
|
||||
gfc_conv_intrinsic_int (se, expr, FIX_TRUNC_EXPR);
|
||||
break;
|
||||
|
||||
--- gcc/fortran/simplify.c (revision 115753)
|
||||
+++ gcc/fortran/simplify.c (revision 115754)
|
||||
@@ -1610,6 +1610,66 @@ gfc_simplify_int (gfc_expr * e, gfc_expr
|
||||
}
|
||||
|
||||
|
||||
+static gfc_expr *
|
||||
+gfc_simplify_intconv (gfc_expr * e, int kind, const char *name)
|
||||
+{
|
||||
+ gfc_expr *rpart, *rtrunc, *result;
|
||||
+
|
||||
+ if (e->expr_type != EXPR_CONSTANT)
|
||||
+ return NULL;
|
||||
+
|
||||
+ result = gfc_constant_result (BT_INTEGER, kind, &e->where);
|
||||
+
|
||||
+ switch (e->ts.type)
|
||||
+ {
|
||||
+ case BT_INTEGER:
|
||||
+ mpz_set (result->value.integer, e->value.integer);
|
||||
+ break;
|
||||
+
|
||||
+ case BT_REAL:
|
||||
+ rtrunc = gfc_copy_expr (e);
|
||||
+ mpfr_trunc (rtrunc->value.real, e->value.real);
|
||||
+ gfc_mpfr_to_mpz (result->value.integer, rtrunc->value.real);
|
||||
+ gfc_free_expr (rtrunc);
|
||||
+ break;
|
||||
+
|
||||
+ case BT_COMPLEX:
|
||||
+ rpart = gfc_complex2real (e, kind);
|
||||
+ rtrunc = gfc_copy_expr (rpart);
|
||||
+ mpfr_trunc (rtrunc->value.real, rpart->value.real);
|
||||
+ gfc_mpfr_to_mpz (result->value.integer, rtrunc->value.real);
|
||||
+ gfc_free_expr (rpart);
|
||||
+ gfc_free_expr (rtrunc);
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ gfc_error ("Argument of %s at %L is not a valid type", name, &e->where);
|
||||
+ gfc_free_expr (result);
|
||||
+ return &gfc_bad_expr;
|
||||
+ }
|
||||
+
|
||||
+ return range_check (result, name);
|
||||
+}
|
||||
+
|
||||
+gfc_expr *
|
||||
+gfc_simplify_int2 (gfc_expr * e)
|
||||
+{
|
||||
+ return gfc_simplify_intconv (e, 2, "INT2");
|
||||
+}
|
||||
+
|
||||
+gfc_expr *
|
||||
+gfc_simplify_int8 (gfc_expr * e)
|
||||
+{
|
||||
+ return gfc_simplify_intconv (e, 8, "INT8");
|
||||
+}
|
||||
+
|
||||
+gfc_expr *
|
||||
+gfc_simplify_long (gfc_expr * e)
|
||||
+{
|
||||
+ return gfc_simplify_intconv (e, 4, "LONG");
|
||||
+}
|
||||
+
|
||||
+
|
||||
gfc_expr *
|
||||
gfc_simplify_ifix (gfc_expr * e)
|
||||
{
|
@ -1,34 +0,0 @@
|
||||
2007-10-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* Makefile.am (libgcj_tools_la_LIBADD): Add.
|
||||
* Makefile.in: Regenerated.
|
||||
|
||||
--- libjava/Makefile.am.jj 2007-03-17 09:20:30.000000000 +0100
|
||||
+++ libjava/Makefile.am 2007-10-16 15:45:14.000000000 +0200
|
||||
@@ -262,6 +262,8 @@ EXTRA_libgcj_la_SOURCES = java/lang/Obje
|
||||
|
||||
libgcj_tools_la_SOURCES = classpath/tools/tools.zip
|
||||
libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch -fno-indirect-classes -fsource-filename=$(here)/classpath/tools/all-classes.lst
|
||||
+## See jv_convert_LDADD.
|
||||
+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
|
||||
libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \
|
||||
-version-info `grep -v '^\#' $(srcdir)/libtool-version`
|
||||
libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec
|
||||
--- libjava/Makefile.in.jj 2007-07-04 21:11:11.000000000 +0200
|
||||
+++ libjava/Makefile.in 2007-10-16 15:56:07.000000000 +0200
|
||||
@@ -146,7 +146,6 @@ am__objects_1 = gnu/gcj/xlib/lib_gnu_awt
|
||||
am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_1)
|
||||
lib_gnu_awt_xlib_la_OBJECTS = $(am_lib_gnu_awt_xlib_la_OBJECTS)
|
||||
@XLIB_AWT_TRUE@am_lib_gnu_awt_xlib_la_rpath = -rpath $(toolexeclibdir)
|
||||
-libgcj_tools_la_LIBADD =
|
||||
am_libgcj_tools_la_OBJECTS = classpath/tools/libgcj_tools_la-tools.lo
|
||||
libgcj_tools_la_OBJECTS = $(am_libgcj_tools_la_OBJECTS)
|
||||
am__DEPENDENCIES_1 = gnu/awt.lo gnu/awt/j2d.lo gnu/classpath.lo \
|
||||
@@ -894,6 +893,7 @@ libgcj_la_LINK = $(LIBLINK)
|
||||
EXTRA_libgcj_la_SOURCES = java/lang/Object.java
|
||||
libgcj_tools_la_SOURCES = classpath/tools/tools.zip
|
||||
libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch -fno-indirect-classes -fsource-filename=$(here)/classpath/tools/all-classes.lst
|
||||
+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
|
||||
libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \
|
||||
-version-info `grep -v '^\#' $(srcdir)/libtool-version`
|
||||
|
@ -1,758 +0,0 @@
|
||||
2007-09-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* builtins.c (expand_builtin, expand_builtin_object_size,
|
||||
expand_builtin_memory_chk, maybe_emit_chk_warning,
|
||||
maybe_emit_sprintf_chk_warning): Use new %K format string specifier
|
||||
for diagnostics.
|
||||
* expr.c (expand_expr_real_1): Likewise.
|
||||
* langhooks-def.h (struct diagnostic_info): Add forward decl.
|
||||
(lhd_print_error_function): Add third argument.
|
||||
* langhooks.h (struct diagnostic_info): Add forward decl.
|
||||
(struct lang_hooks): Add third argument to print_error_function.
|
||||
* diagnostic.h (diagnostic_info): Add abstract_origin field.
|
||||
(diagnostic_last_function_changed, diagnostic_set_last_function): Add
|
||||
second argument.
|
||||
(diagnostic_report_current_function): Likewise.
|
||||
* toplev.c (announce_function): Pass NULL as second argument to
|
||||
diagnostic_set_last_function.
|
||||
* diagnostic.c (diagnostic_report_current_function): Add second
|
||||
argument, pass it as third argument to lang_hooks.print_error_function.
|
||||
(default_diagnostic_starter): Pass DIAGNOSTIC as second argument
|
||||
to diagnostic_report_current_function.
|
||||
(diagnostic_report_diagnostic): Initialize diagnostic->abstract_origin
|
||||
and message.abstract_origin.
|
||||
(verbatim): Initialize abstract_origin.
|
||||
* pretty-print.h (text_info): Add abstract_origin field.
|
||||
* pretty-print.c (pp_base_format): Handle %K.
|
||||
* langhooks.c (lhd_print_error_function): Add third argument. If
|
||||
diagnostic->abstract_origin, print virtual backtrace.
|
||||
* c-format.c (gcc_diag_char_table, gcc_tdiag_char_table,
|
||||
gcc_cdiag_char_table, gcc_cxxdiag_char_table): Support %K.
|
||||
(init_dynamic_diag_info): Likewise.
|
||||
cp/
|
||||
* error.c (cxx_print_error_function): Add third argument, pass
|
||||
it over to lhd_print_error_function.
|
||||
(cp_print_error_function): If diagnostic->abstract_origin, print
|
||||
virtual backtrace.
|
||||
* cp-tree.h (struct diagnostic_info): New forward decl.
|
||||
(cxx_print_error_function): Add third argument.
|
||||
testsuite/
|
||||
* lib/prune.exp: Prune also "^In function .*$" lines and
|
||||
"^ inlined from .*$" lines.
|
||||
java/
|
||||
* lang.c (java_print_error_function): Add third argument.
|
||||
|
||||
--- gcc/java/lang.c.jj 2007-02-20 22:35:09.000000000 +0100
|
||||
+++ gcc/java/lang.c 2007-09-28 22:47:38.000000000 +0200
|
||||
@@ -55,7 +55,8 @@ static bool java_post_options (const cha
|
||||
static int java_handle_option (size_t scode, const char *arg, int value);
|
||||
static void put_decl_string (const char *, int);
|
||||
static void put_decl_node (tree);
|
||||
-static void java_print_error_function (diagnostic_context *, const char *);
|
||||
+static void java_print_error_function (diagnostic_context *, const char *,
|
||||
+ diagnostic_info *);
|
||||
static tree java_tree_inlining_walk_subtrees (tree *, int *, walk_tree_fn,
|
||||
void *, struct pointer_set_t *);
|
||||
static int merge_init_test_initialization (void * *, void *);
|
||||
@@ -511,7 +512,8 @@ static GTY(()) tree last_error_function_
|
||||
static GTY(()) tree last_error_function;
|
||||
static void
|
||||
java_print_error_function (diagnostic_context *context ATTRIBUTE_UNUSED,
|
||||
- const char *file)
|
||||
+ const char *file,
|
||||
+ diagnostic_info *diagnostic ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* Don't print error messages with bogus function prototypes. */
|
||||
if (inhibit_error_function_printing)
|
||||
--- gcc/diagnostic.c.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/diagnostic.c 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -272,10 +272,11 @@ diagnostic_action_after_output (diagnost
|
||||
/* Prints out, if necessary, the name of the current function
|
||||
that caused an error. Called from all error and warning functions. */
|
||||
void
|
||||
-diagnostic_report_current_function (diagnostic_context *context)
|
||||
+diagnostic_report_current_function (diagnostic_context *context,
|
||||
+ diagnostic_info *diagnostic)
|
||||
{
|
||||
diagnostic_report_current_module (context);
|
||||
- lang_hooks.print_error_function (context, input_filename);
|
||||
+ lang_hooks.print_error_function (context, input_filename, diagnostic);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -313,7 +314,7 @@ static void
|
||||
default_diagnostic_starter (diagnostic_context *context,
|
||||
diagnostic_info *diagnostic)
|
||||
{
|
||||
- diagnostic_report_current_function (context);
|
||||
+ diagnostic_report_current_function (context, diagnostic);
|
||||
pp_set_prefix (context->printer, diagnostic_build_prefix (diagnostic));
|
||||
}
|
||||
|
||||
@@ -361,6 +362,8 @@ diagnostic_report_diagnostic (diagnostic
|
||||
" [", cl_options[diagnostic->option_index].opt_text, "]", NULL));
|
||||
|
||||
diagnostic->message.locus = &diagnostic->location;
|
||||
+ diagnostic->message.abstract_origin = &diagnostic->abstract_origin;
|
||||
+ diagnostic->abstract_origin = NULL;
|
||||
pp_format (context->printer, &diagnostic->message);
|
||||
(*diagnostic_starter (context)) (context, diagnostic);
|
||||
pp_output_formatted_text (context->printer);
|
||||
@@ -368,6 +371,7 @@ diagnostic_report_diagnostic (diagnostic
|
||||
pp_flush (context->printer);
|
||||
diagnostic_action_after_output (context, diagnostic);
|
||||
diagnostic->message.format_spec = saved_format_spec;
|
||||
+ diagnostic->abstract_origin = NULL;
|
||||
}
|
||||
|
||||
context->lock--;
|
||||
@@ -419,6 +423,7 @@ verbatim (const char *gmsgid, ...)
|
||||
text.args_ptr = ≈
|
||||
text.format_spec = _(gmsgid);
|
||||
text.locus = NULL;
|
||||
+ text.abstract_origin = NULL;
|
||||
pp_format_verbatim (global_dc->printer, &text);
|
||||
pp_flush (global_dc->printer);
|
||||
va_end (ap);
|
||||
--- gcc/builtins.c.jj 2007-09-25 12:26:50.000000000 +0200
|
||||
+++ gcc/builtins.c 2007-09-28 22:47:00.000000000 +0200
|
||||
@@ -5982,13 +5982,13 @@ expand_builtin (tree exp, rtx target, rt
|
||||
case BUILT_IN_VA_ARG_PACK:
|
||||
/* All valid uses of __builtin_va_arg_pack () are removed during
|
||||
inlining. */
|
||||
- error ("invalid use of %<__builtin_va_arg_pack ()%>");
|
||||
+ error ("%Kinvalid use of %<__builtin_va_arg_pack ()%>", exp);
|
||||
return const0_rtx;
|
||||
|
||||
case BUILT_IN_VA_ARG_PACK_LEN:
|
||||
/* All valid uses of __builtin_va_arg_pack_len () are removed during
|
||||
inlining. */
|
||||
- error ("invalid use of %<__builtin_va_arg_pack_len ()%>");
|
||||
+ error ("%Kinvalid use of %<__builtin_va_arg_pack_len ()%>", exp);
|
||||
return const0_rtx;
|
||||
|
||||
/* Return the address of the first anonymous stack arg. */
|
||||
@@ -10286,12 +10286,11 @@ expand_builtin_object_size (tree exp)
|
||||
int object_size_type;
|
||||
tree fndecl = get_callee_fndecl (exp);
|
||||
tree arglist = TREE_OPERAND (exp, 1);
|
||||
- location_t locus = EXPR_LOCATION (exp);
|
||||
|
||||
if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
|
||||
{
|
||||
- error ("%Hfirst argument of %D must be a pointer, second integer constant",
|
||||
- &locus, fndecl);
|
||||
+ error ("%Kfirst argument of %D must be a pointer, second integer constant",
|
||||
+ exp, fndecl);
|
||||
expand_builtin_trap ();
|
||||
return const0_rtx;
|
||||
}
|
||||
@@ -10303,8 +10302,8 @@ expand_builtin_object_size (tree exp)
|
||||
|| tree_int_cst_sgn (ost) < 0
|
||||
|| compare_tree_int (ost, 3) > 0)
|
||||
{
|
||||
- error ("%Hlast argument of %D is not integer constant between 0 and 3",
|
||||
- &locus, fndecl);
|
||||
+ error ("%Klast argument of %D is not integer constant between 0 and 3",
|
||||
+ exp, fndecl);
|
||||
expand_builtin_trap ();
|
||||
return const0_rtx;
|
||||
}
|
||||
@@ -10348,9 +10347,8 @@ expand_builtin_memory_chk (tree exp, rtx
|
||||
|
||||
if (! integer_all_onesp (size) && tree_int_cst_lt (size, len))
|
||||
{
|
||||
- location_t locus = EXPR_LOCATION (exp);
|
||||
- warning (0, "%Hcall to %D will always overflow destination buffer",
|
||||
- &locus, get_callee_fndecl (exp));
|
||||
+ warning (0, "%Kcall to %D will always overflow destination buffer",
|
||||
+ exp, get_callee_fndecl (exp));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -10463,7 +10461,6 @@ maybe_emit_chk_warning (tree exp, enum b
|
||||
int arg_mask, is_strlen = 0;
|
||||
tree arglist = TREE_OPERAND (exp, 1), a;
|
||||
tree len, size;
|
||||
- location_t locus;
|
||||
|
||||
switch (fcode)
|
||||
{
|
||||
@@ -10525,9 +10522,8 @@ maybe_emit_chk_warning (tree exp, enum b
|
||||
src = c_strlen (src, 1);
|
||||
if (! src || ! host_integerp (src, 1))
|
||||
{
|
||||
- locus = EXPR_LOCATION (exp);
|
||||
- warning (0, "%Hcall to %D might overflow destination buffer",
|
||||
- &locus, get_callee_fndecl (exp));
|
||||
+ warning (0, "%Kcall to %D might overflow destination buffer",
|
||||
+ exp, get_callee_fndecl (exp));
|
||||
return;
|
||||
}
|
||||
else if (tree_int_cst_lt (src, size))
|
||||
@@ -10536,9 +10532,8 @@ maybe_emit_chk_warning (tree exp, enum b
|
||||
else if (! host_integerp (len, 1) || ! tree_int_cst_lt (size, len))
|
||||
return;
|
||||
|
||||
- locus = EXPR_LOCATION (exp);
|
||||
- warning (0, "%Hcall to %D will always overflow destination buffer",
|
||||
- &locus, get_callee_fndecl (exp));
|
||||
+ warning (0, "%Kcall to %D will always overflow destination buffer",
|
||||
+ exp, get_callee_fndecl (exp));
|
||||
}
|
||||
|
||||
/* Emit warning if a buffer overflow is detected at compile time
|
||||
@@ -10604,9 +10599,8 @@ maybe_emit_sprintf_chk_warning (tree exp
|
||||
|
||||
if (! tree_int_cst_lt (len, size))
|
||||
{
|
||||
- location_t locus = EXPR_LOCATION (exp);
|
||||
- warning (0, "%Hcall to %D will always overflow destination buffer",
|
||||
- &locus, get_callee_fndecl (exp));
|
||||
+ warning (0, "%Kcall to %D will always overflow destination buffer",
|
||||
+ exp, get_callee_fndecl (exp));
|
||||
}
|
||||
}
|
||||
|
||||
--- gcc/diagnostic.h.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/diagnostic.h 2007-09-28 22:45:58.000000000 +0200
|
||||
@@ -37,10 +37,13 @@ typedef enum
|
||||
/* A diagnostic is described by the MESSAGE to send, the FILE and LINE of
|
||||
its context and its KIND (ice, error, warning, note, ...) See complete
|
||||
list in diagnostic.def. */
|
||||
-typedef struct
|
||||
+typedef struct diagnostic_info
|
||||
{
|
||||
text_info message;
|
||||
location_t location;
|
||||
+ /* TREE_BLOCK if the diagnostic is to be reported in some inline
|
||||
+ function inlined into other function, otherwise NULL. */
|
||||
+ tree abstract_origin;
|
||||
/* The kind of diagnostic it is about. */
|
||||
diagnostic_t kind;
|
||||
/* Which OPT_* directly controls this diagnostic. */
|
||||
@@ -130,13 +133,15 @@ struct diagnostic_context
|
||||
|
||||
/* True if the last function in which a diagnostic was reported is
|
||||
different from the current one. */
|
||||
-#define diagnostic_last_function_changed(DC) \
|
||||
- ((DC)->last_function != current_function_decl)
|
||||
+#define diagnostic_last_function_changed(DC, DI) \
|
||||
+ ((DC)->last_function != ((DI)->abstract_origin \
|
||||
+ ? (DI)->abstract_origin : current_function_decl))
|
||||
|
||||
/* Remember the current function as being the last one in which we report
|
||||
a diagnostic. */
|
||||
-#define diagnostic_set_last_function(DC) \
|
||||
- (DC)->last_function = current_function_decl
|
||||
+#define diagnostic_set_last_function(DC, DI) \
|
||||
+ (DC)->last_function = (((DI) && (DI)->abstract_origin) \
|
||||
+ ? (DI)->abstract_origin : current_function_decl)
|
||||
|
||||
/* True if the last module or file in which a diagnostic was reported is
|
||||
different from the current one. */
|
||||
@@ -178,7 +183,8 @@ extern diagnostic_context *global_dc;
|
||||
/* Diagnostic related functions. */
|
||||
extern void diagnostic_initialize (diagnostic_context *);
|
||||
extern void diagnostic_report_current_module (diagnostic_context *);
|
||||
-extern void diagnostic_report_current_function (diagnostic_context *);
|
||||
+extern void diagnostic_report_current_function (diagnostic_context *,
|
||||
+ diagnostic_info *);
|
||||
extern void diagnostic_report_diagnostic (diagnostic_context *,
|
||||
diagnostic_info *);
|
||||
#ifdef ATTRIBUTE_GCC_DIAG
|
||||
--- gcc/toplev.c.jj 2007-04-03 13:18:27.000000000 +0200
|
||||
+++ gcc/toplev.c 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -448,7 +448,7 @@ announce_function (tree decl)
|
||||
fprintf (stderr, " %s", lang_hooks.decl_printable_name (decl, 2));
|
||||
fflush (stderr);
|
||||
pp_needs_newline (global_dc->printer) = true;
|
||||
- diagnostic_set_last_function (global_dc);
|
||||
+ diagnostic_set_last_function (global_dc, (diagnostic_info *) NULL);
|
||||
}
|
||||
}
|
||||
|
||||
--- gcc/pretty-print.c.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/pretty-print.c 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -188,6 +188,7 @@ pp_base_indent (pretty_printer *pp)
|
||||
%Ns: likewise, but length specified as constant in the format string.
|
||||
%H: location_t.
|
||||
%J: a decl tree, from which DECL_SOURCE_LOCATION will be recorded.
|
||||
+ %K: a statement, from which EXPR_LOCATION and TREE_BLOCK will be recorded.
|
||||
Flag 'q': quote formatted text (must come immediately after '%').
|
||||
|
||||
Arguments can be used sequentially, or through %N$ resp. *N$
|
||||
@@ -487,6 +488,33 @@ pp_base_format (pretty_printer *pp, text
|
||||
}
|
||||
break;
|
||||
|
||||
+ case 'K':
|
||||
+ {
|
||||
+ tree t = va_arg (*text->args_ptr, tree), block;
|
||||
+ gcc_assert (text->locus != NULL);
|
||||
+ *text->locus = EXPR_LOCATION (t);
|
||||
+ gcc_assert (text->abstract_origin != NULL);
|
||||
+ block = TREE_BLOCK (t);
|
||||
+ *text->abstract_origin = NULL;
|
||||
+ while (block
|
||||
+ && TREE_CODE (block) == BLOCK
|
||||
+ && BLOCK_ABSTRACT_ORIGIN (block))
|
||||
+ {
|
||||
+ tree ao = BLOCK_ABSTRACT_ORIGIN (block);
|
||||
+
|
||||
+ while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao))
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (ao);
|
||||
+
|
||||
+ if (TREE_CODE (ao) == FUNCTION_DECL)
|
||||
+ {
|
||||
+ *text->abstract_origin = block;
|
||||
+ break;
|
||||
+ }
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
case '.':
|
||||
{
|
||||
int n;
|
||||
--- gcc/pretty-print.h.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/pretty-print.h 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -36,6 +36,7 @@ typedef struct
|
||||
va_list *args_ptr;
|
||||
int err_no; /* for %m */
|
||||
location_t *locus;
|
||||
+ tree *abstract_origin;
|
||||
} text_info;
|
||||
|
||||
/* How often diagnostics are prefixed by their locations:
|
||||
--- gcc/testsuite/lib/prune.exp.jj 2007-02-20 22:37:09.000000000 +0100
|
||||
+++ gcc/testsuite/lib/prune.exp 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -19,9 +19,10 @@
|
||||
proc prune_gcc_output { text } {
|
||||
#send_user "Before:$text\n"
|
||||
|
||||
- regsub -all "(^|\n)\[^\n\]*: In ((static member )?function|member|method|(copy )?constructor|destructor|instantiation|program|subroutine|block-data) \[^\n\]*" $text "" text
|
||||
+ regsub -all "(^|\n)(\[^\n\]*: )?In ((static member )?function|member|method|(copy )?constructor|destructor|instantiation|program|subroutine|block-data) \[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)\[^\n\]*: At (top level|global scope):\[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)\[^\n\]*: instantiated from \[^\n\]*" $text "" text
|
||||
+ regsub -all "(^|\n) inlined from \[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)collect2: ld returned \[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)collect: re(compiling|linking)\[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)Please submit.*instructions\[^\n\]*" $text "" text
|
||||
--- gcc/cp/error.c.jj 2007-09-25 11:15:31.000000000 +0200
|
||||
+++ gcc/cp/error.c 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -2150,9 +2150,10 @@ cv_to_string (tree p, int v)
|
||||
|
||||
/* Langhook for print_error_function. */
|
||||
void
|
||||
-cxx_print_error_function (diagnostic_context *context, const char *file)
|
||||
+cxx_print_error_function (diagnostic_context *context, const char *file,
|
||||
+ diagnostic_info *diagnostic)
|
||||
{
|
||||
- lhd_print_error_function (context, file);
|
||||
+ lhd_print_error_function (context, file, diagnostic);
|
||||
pp_base_set_prefix (context->printer, file);
|
||||
maybe_print_instantiation_context (context);
|
||||
}
|
||||
@@ -2180,23 +2181,105 @@ static void
|
||||
cp_print_error_function (diagnostic_context *context,
|
||||
diagnostic_info *diagnostic)
|
||||
{
|
||||
- if (diagnostic_last_function_changed (context))
|
||||
+ if (diagnostic_last_function_changed (context, diagnostic))
|
||||
{
|
||||
const char *old_prefix = context->printer->prefix;
|
||||
const char *file = LOCATION_FILE (diagnostic->location);
|
||||
- char *new_prefix = file ? file_name_as_prefix (file) : NULL;
|
||||
+ tree abstract_origin = diagnostic->abstract_origin;
|
||||
+ char *new_prefix = (file && abstract_origin == NULL)
|
||||
+ ? file_name_as_prefix (file) : NULL;
|
||||
|
||||
pp_base_set_prefix (context->printer, new_prefix);
|
||||
|
||||
if (current_function_decl == NULL)
|
||||
pp_base_string (context->printer, "At global scope:");
|
||||
else
|
||||
- pp_printf (context->printer, "In %s %qs:",
|
||||
- function_category (current_function_decl),
|
||||
- cxx_printable_name (current_function_decl, 2));
|
||||
+ {
|
||||
+ tree fndecl, ao;
|
||||
+
|
||||
+ if (abstract_origin)
|
||||
+ {
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (abstract_origin);
|
||||
+ while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao))
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (ao);
|
||||
+ gcc_assert (TREE_CODE (ao) == FUNCTION_DECL);
|
||||
+ fndecl = ao;
|
||||
+ }
|
||||
+ else
|
||||
+ fndecl = current_function_decl;
|
||||
+
|
||||
+ pp_printf (context->printer, "In %s %qs",
|
||||
+ function_category (fndecl),
|
||||
+ cxx_printable_name (fndecl, 2));
|
||||
+
|
||||
+ while (abstract_origin)
|
||||
+ {
|
||||
+ location_t *locus;
|
||||
+ tree block = abstract_origin;
|
||||
+
|
||||
+ locus = &BLOCK_SOURCE_LOCATION (block);
|
||||
+ fndecl = NULL;
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+ while (block && TREE_CODE (block) == BLOCK
|
||||
+ && BLOCK_ABSTRACT_ORIGIN (block))
|
||||
+ {
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (block);
|
||||
+
|
||||
+ while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao))
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (ao);
|
||||
+
|
||||
+ if (TREE_CODE (ao) == FUNCTION_DECL)
|
||||
+ {
|
||||
+ fndecl = ao;
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (TREE_CODE (ao) != BLOCK)
|
||||
+ break;
|
||||
+
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+ }
|
||||
+ if (fndecl)
|
||||
+ abstract_origin = block;
|
||||
+ else
|
||||
+ {
|
||||
+ while (block && TREE_CODE (block) == BLOCK)
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+
|
||||
+ if (TREE_CODE (block) == FUNCTION_DECL)
|
||||
+ fndecl = block;
|
||||
+ abstract_origin = NULL;
|
||||
+ }
|
||||
+ if (fndecl)
|
||||
+ {
|
||||
+ expanded_location s = expand_location (*locus);
|
||||
+ pp_base_character (context->printer, ',');
|
||||
+ pp_base_newline (context->printer);
|
||||
+ if (s.file != NULL)
|
||||
+ {
|
||||
+#ifdef USE_MAPPED_LOCATION
|
||||
+ if (flag_show_column && s.column != 0)
|
||||
+ pp_printf (context->printer,
|
||||
+ " inlined from %qs at %s:%d:%d",
|
||||
+ cxx_printable_name (fndecl, 2),
|
||||
+ s.file, s.line, s.column);
|
||||
+ else
|
||||
+#endif
|
||||
+ pp_printf (context->printer,
|
||||
+ " inlined from %qs at %s:%d",
|
||||
+ cxx_printable_name (fndecl, 2),
|
||||
+ s.file, s.line);
|
||||
+
|
||||
+ }
|
||||
+ else
|
||||
+ pp_printf (context->printer, " inlined from %qs",
|
||||
+ cxx_printable_name (fndecl, 2));
|
||||
+ }
|
||||
+ }
|
||||
+ pp_base_character (context->printer, ':');
|
||||
+ }
|
||||
pp_base_newline (context->printer);
|
||||
|
||||
- diagnostic_set_last_function (context);
|
||||
+ diagnostic_set_last_function (context, diagnostic);
|
||||
pp_base_destroy_prefix (context->printer);
|
||||
context->printer->prefix = old_prefix;
|
||||
}
|
||||
--- gcc/cp/cp-tree.h.jj 2007-09-25 11:45:25.000000000 +0200
|
||||
+++ gcc/cp/cp-tree.h 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -32,6 +32,7 @@ Boston, MA 02110-1301, USA. */
|
||||
#include "c-common.h"
|
||||
#include "name-lookup.h"
|
||||
struct diagnostic_context;
|
||||
+struct diagnostic_info;
|
||||
|
||||
/* Usage of TREE_LANG_FLAG_?:
|
||||
0: IDENTIFIER_MARKED (IDENTIFIER_NODEs)
|
||||
@@ -3832,7 +3833,8 @@ extern void cxx_print_decl (FILE *, tr
|
||||
extern void cxx_print_type (FILE *, tree, int);
|
||||
extern void cxx_print_identifier (FILE *, tree, int);
|
||||
extern void cxx_print_error_function (struct diagnostic_context *,
|
||||
- const char *);
|
||||
+ const char *,
|
||||
+ struct diagnostic_info *);
|
||||
extern void build_self_reference (void);
|
||||
extern int same_signature_p (tree, tree);
|
||||
extern void warn_hidden (tree);
|
||||
--- gcc/c-format.c.jj 2007-09-25 12:27:55.000000000 +0200
|
||||
+++ gcc/c-format.c 2007-09-28 22:50:35.000000000 +0200
|
||||
@@ -547,7 +547,7 @@ static const format_char_info gcc_diag_c
|
||||
{ "H", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
|
||||
|
||||
/* These will require a "tree" at runtime. */
|
||||
- { "J", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
|
||||
+ { "JK", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
|
||||
|
||||
{ "<>'", 0, STD_C89, NOARGUMENTS, "", "", NULL },
|
||||
{ "m", 0, STD_C89, NOARGUMENTS, "q", "", NULL },
|
||||
@@ -570,7 +570,7 @@ static const format_char_info gcc_tdiag_
|
||||
{ "H", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
|
||||
|
||||
/* These will require a "tree" at runtime. */
|
||||
- { "DFJT", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
|
||||
+ { "DFJKT", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
|
||||
|
||||
{ "<>'", 0, STD_C89, NOARGUMENTS, "", "", NULL },
|
||||
{ "m", 0, STD_C89, NOARGUMENTS, "q", "", NULL },
|
||||
@@ -593,7 +593,7 @@ static const format_char_info gcc_cdiag_
|
||||
{ "H", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
|
||||
|
||||
/* These will require a "tree" at runtime. */
|
||||
- { "DEFJT", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
|
||||
+ { "DEFJKT", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
|
||||
|
||||
{ "<>'", 0, STD_C89, NOARGUMENTS, "", "", NULL },
|
||||
{ "m", 0, STD_C89, NOARGUMENTS, "q", "", NULL },
|
||||
@@ -616,7 +616,7 @@ static const format_char_info gcc_cxxdia
|
||||
{ "H", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
|
||||
|
||||
/* These will require a "tree" at runtime. */
|
||||
- { "ADEFJTV",0,STD_C89,{ T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+#", "", NULL },
|
||||
+ { "ADEFJKTV",0,STD_C89,{ T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+#", "", NULL },
|
||||
|
||||
/* These accept either an 'int' or an 'enum tree_code' (which is handled as an 'int'.) */
|
||||
{ "CLOPQ",0,STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
|
||||
@@ -2601,6 +2601,9 @@ init_dynamic_diag_info (void)
|
||||
i = find_char_info_specifier_index (diag_fci, 'J');
|
||||
diag_fci[i].types[0].type = &t;
|
||||
diag_fci[i].pointer_count = 1;
|
||||
+ i = find_char_info_specifier_index (diag_fci, 'K');
|
||||
+ diag_fci[i].types[0].type = &t;
|
||||
+ diag_fci[i].pointer_count = 1;
|
||||
}
|
||||
|
||||
/* Handle the __gcc_tdiag__ format specifics. */
|
||||
@@ -2625,6 +2628,9 @@ init_dynamic_diag_info (void)
|
||||
i = find_char_info_specifier_index (tdiag_fci, 'J');
|
||||
tdiag_fci[i].types[0].type = &t;
|
||||
tdiag_fci[i].pointer_count = 1;
|
||||
+ i = find_char_info_specifier_index (tdiag_fci, 'K');
|
||||
+ tdiag_fci[i].types[0].type = &t;
|
||||
+ tdiag_fci[i].pointer_count = 1;
|
||||
}
|
||||
|
||||
/* Handle the __gcc_cdiag__ format specifics. */
|
||||
@@ -2649,6 +2655,9 @@ init_dynamic_diag_info (void)
|
||||
i = find_char_info_specifier_index (cdiag_fci, 'J');
|
||||
cdiag_fci[i].types[0].type = &t;
|
||||
cdiag_fci[i].pointer_count = 1;
|
||||
+ i = find_char_info_specifier_index (cdiag_fci, 'K');
|
||||
+ cdiag_fci[i].types[0].type = &t;
|
||||
+ cdiag_fci[i].pointer_count = 1;
|
||||
}
|
||||
|
||||
/* Handle the __gcc_cxxdiag__ format specifics. */
|
||||
@@ -2673,6 +2682,9 @@ init_dynamic_diag_info (void)
|
||||
i = find_char_info_specifier_index (cxxdiag_fci, 'J');
|
||||
cxxdiag_fci[i].types[0].type = &t;
|
||||
cxxdiag_fci[i].pointer_count = 1;
|
||||
+ i = find_char_info_specifier_index (cxxdiag_fci, 'K');
|
||||
+ cxxdiag_fci[i].types[0].type = &t;
|
||||
+ cxxdiag_fci[i].pointer_count = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
--- gcc/expr.c.jj 2007-09-25 15:19:15.000000000 +0200
|
||||
+++ gcc/expr.c 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -7512,21 +7512,21 @@ expand_expr_real_1 (tree exp, rtx target
|
||||
/* All valid uses of __builtin_va_arg_pack () are removed during
|
||||
inlining. */
|
||||
if (CALL_EXPR_VA_ARG_PACK (exp))
|
||||
- error ("invalid use of %<__builtin_va_arg_pack ()%>");
|
||||
+ error ("%Kinvalid use of %<__builtin_va_arg_pack ()%>", exp);
|
||||
{
|
||||
tree fndecl = get_callee_fndecl (exp), attr;
|
||||
|
||||
if (fndecl
|
||||
&& (attr = lookup_attribute ("error",
|
||||
DECL_ATTRIBUTES (fndecl))) != NULL)
|
||||
- error ("call to %qs declared with attribute error: %s",
|
||||
- lang_hooks.decl_printable_name (fndecl, 1),
|
||||
+ error ("%Kcall to %qs declared with attribute error: %s",
|
||||
+ exp, lang_hooks.decl_printable_name (fndecl, 1),
|
||||
TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
|
||||
if (fndecl
|
||||
&& (attr = lookup_attribute ("warning",
|
||||
DECL_ATTRIBUTES (fndecl))) != NULL)
|
||||
- warning (0, "call to %qs declared with attribute warning: %s",
|
||||
- lang_hooks.decl_printable_name (fndecl, 1),
|
||||
+ warning (0, "%Kcall to %qs declared with attribute warning: %s",
|
||||
+ exp, lang_hooks.decl_printable_name (fndecl, 1),
|
||||
TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
|
||||
|
||||
/* Check for a built-in function. */
|
||||
--- gcc/langhooks.c.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/langhooks.c 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -494,12 +494,15 @@ lhd_initialize_diagnostics (struct diagn
|
||||
/* The default function to print out name of current function that caused
|
||||
an error. */
|
||||
void
|
||||
-lhd_print_error_function (diagnostic_context *context, const char *file)
|
||||
+lhd_print_error_function (diagnostic_context *context, const char *file,
|
||||
+ diagnostic_info *diagnostic)
|
||||
{
|
||||
- if (diagnostic_last_function_changed (context))
|
||||
+ if (diagnostic_last_function_changed (context, diagnostic))
|
||||
{
|
||||
const char *old_prefix = context->printer->prefix;
|
||||
- char *new_prefix = file ? file_name_as_prefix (file) : NULL;
|
||||
+ tree abstract_origin = diagnostic->abstract_origin;
|
||||
+ char *new_prefix = (file && abstract_origin == NULL)
|
||||
+ ? file_name_as_prefix (file) : NULL;
|
||||
|
||||
pp_set_prefix (context->printer, new_prefix);
|
||||
|
||||
@@ -507,17 +510,95 @@ lhd_print_error_function (diagnostic_con
|
||||
pp_printf (context->printer, _("At top level:"));
|
||||
else
|
||||
{
|
||||
- if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE)
|
||||
+ tree fndecl, ao;
|
||||
+
|
||||
+ if (abstract_origin)
|
||||
+ {
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (abstract_origin);
|
||||
+ while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao))
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (ao);
|
||||
+ gcc_assert (TREE_CODE (ao) == FUNCTION_DECL);
|
||||
+ fndecl = ao;
|
||||
+ }
|
||||
+ else
|
||||
+ fndecl = current_function_decl;
|
||||
+
|
||||
+ if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
|
||||
pp_printf
|
||||
- (context->printer, _("In member function %qs:"),
|
||||
- lang_hooks.decl_printable_name (current_function_decl, 2));
|
||||
+ (context->printer, _("In member function %qs"),
|
||||
+ lang_hooks.decl_printable_name (fndecl, 2));
|
||||
else
|
||||
pp_printf
|
||||
- (context->printer, _("In function %qs:"),
|
||||
- lang_hooks.decl_printable_name (current_function_decl, 2));
|
||||
+ (context->printer, _("In function %qs"),
|
||||
+ lang_hooks.decl_printable_name (fndecl, 2));
|
||||
+
|
||||
+ while (abstract_origin)
|
||||
+ {
|
||||
+ location_t *locus;
|
||||
+ tree block = abstract_origin;
|
||||
+
|
||||
+ locus = &BLOCK_SOURCE_LOCATION (block);
|
||||
+ fndecl = NULL;
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+ while (block && TREE_CODE (block) == BLOCK
|
||||
+ && BLOCK_ABSTRACT_ORIGIN (block))
|
||||
+ {
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (block);
|
||||
+
|
||||
+ while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao))
|
||||
+ ao = BLOCK_ABSTRACT_ORIGIN (ao);
|
||||
+
|
||||
+ if (TREE_CODE (ao) == FUNCTION_DECL)
|
||||
+ {
|
||||
+ fndecl = ao;
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (TREE_CODE (ao) != BLOCK)
|
||||
+ break;
|
||||
+
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+ }
|
||||
+ if (fndecl)
|
||||
+ abstract_origin = block;
|
||||
+ else
|
||||
+ {
|
||||
+ while (block && TREE_CODE (block) == BLOCK)
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+
|
||||
+ if (TREE_CODE (block) == FUNCTION_DECL)
|
||||
+ fndecl = block;
|
||||
+ abstract_origin = NULL;
|
||||
+ }
|
||||
+ if (fndecl)
|
||||
+ {
|
||||
+ expanded_location s = expand_location (*locus);
|
||||
+ pp_character (context->printer, ',');
|
||||
+ pp_newline (context->printer);
|
||||
+ if (s.file != NULL)
|
||||
+ {
|
||||
+#ifdef USE_MAPPED_LOCATION
|
||||
+ if (flag_show_column && s.column != 0)
|
||||
+ pp_printf (context->printer,
|
||||
+ _(" inlined from %qs at %s:%d:%d"),
|
||||
+ lang_hooks.decl_printable_name (fndecl, 2),
|
||||
+ s.file, s.line, s.column);
|
||||
+ else
|
||||
+#endif
|
||||
+ pp_printf (context->printer,
|
||||
+ _(" inlined from %qs at %s:%d"),
|
||||
+ lang_hooks.decl_printable_name (fndecl, 2),
|
||||
+ s.file, s.line);
|
||||
+
|
||||
+ }
|
||||
+ else
|
||||
+ pp_printf (context->printer, _(" inlined from %qs"),
|
||||
+ lang_hooks.decl_printable_name (fndecl, 2));
|
||||
+ }
|
||||
+ }
|
||||
+ pp_character (context->printer, ':');
|
||||
}
|
||||
|
||||
- diagnostic_set_last_function (context);
|
||||
+ diagnostic_set_last_function (context, diagnostic);
|
||||
pp_flush (context->printer);
|
||||
context->printer->prefix = old_prefix;
|
||||
free ((char*) new_prefix);
|
||||
--- gcc/langhooks.h.jj 2007-02-20 22:39:12.000000000 +0100
|
||||
+++ gcc/langhooks.h 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -24,6 +24,7 @@ Boston, MA 02110-1301, USA. */
|
||||
/* This file should be #include-d after tree.h. */
|
||||
|
||||
struct diagnostic_context;
|
||||
+struct diagnostic_info;
|
||||
|
||||
struct gimplify_omp_ctx;
|
||||
|
||||
@@ -391,7 +392,8 @@ struct lang_hooks
|
||||
tree (*lang_get_callee_fndecl) (tree);
|
||||
|
||||
/* Called by report_error_function to print out function name. */
|
||||
- void (*print_error_function) (struct diagnostic_context *, const char *);
|
||||
+ void (*print_error_function) (struct diagnostic_context *, const char *,
|
||||
+ struct diagnostic_info *);
|
||||
|
||||
/* Called from expr_size to calculate the size of the value of an
|
||||
expression in a language-dependent way. Returns a tree for the size
|
||||
--- gcc/langhooks-def.h.jj 2007-02-20 22:39:13.000000000 +0100
|
||||
+++ gcc/langhooks-def.h 2007-09-28 22:45:19.000000000 +0200
|
||||
@@ -25,6 +25,7 @@ Boston, MA 02110-1301, USA. */
|
||||
#include "hooks.h"
|
||||
|
||||
struct diagnostic_context;
|
||||
+struct diagnostic_info;
|
||||
|
||||
/* Provide a hook routine for alias sets that always returns 1. This is
|
||||
used by languages that haven't deal with alias sets yet. */
|
||||
@@ -57,7 +58,7 @@ extern int lhd_types_compatible_p (tree,
|
||||
extern rtx lhd_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
|
||||
extern int lhd_expand_decl (tree);
|
||||
extern void lhd_print_error_function (struct diagnostic_context *,
|
||||
- const char *);
|
||||
+ const char *, struct diagnostic_info *);
|
||||
extern void lhd_set_decl_assembler_name (tree);
|
||||
extern bool lhd_can_use_bit_fields_p (void);
|
||||
extern bool lhd_warn_unused_global_decl (tree);
|
2928
gcc41.spec
2928
gcc41.spec
File diff suppressed because it is too large
Load Diff
@ -1,483 +0,0 @@
|
||||
#ifdef __sparc__
|
||||
register void *__thread_self __asm ("g7");
|
||||
#endif
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <syscall.h>
|
||||
|
||||
#if defined __i386__
|
||||
# define INTERNAL_SYSCALL_DECL(err) do { } while (0)
|
||||
# define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
({ \
|
||||
register unsigned int resultvar; \
|
||||
asm volatile ( \
|
||||
"movl %1, %%eax\n\t" \
|
||||
"int $0x80\n\t" \
|
||||
: "=a" (resultvar) \
|
||||
: "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc"); \
|
||||
(int) resultvar; })
|
||||
# define INTERNAL_SYSCALL_ERROR_P(val, err) \
|
||||
((unsigned int) (val) >= 0xfffff001u)
|
||||
# define ASMFMT_0()
|
||||
# define ASMFMT_1(arg1) \
|
||||
, "b" (arg1)
|
||||
# define ASMFMT_2(arg1, arg2) \
|
||||
, "b" (arg1), "c" (arg2)
|
||||
# define ASMFMT_3(arg1, arg2, arg3) \
|
||||
, "b" (arg1), "c" (arg2), "d" (arg3)
|
||||
#elif defined __x86_64__
|
||||
# define INTERNAL_SYSCALL_DECL(err) do { } while (0)
|
||||
# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
|
||||
({ \
|
||||
unsigned long resultvar; \
|
||||
LOAD_ARGS_##nr (args) \
|
||||
LOAD_REGS_##nr \
|
||||
asm volatile ( \
|
||||
"syscall\n\t" \
|
||||
: "=a" (resultvar) \
|
||||
: "0" (name) ASM_ARGS_##nr : "memory", "cc", "r11", "cx"); \
|
||||
(long) resultvar; })
|
||||
# define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args)
|
||||
# define INTERNAL_SYSCALL_ERROR_P(val, err) \
|
||||
((unsigned long) (val) >= -4095L)
|
||||
# define LOAD_ARGS_0()
|
||||
# define LOAD_REGS_0
|
||||
# define ASM_ARGS_0
|
||||
# define LOAD_ARGS_1(a1) \
|
||||
long int __arg1 = (long) (a1); \
|
||||
LOAD_ARGS_0 ()
|
||||
# define LOAD_REGS_1 \
|
||||
register long int _a1 asm ("rdi") = __arg1; \
|
||||
LOAD_REGS_0
|
||||
# define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1)
|
||||
# define LOAD_ARGS_2(a1, a2) \
|
||||
long int __arg2 = (long) (a2); \
|
||||
LOAD_ARGS_1 (a1)
|
||||
# define LOAD_REGS_2 \
|
||||
register long int _a2 asm ("rsi") = __arg2; \
|
||||
LOAD_REGS_1
|
||||
# define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2)
|
||||
# define LOAD_ARGS_3(a1, a2, a3) \
|
||||
long int __arg3 = (long) (a3); \
|
||||
LOAD_ARGS_2 (a1, a2)
|
||||
# define LOAD_REGS_3 \
|
||||
register long int _a3 asm ("rdx") = __arg3; \
|
||||
LOAD_REGS_2
|
||||
# define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3)
|
||||
#elif defined __powerpc__
|
||||
# define INTERNAL_SYSCALL_DECL(err) long int err
|
||||
# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
|
||||
({ \
|
||||
register long int r0 __asm__ ("r0"); \
|
||||
register long int r3 __asm__ ("r3"); \
|
||||
register long int r4 __asm__ ("r4"); \
|
||||
register long int r5 __asm__ ("r5"); \
|
||||
register long int r6 __asm__ ("r6"); \
|
||||
register long int r7 __asm__ ("r7"); \
|
||||
register long int r8 __asm__ ("r8"); \
|
||||
LOADARGS_##nr(name, args); \
|
||||
__asm__ __volatile__ \
|
||||
("sc\n\t" \
|
||||
"mfcr %0\n\t" \
|
||||
: "=&r" (r0), \
|
||||
"=&r" (r3), "=&r" (r4), "=&r" (r5), \
|
||||
"=&r" (r6), "=&r" (r7), "=&r" (r8) \
|
||||
: ASM_INPUT_##nr \
|
||||
: "r9", "r10", "r11", "r12", \
|
||||
"cr0", "ctr", "memory"); \
|
||||
err = r0; \
|
||||
(int) r3; \
|
||||
})
|
||||
# define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args)
|
||||
# define INTERNAL_SYSCALL_ERROR_P(val, err) \
|
||||
((void) (val), __builtin_expect ((err) & (1 << 28), 0))
|
||||
# define LOADARGS_0(name, dummy) \
|
||||
r0 = name
|
||||
# define LOADARGS_1(name, __arg1) \
|
||||
long int arg1 = (long int) (__arg1); \
|
||||
LOADARGS_0(name, 0); \
|
||||
r3 = arg1
|
||||
# define LOADARGS_2(name, __arg1, __arg2) \
|
||||
long int arg2 = (long int) (__arg2); \
|
||||
LOADARGS_1(name, __arg1); \
|
||||
r4 = arg2
|
||||
# define LOADARGS_3(name, __arg1, __arg2, __arg3) \
|
||||
long int arg3 = (long int) (__arg3); \
|
||||
LOADARGS_2(name, __arg1, __arg2); \
|
||||
r5 = arg3
|
||||
# define ASM_INPUT_0 "0" (r0)
|
||||
# define ASM_INPUT_1 ASM_INPUT_0, "1" (r3)
|
||||
# define ASM_INPUT_2 ASM_INPUT_1, "2" (r4)
|
||||
# define ASM_INPUT_3 ASM_INPUT_2, "3" (r5)
|
||||
#elif defined __ia64__
|
||||
# define DO_INLINE_SYSCALL_NCS(name, nr, args...) \
|
||||
LOAD_ARGS_##nr (args) \
|
||||
register long _r8 asm ("r8"); \
|
||||
register long _r10 asm ("r10"); \
|
||||
register long _r15 asm ("r15") = name; \
|
||||
long _retval; \
|
||||
LOAD_REGS_##nr \
|
||||
__asm __volatile ("break 0x100000;;" \
|
||||
: "=r" (_r8), "=r" (_r10), "=r" (_r15) \
|
||||
ASM_OUTARGS_##nr \
|
||||
: "2" (_r15) ASM_ARGS_##nr \
|
||||
: "memory" ASM_CLOBBERS_##nr); \
|
||||
_retval = _r8;
|
||||
# define INTERNAL_SYSCALL_DECL(err) long int err
|
||||
# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
|
||||
({ \
|
||||
DO_INLINE_SYSCALL_NCS (name, nr, args) \
|
||||
err = _r10; \
|
||||
_retval; })
|
||||
# define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args)
|
||||
# define INTERNAL_SYSCALL_ERROR_P(val, err) (err == -1)
|
||||
# define LOAD_ARGS_0()
|
||||
# define LOAD_REGS_0
|
||||
# define LOAD_ARGS_1(a1) \
|
||||
long _arg1 = (long) (a1); \
|
||||
LOAD_ARGS_0 ()
|
||||
# define LOAD_REGS_1 \
|
||||
register long _out0 asm ("out0") = _arg1; \
|
||||
LOAD_REGS_0
|
||||
# define LOAD_ARGS_2(a1, a2) \
|
||||
long _arg2 = (long) (a2); \
|
||||
LOAD_ARGS_1 (a1)
|
||||
# define LOAD_REGS_2 \
|
||||
register long _out1 asm ("out1") = _arg2; \
|
||||
LOAD_REGS_1
|
||||
# define LOAD_ARGS_3(a1, a2, a3) \
|
||||
long _arg3 = (long) (a3); \
|
||||
LOAD_ARGS_2 (a1, a2)
|
||||
# define LOAD_REGS_3 \
|
||||
register long _out2 asm ("out2") = _arg3; \
|
||||
LOAD_REGS_2
|
||||
# define ASM_OUTARGS_0
|
||||
# define ASM_OUTARGS_1 ASM_OUTARGS_0, "=r" (_out0)
|
||||
# define ASM_OUTARGS_2 ASM_OUTARGS_1, "=r" (_out1)
|
||||
# define ASM_OUTARGS_3 ASM_OUTARGS_2, "=r" (_out2)
|
||||
# define ASM_ARGS_0
|
||||
# define ASM_ARGS_1 ASM_ARGS_0, "3" (_out0)
|
||||
# define ASM_ARGS_2 ASM_ARGS_1, "4" (_out1)
|
||||
# define ASM_ARGS_3 ASM_ARGS_2, "5" (_out2)
|
||||
# define ASM_CLOBBERS_0 ASM_CLOBBERS_1, "out0"
|
||||
# define ASM_CLOBBERS_1 ASM_CLOBBERS_2, "out1"
|
||||
# define ASM_CLOBBERS_2 ASM_CLOBBERS_3, "out2"
|
||||
# define ASM_CLOBBERS_3 ASM_CLOBBERS_4, "out3"
|
||||
# define ASM_CLOBBERS_4 ASM_CLOBBERS_5, "out4"
|
||||
# define ASM_CLOBBERS_5 ASM_CLOBBERS_6, "out5"
|
||||
# define ASM_CLOBBERS_6_COMMON , "out6", "out7", \
|
||||
/* Non-stacked integer registers, minus r8, r10, r15. */ \
|
||||
"r2", "r3", "r9", "r11", "r12", "r13", "r14", "r16", "r17", "r18", \
|
||||
"r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", \
|
||||
"r28", "r29", "r30", "r31", \
|
||||
/* Predicate registers. */ \
|
||||
"p6", "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15", \
|
||||
/* Non-rotating fp registers. */ \
|
||||
"f6", "f7", "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
|
||||
/* Branch registers. */ \
|
||||
"b6"
|
||||
# define ASM_CLOBBERS_6 ASM_CLOBBERS_6_COMMON , "b7"
|
||||
#elif defined __s390__
|
||||
# define INTERNAL_SYSCALL_DECL(err) do { } while (0)
|
||||
# define INTERNAL_SYSCALL_DIRECT(name, err, nr, args...) \
|
||||
({ \
|
||||
DECLARGS_##nr(args) \
|
||||
register long _ret asm("2"); \
|
||||
asm volatile ( \
|
||||
"svc %b1\n\t" \
|
||||
: "=d" (_ret) \
|
||||
: "i" (__NR_##name) ASMFMT_##nr \
|
||||
: "memory" ); \
|
||||
_ret; })
|
||||
# define INTERNAL_SYSCALL_SVC0(name, err, nr, args...) \
|
||||
({ \
|
||||
DECLARGS_##nr(args) \
|
||||
register unsigned long _nr asm("1") = (unsigned long)(__NR_##name); \
|
||||
register long _ret asm("2"); \
|
||||
asm volatile ( \
|
||||
"svc 0\n\t" \
|
||||
: "=d" (_ret) \
|
||||
: "d" (_nr) ASMFMT_##nr \
|
||||
: "memory" ); \
|
||||
_ret; })
|
||||
# define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
(((__NR_##name) < 256) ? \
|
||||
INTERNAL_SYSCALL_DIRECT(name, err, nr, args) : \
|
||||
INTERNAL_SYSCALL_SVC0(name, err,nr, args))
|
||||
# define INTERNAL_SYSCALL_ERROR_P(val, err) \
|
||||
((unsigned long) (val) >= -4095UL)
|
||||
# define DECLARGS_0()
|
||||
# define DECLARGS_1(arg1) \
|
||||
register unsigned long gpr2 asm ("2") = (unsigned long)(arg1);
|
||||
# define DECLARGS_2(arg1, arg2) \
|
||||
DECLARGS_1(arg1) \
|
||||
register unsigned long gpr3 asm ("3") = (unsigned long)(arg2);
|
||||
# define DECLARGS_3(arg1, arg2, arg3) \
|
||||
DECLARGS_2(arg1, arg2) \
|
||||
register unsigned long gpr4 asm ("4") = (unsigned long)(arg3);
|
||||
# define ASMFMT_0
|
||||
# define ASMFMT_1 , "0" (gpr2)
|
||||
# define ASMFMT_2 , "0" (gpr2), "d" (gpr3)
|
||||
# define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4)
|
||||
#elif defined __sparc__
|
||||
# ifndef __arch64__
|
||||
# define __INTERNAL_SYSCALL_STRING \
|
||||
"ta 0x10;" \
|
||||
"bcs,a 1f;" \
|
||||
" sub %%g0, %%o0, %%o0;" \
|
||||
"1:"
|
||||
# define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g6", \
|
||||
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
|
||||
"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
|
||||
"f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
|
||||
"f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
|
||||
"cc", "memory"
|
||||
# else
|
||||
# define __INTERNAL_SYSCALL_STRING \
|
||||
"ta 0x6d;" \
|
||||
"bcs,a,pt %%xcc, 1f;" \
|
||||
" sub %%g0, %%o0, %%o0;" \
|
||||
"1:"
|
||||
# define __SYSCALL_CLOBBERS "g2", "g3", "g4", "g5", "g6", \
|
||||
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
|
||||
"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
|
||||
"f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
|
||||
"f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
|
||||
"f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46", \
|
||||
"f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62", \
|
||||
"cc", "memory"
|
||||
# endif
|
||||
#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
|
||||
#define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
inline_syscall##nr(__INTERNAL_SYSCALL_STRING, __NR_##name, args)
|
||||
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
|
||||
((unsigned long) (val) >= -515L)
|
||||
# define inline_syscall0(string,name,dummy...) \
|
||||
({ \
|
||||
register long __o0 __asm__ ("o0"); \
|
||||
register long __g1 __asm__ ("g1") = name; \
|
||||
__asm __volatile (string : "=r" (__g1), "=r" (__o0) : \
|
||||
"0" (__g1) : \
|
||||
__SYSCALL_CLOBBERS); \
|
||||
__o0; \
|
||||
})
|
||||
# define inline_syscall1(string,name,arg1) \
|
||||
({ \
|
||||
register long __o0 __asm__ ("o0") = (long)(arg1); \
|
||||
register long __g1 __asm__ ("g1") = name; \
|
||||
__asm __volatile (string : "=r" (__g1), "=r" (__o0) : \
|
||||
"0" (__g1), "1" (__o0) : \
|
||||
__SYSCALL_CLOBBERS); \
|
||||
__o0; \
|
||||
})
|
||||
# define inline_syscall2(string,name,arg1,arg2) \
|
||||
({ \
|
||||
register long __o0 __asm__ ("o0") = (long)(arg1); \
|
||||
register long __o1 __asm__ ("o1") = (long)(arg2); \
|
||||
register long __g1 __asm__ ("g1") = name; \
|
||||
__asm __volatile (string : "=r" (__g1), "=r" (__o0) : \
|
||||
"0" (__g1), "1" (__o0), "r" (__o1) : \
|
||||
__SYSCALL_CLOBBERS); \
|
||||
__o0; \
|
||||
})
|
||||
# define inline_syscall3(string,name,arg1,arg2,arg3) \
|
||||
({ \
|
||||
register long __o0 __asm__ ("o0") = (long)(arg1); \
|
||||
register long __o1 __asm__ ("o1") = (long)(arg2); \
|
||||
register long __o2 __asm__ ("o2") = (long)(arg3); \
|
||||
register long __g1 __asm__ ("g1") = name; \
|
||||
__asm __volatile (string : "=r" (__g1), "=r" (__o0) : \
|
||||
"0" (__g1), "1" (__o0), "r" (__o1), \
|
||||
"r" (__o2) : \
|
||||
__SYSCALL_CLOBBERS); \
|
||||
__o0; \
|
||||
})
|
||||
#elif defined __alpha__
|
||||
# define INTERNAL_SYSCALL(name, err_out, nr, args...) \
|
||||
INTERNAL_SYSCALL1(name, err_out, nr, args)
|
||||
# define INTERNAL_SYSCALL1(name, err_out, nr, args...) \
|
||||
INTERNAL_SYSCALL_NCS(__NR_##name, err_out, nr, args)
|
||||
# define INTERNAL_SYSCALL_NCS(name, err_out, nr, args...) \
|
||||
({ \
|
||||
long _sc_ret, _sc_err; \
|
||||
inline_syscall##nr(name, args); \
|
||||
err_out = _sc_err; \
|
||||
_sc_ret; \
|
||||
})
|
||||
# define INTERNAL_SYSCALL_DECL(err) long int err
|
||||
# define INTERNAL_SYSCALL_ERROR_P(val, err) err
|
||||
# define inline_syscall_clobbers \
|
||||
"$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \
|
||||
"$22", "$23", "$24", "$25", "$27", "$28", "memory"
|
||||
# define inline_syscall_r0_asm
|
||||
# define inline_syscall_r0_out_constraint "=v"
|
||||
# define inline_syscall0(name, args...) \
|
||||
{ \
|
||||
register long _sc_0 inline_syscall_r0_asm; \
|
||||
register long _sc_19 __asm__("$19"); \
|
||||
\
|
||||
_sc_0 = name; \
|
||||
__asm__ __volatile__ \
|
||||
("callsys # %0 %1 <= %2" \
|
||||
: inline_syscall_r0_out_constraint (_sc_0), \
|
||||
"=r"(_sc_19) \
|
||||
: "0"(_sc_0) \
|
||||
: inline_syscall_clobbers, \
|
||||
"$16", "$17", "$18", "$20", "$21"); \
|
||||
_sc_ret = _sc_0, _sc_err = _sc_19; \
|
||||
}
|
||||
# define inline_syscall1(name,arg1) \
|
||||
{ \
|
||||
register long _sc_0 inline_syscall_r0_asm; \
|
||||
register long _sc_16 __asm__("$16"); \
|
||||
register long _sc_19 __asm__("$19"); \
|
||||
\
|
||||
_sc_0 = name; \
|
||||
_sc_16 = (long) (arg1); \
|
||||
__asm__ __volatile__ \
|
||||
("callsys # %0 %1 <= %2 %3" \
|
||||
: inline_syscall_r0_out_constraint (_sc_0), \
|
||||
"=r"(_sc_19), "=r"(_sc_16) \
|
||||
: "0"(_sc_0), "2"(_sc_16) \
|
||||
: inline_syscall_clobbers, \
|
||||
"$17", "$18", "$20", "$21"); \
|
||||
_sc_ret = _sc_0, _sc_err = _sc_19; \
|
||||
}
|
||||
# define inline_syscall2(name,arg1,arg2) \
|
||||
{ \
|
||||
register long _sc_0 inline_syscall_r0_asm; \
|
||||
register long _sc_16 __asm__("$16"); \
|
||||
register long _sc_17 __asm__("$17"); \
|
||||
register long _sc_19 __asm__("$19"); \
|
||||
\
|
||||
_sc_0 = name; \
|
||||
_sc_16 = (long) (arg1); \
|
||||
_sc_17 = (long) (arg2); \
|
||||
__asm__ __volatile__ \
|
||||
("callsys # %0 %1 <= %2 %3 %4" \
|
||||
: inline_syscall_r0_out_constraint (_sc_0), \
|
||||
"=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17) \
|
||||
: "0"(_sc_0), "2"(_sc_16), "3"(_sc_17) \
|
||||
: inline_syscall_clobbers, \
|
||||
"$18", "$20", "$21"); \
|
||||
_sc_ret = _sc_0, _sc_err = _sc_19; \
|
||||
}
|
||||
# define inline_syscall3(name,arg1,arg2,arg3) \
|
||||
{ \
|
||||
register long _sc_0 inline_syscall_r0_asm; \
|
||||
register long _sc_16 __asm__("$16"); \
|
||||
register long _sc_17 __asm__("$17"); \
|
||||
register long _sc_18 __asm__("$18"); \
|
||||
register long _sc_19 __asm__("$19"); \
|
||||
\
|
||||
_sc_0 = name; \
|
||||
_sc_16 = (long) (arg1); \
|
||||
_sc_17 = (long) (arg2); \
|
||||
_sc_18 = (long) (arg3); \
|
||||
__asm__ __volatile__ \
|
||||
("callsys # %0 %1 <= %2 %3 %4 %5" \
|
||||
: inline_syscall_r0_out_constraint (_sc_0), \
|
||||
"=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \
|
||||
"=r"(_sc_18) \
|
||||
: "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \
|
||||
"4"(_sc_18) \
|
||||
: inline_syscall_clobbers, "$20", "$21"); \
|
||||
_sc_ret = _sc_0, _sc_err = _sc_19; \
|
||||
}
|
||||
#elif defined __arm__ && defined __ARM_EABI__
|
||||
# define INTERNAL_SYSCALL_DECL(err) do { } while (0)
|
||||
# define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
({ \
|
||||
register int _r0 __asm__("r0"); \
|
||||
register int _nr __asm__("r7"); \
|
||||
LOAD_ARGS_##nr(args) \
|
||||
_nr = __NR_##name; \
|
||||
asm volatile ("swi\t0\t@ syscall " #name "\n\t" \
|
||||
: "=r" (_r0) \
|
||||
: "r" (_nr) ASM_ARGS_##nr \
|
||||
: "memory"); \
|
||||
_r0; })
|
||||
# define INTERNAL_SYSCALL_ERROR_P(val, err) \
|
||||
((unsigned int) (val) >= 0xfffff001u)
|
||||
# define ASM_ARGS_0
|
||||
# define ASM_ARGS_1 , "r" (_r0)
|
||||
# define ASM_ARGS_2 , "r" (_r0), "r" (_r1)
|
||||
# define ASM_ARGS_3 , "r" (_r0), "r" (_r1), "r" (_r2)
|
||||
# define LOAD_ARGS_0()
|
||||
# define LOAD_ARGS_1(r0) \
|
||||
_r0 = (int)r0;
|
||||
# define LOAD_ARGS_2(r0, r1) \
|
||||
_r0 = (int)r0; \
|
||||
register int _r1 __asm__("r1") = (int)r1;
|
||||
# define LOAD_ARGS_3(r0, r1, r2) \
|
||||
_r0 = (int)r0; \
|
||||
register int _r1 __asm__("r1") = (int)r1; \
|
||||
register int _r2 __asm__("r2") = (int)r2;
|
||||
#endif
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
const char *arg[] = { "/sbin/ldconfig", 0 };
|
||||
long ret;
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
ret = INTERNAL_SYSCALL (access, err, 2, arg[0], X_OK);
|
||||
if (INTERNAL_SYSCALL_ERROR_P (ret, err))
|
||||
INTERNAL_SYSCALL (exit, err, 1, 0);
|
||||
INTERNAL_SYSCALL (execve, err, 3, arg[0], arg, &argv[argc + 1]);
|
||||
INTERNAL_SYSCALL (exit, err, 1, 110);
|
||||
return 110;
|
||||
}
|
||||
|
||||
int __libc_multiple_threads __attribute__((nocommon));
|
||||
int __libc_enable_asynccancel (void) { return 0; }
|
||||
void __libc_disable_asynccancel (int x) { }
|
||||
void __libc_csu_init (void) { }
|
||||
void __libc_csu_fini (void) { }
|
||||
pid_t __fork (void) { return -1; }
|
||||
char thr_buf[65536];
|
||||
|
||||
#ifndef __powerpc__
|
||||
int __libc_start_main (int (*main) (int argc, char **argv),
|
||||
int argc, char **argv,
|
||||
void (*init) (void), void (*fini) (void),
|
||||
void (*rtld_fini) (void), void * stack_end)
|
||||
#else
|
||||
struct startup_info
|
||||
{
|
||||
void *sda_base;
|
||||
int (*main) (int, char **, char **, void *);
|
||||
int (*init) (int, char **, char **, void *);
|
||||
void (*fini) (void);
|
||||
};
|
||||
|
||||
int __libc_start_main (int argc, char **argv, char **ev,
|
||||
void *auxvec, void (*rtld_fini) (void),
|
||||
struct startup_info *stinfo,
|
||||
char **stack_on_entry)
|
||||
#endif
|
||||
{
|
||||
#if defined __ia64__ || defined __powerpc64__
|
||||
register void *r13 __asm ("r13") = thr_buf + 32768;
|
||||
__asm ("" : : "r" (r13));
|
||||
#elif defined __sparc__
|
||||
register void *g6 __asm ("g6") = thr_buf + 32768;
|
||||
__thread_self = thr_buf + 32768;
|
||||
__asm ("" : : "r" (g6), "r" (__thread_self));
|
||||
#elif defined __s390__ && !defined __s390x__
|
||||
__asm ("sar %%a0,%0" : : "d" (thr_buf + 32768));
|
||||
#elif defined __s390x__
|
||||
__asm ("sar %%a1,%0; srlg 0,%0,32; sar %%a0,0" : : "d" (thr_buf + 32768) : "0");
|
||||
#elif defined __powerpc__ && !defined __powerpc64__
|
||||
register void *r2 __asm ("r2") = thr_buf + 32768;
|
||||
__asm ("" : : "r" (r2));
|
||||
#endif
|
||||
#ifdef __powerpc__
|
||||
argc = (long)*stack_on_entry;
|
||||
argv = stack_on_entry + 1;
|
||||
#endif
|
||||
main (argc, argv);
|
||||
return 110;
|
||||
}
|
291
protoize.1
291
protoize.1
@ -1,291 +0,0 @@
|
||||
.\" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
|
||||
.\" See section COPYING for conditions for redistribution
|
||||
.\"
|
||||
.TH protoize 1 "8 December 2006" "GCC" "GNU"
|
||||
.SH NAME
|
||||
protoize, unprotoize \- automatically add or remove function prototypes
|
||||
.SH SYNOPSIS
|
||||
.HP 7
|
||||
\fBprotoize\fR [\-CfgklNnqv] [\-B \fIDIRECTORY\fR] [\-c \fICOMPILATION-OPTIONS\fR] [\-d \fIDIRECTORY\fR] [\-i \fISTRING\fR] [\-p \fIPROGRAM\fR] [\-x \fIFILE\fR] [\fIFILE\fR...]
|
||||
.HP 7
|
||||
\fBunprotoize\fR [\-fkNnqv] [\-c \fICOMPILATION-OPTIONS\fR] [\-d \fIDIRECTORY\fR] [\-i \fISTRING\fR] [\-p \fIPROGRAM\fR] [\-x \fIFILE\fR] [\fIFILE\fR...]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
\fBprotoize\fR is an optional part of GCC.
|
||||
You can use it to add prototypes to a program,
|
||||
thus converting the program to ANSI C in one respect.
|
||||
The companion program
|
||||
\fBunprotoize\fR does the reverse: it removes argument types from any prototypes that are found.
|
||||
.PP
|
||||
When you run these programs, you must specify a set of source files
|
||||
as command line arguments.
|
||||
The conversion programs start out by compiling these files
|
||||
to see what functions they define.
|
||||
The information gathered about a file
|
||||
\fIFOO\fR is saved in a file named \fIFOO.X\fR.
|
||||
.PP
|
||||
After scanning comes the actual conversion.
|
||||
The specified files are all eligible to be converted;
|
||||
any files they include (whether sources or just headers) are eligible as well.
|
||||
.PP
|
||||
But not all the eligible files are converted.
|
||||
By default,
|
||||
\fBprotoize\fR and \fBunprotoize\fR
|
||||
convert only source and header files in the current directory.
|
||||
You can specify additional directories whose files
|
||||
should be converted with the
|
||||
\fB\-d\fR \fIDIRECTORY\fR option.
|
||||
You can also specify particular files to exclude with the
|
||||
\fB\-x\fR \fIFILE\fR option.
|
||||
A file is converted if it is eligible, its directory name matches one of the
|
||||
specified directory names, and its name within the directory has not
|
||||
been excluded.
|
||||
.PP
|
||||
Basic conversion with
|
||||
\fBprotoize\fR consists of rewriting most function definitions and function declarations
|
||||
to specify the types of the arguments.
|
||||
The only ones not rewritten are those for varargs functions.
|
||||
.PP
|
||||
\fBprotoize\fR optionally inserts prototype declarations at the beginning of the source file,
|
||||
to make them available for any calls that precede the function's definition.
|
||||
Or it can insert prototype declarations with block scope
|
||||
in the blocks where undeclared functions are called.
|
||||
.PP
|
||||
Basic conversion with
|
||||
\fBunprotoize\fR
|
||||
consists of rewriting most function declarations to remove any argument types,
|
||||
and rewriting function definitions to the old-style pre-ANSI form.
|
||||
.PP
|
||||
Both conversion programs print a warning for any function
|
||||
declaration or definition that they can't convert.
|
||||
You can suppress these warnings with the
|
||||
\fB\-q\fR option.
|
||||
.PP
|
||||
The output from
|
||||
\fBprotoize\fR or \fBunprotoize\fR
|
||||
replaces the original source file.
|
||||
The original file is renamed to a name ending with
|
||||
\fI.save\fR.
|
||||
If the \fI.save\fR file already exists, then the source file is simply discarded.
|
||||
.PP
|
||||
\fBprotoize\fR and \fBunprotoize\fR both depend on
|
||||
\fBgcc\fR\|(1) to scan the program and collect information about the functions it uses.
|
||||
.PP
|
||||
The options are as follows:
|
||||
.TP
|
||||
\fB\-B\fR \fIDIRECTORY\fR
|
||||
Look for the file
|
||||
\fISYSCALLS.c.X\fR in \fIdirectory\fR,
|
||||
instead of the usual directory (normally \fI/usr/local/lib\fR).
|
||||
This file contains prototype information about standard system functions.
|
||||
This option applies only to \fBprotoize\fR.
|
||||
.TP
|
||||
\fB\-C\fR
|
||||
Rename files to end in
|
||||
\fI.C\fR instead of \fI.c\fR.
|
||||
This is convenient if you are converting a C program to C++.
|
||||
This option applies only to
|
||||
\fBprotoize\fR.
|
||||
.TP
|
||||
\fB\-c\fR \fICOMPILATION-OPTIONS\fR
|
||||
Use \fICOMPILATION-OPTIONS\fR as the options when running \fBgcc\fR\|(1) to produce the
|
||||
\fI.X\fR files.
|
||||
The special option \fB\-aux-info\fR is always passed in addition, to tell gcc to write a
|
||||
\fI.X\fR file.
|
||||
Note that the compilation options must be given as a single argument to
|
||||
\fBprotoize\fR or \fBunprotoize\fR.
|
||||
If you want to specify several gcc options, you must quote the entire set of
|
||||
compilation options to make them a single word in the shell.
|
||||
There are certain gcc arguments that you cannot use, because they
|
||||
would produce the wrong kind of output.
|
||||
These include
|
||||
\fB\-g\fR, \fB\-O\fR, \fB\-c\fR, \fB\-S\fR,\fB\-o\fR.
|
||||
If you include these in the \fICOMPILATION-OPTIONS\fR, they are ignored.
|
||||
.TP
|
||||
\fB\-d\fR \fIDIRECTORY\fR
|
||||
Specify additional directories whose files should be converted.
|
||||
.TP
|
||||
\fB\-g\fR
|
||||
Add explicit global declarations.
|
||||
This means inserting explicit declarations at the beginning of each
|
||||
source file for each function that is called in the file and was not declared.
|
||||
These declarations precede the first function definition that contains a
|
||||
call to an undeclared function.
|
||||
This option applies only to
|
||||
.\fBprotoize\fR.
|
||||
.TP
|
||||
\fB\-i\fR \fISTRING\fR
|
||||
Indent old-style parameter declarations with the string
|
||||
\fISTRING\fR.
|
||||
This option applies only to
|
||||
\fBprotoize\fR.
|
||||
\fBunprotoize\fR converts prototyped function definitions to old-style
|
||||
function definitions, where the arguments are declared between the
|
||||
argument list and the initial
|
||||
\fB{\fR.
|
||||
By default,
|
||||
\fBunprotoize\fR uses five spaces as the indentation.
|
||||
If you want to indent with just one space instead, use
|
||||
\fB\-i " "\fR.
|
||||
.TP
|
||||
\fB\-k\fR
|
||||
Keep the
|
||||
\fI.X\fR files.
|
||||
Normally, they are deleted after conversion is finished.
|
||||
.TP
|
||||
\fB\-l\fR
|
||||
Add explicit local declarations.
|
||||
\fBprotoize\fR with
|
||||
\fB\-l\fR inserts a prototype declaration for each function in each block which calls
|
||||
the function without any declaration.
|
||||
This option applies only to
|
||||
\fBprotoize\fR.
|
||||
.TP
|
||||
\fB\-N\fR
|
||||
Make no \fI.save\fR files.
|
||||
The original files are simply deleted.
|
||||
Use this option with caution.
|
||||
.TP
|
||||
\fB\-n\fR
|
||||
Make no real changes.
|
||||
This mode just prints information about the conversions
|
||||
that would have been done without
|
||||
\fB\-n\fR.
|
||||
.TP
|
||||
\fB\-p\fR \fIPROGRAM\fR
|
||||
Use the program
|
||||
\fBPROGRAM\fR as the compiler.
|
||||
Normally, the name
|
||||
\fBgcc\fR is used.
|
||||
.TP
|
||||
\fB\-q\fR
|
||||
Work quietly.
|
||||
Most warnings are suppressed.
|
||||
.TP
|
||||
\fB\-v\fR
|
||||
Print the version number, just like
|
||||
\fB\-v\fR for gcc.
|
||||
.TP
|
||||
\fB\-x\fR \fBFILE\fR
|
||||
List of files to exclude from the conversion process.
|
||||
.PP
|
||||
If you need special compiler options to compile one of your program's
|
||||
source files, then you should generate that file's
|
||||
\fI.X\fR file specially, by running gcc on that source file with
|
||||
the appropriate options and the option
|
||||
\fB\-aux-info\fR.
|
||||
Then run
|
||||
\fBprotoize\fR on the entire set of files.
|
||||
\fBprotoize\fR will use the existing
|
||||
\fI.X\fR file because it is newer than the source file.
|
||||
For example:
|
||||
.PP
|
||||
.DL $ gcc -Dfoo=bar file1.c -aux-info
|
||||
.DL $ protoize *.c
|
||||
.PP
|
||||
You need to include the special files along with the rest in the
|
||||
\fBprotoize\fR command, even though their
|
||||
\fI.X\fR files already exist, because otherwise they won't get converted.
|
||||
.PP
|
||||
.SH SEE ALSO
|
||||
\fBgcc\fR\|(1), and the Info entry for \fBgcc\fR, particularly
|
||||
\fBRunning protoize\fR section.
|
||||
.SH HISTORY
|
||||
Ron Guilmette implemented the
|
||||
\fBprotoize\fR and \fBunprotoize\fR tools.
|
||||
.SH AUTHORS
|
||||
See the GCC manual for the contributors to GCC.
|
||||
.SH CAVEATS
|
||||
The conversion programs \fBprotoize\fR and \fBunprotoize\fR
|
||||
can sometimes change a source file in a way that won't work
|
||||
unless you rearrange it.
|
||||
.PP
|
||||
\fBprotoize\fR can insert references to a type name or type tag before
|
||||
the definition, or in a file where they are not defined.
|
||||
.PP
|
||||
If this happens, compiler error messages should indicate where the
|
||||
new references are, so fixing the file by hand is straightforward.
|
||||
.PP
|
||||
There are some C constructs which \fBprotoize\fR
|
||||
cannot figure out.
|
||||
For example, it can't determine argument types for declaring a
|
||||
pointer-to-function variable; this must be done by hand. \fBprotoize\fR
|
||||
inserts a comment containing \fB???\fR each time it finds such a variable;
|
||||
all such variables can be found by searching for this string.
|
||||
ANSI C does not require declaring the argument types of
|
||||
pointer-to-function types.
|
||||
.PP
|
||||
Using \fBunprotoize\fR can easily introduce bugs.
|
||||
If the program relied on prototypes to bring about conversion of arguments,
|
||||
these conversions will not take place in the program without prototypes.
|
||||
One case in which you can be sure \fBunprotoize\fR
|
||||
is safe is when you are removing prototypes that were made with
|
||||
\fBprotoize\fR; if the program worked before without any prototypes,
|
||||
it will work again without them.
|
||||
.PP
|
||||
You can find all the places where this problem might occur by
|
||||
compiling the program with the \fB\-Wconversion\fR option.
|
||||
It prints a warning whenever an argument is converted.
|
||||
.PP
|
||||
Both conversion programs can be confused if there are macro calls
|
||||
in and around the text to be converted.
|
||||
In other words, the standard syntax for a declaration or definition
|
||||
must not result from expanding a macro.
|
||||
This problem is inherent in the design of C and cannot be fixed.
|
||||
If only a few functions have confusing macro calls,
|
||||
you can easily convert them manually.
|
||||
.PP
|
||||
\fBprotoize\fR cannot get the argument types for a function whose definition was not
|
||||
actually compiled due to preprocessing conditionals.
|
||||
When this happens, \fBprotoize\fR changes nothing in regard to such a function.
|
||||
\fBprotoize\fR tries to detect such instances and warn about them.
|
||||
.PP
|
||||
You can generally work around this problem by using
|
||||
\fBprotoize\fR step by step, each time specifying a different set of
|
||||
\fB\-D\fR options for compilation, until all of the functions have been converted.
|
||||
There is no automatic way to verify that you have got them all, however.
|
||||
.PP
|
||||
Confusion may result if there is an occasion to convert a function
|
||||
declaration or definition in a region of source code where there
|
||||
is more than one formal parameter list present.
|
||||
Thus, attempts to convert code containing multiple (conditionally compiled)
|
||||
versions of a single function header (in the same vicinity)
|
||||
may not produce the desired (or expected) results.
|
||||
.PP
|
||||
If you plan on converting source files which contain such code,
|
||||
it is recommended that you first make sure that each conditionally
|
||||
compiled region of source code which contains an alternative
|
||||
function header also contains at least one additional follower
|
||||
token (past the final right parenthesis of the function header).
|
||||
This should circumvent the problem.
|
||||
.PP
|
||||
\fBunprotoize\fR can become confused when trying to convert a function
|
||||
definition or declaration which contains a declaration for a
|
||||
pointer-to-function formal argument which has the same name as the
|
||||
function being defined or declared.
|
||||
We recommand you avoid such choices of formal parameter names.
|
||||
.PP
|
||||
It might be necessary to correct some of the indentation by hand and
|
||||
break long lines.
|
||||
(The conversion programs don't write lines longer than eighty characters
|
||||
in any case.)
|
||||
.SH BUGS
|
||||
For instructions on reporting bugs, see the GCC manual.
|
||||
.SH COPYING
|
||||
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
.PP
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
.PP
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the
|
||||
entire resulting derived work is distributed under the terms of a
|
||||
permission notice identical to this one.
|
||||
.PP
|
||||
Permission is granted to copy and distribute translations of this
|
||||
manual into another language, under the above conditions for modified
|
||||
versions, except that this permission notice may be included in
|
||||
translations approved by the Free Software Foundation instead of in
|
||||
the original English.
|
4
sources
4
sources
@ -1 +1,3 @@
|
||||
562ab2446c60a9145da385ac56cf7715 gcc-4.1.2-20070925.tar.bz2
|
||||
SHA512 (gcc-10.0.1-20200216.tar.xz) = 56507e273b00e85ed4145e80df65d9b4e4791f23e7cb5d931f85b9420cbf3a7125ba49978dc73c2987c0a6101f741dc5a60a08cb3346d4c5082400cbcfcdd008
|
||||
SHA512 (newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz) = 9ceea0b883185fe489724d54a7e909bb6ed4785fcadf80162033dc6a133e2657337175601278e4155d1f8fac275ff9c8a02572aea876166c608774c809f832e9
|
||||
SHA512 (nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz) = f6d10db94fa1570ae0f94df073fa3c73c8e5ee16d59070b53d94f7db0de8a031bc44d7f3f1852533da04b625ce758e022263855ed43cfc6867e0708d001e53c7
|
||||
|
7
update-gcc.sh
Executable file
7
update-gcc.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
[ -d gcc-dir.tmp ] && echo gcc-dir.tmp already exists && exit 1
|
||||
git clone --depth 1 git://gcc.gnu.org/git/gcc.git gcc-dir.tmp
|
||||
git --git-dir=gcc-dir.tmp/.git fetch --depth 1 origin $1
|
||||
d=`date --iso | sed 's/-//g'`
|
||||
git --git-dir=gcc-dir.tmp/.git archive --prefix=gcc-10.0.1-$d/ $1 | xz -9e > gcc-10.0.1-$d.tar.xz
|
||||
rm -rf gcc-dir.tmp
|
Loading…
Reference in New Issue
Block a user