Compare commits
595 Commits
Author | SHA1 | Date |
---|---|---|
Jakub Jelinek | 891cef7d9b | |
Jakub Jelinek | 9bce8e2449 | |
Jakub Jelinek | 55f9b2f336 | |
Fedora Release Engineering | f8b6352429 | |
Jakub Jelinek | 5e141990fb | |
Jakub Jelinek | 912e74c756 | |
Jakub Jelinek | b84725ac52 | |
Jakub Jelinek | 7de85a2603 | |
Jakub Jelinek | 576d41c1c6 | |
Jakub Jelinek | 562d27c22f | |
Jakub Jelinek | 57a884df51 | |
Jakub Jelinek | 04dfce99db | |
Jakub Jelinek | b05570344e | |
Jakub Jelinek | 52eb664223 | |
Florian Weimer | 0d8c061e19 | |
Jerry James | 56772a9401 | |
Jerry James | 4110c03341 | |
Jerry James | 4c8c128cd0 | |
Miro Hrončok | f684732e50 | |
Jakub Jelinek | 4562ca924e | |
Fedora Release Engineering | 90028182f3 | |
Jakub Jelinek | 6919aa138f | |
Jakub Jelinek | 672c273c6d | |
Jakub Jelinek | 94498d7104 | |
Jakub Jelinek | 28742415b7 | |
Jakub Jelinek | f2dc6d80c8 | |
Jakub Jelinek | b2a5d6a477 | |
Jakub Jelinek | fd99b9378d | |
Jakub Jelinek | a3fcce8f5b | |
Jakub Jelinek | 84af04ddb6 | |
Jakub Jelinek | b6b1340286 | |
Jakub Jelinek | 84ce3f0d05 | |
Jakub Jelinek | 5c04074052 | |
Jakub Jelinek | 4d0e748417 | |
Jakub Jelinek | 1d6c11d8df | |
Jakub Jelinek | 843493ecf7 | |
Jakub Jelinek | bad9bc25a4 | |
Jakub Jelinek | f790525bec | |
Jakub Jelinek | fc147e70c0 | |
Jakub Jelinek | 8ccdd26200 | |
Jakub Jelinek | d1c6bd89f3 | |
Jakub Jelinek | e0c920a406 | |
Jakub Jelinek | d228ee264c | |
Jakub Jelinek | e6073613ef | |
Jakub Jelinek | f147a68289 | |
Jakub Jelinek | 7ee3a099fa | |
Jakub Jelinek | fe09f8496b | |
Jakub Jelinek | 16bcddd9d4 | |
Fedora Release Engineering | 7545ecb969 | |
Jakub Jelinek | a6c3c8f082 | |
Igor Gnatenko | d895623061 | |
Igor Gnatenko | a71fb3364e | |
Igor Gnatenko | db0aca6b64 | |
Jakub Jelinek | 215844b31b | |
Jakub Jelinek | 80dc8803df | |
Igor Gnatenko | 3759f6f554 | |
Jakub Jelinek | adee8bcb39 | |
Jakub Jelinek | cee0dddd34 | |
Jakub Jelinek | da335fc250 | |
Jakub Jelinek | bcdeb85901 | |
Jakub Jelinek | 1321d9a8de | |
Jakub Jelinek | 3694befabb | |
Jakub Jelinek | 2a22f8c83a | |
Jakub Jelinek | 866b034132 | |
Jakub Jelinek | 17d43f4d58 | |
Jakub Jelinek | b627ff6a1c | |
Jakub Jelinek | 98b4937fcb | |
Jakub Jelinek | 858f1e25fb | |
Jakub Jelinek | e66bcabdd3 | |
Jakub Jelinek | a2239731d4 | |
Jakub Jelinek | c05efdcd33 | |
Jakub Jelinek | 6e4a12be24 | |
Jakub Jelinek | 7df147abdd | |
Jakub Jelinek | 2edf51cd28 | |
Fedora Release Engineering | 3deee803bf | |
Jakub Jelinek | 8602ede777 | |
Miro Hrončok | 8fb0e5b0d3 | |
Jakub Jelinek | 7ad4cfb1f2 | |
Jakub Jelinek | c01972f342 | |
Jakub Jelinek | b1fe12b88a | |
Miro Hrončok | 0aaf98d346 | |
Jakub Jelinek | c0d3a20ab3 | |
Jakub Jelinek | 4b90559c50 | |
Miro Hrončok | e0b3768e1a | |
Jakub Jelinek | 391f8204b0 | |
Jakub Jelinek | b7ec01b44a | |
Jakub Jelinek | db4105af40 | |
Jakub Jelinek | eb398c7fb1 | |
Jakub Jelinek | 0d6e9e6a5b | |
Marek Polacek | 3ae68fd84a | |
Jakub Jelinek | 9647f3f8db | |
Jakub Jelinek | 0e0506dd37 | |
Jakub Jelinek | 1bfe0e3c3b | |
Jakub Jelinek | 83dbb2847c | |
Jakub Jelinek | 86d615d880 | |
Jakub Jelinek | b182d5ff6b | |
Jakub Jelinek | 2a24f771d1 | |
Jakub Jelinek | f445959efa | |
Jakub Jelinek | 16819750d2 | |
Jakub Jelinek | d301a3c7b8 | |
Igor Gnatenko | ff5dc29cd1 | |
Igor Gnatenko | 7d69d114a8 | |
Jakub Jelinek | 497de73bd7 | |
Jakub Jelinek | c0ae016cb4 | |
Jakub Jelinek | 7c58fda150 | |
Jakub Jelinek | 313e678076 | |
Jakub Jelinek | 08f661c823 | |
Jakub Jelinek | d40df5fcf2 | |
Jakub Jelinek | e6bd153753 | |
Fedora Release Engineering | cc9b5fa3ba | |
Florian Weimer | 47b8ada335 | |
Richard W.M. Jones | ca8c0f7dc6 | |
Jeff Law | fa22fac534 | |
Jakub Jelinek | 216b951886 | |
Jakub Jelinek | 7a1512fd56 | |
Jakub Jelinek | 3139eaf997 | |
Jakub Jelinek | da33ffbe57 | |
Jakub Jelinek | b147991d7c | |
Jakub Jelinek | e400728936 | |
Jeff Law | 6af92eba78 | |
Jakub Jelinek | e90615843b | |
Jakub Jelinek | a6ea9c4518 | |
Jakub Jelinek | 402f1e9204 | |
Jakub Jelinek | f36e50eab5 | |
Jakub Jelinek | 8f4badaa38 | |
Jakub Jelinek | d69736566d | |
Marek Polacek | 544398b502 | |
Jeff Law | 2cf19e11cb | |
Jeff Law | e987aff0a2 | |
Jakub Jelinek | 553b93f777 | |
Marek Polacek | 82e3c0071b | |
Marek Polacek | 6e856a1b72 | |
Jakub Jelinek | ff60308ab9 | |
Jakub Jelinek | 9b6d8e7c01 | |
Jakub Jelinek | 23f4b29ddd | |
Jakub Jelinek | 42139e4c56 | |
Fedora Release Engineering | 28eca72fa2 | |
Jakub Jelinek | dc54e4f153 | |
Jakub Jelinek | e3161c6575 | |
Jakub Jelinek | 5e51bccff0 | |
Jakub Jelinek | ac2a849717 | |
Jakub Jelinek | f5843a4192 | |
Jakub Jelinek | 7d28ff24f9 | |
Jakub Jelinek | e8e4643647 | |
Jakub Jelinek | e7ba2ccc61 | |
Jakub Jelinek | dcf86feb99 | |
Jakub Jelinek | 7a880b1a75 | |
Jakub Jelinek | fe7fce2ad1 | |
Jakub Jelinek | 45a2f253fb | |
Jakub Jelinek | 015c95afae | |
Jakub Jelinek | 0ec4e456b8 | |
Jakub Jelinek | ecfa641ec4 | |
Jakub Jelinek | 3e19e07261 | |
Jakub Jelinek | 61f26fa336 | |
Jakub Jelinek | 5e173247a4 | |
Jakub Jelinek | 066310e826 | |
Jakub Jelinek | 6c2cfcacd9 | |
Jakub Jelinek | 88ff65fe51 | |
Jakub Jelinek | 4708d93f41 | |
Jakub Jelinek | cc580afc17 | |
Jakub Jelinek | 9c103286cf | |
Jakub Jelinek | f9528196b2 | |
Jakub Jelinek | 1c8b31bfd3 | |
Jakub Jelinek | a15b5bd3a0 | |
Jakub Jelinek | d4df112f70 | |
Jakub Jelinek | 03d47e4b9f | |
Jakub Jelinek | 9e5fffaae3 | |
Jakub Jelinek | 398cd1e186 | |
Jakub Jelinek | 4d72b19d1c | |
Jakub Jelinek | 3d5e14ec38 | |
Jakub Jelinek | 6ed6e5a4c3 | |
Jakub Jelinek | 98a12cbd71 | |
Jakub Jelinek | 4c8d27c4d6 | |
Jakub Jelinek | 557c86d25c | |
Jakub Jelinek | 16c6a8852b | |
Jakub Jelinek | 4839e4255b | |
Jakub Jelinek | a3b64e0868 | |
Jakub Jelinek | 010b19f294 | |
Jakub Jelinek | a96763b324 | |
Jakub Jelinek | dcf3c8d360 | |
Jakub Jelinek | 8e4a3f2d33 | |
Jakub Jelinek | 50fa9e4ee3 | |
Jakub Jelinek | 31e7eb359b | |
Jakub Jelinek | 4f5892b0e1 | |
Jakub Jelinek | 39e0659a62 | |
Jakub Jelinek | 0ccb8bbebc | |
Jakub Jelinek | f77ea1a1aa | |
Jakub Jelinek | aece5e1599 | |
Jakub Jelinek | fd1cb09e79 | |
Jakub Jelinek | b66b3a4e1c | |
Jakub Jelinek | bef1492459 | |
Jakub Jelinek | ed49338072 | |
Jakub Jelinek | 47e7711955 | |
Jakub Jelinek | 34ff97e734 | |
Peter Robinson | 8297b8b107 | |
Jakub Jelinek | aed55db9d5 | |
Jakub Jelinek | 005db08c91 | |
Jakub Jelinek | f027054e0f | |
Jakub Jelinek | 773cefac2c | |
Jakub Jelinek | 8a240523f5 | |
Jakub Jelinek | d9e1ca5983 | |
Jakub Jelinek | 89e370f159 | |
Jakub Jelinek | ec74b26ecd | |
Jakub Jelinek | cde96063b7 | |
Jakub Jelinek | f7b06a7726 | |
Jakub Jelinek | 395869404d | |
Jakub Jelinek | 97475d9eac | |
Dennis Gilmore | 348f6fd9c9 | |
Jakub Jelinek | 2d005021d3 | |
Jakub Jelinek | 885401bf7e | |
Jakub Jelinek | 4be70d1ef3 | |
Jakub Jelinek | 314efdbb41 | |
Jakub Jelinek | bd1b81e9ec | |
Jakub Jelinek | d85626def8 | |
Jakub Jelinek | cc2a83d686 | |
Dan Horák | 9ac4480c60 | |
Orion Poplawski | 9cda1c00f1 | |
Orion Poplawski | 42a3075cdf | |
Jakub Jelinek | a04a33c99f | |
Jakub Jelinek | 04e43e85d1 | |
Jakub Jelinek | 3af662e237 | |
Jakub Jelinek | 7469a333bd | |
Jakub Jelinek | c2a1e7ae5d | |
Jakub Jelinek | 9e75c715be | |
Jakub Jelinek | cd907e635a | |
Jakub Jelinek | 265c57ff22 | |
Jakub Jelinek | 9fb8c87d6b | |
Jakub Jelinek | df1d6ea021 | |
Jakub Jelinek | 6534eed5ef | |
Jakub Jelinek | c148037b80 | |
Jaromir Capik | 274d6185bd | |
Jakub Jelinek | 99f1530af5 | |
Dennis Gilmore | 9d66f2aa7e | |
Jaromir Capik | 1a6fe020a9 | |
Jakub Jelinek | f0234e9c6f | |
Jakub Jelinek | 0bb9c97686 | |
Jakub Jelinek | b5d17a9ac5 | |
Jakub Jelinek | f3095e1332 | |
Jakub Jelinek | 7a229a5888 | |
Jakub Jelinek | 133d0a0f64 | |
Jakub Jelinek | 652db2243e | |
Jakub Jelinek | 19ca4dcbaa | |
Jakub Jelinek | 91c7bec969 | |
Jakub Jelinek | 7fcf30a7ea | |
Jakub Jelinek | 0bc6460875 | |
Jakub Jelinek | addcbcb750 | |
Jakub Jelinek | d752cf184d | |
Jakub Jelinek | 8ea1c62843 | |
Jakub Jelinek | e6685fa969 | |
Jakub Jelinek | 8b4ef1c4cf | |
Jakub Jelinek | 5b794eb004 | |
Till Maas | 3f4ac1c552 | |
Jakub Jelinek | e22880b36d | |
Jakub Jelinek | 305029d3ec | |
Jakub Jelinek | a2ef59f731 | |
Jakub Jelinek | 19b59d9a23 | |
Jakub Jelinek | 6d4716823e | |
Jakub Jelinek | d76b340928 | |
Jakub Jelinek | 8654925ece | |
Jakub Jelinek | 0215eb2e85 | |
Jakub Jelinek | cf944628eb | |
Jakub Jelinek | c728afb1bb | |
Jakub Jelinek | 83ca86ca70 | |
Jakub Jelinek | 314add3fda | |
Jakub Jelinek | 765b1cc36a | |
Jakub Jelinek | ff74606e8e | |
Jakub Jelinek | 274be4f351 | |
Jakub Jelinek | a6d3dcaca6 | |
Jakub Jelinek | 2f08a3f6d8 | |
Jakub Jelinek | ff411575cc | |
Jakub Jelinek | b8d50582fb | |
Jakub Jelinek | 7f99993652 | |
Jakub Jelinek | 06398e8981 | |
Jakub Jelinek | b75648d9b2 | |
Jakub Jelinek | 79c442fecf | |
Jakub Jelinek | 4ac68e8f20 | |
Jakub Jelinek | e3e00ff5dd | |
Jakub Jelinek | b30271576a | |
Jakub Jelinek | 79ac3cdb38 | |
Jakub Jelinek | f5f8bc6087 | |
Jakub Jelinek | 3438bcad98 | |
Jakub Jelinek | 4fa57fa088 | |
Jakub Jelinek | a593d741ef | |
Jakub Jelinek | 8036281669 | |
Jakub Jelinek | 24eca83ae3 | |
Jakub Jelinek | 69d0fcbc90 | |
Jakub Jelinek | 0806d93e69 | |
Jakub Jelinek | d048d4b08d | |
Jakub Jelinek | af3b5a8175 | |
Jakub Jelinek | 69c89853de | |
Jakub Jelinek | cc74938640 | |
Dan Horák | 5a434b44d3 | |
Jakub Jelinek | 4503e5ecde | |
Jakub Jelinek | c204df3143 | |
Jakub Jelinek | b63748e323 | |
Tom Callaway | a365d3e4eb | |
Jakub Jelinek | 17446a0ad9 | |
Jakub Jelinek | 78557d4f6e | |
Jakub Jelinek | 3e2f90cd29 | |
Jakub Jelinek | 4c9c56bc02 | |
Kyle McMartin | 7e9585f371 | |
Richard Henderson | 4ec33619df | |
Jakub Jelinek | 8c3f968e67 | |
Jakub Jelinek | 593c3952f8 | |
Jakub Jelinek | 4d58f0308a | |
Dennis Gilmore | b446c2e737 | |
Jakub Jelinek | 5a75d1ef76 | |
Jakub Jelinek | fd8fd40120 | |
Jakub Jelinek | 033def827b | |
Jakub Jelinek | 99dddb3746 | |
Jakub Jelinek | 6d24375c60 | |
Jakub Jelinek | d43d3d6446 | |
Jakub Jelinek | d495ed6f81 | |
Jakub Jelinek | 83a8e4c260 | |
Jakub Jelinek | 58525d3c9e | |
Jakub Jelinek | 991ab254f2 | |
Jakub Jelinek | 594ac2c7d7 | |
Jakub Jelinek | bd92d74066 | |
Jakub Jelinek | 14fee31c28 | |
Jakub Jelinek | 8e4bdb38f2 | |
Jakub Jelinek | 848872f40b | |
Jakub Jelinek | c3342eaf1c | |
Jakub Jelinek | a079048eee | |
Jakub Jelinek | 2a555c3cf9 | |
Jakub Jelinek | 7d55b59b7e | |
Jakub Jelinek | 8d0243eb05 | |
Jakub Jelinek | 39b12a1a1b | |
Jakub Jelinek | 39f49505ef | |
Kyle McMartin | 57702a0fa8 | |
Jakub Jelinek | cf2421524e | |
Jakub Jelinek | 308f1508a6 | |
Jakub Jelinek | 1bc0509b8f | |
Jakub Jelinek | 78dc96aa1e | |
Jakub Jelinek | 6809951262 | |
Jakub Jelinek | 8be72f05f6 | |
Jakub Jelinek | 1984ee75ad | |
Jakub Jelinek | 107d671c75 | |
Jakub Jelinek | 5652b86227 | |
Jakub Jelinek | 01c6d18afa | |
Jakub Jelinek | e175f3e4b7 | |
Jakub Jelinek | cf558d9039 | |
Jakub Jelinek | cb3be801e6 | |
Jakub Jelinek | 6f858633ed | |
Jakub Jelinek | d747bb409f | |
Jakub Jelinek | f1ba2f493a | |
Dennis Gilmore | 7c9911eee8 | |
Jakub Jelinek | e7ac0256f6 | |
Jakub Jelinek | 3abd19c007 | |
Jakub Jelinek | f9bd6769eb | |
Jakub Jelinek | c27a7db22e | |
Jakub Jelinek | 0e0fc2804a | |
Jakub Jelinek | a19406ffe8 | |
Jakub Jelinek | 9584892771 | |
Jakub Jelinek | 9af2ab495c | |
Jakub Jelinek | 5c60aab4d1 | |
Jakub Jelinek | 4bcc1e4fe2 | |
Jakub Jelinek | 8938366a48 | |
Jakub Jelinek | 3b9c960514 | |
Jakub Jelinek | c0371f2be9 | |
Jakub Jelinek | 694ef36d21 | |
Jakub Jelinek | 729b75087d | |
Jakub Jelinek | 220b984b00 | |
Jakub Jelinek | 89bd8eeaf5 | |
Jakub Jelinek | 2bea4b26c1 | |
Jakub Jelinek | 8799d226ba | |
Jakub Jelinek | 48c4d3a12f | |
Jakub Jelinek | 7789476ecb | |
Jakub Jelinek | 7c03367081 | |
Rex Dieter | 4ab034f8ca | |
Jakub Jelinek | 225104138d | |
Jakub Jelinek | d23aa8964c | |
Jakub Jelinek | 218acd09ac | |
Jakub Jelinek | b471196219 | |
Jakub Jelinek | 081310d587 | |
Jakub Jelinek | c9aef059c5 | |
Jakub Jelinek | af08a8b294 | |
Jakub Jelinek | 99eb194caf | |
Jakub Jelinek | b9d5903bc3 | |
Jakub Jelinek | 5b97d78690 | |
Jakub Jelinek | 6980affb9b | |
Jakub Jelinek | f16dbfc81a | |
Jakub Jelinek | 23db191d05 | |
Jakub Jelinek | 1f0b14bc67 | |
Jakub Jelinek | 95108be4ed | |
Jakub Jelinek | e835ae255a | |
Tom Callaway | 30ee91c661 | |
Tom Callaway | 88d23c2975 | |
Jakub Jelinek | 171e01f806 | |
Jakub Jelinek | 8479884c4b | |
Jakub Jelinek | 079c4158d0 | |
Jakub Jelinek | 747298b149 | |
Jon Ciesla | f3ca3c472d | |
Jon Ciesla | dd781f028c | |
Jakub Jelinek | b62b28279a | |
Jakub Jelinek | 1db9652d3f | |
Jakub Jelinek | c7f844b164 | |
Jakub Jelinek | a1b7d697b8 | |
Jakub Jelinek | 703be9734e | |
Jakub Jelinek | 5d9509e3f6 | |
Jakub Jelinek | b5e6324f17 | |
Jakub Jelinek | ed30c6bf51 | |
Jakub Jelinek | 8181de5ce0 | |
Jakub Jelinek | 1d285b5a5f | |
Jakub Jelinek | b9d0acf940 | |
Jakub Jelinek | e02177a0fa | |
Jakub Jelinek | 5ef5ca7845 | |
Jakub Jelinek | a54b05b75c | |
Jakub Jelinek | 43ee372cff | |
Jakub Jelinek | ee79e7e0ab | |
Jakub Jelinek | 8eaabf978c | |
Jakub Jelinek | b1be385d8b | |
Jakub Jelinek | 83584bab04 | |
Jakub Jelinek | d2bfdbf5fa | |
Jakub Jelinek | 23fc385ac6 | |
Jakub Jelinek | 63df62bec5 | |
Jakub Jelinek | 09d4d57e3f | |
Jakub Jelinek | 6fbf2051a5 | |
Jakub Jelinek | 3eca00bcb5 | |
Jakub Jelinek | 58da100211 | |
Jakub Jelinek | 76070518ae | |
Jakub Jelinek | ceba2f7e86 | |
Jakub Jelinek | 8b74069114 | |
Jakub Jelinek | 055a7a490c | |
Jakub Jelinek | 02343d2d87 | |
Jakub Jelinek | c886fb5bab | |
Jakub Jelinek | 52ed89edc9 | |
Jakub Jelinek | 2382f77e4f | |
Jakub Jelinek | 48fb608e1f | |
Jakub Jelinek | 9cf7da719f | |
Jakub Jelinek | af901f0d9b | |
Jakub Jelinek | f2ce251d7b | |
Jakub Jelinek | 21d9bf9a9a | |
Jakub Jelinek | e3e70e5e70 | |
Jakub Jelinek | c0579b832a | |
Jakub Jelinek | 15d1c7249f | |
Jakub Jelinek | 8529466512 | |
Jakub Jelinek | cb86c036cc | |
Dan Horák | 7673532492 | |
Jakub Jelinek | 9414f6f26c | |
Jakub Jelinek | d962a92335 | |
Jakub Jelinek | e1c663c977 | |
Jakub Jelinek | a539bf4094 | |
Jakub Jelinek | 5c29a25740 | |
Rex Dieter | de609bb65f | |
Jakub Jelinek | 7750bc9d3c | |
Jakub Jelinek | c2adc6fa4b | |
Dennis Gilmore | 8647f27101 | |
Marcela Mašláňová | 9e87f7a00a | |
Marcela Mašláňová | eae73016d7 | |
Jakub Jelinek | 758837f646 | |
Jakub Jelinek | 9679e72bfc | |
Jakub Jelinek | 03e379eaf6 | |
Jakub Jelinek | 9c16225727 | |
Jakub Jelinek | 55c286cdef | |
Jakub Jelinek | d176bf367a | |
Jakub Jelinek | 3774a68ac6 | |
Jakub Jelinek | a3e3a13e14 | |
Dennis Gilmore | c365d99172 | |
Jakub Jelinek | 6b781854a6 | |
Jakub Jelinek | 055fab3c16 | |
Jakub Jelinek | 794381f06a | |
Jakub Jelinek | f7f5fb5d3e | |
Jakub Jelinek | 2512207346 | |
Jakub Jelinek | eaa63a4598 | |
Jakub Jelinek | f9a19c1c37 | |
Jakub Jelinek | 37b9e831cd | |
Jakub Jelinek | 1c4059f5c4 | |
Jakub Jelinek | f3bd36c606 | |
Jakub Jelinek | 759d90703d | |
Jakub Jelinek | 20b1a2c231 | |
Jakub Jelinek | bb9f8664bb | |
Dennis Gilmore | 25220f3a3f | |
Dennis Gilmore | 8694567421 | |
Jakub Jelinek | 3e097055d1 | |
David Malcolm | bf880f673d | |
David Malcolm | 60a4c4d537 | |
Jakub Jelinek | 2d7b03d247 | |
Jakub Jelinek | e409bbf1b0 | |
Fedora Release Engineering | 034cab8256 | |
Jakub Jelinek | 4b316cf2e5 | |
Jakub Jelinek | 4459e8aea1 | |
Jakub Jelinek | b5a20a1d7e | |
Jakub Jelinek | 1074058107 | |
Jakub Jelinek | 121bd6bf21 | |
Jakub Jelinek | 8717b1d411 | |
Jakub Jelinek | 4572f2db82 | |
Jakub Jelinek | 36720823b7 | |
Jakub Jelinek | 52e0713736 | |
Jakub Jelinek | fd1b3bc669 | |
Tom Callaway | 20c88e5918 | |
Jakub Jelinek | 2bd4446896 | |
Jakub Jelinek | 26c09a98ec | |
Jakub Jelinek | 13e93d2a5d | |
Jakub Jelinek | 2122c33f00 | |
Jakub Jelinek | c55cbd53a6 | |
Jakub Jelinek | 23c1e2d22a | |
Jakub Jelinek | e332e73999 | |
Jakub Jelinek | 82f78973b0 | |
Jakub Jelinek | 483ed19fc1 | |
Jakub Jelinek | dc2c0a96e5 | |
Jakub Jelinek | d6469194bd | |
Jakub Jelinek | 0a5caf80d3 | |
Jakub Jelinek | 1d0a646cc5 | |
Jakub Jelinek | 08e9ee2de5 | |
Jakub Jelinek | bc7138a9a2 | |
Dennis Gilmore | 3b7f0ed37e | |
Jakub Jelinek | 108494b92d | |
Jakub Jelinek | 1fd246efa8 | |
Jakub Jelinek | 6e98f300dc | |
Jakub Jelinek | 462317c02b | |
Bill Nottingham | 8f4400202c | |
Jakub Jelinek | 7e5ced8dfb | |
Jakub Jelinek | aad3859b62 | |
Jakub Jelinek | e2781b7b62 | |
Jakub Jelinek | b90c67c32e | |
Jakub Jelinek | ef4f83143f | |
Jakub Jelinek | dad43f9003 | |
Jakub Jelinek | d5843666e9 | |
Jakub Jelinek | e29a68e7a9 | |
Jakub Jelinek | 153c32b01a | |
Jakub Jelinek | d022d11749 | |
Jakub Jelinek | a291f05d00 | |
Jakub Jelinek | 38ba9bfb90 | |
Jakub Jelinek | 116cffef39 | |
Jakub Jelinek | 1e5093a776 | |
Jakub Jelinek | 3b6291bcd4 | |
Jakub Jelinek | cb4e33ae41 | |
Jakub Jelinek | 41ba330f5c | |
Jakub Jelinek | a80cc6e7a4 | |
Jakub Jelinek | 2e22743b01 | |
Jakub Jelinek | 4644e4c6ba | |
Jakub Jelinek | 7c593b37fa | |
Jakub Jelinek | 183c086052 | |
Jakub Jelinek | 542b0e2cf2 | |
Jesse Keating | 5b3f12009d | |
Jakub Jelinek | 9d32d8a8bc | |
Jakub Jelinek | 3ebf1ff6bf | |
Jakub Jelinek | 48bc863929 | |
Jakub Jelinek | aefc846ec6 | |
Jakub Jelinek | b4b081811c | |
Jakub Jelinek | 54f2a73e85 | |
Jakub Jelinek | 326f95a149 | |
Jakub Jelinek | 07ae3828e7 | |
Jakub Jelinek | 0c755993b1 | |
Jakub Jelinek | 561373393e | |
Jakub Jelinek | bbfc11ab8f | |
Jakub Jelinek | 057d3867f2 | |
Jakub Jelinek | 23f7769aa4 | |
Jakub Jelinek | 473419c647 | |
Jakub Jelinek | eddb3f2c3a | |
Jakub Jelinek | 1418c181c1 | |
Jakub Jelinek | c3b415bb00 | |
Jakub Jelinek | 7adee03fa5 | |
Jakub Jelinek | 0ebfd21c57 | |
Jakub Jelinek | cdcb4d30f8 | |
Jakub Jelinek | 293a503065 | |
Jakub Jelinek | f56bb064e4 | |
Jakub Jelinek | babb47d673 | |
Jakub Jelinek | a1dd9faa06 | |
Jakub Jelinek | 9ecc1a3a56 | |
Jakub Jelinek | 718ed1464b | |
Jakub Jelinek | 706509ff52 | |
Jakub Jelinek | d5e4370952 | |
Dennis Gilmore | 31f39411a2 | |
Jakub Jelinek | 5a612cf11d | |
Jakub Jelinek | 8ac0ea7ebe | |
Jakub Jelinek | caa5b98426 | |
Jakub Jelinek | 57f97f54f5 | |
Jakub Jelinek | da33c910e9 | |
Jakub Jelinek | 00052d5c3a | |
Jesse Keating | a404f5d9fb | |
Jakub Jelinek | 4786fd5d72 | |
Jakub Jelinek | 9d8aac18cb | |
Jakub Jelinek | 9fceea1844 | |
Jakub Jelinek | 3b4372beb4 | |
Jakub Jelinek | ecb75e16b1 | |
Jakub Jelinek | 74d9670684 | |
Jakub Jelinek | 522700d7f6 | |
Jakub Jelinek | d02d0c24e1 | |
Jakub Jelinek | 8318459afa | |
Jakub Jelinek | bd553397cd | |
Jakub Jelinek | 32effdcb3a | |
Jakub Jelinek | e6636958bd | |
Jakub Jelinek | 12092fe58a | |
Jakub Jelinek | 5563284fa7 | |
Jakub Jelinek | 9f6c7e39fa | |
Jakub Jelinek | 8cd2032d20 | |
Jakub Jelinek | 263fe1c06b | |
Jakub Jelinek | fc70adad35 | |
Jakub Jelinek | f29a19f5ea | |
Jakub Jelinek | b281ffaf2a | |
Jakub Jelinek | 6bd32f1b6d | |
Jakub Jelinek | 5a5d8906df | |
Jakub Jelinek | 81c1aa90e1 | |
Jakub Jelinek | 7c07471093 |
|
@ -1,2 +0,0 @@
|
|||
gcc-4.3.2-20081105.tar.bz2
|
||||
fastjar-0.95.tar.gz
|
|
@ -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
|
|
@ -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}/
|
|
@ -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
|
|
@ -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
|
|
@ -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}
|
|
@ -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
|
|
@ -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)
|
|
@ -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,
|
|
@ -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;
|
|
@ -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
|
||||
;;
|
|
@ -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))
|
|
@ -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">
|
|
@ -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 \
|
|
@ -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.
|
|
@ -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
|
1351
gcc43-aes.patch
1351
gcc43-aes.patch
File diff suppressed because it is too large
Load Diff
|
@ -1,42 +0,0 @@
|
|||
2008-08-26 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* g++.dg/ext/altivec-3.C: Move AltiVec code out of main.
|
||||
|
||||
2008-04-04 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* gcc.dg/var-expand3.c: Skip for powerpc-linux if not on AltiVec HW.
|
||||
|
||||
--- gcc/testsuite/g++.dg/ext/altivec-3.C (revision 139609)
|
||||
+++ gcc/testsuite/g++.dg/ext/altivec-3.C (revision 139610)
|
||||
@@ -120,16 +120,19 @@ void baz2 (int i, ... )
|
||||
CHECK_INVARIANT (vec_all_eq (vxi.v, vx_g.v));
|
||||
}
|
||||
|
||||
-int main(void)
|
||||
+void main1(void)
|
||||
{
|
||||
CHECK_INVARIANT (sizeof(struct foo) == 8 && sizeof(struct vfoo) == 48);
|
||||
|
||||
- altivec_check();
|
||||
-
|
||||
bar(i_1, x_g, (short)i_2, (float)d_2, ld_1, (char)i_1, d_3);
|
||||
baz(i_1, v_g, i_1, vx_g, i_1, v2_g, i_1, vx2_g);
|
||||
quux(i_1, v_g, v_g);
|
||||
baz2(i_1, vx_g);
|
||||
-
|
||||
+}
|
||||
+
|
||||
+int main(void)
|
||||
+{
|
||||
+ altivec_check();
|
||||
+ main1();
|
||||
return 0;
|
||||
}
|
||||
--- gcc/testsuite/gcc.dg/var-expand3.c (revision 133910)
|
||||
+++ gcc/testsuite/gcc.dg/var-expand3.c (revision 133911)
|
||||
@@ -1,4 +1,4 @@
|
||||
-/* { dg-do run { target { powerpc*-*-* && powerpc_altivec_ok } } }} */
|
||||
+/* { dg-do run { target { powerpc*-*-* && vmx_hw } } }} */
|
||||
/* { dg-options "-O2 -funroll-loops -ffast-math -fvariable-expansion-in-unroller -maltivec -dL" } */
|
||||
|
||||
#include "altivec.h"
|
|
@ -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
|
||||
@@ -906,7 +906,7 @@ extern int fixuplabelno;
|
||||
%{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
|
||||
|
||||
#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,61 +0,0 @@
|
|||
Build i386.rpm libgomp and libsupc++.a(guard.o) as i486+, pre-i486
|
||||
hardware isn't supported because NPTL doesn't support it anyway.
|
||||
|
||||
--- libgomp/configure.tgt.jj 2008-01-10 20:53:48.000000000 +0100
|
||||
+++ libgomp/configure.tgt 2008-03-27 12:44:51.000000000 +0100
|
||||
@@ -44,14 +44,14 @@ if test $enable_linux_futex = yes; then
|
||||
;;
|
||||
|
||||
# Note that bare i386 is not included here. We need cmpxchg.
|
||||
- i[456]86-*-linux*)
|
||||
+ i[3456]86-*-linux*)
|
||||
config_path="linux/x86 linux posix"
|
||||
case " ${CC} ${CFLAGS} " in
|
||||
*" -m64 "*)
|
||||
;;
|
||||
*)
|
||||
if test -z "$with_arch"; then
|
||||
- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
|
||||
+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
|
||||
fi
|
||||
esac
|
||||
;;
|
||||
@@ -63,7 +63,7 @@ if test $enable_linux_futex = yes; then
|
||||
config_path="linux/x86 linux posix"
|
||||
case " ${CC} ${CFLAGS} " in
|
||||
*" -m32 "*)
|
||||
- XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686"
|
||||
+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
--- libstdc++-v3/libsupc++/guard.cc.jj 2008-03-01 00:58:24.000000000 +0100
|
||||
+++ libstdc++-v3/libsupc++/guard.cc 2008-03-27 14:08:44.000000000 +0100
|
||||
@@ -35,6 +35,27 @@
|
||||
#include <new>
|
||||
#include <ext/atomicity.h>
|
||||
#include <ext/concurrence.h>
|
||||
+#if defined __i386__ && !defined _GLIBCXX_ATOMIC_BUILTINS
|
||||
+# define _GLIBCXX_ATOMIC_BUILTINS 1
|
||||
+# define __sync_val_compare_and_swap(a, b, c) \
|
||||
+ ({ \
|
||||
+ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \
|
||||
+ int sltas; \
|
||||
+ __asm __volatile ("lock; cmpxchgl %3, (%1)" \
|
||||
+ : "=a" (sltas) \
|
||||
+ : "r" (a), "0" (b), "r" (c) : "memory"); \
|
||||
+ sltas; \
|
||||
+ })
|
||||
+# define __sync_lock_test_and_set(a, b) \
|
||||
+ ({ \
|
||||
+ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \
|
||||
+ int sltas; \
|
||||
+ __asm __volatile ("xchgl (%1), %0" \
|
||||
+ : "=r" (sltas) \
|
||||
+ : "r" (a), "0" (b) : "memory"); \
|
||||
+ sltas; \
|
||||
+ })
|
||||
+#endif
|
||||
#if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \
|
||||
&& defined(_GLIBCXX_ATOMIC_BUILTINS) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
|
||||
# include <climits>
|
|
@ -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 \
|
||||
+ $$(gcc_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,17 +0,0 @@
|
|||
2008-01-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* lang.c (java_classify_record): Revert 2007-12-20 change.
|
||||
|
||||
--- gcc/java/lang.c 2007-12-27 09:09:49.000000000 +0100
|
||||
+++ gcc/java/lang.c 2008-01-25 17:43:57.000000000 +0100
|
||||
@@ -965,9 +965,7 @@ java_classify_record (tree type)
|
||||
if (! CLASS_P (type))
|
||||
return RECORD_IS_STRUCT;
|
||||
|
||||
- /* ??? GDB does not support DW_TAG_interface_type as of December,
|
||||
- 2007. Re-enable this at a later time. */
|
||||
- if (0 && CLASS_INTERFACE (TYPE_NAME (type)))
|
||||
+ if (CLASS_INTERFACE (TYPE_NAME (type)))
|
||||
return RECORD_IS_INTERFACE;
|
||||
|
||||
return RECORD_IS_CLASS;
|
|
@ -1,44 +0,0 @@
|
|||
--- libjava/configure.ac.jj 2007-12-07 17:55:50.000000000 +0100
|
||||
+++ libjava/configure.ac 2007-12-07 18:36:56.000000000 +0100
|
||||
@@ -82,6 +82,13 @@ AC_ARG_ENABLE(java-maintainer-mode,
|
||||
[allow rebuilding of .class and .h files]))
|
||||
AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes)
|
||||
|
||||
+AC_ARG_ENABLE(libjava-multilib,
|
||||
+ AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib]))
|
||||
+if test "$enable_libjava_multilib" = no; then
|
||||
+ multilib=no
|
||||
+ ac_configure_args="$ac_configure_args --disable-multilib"
|
||||
+fi
|
||||
+
|
||||
# It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
|
||||
GCC_NO_EXECUTABLES
|
||||
|
||||
--- libjava/configure.jj 2007-12-07 17:55:50.000000000 +0100
|
||||
+++ libjava/configure 2007-12-07 18:39:58.000000000 +0100
|
||||
@@ -1018,6 +1018,8 @@ Optional Features:
|
||||
--enable-gconf-peer compile GConf native peers for util.preferences
|
||||
--enable-java-maintainer-mode
|
||||
allow rebuilding of .class and .h files
|
||||
+ --enable-libjava-multilib
|
||||
+ build libjava as multilib
|
||||
--disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors
|
||||
--enable-maintainer-mode enable make rules and dependencies not useful
|
||||
@@ -1848,6 +1850,16 @@ else
|
||||
fi
|
||||
|
||||
|
||||
+# Check whether --enable-libjava-multilib was given.
|
||||
+if test "${enable_libjava_multilib+set}" = set; then
|
||||
+ enableval=$enable_libjava_multilib;
|
||||
+fi
|
||||
+
|
||||
+if test "$enable_libjava_multilib" = no; then
|
||||
+ multilib=no
|
||||
+ ac_configure_args="$ac_configure_args --disable-multilib"
|
||||
+fi
|
||||
+
|
||||
# It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
|
||||
|
||||
|
|
@ -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-12-07 18:41:08.000000000 +0100
|
||||
+++ gcc/config/rs6000/rs6000.c 2007-12-07 18:42:12.000000000 +0100
|
||||
@@ -746,6 +746,7 @@ static void rs6000_file_start (void);
|
||||
static int rs6000_elf_reloc_rw_mask (void);
|
||||
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_asm_init_sections (void);
|
||||
static section *rs6000_elf_select_rtx_section (enum machine_mode, rtx,
|
||||
unsigned HOST_WIDE_INT);
|
||||
@@ -20418,6 +20419,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 2007-12-07 17:18:06.000000000 +0100
|
||||
+++ gcc/config/rs6000/linux64.h 2007-12-07 18:41:21.000000000 +0100
|
||||
@@ -504,7 +504,7 @@ extern int dot_symbols;
|
||||
#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 2007-12-07 18:17:43.000000000 +0100
|
||||
+++ gcc/config/ia64/linux.h 2007-12-07 18:41:21.000000000 +0100
|
||||
@@ -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-12-07 15:41:58.000000000 +0100
|
||||
+++ gcc/config/ia64/ia64.c 2007-12-07 18:43:18.000000000 +0100
|
||||
@@ -262,6 +262,8 @@ static section *ia64_select_rtx_section
|
||||
static void ia64_output_dwarf_dtprel (FILE *, int, rtx)
|
||||
ATTRIBUTE_UNUSED;
|
||||
static unsigned int ia64_section_type_flags (tree, const char *, int);
|
||||
+static void ia64_linux_file_end (void)
|
||||
+ ATTRIBUTE_UNUSED;
|
||||
static void ia64_init_libfuncs (void)
|
||||
ATTRIBUTE_UNUSED;
|
||||
static void ia64_hpux_init_libfuncs (void)
|
||||
@@ -9957,4 +9959,13 @@ ia64_c_mode_for_suffix (char suffix)
|
||||
return VOIDmode;
|
||||
}
|
||||
|
||||
+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,16 +0,0 @@
|
|||
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 *);
|
|
@ -1,105 +0,0 @@
|
|||
2008-10-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* tree-ssa-live.c (remove_unused_locals): Mark all edge's goto_block
|
||||
as used.
|
||||
* gimple-low.c (lower_return_expr, lower_builtin_setjmp): Set
|
||||
TREE_BLOCK on the newly created stmts.
|
||||
* tree-cfg.c (make_cond_expr_edges, make_goto_expr_edges): Only set
|
||||
goto_block on edges if goto_locus is known.
|
||||
|
||||
--- gcc/tree-ssa-live.c.jj 2008-10-07 21:25:57.000000000 +0200
|
||||
+++ gcc/tree-ssa-live.c 2008-10-09 00:25:20.000000000 +0200
|
||||
@@ -591,6 +591,8 @@ remove_unused_locals (void)
|
||||
{
|
||||
block_stmt_iterator bsi;
|
||||
tree phi, def;
|
||||
+ edge_iterator ei;
|
||||
+ edge e;
|
||||
|
||||
/* Walk the statements. */
|
||||
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
|
||||
@@ -614,6 +616,10 @@ remove_unused_locals (void)
|
||||
mark_all_vars_used (&arg, NULL);
|
||||
}
|
||||
}
|
||||
+
|
||||
+ FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
+ if (e->goto_locus)
|
||||
+ TREE_USED (e->goto_block) = true;
|
||||
}
|
||||
|
||||
/* Remove unmarked local vars from unexpanded_var_list. */
|
||||
--- gcc/gimple-low.c.jj 2008-10-07 21:25:58.000000000 +0200
|
||||
+++ gcc/gimple-low.c 2008-10-09 00:42:31.000000000 +0200
|
||||
@@ -590,6 +590,7 @@ lower_return_expr (tree_stmt_iterator *t
|
||||
found:
|
||||
t = build1 (GOTO_EXPR, void_type_node, label);
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
tsi_delink (tsi);
|
||||
}
|
||||
@@ -672,6 +673,7 @@ lower_builtin_setjmp (tree_stmt_iterator
|
||||
t = implicit_built_in_decls[BUILT_IN_SETJMP_SETUP];
|
||||
t = build_call_expr (t, 2, CALL_EXPR_ARG (stmt, 0), arg);
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
|
||||
/* Build 'DEST = 0' and insert. */
|
||||
@@ -680,6 +682,7 @@ lower_builtin_setjmp (tree_stmt_iterator
|
||||
t = build_gimple_modify_stmt (dest, fold_convert (TREE_TYPE (dest),
|
||||
integer_zero_node));
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
}
|
||||
|
||||
@@ -696,6 +699,7 @@ lower_builtin_setjmp (tree_stmt_iterator
|
||||
t = implicit_built_in_decls[BUILT_IN_SETJMP_RECEIVER];
|
||||
t = build_call_expr (t, 1, arg);
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
|
||||
/* Build 'DEST = 1' and insert. */
|
||||
@@ -704,6 +708,7 @@ lower_builtin_setjmp (tree_stmt_iterator
|
||||
t = build_gimple_modify_stmt (dest, fold_convert (TREE_TYPE (dest),
|
||||
integer_one_node));
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
}
|
||||
|
||||
--- gcc/tree-cfg.c.jj 2008-10-07 21:39:14.000000000 +0200
|
||||
+++ gcc/tree-cfg.c 2008-10-09 00:00:48.000000000 +0200
|
||||
@@ -634,7 +634,8 @@ make_cond_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (COND_EXPR_THEN (entry));
|
||||
#endif
|
||||
- e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry));
|
||||
+ if (e->goto_locus)
|
||||
+ e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry));
|
||||
e = make_edge (bb, else_bb, EDGE_FALSE_VALUE);
|
||||
if (e)
|
||||
{
|
||||
@@ -643,7 +644,8 @@ make_cond_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (COND_EXPR_ELSE (entry));
|
||||
#endif
|
||||
- e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry));
|
||||
+ if (e->goto_locus)
|
||||
+ e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry));
|
||||
}
|
||||
|
||||
/* We do not need the gotos anymore. */
|
||||
@@ -843,7 +845,8 @@ make_goto_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (goto_t);
|
||||
#endif
|
||||
- e->goto_block = TREE_BLOCK (goto_t);
|
||||
+ if (e->goto_locus)
|
||||
+ e->goto_block = TREE_BLOCK (goto_t);
|
||||
bsi_remove (&last, true);
|
||||
return;
|
||||
}
|
|
@ -1,168 +0,0 @@
|
|||
2008-10-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* rtl.h (locator_eq): New decl.
|
||||
* cfglayout.c (locator_scope): New function.
|
||||
(insn_scope): Use it.
|
||||
(locator_eq): New function.
|
||||
(fixup_reorder_chain): Search for last insn in src bb
|
||||
that has locator set or first insn in dest bb. Use
|
||||
locator_eq instead of == to compare locators.
|
||||
* cfgrtl.c (cfg_layout_merge_blocks): Likewise.
|
||||
* cfgcleanup.c (try_forward_edges): Use locator_eq instead of
|
||||
== to compare locators.
|
||||
|
||||
--- gcc/cfglayout.c.jj 2008-10-07 21:35:33.000000000 +0200
|
||||
+++ gcc/cfglayout.c 2008-10-09 11:18:51.000000000 +0200
|
||||
@@ -448,13 +448,12 @@ change_scope (rtx orig_insn, tree s1, tr
|
||||
}
|
||||
}
|
||||
|
||||
-/* Return lexical scope block insn belong to. */
|
||||
+/* Return lexical scope block locator belongs to. */
|
||||
static tree
|
||||
-insn_scope (const_rtx insn)
|
||||
+locator_scope (int loc)
|
||||
{
|
||||
int max = VEC_length (int, block_locators_locs);
|
||||
int min = 0;
|
||||
- int loc = INSN_LOCATOR (insn);
|
||||
|
||||
/* When block_locators_locs was initialized, the pro- and epilogue
|
||||
insns didn't exist yet and can therefore not be found this way.
|
||||
@@ -488,6 +487,13 @@ insn_scope (const_rtx insn)
|
||||
return VEC_index (tree, block_locators_blocks, min);
|
||||
}
|
||||
|
||||
+/* Return lexical scope block insn belongs to. */
|
||||
+static tree
|
||||
+insn_scope (const_rtx insn)
|
||||
+{
|
||||
+ return locator_scope (INSN_LOCATOR (insn));
|
||||
+}
|
||||
+
|
||||
/* Return line number of the statement specified by the locator. */
|
||||
static location_t
|
||||
locator_location (int loc)
|
||||
@@ -551,6 +557,17 @@ insn_file (const_rtx insn)
|
||||
return locator_file (INSN_LOCATOR (insn));
|
||||
}
|
||||
|
||||
+/* Return true if LOC1 and LOC2 locators have the same location and scope. */
|
||||
+bool
|
||||
+locator_eq (int loc1, int loc2)
|
||||
+{
|
||||
+ if (loc1 == loc2)
|
||||
+ return true;
|
||||
+ if (locator_location (loc1) != locator_location (loc2))
|
||||
+ return false;
|
||||
+ return locator_scope (loc1) == locator_scope (loc2);
|
||||
+}
|
||||
+
|
||||
/* Rebuild all the NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes based
|
||||
on the scope tree and the newly reordered instructions. */
|
||||
|
||||
@@ -901,24 +918,30 @@ fixup_reorder_chain (void)
|
||||
if (e->goto_locus && !(e->flags & EDGE_ABNORMAL))
|
||||
{
|
||||
basic_block nb;
|
||||
+ rtx end;
|
||||
|
||||
- if (simplejump_p (BB_END (e->src)))
|
||||
+ insn = BB_END (e->src);
|
||||
+ end = PREV_INSN (BB_HEAD (e->src));
|
||||
+ while (insn != end
|
||||
+ && (!INSN_P (insn) || INSN_LOCATOR (insn) == 0))
|
||||
+ insn = PREV_INSN (insn);
|
||||
+ if (insn != end
|
||||
+ && locator_eq (INSN_LOCATOR (insn), (int) e->goto_locus))
|
||||
+ continue;
|
||||
+ if (simplejump_p (BB_END (e->src))
|
||||
+ && INSN_LOCATOR (BB_END (e->src)) == 0)
|
||||
{
|
||||
- if (INSN_LOCATOR (BB_END (e->src)) == (int) e->goto_locus)
|
||||
- continue;
|
||||
- if (INSN_LOCATOR (BB_END (e->src)) == 0)
|
||||
- {
|
||||
- INSN_LOCATOR (BB_END (e->src)) = e->goto_locus;
|
||||
- continue;
|
||||
- }
|
||||
+ INSN_LOCATOR (BB_END (e->src)) = e->goto_locus;
|
||||
+ continue;
|
||||
}
|
||||
if (e->dest != EXIT_BLOCK_PTR)
|
||||
{
|
||||
insn = BB_HEAD (e->dest);
|
||||
- if (!INSN_P (insn))
|
||||
- insn = next_insn (insn);
|
||||
- if (insn && INSN_P (insn)
|
||||
- && INSN_LOCATOR (insn) == (int) e->goto_locus)
|
||||
+ end = NEXT_INSN (BB_END (e->dest));
|
||||
+ while (insn != end && !INSN_P (insn))
|
||||
+ insn = NEXT_INSN (insn);
|
||||
+ if (insn != end && INSN_LOCATOR (insn)
|
||||
+ && locator_eq (INSN_LOCATOR (insn), (int) e->goto_locus))
|
||||
continue;
|
||||
}
|
||||
nb = split_edge (e);
|
||||
--- gcc/rtl.h.jj 2008-10-07 21:25:44.000000000 +0200
|
||||
+++ gcc/rtl.h 2008-10-09 11:15:57.000000000 +0200
|
||||
@@ -1622,6 +1622,7 @@ extern int insn_line (const_rtx);
|
||||
extern const char * insn_file (const_rtx);
|
||||
extern int locator_line (int);
|
||||
extern const char * locator_file (int);
|
||||
+extern bool locator_eq (int, int);
|
||||
extern int prologue_locator, epilogue_locator;
|
||||
|
||||
/* In jump.c */
|
||||
--- gcc/cfgrtl.c.jj 2008-10-07 21:35:33.000000000 +0200
|
||||
+++ gcc/cfgrtl.c 2008-10-09 10:37:03.000000000 +0200
|
||||
@@ -2623,19 +2623,21 @@ cfg_layout_merge_blocks (basic_block a,
|
||||
some unique locus, emit a nop with that locus in between. */
|
||||
if (!optimize && EDGE_SUCC (a, 0)->goto_locus)
|
||||
{
|
||||
- rtx insn = BB_END (a);
|
||||
+ rtx insn = BB_END (a), end = PREV_INSN (BB_HEAD (a));
|
||||
int goto_locus = EDGE_SUCC (a, 0)->goto_locus;
|
||||
|
||||
- if (NOTE_P (insn))
|
||||
- insn = prev_nonnote_insn (insn);
|
||||
- if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus)
|
||||
+ while (insn != end && (!INSN_P (insn) || INSN_LOCATOR (insn) == 0))
|
||||
+ insn = PREV_INSN (insn);
|
||||
+ if (insn != end && locator_eq (INSN_LOCATOR (insn), goto_locus))
|
||||
goto_locus = 0;
|
||||
else
|
||||
{
|
||||
insn = BB_HEAD (b);
|
||||
- if (!INSN_P (insn))
|
||||
- insn = next_insn (insn);
|
||||
- if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus)
|
||||
+ end = NEXT_INSN (BB_END (b));
|
||||
+ while (insn != end && !INSN_P (insn))
|
||||
+ insn = NEXT_INSN (insn);
|
||||
+ if (insn != end && INSN_LOCATOR (insn) != 0
|
||||
+ && locator_eq (INSN_LOCATOR (insn), goto_locus))
|
||||
goto_locus = 0;
|
||||
}
|
||||
if (goto_locus)
|
||||
--- gcc/cfgcleanup.c.jj 2008-10-07 21:35:33.000000000 +0200
|
||||
+++ gcc/cfgcleanup.c 2008-10-09 11:07:40.000000000 +0200
|
||||
@@ -482,7 +482,7 @@ try_forward_edges (int mode, basic_block
|
||||
blocks with different locus are not optimized out. */
|
||||
int locus = single_succ_edge (target)->goto_locus;
|
||||
|
||||
- if (locus && goto_locus && locus != goto_locus)
|
||||
+ if (locus && goto_locus && !locator_eq (locus, goto_locus))
|
||||
counter = n_basic_blocks;
|
||||
else if (locus)
|
||||
goto_locus = locus;
|
||||
@@ -491,7 +491,8 @@ try_forward_edges (int mode, basic_block
|
||||
{
|
||||
locus = INSN_LOCATOR (BB_END (target));
|
||||
|
||||
- if (locus && goto_locus && locus != goto_locus)
|
||||
+ if (locus && goto_locus
|
||||
+ && !locator_eq (locus, goto_locus))
|
||||
counter = n_basic_blocks;
|
||||
else if (locus)
|
||||
goto_locus = locus;
|
|
@ -1,899 +0,0 @@
|
|||
2008-10-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* cfgexpand.c (expand_gimple_cond_expr): Convert also goto_block and
|
||||
goto_locus of true_edge into RTL locator.
|
||||
|
||||
2008-10-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/29609
|
||||
PR debug/36690
|
||||
PR debug/37616
|
||||
* basic-block.h (struct edge_def): Add goto_block field.
|
||||
* cfglayout.c (fixup_reorder_chain): Ensure that there is at least
|
||||
one insn with locus corresponding to edge's goto_locus if !optimize.
|
||||
* profile.c (branch_prob): Copy edge's goto_block.
|
||||
* cfgrtl.c (force_nonfallthru_and_redirect): Use goto_locus for
|
||||
emitted jumps.
|
||||
(cfg_layout_merge_blocks): Emit a nop with edge's goto_locus
|
||||
locator in between the merged basic blocks if !optimize and needed.
|
||||
* cfgexpand.c (expand_gimple_cond_expr): Convert goto_block and
|
||||
goto_locus into RTL locator. For unconditional jump use that
|
||||
locator for the jump insn.
|
||||
(expand_gimple_basic_block): Convert goto_block and goto_locus into
|
||||
RTL locator for all remaining edges. For unconditional jump
|
||||
use that locator for the jump insn.
|
||||
* cfgcleanup.c (try_forward_edges): Avoid the optimization if
|
||||
there is more than one edge or insn locator along the forwarding
|
||||
edges and !optimize. If there is just one, set e->goto_locus.
|
||||
* tree-cfg.c (make_cond_expr_edges, make_goto_expr_edges): Set also
|
||||
edge's goto_block.
|
||||
(move_block_to_fn): Adjust edge's goto_block.
|
||||
|
||||
* gcc.dg/debug/pr29609-1.c: New test.
|
||||
* gcc.dg/debug/pr29609-2.c: New test.
|
||||
* gcc.dg/debug/pr36690-1.c: New test.
|
||||
* gcc.dg/debug/pr36690-2.c: New test.
|
||||
* gcc.dg/debug/pr36690-3.c: New test.
|
||||
* gcc.dg/debug/pr37616.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr29609-1.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr29609-2.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr36690-1.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr36690-2.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr36690-3.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr37616.c: New test.
|
||||
|
||||
--- gcc/profile.c (revision 140947)
|
||||
+++ gcc/profile.c (revision 140948)
|
||||
@@ -825,7 +825,9 @@ branch_prob (void)
|
||||
#endif
|
||||
{
|
||||
basic_block new = split_edge (e);
|
||||
- single_succ_edge (new)->goto_locus = e->goto_locus;
|
||||
+ edge ne = single_succ_edge (new);
|
||||
+ ne->goto_locus = e->goto_locus;
|
||||
+ ne->goto_block = e->goto_block;
|
||||
}
|
||||
if ((e->flags & (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL))
|
||||
&& e->dest != EXIT_BLOCK_PTR)
|
||||
--- gcc/cfgexpand.c (revision 140947)
|
||||
+++ gcc/cfgexpand.c (revision 140948)
|
||||
@@ -1316,7 +1316,12 @@ expand_gimple_cond_expr (basic_block bb,
|
||||
add_reg_br_prob_note (last, true_edge->probability);
|
||||
maybe_dump_rtl_for_tree_stmt (stmt, last);
|
||||
if (true_edge->goto_locus)
|
||||
- set_curr_insn_source_location (location_from_locus (true_edge->goto_locus));
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (true_edge->goto_locus));
|
||||
+ set_curr_insn_block (true_edge->goto_block);
|
||||
+ true_edge->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ true_edge->goto_block = NULL;
|
||||
false_edge->flags |= EDGE_FALLTHRU;
|
||||
return NULL;
|
||||
}
|
||||
@@ -1326,7 +1331,12 @@ expand_gimple_cond_expr (basic_block bb,
|
||||
add_reg_br_prob_note (last, false_edge->probability);
|
||||
maybe_dump_rtl_for_tree_stmt (stmt, last);
|
||||
if (false_edge->goto_locus)
|
||||
- set_curr_insn_source_location (location_from_locus (false_edge->goto_locus));
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (false_edge->goto_locus));
|
||||
+ set_curr_insn_block (false_edge->goto_block);
|
||||
+ false_edge->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ false_edge->goto_block = NULL;
|
||||
true_edge->flags |= EDGE_FALLTHRU;
|
||||
return NULL;
|
||||
}
|
||||
@@ -1334,6 +1344,13 @@ expand_gimple_cond_expr (basic_block bb,
|
||||
jumpif (pred, label_rtx_for_bb (true_edge->dest));
|
||||
add_reg_br_prob_note (last, true_edge->probability);
|
||||
last = get_last_insn ();
|
||||
+ if (false_edge->goto_locus)
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (false_edge->goto_locus));
|
||||
+ set_curr_insn_block (false_edge->goto_block);
|
||||
+ false_edge->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ false_edge->goto_block = NULL;
|
||||
emit_jump (label_rtx_for_bb (false_edge->dest));
|
||||
|
||||
BB_END (bb) = last;
|
||||
@@ -1356,9 +1373,13 @@ expand_gimple_cond_expr (basic_block bb,
|
||||
|
||||
maybe_dump_rtl_for_tree_stmt (stmt, last2);
|
||||
|
||||
- if (false_edge->goto_locus)
|
||||
- set_curr_insn_source_location (location_from_locus (false_edge->goto_locus));
|
||||
-
|
||||
+ if (true_edge->goto_locus)
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (true_edge->goto_locus));
|
||||
+ set_curr_insn_block (true_edge->goto_block);
|
||||
+ true_edge->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ true_edge->goto_block = NULL;
|
||||
return new_bb;
|
||||
}
|
||||
|
||||
@@ -1613,19 +1634,21 @@ expand_gimple_basic_block (basic_block b
|
||||
}
|
||||
}
|
||||
|
||||
- /* Expand implicit goto. */
|
||||
+ /* Expand implicit goto and convert goto_locus. */
|
||||
FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
{
|
||||
- if (e->flags & EDGE_FALLTHRU)
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- if (e && e->dest != bb->next_bb)
|
||||
- {
|
||||
- emit_jump (label_rtx_for_bb (e->dest));
|
||||
- if (e->goto_locus)
|
||||
- set_curr_insn_source_location (location_from_locus (e->goto_locus));
|
||||
- e->flags &= ~EDGE_FALLTHRU;
|
||||
+ if (e->goto_locus && e->goto_block)
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (e->goto_locus));
|
||||
+ set_curr_insn_block (e->goto_block);
|
||||
+ e->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ e->goto_block = NULL;
|
||||
+ if ((e->flags & EDGE_FALLTHRU) && e->dest != bb->next_bb)
|
||||
+ {
|
||||
+ emit_jump (label_rtx_for_bb (e->dest));
|
||||
+ e->flags &= ~EDGE_FALLTHRU;
|
||||
+ }
|
||||
}
|
||||
|
||||
do_pending_stack_adjust ();
|
||||
--- gcc/cfgcleanup.c (revision 140947)
|
||||
+++ gcc/cfgcleanup.c (revision 140948)
|
||||
@@ -429,7 +429,7 @@ try_forward_edges (int mode, basic_block
|
||||
for (ei = ei_start (b->succs); (e = ei_safe_edge (ei)); )
|
||||
{
|
||||
basic_block target, first;
|
||||
- int counter;
|
||||
+ int counter, goto_locus;
|
||||
bool threaded = false;
|
||||
int nthreaded_edges = 0;
|
||||
bool may_thread = first_pass | df_get_bb_dirty (b);
|
||||
@@ -447,6 +447,7 @@ try_forward_edges (int mode, basic_block
|
||||
|
||||
target = first = e->dest;
|
||||
counter = NUM_FIXED_BLOCKS;
|
||||
+ goto_locus = e->goto_locus;
|
||||
|
||||
/* If we are partitioning hot/cold basic_blocks, we don't want to mess
|
||||
up jumps that cross between hot/cold sections.
|
||||
@@ -476,6 +477,27 @@ try_forward_edges (int mode, basic_block
|
||||
new_target = single_succ (target);
|
||||
if (target == new_target)
|
||||
counter = n_basic_blocks;
|
||||
+ else if (!optimize)
|
||||
+ {
|
||||
+ /* When not optimizing, ensure that edges or forwarder
|
||||
+ blocks with different locus are not optimized out. */
|
||||
+ int locus = single_succ_edge (target)->goto_locus;
|
||||
+
|
||||
+ if (locus && goto_locus && locus != goto_locus)
|
||||
+ counter = n_basic_blocks;
|
||||
+ else if (locus)
|
||||
+ goto_locus = locus;
|
||||
+
|
||||
+ if (INSN_P (BB_END (target)))
|
||||
+ {
|
||||
+ locus = INSN_LOCATOR (BB_END (target));
|
||||
+
|
||||
+ if (locus && goto_locus && locus != goto_locus)
|
||||
+ counter = n_basic_blocks;
|
||||
+ else if (locus)
|
||||
+ goto_locus = locus;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Allow to thread only over one edge at time to simplify updating
|
||||
@@ -539,6 +561,8 @@ try_forward_edges (int mode, basic_block
|
||||
int edge_frequency;
|
||||
int n = 0;
|
||||
|
||||
+ e->goto_locus = goto_locus;
|
||||
+
|
||||
/* Don't force if target is exit block. */
|
||||
if (threaded && target != EXIT_BLOCK_PTR)
|
||||
{
|
||||
--- gcc/cfglayout.c (revision 140947)
|
||||
+++ gcc/cfglayout.c (revision 140948)
|
||||
@@ -887,6 +887,46 @@ fixup_reorder_chain (void)
|
||||
if (e && !can_fallthru (e->src, e->dest))
|
||||
force_nonfallthru (e);
|
||||
}
|
||||
+
|
||||
+ /* Ensure goto_locus from edges has some instructions with that locus
|
||||
+ in RTL. */
|
||||
+ if (!optimize)
|
||||
+ FOR_EACH_BB (bb)
|
||||
+ {
|
||||
+ edge e;
|
||||
+ edge_iterator ei;
|
||||
+
|
||||
+ FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
+ if (e->goto_locus && !(e->flags & EDGE_ABNORMAL))
|
||||
+ {
|
||||
+ basic_block nb;
|
||||
+
|
||||
+ if (simplejump_p (BB_END (e->src)))
|
||||
+ {
|
||||
+ if (INSN_LOCATOR (BB_END (e->src)) == (int) e->goto_locus)
|
||||
+ continue;
|
||||
+ if (INSN_LOCATOR (BB_END (e->src)) == 0)
|
||||
+ {
|
||||
+ INSN_LOCATOR (BB_END (e->src)) = e->goto_locus;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ if (e->dest != EXIT_BLOCK_PTR)
|
||||
+ {
|
||||
+ insn = BB_HEAD (e->dest);
|
||||
+ if (!INSN_P (insn))
|
||||
+ insn = next_insn (insn);
|
||||
+ if (insn && INSN_P (insn)
|
||||
+ && INSN_LOCATOR (insn) == (int) e->goto_locus)
|
||||
+ continue;
|
||||
+ }
|
||||
+ nb = split_edge (e);
|
||||
+ if (!INSN_P (BB_END (nb)))
|
||||
+ BB_END (nb) = emit_insn_after_noloc (gen_nop (), BB_END (nb),
|
||||
+ nb);
|
||||
+ INSN_LOCATOR (BB_END (nb)) = e->goto_locus;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Perform sanity checks on the insn chain.
|
||||
--- gcc/basic-block.h (revision 140947)
|
||||
+++ gcc/basic-block.h (revision 140948)
|
||||
@@ -129,7 +129,8 @@ struct edge_def GTY(())
|
||||
/* Auxiliary info specific to a pass. */
|
||||
PTR GTY ((skip (""))) aux;
|
||||
|
||||
- /* Location of any goto implicit in the edge, during tree-ssa. */
|
||||
+ /* Location of any goto implicit in the edge and associated BLOCK. */
|
||||
+ tree goto_block;
|
||||
source_locus goto_locus;
|
||||
|
||||
/* The index number corresponding to this edge in the edge vector
|
||||
--- gcc/tree-cfg.c (revision 140947)
|
||||
+++ gcc/tree-cfg.c (revision 140948)
|
||||
@@ -634,6 +634,7 @@ make_cond_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (COND_EXPR_THEN (entry));
|
||||
#endif
|
||||
+ e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry));
|
||||
e = make_edge (bb, else_bb, EDGE_FALSE_VALUE);
|
||||
if (e)
|
||||
{
|
||||
@@ -642,6 +643,7 @@ make_cond_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (COND_EXPR_ELSE (entry));
|
||||
#endif
|
||||
+ e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry));
|
||||
}
|
||||
|
||||
/* We do not need the gotos anymore. */
|
||||
@@ -841,6 +843,7 @@ make_goto_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (goto_t);
|
||||
#endif
|
||||
+ e->goto_block = TREE_BLOCK (goto_t);
|
||||
bsi_remove (&last, true);
|
||||
return;
|
||||
}
|
||||
@@ -5874,6 +5877,23 @@ move_block_to_fn (struct function *dest_
|
||||
update_stmt (stmt);
|
||||
pop_cfun ();
|
||||
}
|
||||
+
|
||||
+ FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
+ if (e->goto_locus)
|
||||
+ {
|
||||
+ tree block = e->goto_block;
|
||||
+ if (d->orig_block == NULL_TREE
|
||||
+ || block == d->orig_block)
|
||||
+ e->goto_block = d->new_block;
|
||||
+#ifdef ENABLE_CHECKING
|
||||
+ else if (block != d->new_block)
|
||||
+ {
|
||||
+ while (block && block != d->orig_block)
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+ gcc_assert (block);
|
||||
+ }
|
||||
+#endif
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Examine the statements in BB (which is in SRC_CFUN); find and return
|
||||
--- gcc/cfgrtl.c (revision 140947)
|
||||
+++ gcc/cfgrtl.c (revision 140948)
|
||||
@@ -1009,6 +1009,7 @@ force_nonfallthru_and_redirect (edge e,
|
||||
rtx note;
|
||||
edge new_edge;
|
||||
int abnormal_edge_flags = 0;
|
||||
+ int loc;
|
||||
|
||||
/* In the case the last instruction is conditional jump to the next
|
||||
instruction, first redirect the jump itself and then continue
|
||||
@@ -1127,11 +1128,15 @@ force_nonfallthru_and_redirect (edge e,
|
||||
else
|
||||
jump_block = e->src;
|
||||
|
||||
+ if (e->goto_locus && e->goto_block == NULL)
|
||||
+ loc = e->goto_locus;
|
||||
+ else
|
||||
+ loc = 0;
|
||||
e->flags &= ~EDGE_FALLTHRU;
|
||||
if (target == EXIT_BLOCK_PTR)
|
||||
{
|
||||
#ifdef HAVE_return
|
||||
- emit_jump_insn_after_noloc (gen_return (), BB_END (jump_block));
|
||||
+ emit_jump_insn_after_setloc (gen_return (), BB_END (jump_block), loc);
|
||||
#else
|
||||
gcc_unreachable ();
|
||||
#endif
|
||||
@@ -1139,7 +1144,7 @@ force_nonfallthru_and_redirect (edge e,
|
||||
else
|
||||
{
|
||||
rtx label = block_label (target);
|
||||
- emit_jump_insn_after_noloc (gen_jump (label), BB_END (jump_block));
|
||||
+ emit_jump_insn_after_setloc (gen_jump (label), BB_END (jump_block), loc);
|
||||
JUMP_LABEL (BB_END (jump_block)) = label;
|
||||
LABEL_NUSES (label)++;
|
||||
}
|
||||
@@ -2606,6 +2611,32 @@ cfg_layout_merge_blocks (basic_block a,
|
||||
try_redirect_by_replacing_jump (EDGE_SUCC (a, 0), b, true);
|
||||
gcc_assert (!JUMP_P (BB_END (a)));
|
||||
|
||||
+ /* When not optimizing and the edge is the only place in RTL which holds
|
||||
+ some unique locus, emit a nop with that locus in between. */
|
||||
+ if (!optimize && EDGE_SUCC (a, 0)->goto_locus)
|
||||
+ {
|
||||
+ rtx insn = BB_END (a);
|
||||
+ int goto_locus = EDGE_SUCC (a, 0)->goto_locus;
|
||||
+
|
||||
+ if (NOTE_P (insn))
|
||||
+ insn = prev_nonnote_insn (insn);
|
||||
+ if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus)
|
||||
+ goto_locus = 0;
|
||||
+ else
|
||||
+ {
|
||||
+ insn = BB_HEAD (b);
|
||||
+ if (!INSN_P (insn))
|
||||
+ insn = next_insn (insn);
|
||||
+ if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus)
|
||||
+ goto_locus = 0;
|
||||
+ }
|
||||
+ if (goto_locus)
|
||||
+ {
|
||||
+ BB_END (a) = emit_insn_after_noloc (gen_nop (), BB_END (a), a);
|
||||
+ INSN_LOCATOR (BB_END (a)) = goto_locus;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* Possible line number notes should appear in between. */
|
||||
if (b->il.rtl->header)
|
||||
{
|
||||
--- gcc/testsuite/gcc.dg/debug/pr36690-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr36690-1.c (revision 140948)
|
||||
@@ -0,0 +1,23 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* Verify that break func is hit.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+int i;
|
||||
+
|
||||
+void
|
||||
+func (void)
|
||||
+{
|
||||
+ while (i == 1)
|
||||
+ i = 0;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ func ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/pr36690-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr36690-2.c (revision 140948)
|
||||
@@ -0,0 +1,40 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* Verify that breakpoint can be put on goto f1, it is hit and
|
||||
+ varz at that spot is defined and contains 5. Nowhere else
|
||||
+ in the function should be varz in the scope.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+int cnt;
|
||||
+
|
||||
+void
|
||||
+bar (int i)
|
||||
+{
|
||||
+ cnt += i;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (int i)
|
||||
+{
|
||||
+ if (!i)
|
||||
+ bar (0);
|
||||
+ else
|
||||
+ {
|
||||
+ static int varz = 5;
|
||||
+ goto f1;
|
||||
+ }
|
||||
+ bar (1);
|
||||
+f1:
|
||||
+ bar (2);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ foo (0);
|
||||
+ foo (1);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/pr29609-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr29609-1.c (revision 140948)
|
||||
@@ -0,0 +1,33 @@
|
||||
+/* PR debug/29609 */
|
||||
+/* Verify that breakpoint on the break is hit.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+int
|
||||
+foo (void)
|
||||
+{
|
||||
+ int a, i;
|
||||
+
|
||||
+ for (i = 1; i <= 10; i++)
|
||||
+ {
|
||||
+ if (i < 3)
|
||||
+ a = 1;
|
||||
+ else
|
||||
+ break;
|
||||
+ a = 5;
|
||||
+ }
|
||||
+ return a;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo () != 5)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/pr36690-3.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr36690-3.c (revision 140948)
|
||||
@@ -0,0 +1,47 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+int cnt;
|
||||
+
|
||||
+void
|
||||
+bar (int i)
|
||||
+{
|
||||
+ cnt += i;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (int i, int j)
|
||||
+{
|
||||
+ if (j)
|
||||
+ {
|
||||
+ bar (i + 1);
|
||||
+ goto f1;
|
||||
+ }
|
||||
+ bar (i + 2);
|
||||
+ goto f2;
|
||||
+f1:
|
||||
+ if (i > 10)
|
||||
+ goto f3;
|
||||
+f2:
|
||||
+ if (i > 40)
|
||||
+ goto f4;
|
||||
+ else
|
||||
+ goto f5;
|
||||
+f3:
|
||||
+ bar (i);
|
||||
+f4:
|
||||
+ bar (i);
|
||||
+f5:
|
||||
+ bar (i);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ foo (0, 1);
|
||||
+ foo (11, 1);
|
||||
+ foo (21, 0);
|
||||
+ foo (41, 0);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/pr29609-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr29609-2.c (revision 140948)
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* PR debug/29609 */
|
||||
+/* Verify that breakpoint on both goto failure; stmts is hit.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+int x;
|
||||
+
|
||||
+int
|
||||
+foo (void)
|
||||
+{
|
||||
+ return 0 ^ x;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+bar (void)
|
||||
+{
|
||||
+ return 1 ^ x;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+baz (void)
|
||||
+{
|
||||
+ int c;
|
||||
+
|
||||
+ if (!foo ())
|
||||
+ goto failure;
|
||||
+
|
||||
+ if (!bar ())
|
||||
+ goto failure;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+failure:
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (baz () != 1)
|
||||
+ abort ();
|
||||
+ x = 1;
|
||||
+ if (baz () != 1)
|
||||
+ abort ();
|
||||
+ x = 2;
|
||||
+ if (baz () != 0)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c (revision 140948)
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* Verify that break func is hit. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+int i;
|
||||
+
|
||||
+void
|
||||
+func (void)
|
||||
+{
|
||||
+ while (i == 1)
|
||||
+ i = 0;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ func ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr36690-1.c:11" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c (revision 140948)
|
||||
@@ -0,0 +1,39 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* Verify that breakpoint can be put on goto f1, it is hit and
|
||||
+ varz at that spot is defined and contains 5. Nowhere else
|
||||
+ in the function should be varz in the scope. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+int cnt;
|
||||
+
|
||||
+void
|
||||
+bar (int i)
|
||||
+{
|
||||
+ cnt += i;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (int i)
|
||||
+{
|
||||
+ if (!i)
|
||||
+ bar (0);
|
||||
+ else
|
||||
+ {
|
||||
+ static int varz = 5;
|
||||
+ goto f1;
|
||||
+ }
|
||||
+ bar (1);
|
||||
+f1:
|
||||
+ bar (2);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ foo (0);
|
||||
+ foo (1);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr36690-2.c:24" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c (revision 140948)
|
||||
@@ -0,0 +1,32 @@
|
||||
+/* PR debug/29609 */
|
||||
+/* Verify that breakpoint on the break is hit. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+void abort (void);
|
||||
+
|
||||
+int
|
||||
+foo (void)
|
||||
+{
|
||||
+ int a, i;
|
||||
+
|
||||
+ for (i = 1; i <= 10; i++)
|
||||
+ {
|
||||
+ if (i < 3)
|
||||
+ a = 1;
|
||||
+ else
|
||||
+ break;
|
||||
+ a = 5;
|
||||
+ }
|
||||
+ return a;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo () != 5)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr29609-1.c:18" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c (revision 140948)
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+int cnt;
|
||||
+
|
||||
+void
|
||||
+bar (int i)
|
||||
+{
|
||||
+ cnt += i;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (int i, int j)
|
||||
+{
|
||||
+ if (j)
|
||||
+ {
|
||||
+ bar (i + 1);
|
||||
+ goto f1;
|
||||
+ }
|
||||
+ bar (i + 2);
|
||||
+ goto f2;
|
||||
+f1:
|
||||
+ if (i > 10)
|
||||
+ goto f3;
|
||||
+f2:
|
||||
+ if (i > 40)
|
||||
+ goto f4;
|
||||
+ else
|
||||
+ goto f5;
|
||||
+f3:
|
||||
+ bar (i);
|
||||
+f4:
|
||||
+ bar (i);
|
||||
+f5:
|
||||
+ bar (i);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ foo (0, 1);
|
||||
+ foo (11, 1);
|
||||
+ foo (21, 0);
|
||||
+ foo (41, 0);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:19" } } */
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:22" } } */
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:25" } } */
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:28" } } */
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:30" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c (revision 140948)
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* PR debug/29609 */
|
||||
+/* Verify that breakpoint on both goto failure; stmts is hit. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+int x;
|
||||
+
|
||||
+int
|
||||
+foo (void)
|
||||
+{
|
||||
+ return 0 ^ x;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+bar (void)
|
||||
+{
|
||||
+ return 1 ^ x;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+baz (void)
|
||||
+{
|
||||
+ int c;
|
||||
+
|
||||
+ if (!foo ())
|
||||
+ goto failure;
|
||||
+
|
||||
+ if (!bar ())
|
||||
+ goto failure;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+failure:
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (baz () != 1)
|
||||
+ abort ();
|
||||
+ x = 1;
|
||||
+ if (baz () != 1)
|
||||
+ abort ();
|
||||
+ x = 2;
|
||||
+ if (baz () != 0)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr29609-2.c:27" } } */
|
||||
+/* { dg-final { scan-assembler "pr29609-2.c:30" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c (revision 140948)
|
||||
@@ -0,0 +1,41 @@
|
||||
+/* PR debug/37616 */
|
||||
+/* Test that one can put breakpoints onto continue, exitlab and break
|
||||
+ and actually see program reaching those breakpoints. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+int
|
||||
+foo (int parm)
|
||||
+{
|
||||
+ int varj, varm;
|
||||
+
|
||||
+ for (varj = 0; varj < 10; varj++)
|
||||
+ {
|
||||
+ if (varj == 5)
|
||||
+ continue;
|
||||
+ if (varj == 7 && !parm)
|
||||
+ goto exitlab;
|
||||
+ if (varj == 9)
|
||||
+ break;
|
||||
+ varm = varj;
|
||||
+ }
|
||||
+
|
||||
+exitlab:
|
||||
+ return varm;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo (0) != 6)
|
||||
+ abort ();
|
||||
+ if (foo (1) != 8)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr37616.c:17" } } */
|
||||
+/* { dg-final { scan-assembler "pr37616.c:19" } } */
|
||||
+/* { dg-final { scan-assembler "pr37616.c:21" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/pr37616.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr37616.c (revision 140948)
|
||||
@@ -0,0 +1,40 @@
|
||||
+/* PR debug/37616 */
|
||||
+/* Test that one can put breakpoints onto continue, exitlab and break
|
||||
+ and actually see program reaching those breakpoints.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+int
|
||||
+foo (int parm)
|
||||
+{
|
||||
+ int varj, varm;
|
||||
+
|
||||
+ for (varj = 0; varj < 10; varj++)
|
||||
+ {
|
||||
+ if (varj == 5)
|
||||
+ continue;
|
||||
+ if (varj == 7 && !parm)
|
||||
+ goto exitlab;
|
||||
+ if (varj == 9)
|
||||
+ break;
|
||||
+ varm = varj;
|
||||
+ }
|
||||
+
|
||||
+exitlab:
|
||||
+ return varm;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo (0) != 6)
|
||||
+ abort ();
|
||||
+ if (foo (1) != 8)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
|
@ -1,19 +0,0 @@
|
|||
2007-06-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/32139
|
||||
* gcc.c-torture/compile/20070531-1.c: New test.
|
||||
|
||||
--- 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,153 +0,0 @@
|
|||
2007-11-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/33763
|
||||
* gcc.dg/pr33763.c: New test.
|
||||
* g++.dg/opt/inline13.C: New test.
|
||||
|
||||
2007-11-06 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-11-06 09:29:04.000000000 +0100
|
||||
+++ gcc/tree-inline.c 2007-11-06 16:19:12.000000000 +0100
|
||||
@@ -2582,6 +2582,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-11-06 16:19:12.000000000 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr33763.c 2007-11-06 16:19:12.000000000 +0100
|
||||
@@ -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/inline13.C.jj 2007-11-06 16:20:20.000000000 +0100
|
||||
+++ gcc/testsuite/g++.dg/opt/inline13.C 2007-11-06 16:21:30.000000000 +0100
|
||||
@@ -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,118 +0,0 @@
|
|||
2008-09-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/34037
|
||||
* gimplify.c (gimplify_type_sizes): When not optimizing, ensure
|
||||
TYPE_MIN_VALUE and TYPE_MAX_VALUE is not is not DECL_IGNORED_P
|
||||
VAR_DECL.
|
||||
* cfgexpand.c (expand_used_vars): Keep DECL_ARTIFICIAL
|
||||
!DECL_IGNORED_P vars in unexpanded_var_list list for instantiate_decls,
|
||||
ggc_free other TREE_LIST nodes from that chain.
|
||||
* function.c (instantiate_decls): Instantiate also DECL_RTL
|
||||
of vars in cfun->unexpanded_var_list, free that list afterwards.
|
||||
|
||||
--- gcc/gimplify.c.jj 2008-09-10 20:50:11.000000000 +0200
|
||||
+++ gcc/gimplify.c 2008-09-11 13:54:22.000000000 +0200
|
||||
@@ -7105,6 +7105,18 @@ gimplify_type_sizes (tree type, gimple_s
|
||||
/* These types may not have declarations, so handle them here. */
|
||||
gimplify_type_sizes (TREE_TYPE (type), list_p);
|
||||
gimplify_type_sizes (TYPE_DOMAIN (type), list_p);
|
||||
+ /* When not optimizing, ensure VLA bounds aren't removed. */
|
||||
+ if (!optimize
|
||||
+ && TYPE_DOMAIN (type)
|
||||
+ && INTEGRAL_TYPE_P (TYPE_DOMAIN (type)))
|
||||
+ {
|
||||
+ t = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
|
||||
+ if (t && TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t))
|
||||
+ DECL_IGNORED_P (t) = 0;
|
||||
+ t = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
|
||||
+ if (t && TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t))
|
||||
+ DECL_IGNORED_P (t) = 0;
|
||||
+ }
|
||||
break;
|
||||
|
||||
case RECORD_TYPE:
|
||||
--- gcc/cfgexpand.c.jj 2008-09-09 16:08:04.000000000 +0200
|
||||
+++ gcc/cfgexpand.c 2008-09-11 15:01:00.000000000 +0200
|
||||
@@ -1440,7 +1440,7 @@ estimated_stack_frame_size (void)
|
||||
static void
|
||||
expand_used_vars (void)
|
||||
{
|
||||
- tree t, outer_block = DECL_INITIAL (current_function_decl);
|
||||
+ tree t, next, outer_block = DECL_INITIAL (current_function_decl);
|
||||
|
||||
/* Compute the phase of the stack frame for this function. */
|
||||
{
|
||||
@@ -1453,11 +1453,15 @@ expand_used_vars (void)
|
||||
|
||||
/* At this point all variables on the unexpanded_var_list with TREE_USED
|
||||
set are not associated with any block scope. Lay them out. */
|
||||
- for (t = cfun->unexpanded_var_list; t; t = TREE_CHAIN (t))
|
||||
+ t = cfun->unexpanded_var_list;
|
||||
+ cfun->unexpanded_var_list = NULL_TREE;
|
||||
+ for (; t; t = next)
|
||||
{
|
||||
tree var = TREE_VALUE (t);
|
||||
bool expand_now = false;
|
||||
|
||||
+ next = TREE_CHAIN (t);
|
||||
+
|
||||
/* We didn't set a block for static or extern because it's hard
|
||||
to tell the difference between a global variable (re)declared
|
||||
in a local scope, and one that's really declared there to
|
||||
@@ -1484,9 +1488,25 @@ expand_used_vars (void)
|
||||
TREE_USED (var) = 1;
|
||||
|
||||
if (expand_now)
|
||||
- expand_one_var (var, true, true);
|
||||
+ {
|
||||
+ expand_one_var (var, true, true);
|
||||
+ if (DECL_ARTIFICIAL (var) && !DECL_IGNORED_P (var))
|
||||
+ {
|
||||
+ rtx rtl = DECL_RTL_IF_SET (var);
|
||||
+
|
||||
+ /* Keep artificial non-ignored vars in cfun->unexpanded_var_list
|
||||
+ chain until instantiate_decls. */
|
||||
+ if (rtl && (MEM_P (rtl) || GET_CODE (rtl) == CONCAT))
|
||||
+ {
|
||||
+ TREE_CHAIN (t) = cfun->unexpanded_var_list;
|
||||
+ cfun->unexpanded_var_list = t;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ggc_free (t);
|
||||
}
|
||||
- cfun->unexpanded_var_list = NULL_TREE;
|
||||
|
||||
/* At this point, all variables within the block tree with TREE_USED
|
||||
set are actually used by the optimized function. Lay them out. */
|
||||
--- gcc/function.c.jj 2008-09-09 21:13:24.000000000 +0200
|
||||
+++ gcc/function.c 2008-09-11 14:56:47.000000000 +0200
|
||||
@@ -1645,7 +1645,7 @@ instantiate_decls_1 (tree let)
|
||||
static void
|
||||
instantiate_decls (tree fndecl)
|
||||
{
|
||||
- tree decl;
|
||||
+ tree decl, t, next;
|
||||
|
||||
/* Process all parameters of the function. */
|
||||
for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl))
|
||||
@@ -1661,6 +1661,17 @@ instantiate_decls (tree fndecl)
|
||||
|
||||
/* Now process all variables defined in the function or its subblocks. */
|
||||
instantiate_decls_1 (DECL_INITIAL (fndecl));
|
||||
+
|
||||
+ t = cfun->unexpanded_var_list;
|
||||
+ cfun->unexpanded_var_list = NULL_TREE;
|
||||
+ for (; t; t = next)
|
||||
+ {
|
||||
+ next = TREE_CHAIN (t);
|
||||
+ decl = TREE_VALUE (t);
|
||||
+ if (DECL_RTL_SET_P (decl))
|
||||
+ instantiate_decl_rtl (DECL_RTL (decl));
|
||||
+ ggc_free (t);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Pass through the INSNS of function FNDECL and convert virtual register
|
|
@ -1,47 +0,0 @@
|
|||
Revert:
|
||||
2008-08-28 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/36741
|
||||
* tree.c (int_fits_type_p): Don't forget unsigned integers
|
||||
of type sizetype which higher end word equals -1.
|
||||
|
||||
* g++.dg/other/new-size-type.C: New test.
|
||||
|
||||
--- gcc/tree.c (revision 139711)
|
||||
+++ gcc/tree.c (revision 139710)
|
||||
@@ -6296,21 +6296,6 @@ int_fits_type_p (const_tree c, const_tre
|
||||
for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
|
||||
for "constant known to fit". */
|
||||
|
||||
- if (TREE_TYPE (c) == sizetype
|
||||
- && TYPE_UNSIGNED (TREE_TYPE (c))
|
||||
- && TREE_INT_CST_HIGH (c) == -1
|
||||
- && !TREE_OVERFLOW (c))
|
||||
- /* So c is an unsigned integer which type is sizetype.
|
||||
- sizetype'd integers are sign extended even though they are
|
||||
- unsigned. If the integer value fits in the lower end word of c,
|
||||
- and if the higher end word has all its bits set to 1, that
|
||||
- means the higher end bits are set to 1 only for sign extension.
|
||||
- So let's convert c into an equivalent zero extended unsigned
|
||||
- integer. */
|
||||
- c = force_fit_type_double (size_type_node,
|
||||
- TREE_INT_CST_LOW (c),
|
||||
- TREE_INT_CST_HIGH (c),
|
||||
- false, false);
|
||||
/* Check if C >= type_low_bound. */
|
||||
if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
|
||||
{
|
||||
--- gcc/testsuite/g++.dg/other/new-size-type.C (revision 139711)
|
||||
+++ gcc/testsuite/g++.dg/other/new-size-type.C (revision 139710)
|
||||
@@ -1,10 +1,10 @@
|
||||
// Contributed by Dodji Seketeli <dodji@redhat.com>
|
||||
// Origin: PR c++/36741
|
||||
|
||||
#include <stddef.h>
|
||||
const char*
|
||||
foo()
|
||||
{
|
||||
- return new char[~static_cast<size_t>(0)];// { dg-bogus "large" }
|
||||
+ return new char[~static_cast<size_t>(0)];// { dg-bogus "large" "" { xfail *-*-* } }
|
||||
}
|
||||
|
|
@ -1,117 +0,0 @@
|
|||
2008-09-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/37189
|
||||
* cp-tree.h (defer_mark_used_calls, deferred_mark_used_calls): New
|
||||
extern decls.
|
||||
* decl2.c (mark_used): If defer_mark_used_calls, push decl into
|
||||
deferred_mark_used_calls vector and exit early.
|
||||
* decl.c (defer_mark_used_calls, deferred_mark_used_calls): New
|
||||
variables.
|
||||
(finish_function): Set defer_mark_used_calls for the duration of the
|
||||
function. Call mark_used on any queued decls.
|
||||
|
||||
PR c++/37189
|
||||
* g++.dg/gomp/pr37189.C: New test.
|
||||
|
||||
--- gcc/cp/decl2.c (revision 139954)
|
||||
+++ gcc/cp/decl2.c (revision 139955)
|
||||
@@ -3776,6 +3776,15 @@ mark_used (tree decl)
|
||||
/* If we don't need a value, then we don't need to synthesize DECL. */
|
||||
if (skip_evaluation)
|
||||
return;
|
||||
+
|
||||
+ /* If within finish_function, defer the rest until that function
|
||||
+ finishes, otherwise it might recurse. */
|
||||
+ if (defer_mark_used_calls)
|
||||
+ {
|
||||
+ VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/* Normally, we can wait until instantiation-time to synthesize
|
||||
DECL. However, if DECL is a static data member initialized with
|
||||
a constant, we need the value right now because a reference to
|
||||
--- gcc/cp/decl.c (revision 139954)
|
||||
+++ gcc/cp/decl.c (revision 139955)
|
||||
@@ -227,6 +227,11 @@ struct named_label_entry GTY(())
|
||||
function, two inside the body of a function in a local class, etc.) */
|
||||
int function_depth;
|
||||
|
||||
+/* To avoid unwanted recursion, finish_function defers all mark_used calls
|
||||
+ encountered during its execution until it finishes. */
|
||||
+bool defer_mark_used_calls;
|
||||
+VEC(tree, gc) *deferred_mark_used_calls;
|
||||
+
|
||||
/* States indicating how grokdeclarator() should handle declspecs marked
|
||||
with __attribute__((deprecated)). An object declared as
|
||||
__attribute__((deprecated)) suppresses warnings of uses of other
|
||||
@@ -12033,6 +12038,9 @@ finish_function (int flags)
|
||||
if (fndecl == NULL_TREE)
|
||||
return error_mark_node;
|
||||
|
||||
+ gcc_assert (!defer_mark_used_calls);
|
||||
+ defer_mark_used_calls = true;
|
||||
+
|
||||
if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
|
||||
&& DECL_VIRTUAL_P (fndecl)
|
||||
&& !processing_template_decl)
|
||||
@@ -12232,6 +12240,17 @@ finish_function (int flags)
|
||||
cxx_pop_function_context and then reset via pop_function_context. */
|
||||
current_function_decl = NULL_TREE;
|
||||
|
||||
+ defer_mark_used_calls = false;
|
||||
+ if (deferred_mark_used_calls)
|
||||
+ {
|
||||
+ unsigned int i;
|
||||
+ tree decl;
|
||||
+
|
||||
+ for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
|
||||
+ mark_used (decl);
|
||||
+ VEC_free (tree, gc, deferred_mark_used_calls);
|
||||
+ }
|
||||
+
|
||||
return fndecl;
|
||||
}
|
||||
|
||||
--- gcc/cp/cp-tree.h (revision 139954)
|
||||
+++ gcc/cp/cp-tree.h (revision 139955)
|
||||
@@ -4381,6 +4381,9 @@ extern void initialize_artificial_var (
|
||||
extern tree check_var_type (tree, tree);
|
||||
extern tree reshape_init (tree, tree);
|
||||
|
||||
+extern bool defer_mark_used_calls;
|
||||
+extern GTY(()) VEC(tree, gc) *deferred_mark_used_calls;
|
||||
+
|
||||
/* in decl2.c */
|
||||
extern bool check_java_method (tree);
|
||||
extern tree build_memfn_type (tree, tree, cp_cv_quals);
|
||||
--- gcc/testsuite/g++.dg/gomp/pr37189.C (revision 0)
|
||||
+++ gcc/testsuite/g++.dg/gomp/pr37189.C (revision 139955)
|
||||
@@ -0,0 +1,27 @@
|
||||
+// PR c++/37189
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-fopenmp" }
|
||||
+
|
||||
+struct S
|
||||
+{
|
||||
+ S () {}
|
||||
+ S (S const &) {}
|
||||
+};
|
||||
+
|
||||
+struct T
|
||||
+{
|
||||
+ S s;
|
||||
+};
|
||||
+
|
||||
+void
|
||||
+bar (T &)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+foo ()
|
||||
+{
|
||||
+ T t;
|
||||
+ #pragma omp task
|
||||
+ bar (t);
|
||||
+}
|
|
@ -1,276 +0,0 @@
|
|||
2008-10-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* f95-lang.c (poplevel): Don't clear BLOCK_VARS if functionbody.
|
||||
* trans-decl.c (gfc_build_qualified_array): Build accurate debug type
|
||||
even if nest.
|
||||
(build_entry_thunks, gfc_generate_function_code,
|
||||
gfc_generate_constructors): Ensure DECL_SAVED_TREE is a BIND_EXPR
|
||||
with DECL_INITIAL as its BLOCK.
|
||||
|
||||
PR debug/37738
|
||||
* dwarf2out.c (common_block_die_table): New variable.
|
||||
(common_block_die_table_hash, common_block_die_table_eq): New
|
||||
functions.
|
||||
(gen_variable_die): Look up a DW_TAG_common_block die for a particular
|
||||
COMMON block in the current scope rather than globally. Optimize
|
||||
DW_OP_addr SYMBOL_REF DW_OP_plus_uconst off into
|
||||
DW_OP_addr SYMBOL_REF+off.
|
||||
|
||||
* gfortran.dg/debug/pr37738.f: New test.
|
||||
|
||||
--- gcc/testsuite/gfortran.dg/debug/pr37738.f (revision 0)
|
||||
+++ gcc/testsuite/gfortran.dg/debug/pr37738.f (revision 140945)
|
||||
@@ -0,0 +1,30 @@
|
||||
+C PR debug/37738
|
||||
+C { dg-do compile }
|
||||
+C { dg-skip-if "DWARF-2 only" { "*-*-*" } { "*" } { "-gdwarf-2" } }
|
||||
+C { dg-options "-dA" }
|
||||
+
|
||||
+ subroutine a
|
||||
+ integer*4 a_i, c_i
|
||||
+ common /block/a_i, c_i
|
||||
+ a_i = 1
|
||||
+ c_i = 4
|
||||
+ end subroutine a
|
||||
+ subroutine b
|
||||
+ integer*4 b_i
|
||||
+ common /block/b_i, d_i
|
||||
+ b_i = 2
|
||||
+ d_i = 5
|
||||
+ end subroutine b
|
||||
+ subroutine c
|
||||
+ integer*4 a_i, c_i
|
||||
+ common /block/a_i, c_i
|
||||
+ if (a_i .ne. 2) call abort
|
||||
+ if (c_i .ne. 5) call abort
|
||||
+ end subroutine c
|
||||
+ program abc
|
||||
+ call a
|
||||
+ call b
|
||||
+ call c
|
||||
+ end program abc
|
||||
+
|
||||
+C { dg-final { scan-assembler-times "DIE\[^\n\]*DW_TAG_common_block" 3 } }
|
||||
--- gcc/dwarf2out.c (revision 140943)
|
||||
+++ gcc/dwarf2out.c (revision 140945)
|
||||
@@ -4748,6 +4748,10 @@ static GTY((param_is (struct dwarf_file_
|
||||
The key is a DECL_UID() which is a unique number identifying each decl. */
|
||||
static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
|
||||
|
||||
+/* A hash table of references to DIE's that describe COMMON blocks.
|
||||
+ The key is DECL_UID() ^ die_parent. */
|
||||
+static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
|
||||
+
|
||||
/* Node of the variable location list. */
|
||||
struct var_loc_node GTY ((chain_next ("%h.next")))
|
||||
{
|
||||
@@ -4960,6 +4964,8 @@ static void equate_type_number_to_die (t
|
||||
static hashval_t decl_die_table_hash (const void *);
|
||||
static int decl_die_table_eq (const void *, const void *);
|
||||
static dw_die_ref lookup_decl_die (tree);
|
||||
+static hashval_t common_block_die_table_hash (const void *);
|
||||
+static int common_block_die_table_eq (const void *, const void *);
|
||||
static hashval_t decl_loc_table_hash (const void *);
|
||||
static int decl_loc_table_eq (const void *, const void *);
|
||||
static var_loc_list *lookup_decl_loc (const_tree);
|
||||
@@ -13812,6 +13818,26 @@ gen_subprogram_die (tree decl, dw_die_re
|
||||
|
||||
}
|
||||
|
||||
+/* Returns a hash value for X (which really is a die_struct). */
|
||||
+
|
||||
+static hashval_t
|
||||
+common_block_die_table_hash (const void *x)
|
||||
+{
|
||||
+ const_dw_die_ref d = (const_dw_die_ref) x;
|
||||
+ return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
|
||||
+}
|
||||
+
|
||||
+/* Return nonzero if decl_id and die_parent of die_struct X is the same
|
||||
+ as decl_id and die_parent of die_struct Y. */
|
||||
+
|
||||
+static int
|
||||
+common_block_die_table_eq (const void *x, const void *y)
|
||||
+{
|
||||
+ const_dw_die_ref d = (const_dw_die_ref) x;
|
||||
+ const_dw_die_ref e = (const_dw_die_ref) y;
|
||||
+ return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
|
||||
+}
|
||||
+
|
||||
/* Generate a DIE to represent a declared data object. */
|
||||
|
||||
static void
|
||||
@@ -13853,6 +13879,7 @@ gen_variable_die (tree decl, dw_die_ref
|
||||
tree field;
|
||||
dw_die_ref com_die;
|
||||
dw_loc_descr_ref loc;
|
||||
+ die_node com_die_arg;
|
||||
|
||||
var_die = lookup_decl_die (decl);
|
||||
if (var_die)
|
||||
@@ -13863,21 +13890,41 @@ gen_variable_die (tree decl, dw_die_ref
|
||||
if (loc)
|
||||
{
|
||||
if (off)
|
||||
- add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst,
|
||||
+ {
|
||||
+ /* Optimize the common case. */
|
||||
+ if (loc->dw_loc_opc == DW_OP_addr
|
||||
+ && loc->dw_loc_next == NULL
|
||||
+ && GET_CODE (loc->dw_loc_oprnd1.v.val_addr)
|
||||
+ == SYMBOL_REF)
|
||||
+ loc->dw_loc_oprnd1.v.val_addr
|
||||
+ = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off);
|
||||
+ else
|
||||
+ add_loc_descr (&loc,
|
||||
+ new_loc_descr (DW_OP_plus_uconst,
|
||||
off, 0));
|
||||
+ }
|
||||
add_AT_loc (var_die, DW_AT_location, loc);
|
||||
remove_AT (var_die, DW_AT_declaration);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ if (common_block_die_table == NULL)
|
||||
+ common_block_die_table
|
||||
+ = htab_create_ggc (10, common_block_die_table_hash,
|
||||
+ common_block_die_table_eq, NULL);
|
||||
+
|
||||
field = TREE_OPERAND (DECL_VALUE_EXPR (decl), 0);
|
||||
- com_die = lookup_decl_die (com_decl);
|
||||
+ com_die_arg.decl_id = DECL_UID (com_decl);
|
||||
+ com_die_arg.die_parent = context_die;
|
||||
+ com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
|
||||
loc = loc_descriptor_from_tree (com_decl);
|
||||
if (com_die == NULL)
|
||||
{
|
||||
const char *cnam
|
||||
= IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
|
||||
+ void **slot;
|
||||
|
||||
com_die = new_die (DW_TAG_common_block, context_die, decl);
|
||||
add_name_and_src_coords_attributes (com_die, com_decl);
|
||||
@@ -13891,7 +13938,9 @@ gen_variable_die (tree decl, dw_die_ref
|
||||
else if (DECL_EXTERNAL (decl))
|
||||
add_AT_flag (com_die, DW_AT_declaration, 1);
|
||||
add_pubname_string (cnam, com_die); /* ??? needed? */
|
||||
- equate_decl_number_to_die (com_decl, com_die);
|
||||
+ com_die->decl_id = DECL_UID (com_decl);
|
||||
+ slot = htab_find_slot (common_block_die_table, com_die, INSERT);
|
||||
+ *slot = (void *) com_die;
|
||||
}
|
||||
else if (get_AT (com_die, DW_AT_location) == NULL && loc)
|
||||
{
|
||||
@@ -13907,7 +13956,17 @@ gen_variable_die (tree decl, dw_die_ref
|
||||
if (loc)
|
||||
{
|
||||
if (off)
|
||||
- add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst, off, 0));
|
||||
+ {
|
||||
+ /* Optimize the common case. */
|
||||
+ if (loc->dw_loc_opc == DW_OP_addr
|
||||
+ && loc->dw_loc_next == NULL
|
||||
+ && GET_CODE (loc->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
|
||||
+ loc->dw_loc_oprnd1.v.val_addr
|
||||
+ = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off);
|
||||
+ else
|
||||
+ add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst,
|
||||
+ off, 0));
|
||||
+ }
|
||||
add_AT_loc (var_die, DW_AT_location, loc);
|
||||
}
|
||||
else if (DECL_EXTERNAL (decl))
|
||||
--- gcc/fortran/f95-lang.c (revision 140943)
|
||||
+++ gcc/fortran/f95-lang.c (revision 140945)
|
||||
@@ -457,14 +457,8 @@ poplevel (int keep, int reverse, int fun
|
||||
current_binding_level = current_binding_level->level_chain;
|
||||
|
||||
if (functionbody)
|
||||
- {
|
||||
- /* This is the top level block of a function. The ..._DECL chain stored
|
||||
- in BLOCK_VARS are the function's parameters (PARM_DECL nodes). Don't
|
||||
- leave them in the BLOCK because they are found in the FUNCTION_DECL
|
||||
- instead. */
|
||||
- DECL_INITIAL (current_function_decl) = block_node;
|
||||
- BLOCK_VARS (block_node) = 0;
|
||||
- }
|
||||
+ /* This is the top level block of a function. */
|
||||
+ DECL_INITIAL (current_function_decl) = block_node;
|
||||
else if (current_binding_level == global_binding_level)
|
||||
/* When using gfc_start_block/gfc_finish_block from middle-end hooks,
|
||||
don't add newly created BLOCKs as sublocks of global_binding_level. */
|
||||
--- gcc/fortran/trans-decl.c (revision 140943)
|
||||
+++ gcc/fortran/trans-decl.c (revision 140945)
|
||||
@@ -704,7 +704,7 @@ gfc_build_qualified_array (tree decl, gf
|
||||
layout_type (type);
|
||||
}
|
||||
|
||||
- if (nest || write_symbols == NO_DEBUG)
|
||||
+ if (write_symbols == NO_DEBUG)
|
||||
return;
|
||||
|
||||
if (TYPE_NAME (type) != NULL_TREE
|
||||
@@ -1761,7 +1761,7 @@ build_entry_thunks (gfc_namespace * ns)
|
||||
|
||||
thunk_fndecl = thunk_sym->backend_decl;
|
||||
|
||||
- gfc_start_block (&body);
|
||||
+ gfc_init_block (&body);
|
||||
|
||||
/* Pass extra parameter identifying this entry point. */
|
||||
tmp = build_int_cst (gfc_array_index_type, el->id);
|
||||
@@ -1869,8 +1869,12 @@ build_entry_thunks (gfc_namespace * ns)
|
||||
|
||||
/* Finish off this function and send it for code generation. */
|
||||
DECL_SAVED_TREE (thunk_fndecl) = gfc_finish_block (&body);
|
||||
+ tmp = getdecls ();
|
||||
poplevel (1, 0, 1);
|
||||
BLOCK_SUPERCONTEXT (DECL_INITIAL (thunk_fndecl)) = thunk_fndecl;
|
||||
+ DECL_SAVED_TREE (thunk_fndecl)
|
||||
+ = build3_v (BIND_EXPR, tmp, DECL_SAVED_TREE (thunk_fndecl),
|
||||
+ DECL_INITIAL (thunk_fndecl));
|
||||
|
||||
/* Output the GENERIC tree. */
|
||||
dump_function (TDI_original, thunk_fndecl);
|
||||
@@ -3652,7 +3656,7 @@ gfc_generate_function_code (gfc_namespac
|
||||
|
||||
trans_function_start (sym);
|
||||
|
||||
- gfc_start_block (&block);
|
||||
+ gfc_init_block (&block);
|
||||
|
||||
if (ns->entries && ns->proc_name->ts.type == BT_CHARACTER)
|
||||
{
|
||||
@@ -3886,11 +3890,16 @@ gfc_generate_function_code (gfc_namespac
|
||||
saved_function_decls = NULL_TREE;
|
||||
|
||||
DECL_SAVED_TREE (fndecl) = gfc_finish_block (&block);
|
||||
+ decl = getdecls ();
|
||||
|
||||
/* Finish off this function and send it for code generation. */
|
||||
poplevel (1, 0, 1);
|
||||
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
|
||||
|
||||
+ DECL_SAVED_TREE (fndecl)
|
||||
+ = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl),
|
||||
+ DECL_INITIAL (fndecl));
|
||||
+
|
||||
/* Output the GENERIC tree. */
|
||||
dump_function (TDI_original, fndecl);
|
||||
|
||||
@@ -3969,9 +3978,13 @@ gfc_generate_constructors (void)
|
||||
DECL_SAVED_TREE (fndecl) = build_stmt (EXPR_STMT, tmp);
|
||||
}
|
||||
|
||||
+ decl = getdecls ();
|
||||
poplevel (1, 0, 1);
|
||||
|
||||
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
|
||||
+ DECL_SAVED_TREE (fndecl)
|
||||
+ = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl),
|
||||
+ DECL_INITIAL (fndecl));
|
||||
|
||||
free_after_parsing (cfun);
|
||||
free_after_compilation (cfun);
|
|
@ -1,32 +0,0 @@
|
|||
2008-11-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/37858
|
||||
* passes.c (execute_one_pass): Don't look at cfun->curr_properties
|
||||
for ipa and simple ipa passes.
|
||||
|
||||
* gcc.dg/pr37858.c: New test.
|
||||
|
||||
--- gcc/passes.c (revision 141544)
|
||||
+++ gcc/passes.c (revision 141545)
|
||||
@@ -1289,6 +1289,7 @@ execute_one_pass (struct opt_pass *pass)
|
||||
if (initializing_dump
|
||||
&& dump_file
|
||||
&& graph_dump_format != no_graph
|
||||
+ && cfun
|
||||
&& (cfun->curr_properties & (PROP_cfg | PROP_rtl))
|
||||
== (PROP_cfg | PROP_rtl))
|
||||
{
|
||||
--- gcc/testsuite/gcc.dg/pr37858.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr37858.c (revision 141545)
|
||||
@@ -0,0 +1,11 @@
|
||||
+/* PR middle-end/37858 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -fdump-ipa-early_local_cleanups -dv" } */
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { cleanup-ipa-dump "early_local_cleanups" } } */
|
|
@ -1,79 +0,0 @@
|
|||
2008-10-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/37870
|
||||
* expmed.c (extract_bit_field_1): If int_mode_for_mode returns
|
||||
BLKmode for non-memory, convert using a wider MODE_INT mode
|
||||
or through memory.
|
||||
|
||||
* gcc.target/i386/pr37870.c: New test.
|
||||
|
||||
--- gcc/expmed.c (revision 141429)
|
||||
+++ gcc/expmed.c (revision 141430)
|
||||
@@ -1278,9 +1278,8 @@ extract_bit_field_1 (rtx str_rtx, unsign
|
||||
{
|
||||
if (MEM_P (op0))
|
||||
op0 = adjust_address (op0, imode, 0);
|
||||
- else
|
||||
+ else if (imode != BLKmode)
|
||||
{
|
||||
- gcc_assert (imode != BLKmode);
|
||||
op0 = gen_lowpart (imode, op0);
|
||||
|
||||
/* If we got a SUBREG, force it into a register since we
|
||||
@@ -1288,6 +1287,24 @@ extract_bit_field_1 (rtx str_rtx, unsign
|
||||
if (GET_CODE (op0) == SUBREG)
|
||||
op0 = force_reg (imode, op0);
|
||||
}
|
||||
+ else if (REG_P (op0))
|
||||
+ {
|
||||
+ rtx reg, subreg;
|
||||
+ imode = smallest_mode_for_size (GET_MODE_BITSIZE (GET_MODE (op0)),
|
||||
+ MODE_INT);
|
||||
+ reg = gen_reg_rtx (imode);
|
||||
+ subreg = gen_lowpart_SUBREG (GET_MODE (op0), reg);
|
||||
+ emit_move_insn (subreg, op0);
|
||||
+ op0 = reg;
|
||||
+ bitnum += SUBREG_BYTE (subreg) * BITS_PER_UNIT;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ rtx mem = assign_stack_temp (GET_MODE (op0),
|
||||
+ GET_MODE_SIZE (GET_MODE (op0)), 0);
|
||||
+ emit_move_insn (mem, op0);
|
||||
+ op0 = adjust_address (mem, BLKmode, 0);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
--- gcc/testsuite/gcc.target/i386/pr37870.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/pr37870.c (revision 141430)
|
||||
@@ -0,0 +1,29 @@
|
||||
+/* PR middle-end/37870 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+unsigned int
|
||||
+foo (long double x)
|
||||
+{
|
||||
+ struct { char a[8]; unsigned int b:7; } c;
|
||||
+ __builtin_memcpy (&c, &x, sizeof (c));
|
||||
+ return c.b;
|
||||
+}
|
||||
+
|
||||
+unsigned int
|
||||
+bar (long double x)
|
||||
+{
|
||||
+ union { struct { char a[8]; unsigned int b:7; } c; long double d; } u;
|
||||
+ u.d = x;
|
||||
+ return u.c.b;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo (1.245L) != bar (1.245L)
|
||||
+ || foo (245.67L) != bar (245.67L)
|
||||
+ || foo (0.00567L) != bar (0.00567L))
|
||||
+ __builtin_abort ();
|
||||
+ return 0;
|
||||
+}
|
|
@ -1,59 +0,0 @@
|
|||
2008-10-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/37879
|
||||
* predict.c (tree_estimate_probability): Check if last_stmt is
|
||||
non-NULL before dereferencing it.
|
||||
|
||||
* gcc.dg/pr37879.c: New test.
|
||||
|
||||
--- gcc/predict.c (revision 141389)
|
||||
+++ gcc/predict.c (revision 141390)
|
||||
@@ -1374,6 +1374,7 @@ tree_estimate_probability (void)
|
||||
{
|
||||
edge e;
|
||||
edge_iterator ei;
|
||||
+ tree last;
|
||||
|
||||
FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
{
|
||||
@@ -1396,7 +1397,8 @@ tree_estimate_probability (void)
|
||||
&& e->dest != EXIT_BLOCK_PTR
|
||||
&& single_succ_p (e->dest)
|
||||
&& single_succ_edge (e->dest)->dest == EXIT_BLOCK_PTR
|
||||
- && TREE_CODE (last_stmt (e->dest)) == RETURN_EXPR)
|
||||
+ && (last = last_stmt (e->dest)) != NULL_TREE
|
||||
+ && TREE_CODE (last) == RETURN_EXPR)
|
||||
{
|
||||
edge e1;
|
||||
edge_iterator ei1;
|
||||
--- gcc/testsuite/gcc.dg/pr37879.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr37879.c (revision 141390)
|
||||
@@ -0,0 +1,28 @@
|
||||
+/* PR tree-optimization/37879 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+static inline void bar (int) __attribute__ ((noreturn));
|
||||
+void baz () __attribute__ ((noreturn));
|
||||
+
|
||||
+inline int
|
||||
+foo (int i)
|
||||
+{
|
||||
+ return i;
|
||||
+}
|
||||
+
|
||||
+int i = 23;
|
||||
+static inline void
|
||||
+bar (int j)
|
||||
+{
|
||||
+ if (j)
|
||||
+ asm ("");
|
||||
+} /* { dg-warning "does return" } */
|
||||
+
|
||||
+void
|
||||
+baz ()
|
||||
+{
|
||||
+ int j;
|
||||
+ bar (foo (j = i++));
|
||||
+ asm ("");
|
||||
+}
|
|
@ -1,106 +0,0 @@
|
|||
2008-10-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/37924
|
||||
* combine.c (make_compound_operation): Don't call make_extraction with
|
||||
non-positive length.
|
||||
(simplify_shift_const_1): Canonicalize count even if complement_p.
|
||||
|
||||
* gcc.c-torture/execute/pr37924.c: New test.
|
||||
|
||||
--- gcc/combine.c (revision 141412)
|
||||
+++ gcc/combine.c (revision 141413)
|
||||
@@ -7024,7 +7024,8 @@ make_compound_operation (rtx x, enum rtx
|
||||
if (GET_CODE (rhs) == CONST_INT
|
||||
&& GET_CODE (lhs) == ASHIFT
|
||||
&& GET_CODE (XEXP (lhs, 1)) == CONST_INT
|
||||
- && INTVAL (rhs) >= INTVAL (XEXP (lhs, 1)))
|
||||
+ && INTVAL (rhs) >= INTVAL (XEXP (lhs, 1))
|
||||
+ && INTVAL (rhs) < mode_width)
|
||||
{
|
||||
new = make_compound_operation (XEXP (lhs, 0), next_code);
|
||||
new = make_extraction (mode, new,
|
||||
@@ -7044,6 +7045,7 @@ make_compound_operation (rtx x, enum rtx
|
||||
&& (OBJECT_P (SUBREG_REG (lhs))))
|
||||
&& GET_CODE (rhs) == CONST_INT
|
||||
&& INTVAL (rhs) < HOST_BITS_PER_WIDE_INT
|
||||
+ && INTVAL (rhs) < mode_width
|
||||
&& (new = extract_left_shift (lhs, INTVAL (rhs))) != 0)
|
||||
new = make_extraction (mode, make_compound_operation (new, next_code),
|
||||
0, NULL_RTX, mode_width - INTVAL (rhs),
|
||||
@@ -9023,11 +9025,6 @@ simplify_shift_const_1 (enum rtx_code co
|
||||
if (GET_CODE (varop) == CLOBBER)
|
||||
return NULL_RTX;
|
||||
|
||||
- /* If we discovered we had to complement VAROP, leave. Making a NOT
|
||||
- here would cause an infinite loop. */
|
||||
- if (complement_p)
|
||||
- break;
|
||||
-
|
||||
/* Convert ROTATERT to ROTATE. */
|
||||
if (code == ROTATERT)
|
||||
{
|
||||
@@ -9073,6 +9070,11 @@ simplify_shift_const_1 (enum rtx_code co
|
||||
}
|
||||
}
|
||||
|
||||
+ /* If we discovered we had to complement VAROP, leave. Making a NOT
|
||||
+ here would cause an infinite loop. */
|
||||
+ if (complement_p)
|
||||
+ break;
|
||||
+
|
||||
/* An arithmetic right shift of a quantity known to be -1 or 0
|
||||
is a no-op. */
|
||||
if (code == ASHIFTRT
|
||||
--- gcc/testsuite/gcc.c-torture/execute/pr37924.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.c-torture/execute/pr37924.c (revision 141413)
|
||||
@@ -0,0 +1,50 @@
|
||||
+/* PR c/37924 */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+signed char a;
|
||||
+unsigned char b;
|
||||
+
|
||||
+int
|
||||
+test1 (void)
|
||||
+{
|
||||
+ int c = -1;
|
||||
+ return ((unsigned int) (a ^ c)) >> 9;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+test2 (void)
|
||||
+{
|
||||
+ int c = -1;
|
||||
+ return ((unsigned int) (b ^ c)) >> 9;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ a = 0;
|
||||
+ if (test1 () != (-1U >> 9))
|
||||
+ abort ();
|
||||
+ a = 0x40;
|
||||
+ if (test1 () != (-1U >> 9))
|
||||
+ abort ();
|
||||
+ a = 0x80;
|
||||
+ if (test1 () != (a < 0) ? 0 : (-1U >> 9))
|
||||
+ abort ();
|
||||
+ a = 0xff;
|
||||
+ if (test1 () != (a < 0) ? 0 : (-1U >> 9))
|
||||
+ abort ();
|
||||
+ b = 0;
|
||||
+ if (test2 () != (-1U >> 9))
|
||||
+ abort ();
|
||||
+ b = 0x40;
|
||||
+ if (test2 () != (-1U >> 9))
|
||||
+ abort ();
|
||||
+ b = 0x80;
|
||||
+ if (test2 () != (-1U >> 9))
|
||||
+ abort ();
|
||||
+ b = 0xff;
|
||||
+ if (test2 () != (-1U >> 9))
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
|
@ -1,89 +0,0 @@
|
|||
2008-04-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR pch/13675
|
||||
* files.c (struct _cpp_file): Remove pch field.
|
||||
(pch_open_file): Don't set file->pch, just file->pchname.
|
||||
(should_stack_file): After pfile->cb.read_pch call
|
||||
free pchname and clear pchname, don't close file->fd.
|
||||
Test file->pchname instead of file->pch. Don't close fd after cb.
|
||||
(_cpp_stack_include): Test file->pchname instead of file->pch.
|
||||
|
||||
* c-pch.c (c_common_read_pch): On error close (fd) resp. fclose (f).
|
||||
|
||||
--- libcpp/files.c.jj 2008-02-18 23:50:17.000000000 +0100
|
||||
+++ libcpp/files.c 2008-03-31 15:59:01.000000000 +0200
|
||||
@@ -106,9 +106,6 @@ struct _cpp_file
|
||||
|
||||
/* If BUFFER above contains the true contents of the file. */
|
||||
bool buffer_valid;
|
||||
-
|
||||
- /* File is a PCH (on return from find_include_file). */
|
||||
- bool pch;
|
||||
};
|
||||
|
||||
/* A singly-linked list for all searches for a given file name, with
|
||||
@@ -322,9 +319,7 @@ pch_open_file (cpp_reader *pfile, _cpp_f
|
||||
}
|
||||
closedir (pchdir);
|
||||
}
|
||||
- if (valid)
|
||||
- file->pch = true;
|
||||
- else
|
||||
+ if (!valid)
|
||||
*invalid_pch = true;
|
||||
}
|
||||
|
||||
@@ -703,11 +698,12 @@ should_stack_file (cpp_reader *pfile, _c
|
||||
return false;
|
||||
|
||||
/* Handle PCH files immediately; don't stack them. */
|
||||
- if (file->pch)
|
||||
+ if (file->pchname)
|
||||
{
|
||||
pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
|
||||
- close (file->fd);
|
||||
file->fd = -1;
|
||||
+ free ((void *) file->pchname);
|
||||
+ file->pchname = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -916,7 +912,7 @@ _cpp_stack_include (cpp_reader *pfile, c
|
||||
complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we
|
||||
found a PCH file (in which case linemap_add is not called) or we
|
||||
were included from the command-line. */
|
||||
- if (! file->pch && file->err_no == 0 && type != IT_CMDLINE)
|
||||
+ if (file->pchname == NULL && file->err_no == 0 && type != IT_CMDLINE)
|
||||
pfile->line_table->highest_location--;
|
||||
|
||||
return _cpp_stack_file (pfile, file, type == IT_IMPORT);
|
||||
--- gcc/c-pch.c.jj 2008-02-18 23:46:08.000000000 +0100
|
||||
+++ gcc/c-pch.c 2008-03-31 15:56:00.000000000 +0200
|
||||
@@ -372,6 +372,7 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
if (f == NULL)
|
||||
{
|
||||
cpp_errno (pfile, CPP_DL_ERROR, "calling fdopen");
|
||||
+ close (fd);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -380,6 +381,7 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
if (fread (&h, sizeof (h), 1, f) != 1)
|
||||
{
|
||||
cpp_errno (pfile, CPP_DL_ERROR, "reading");
|
||||
+ fclose (f);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -425,7 +427,10 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
gt_pch_restore (f);
|
||||
|
||||
if (cpp_read_state (pfile, name, f, smd) != 0)
|
||||
- return;
|
||||
+ {
|
||||
+ fclose (f);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
fclose (f);
|
||||
|
|
@ -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
|
||||
@@ -277,6 +277,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_LD_SYMBOLIC_FUNCTIONS)
|
||||
--- libjava/Makefile.in.jj 2007-07-04 21:11:11.000000000 +0200
|
||||
+++ libjava/Makefile.in 2007-10-16 15:56:07.000000000 +0200
|
||||
@@ -153,7 +153,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)
|
||||
@INTERPRETER_TRUE@am__DEPENDENCIES_1 = gnu/classpath/jdwp.lo \
|
||||
@@ -941,6 +940,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` \
|
||||
$(LIBGCJ_LD_SYMBOLIC_FUNCTIONS)
|
|
@ -1,28 +0,0 @@
|
|||
2007-10-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* doc/Makefile.am (POD2MAN): Set date from cp-tools.texinfo
|
||||
timestamp rather than from current date.
|
||||
* doc/Makefile.in: Regenerated.
|
||||
|
||||
--- libjava/classpath/doc/Makefile.am.jj 2007-12-07 17:55:00.000000000 +0100
|
||||
+++ libjava/classpath/doc/Makefile.am 2007-12-07 18:55:28.000000000 +0100
|
||||
@@ -30,7 +30,7 @@ TOOLS_MANFILES = \
|
||||
gserialver.1 \
|
||||
gtnameserv.1
|
||||
|
||||
-POD2MAN = pod2man --center="GNU" --release="$(VERSION)"
|
||||
+POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')"
|
||||
TEXI2POD = perl $(srcdir)/texi2pod.pl
|
||||
STAMP = echo timestamp >
|
||||
|
||||
--- libjava/classpath/doc/Makefile.in.jj 2007-12-07 17:55:00.000000000 +0100
|
||||
+++ libjava/classpath/doc/Makefile.in 2007-12-07 18:55:43.000000000 +0100
|
||||
@@ -357,7 +357,7 @@ TOOLS_MANFILES = \
|
||||
gserialver.1 \
|
||||
gtnameserv.1
|
||||
|
||||
-POD2MAN = pod2man --center="GNU" --release="$(VERSION)"
|
||||
+POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')"
|
||||
TEXI2POD = perl $(srcdir)/texi2pod.pl
|
||||
STAMP = echo timestamp >
|
||||
@GENINSRC_FALSE@STAMP_GENINSRC =
|
|
@ -1,40 +0,0 @@
|
|||
--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500
|
||||
+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500
|
||||
@@ -2343,7 +2343,7 @@ sparc-*-elf*)
|
||||
extra_parts="crti.o crtn.o crtbegin.o crtend.o"
|
||||
use_fixproto=yes
|
||||
;;
|
||||
-sparc-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||
+sparc-*-linux* | sparcv9*-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
|
||||
extra_options="${extra_options} sparc/long-double-switch.opt"
|
||||
tmake_file="${tmake_file} sparc/t-linux sparc/t-crtfm"
|
||||
@@ -2477,7 +2477,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
|
||||
esac
|
||||
need_64bit_hwint=yes
|
||||
;;
|
||||
-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
|
||||
+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux
|
||||
tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h"
|
||||
extra_options="${extra_options} sparc/long-double-switch.opt"
|
||||
tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm"
|
||||
--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500
|
||||
+++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500
|
||||
@@ -572,7 +572,7 @@ sparc64-*-openbsd*)
|
||||
;;
|
||||
sparc-*-elf*)
|
||||
;;
|
||||
-sparc-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||
+sparc-*-linux* | sparcv9*-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||
extra_parts="$extra_parts crtfastmath.o"
|
||||
tmake_file="${tmake_file} sparc/t-crtfm"
|
||||
;;
|
||||
@@ -590,7 +590,7 @@ sparc-wrs-vxworks)
|
||||
;;
|
||||
sparc64-*-freebsd*|ultrasparc-*-freebsd*)
|
||||
;;
|
||||
-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} sparc/t-crtfm"
|
||||
;;
|
|
@ -1,355 +0,0 @@
|
|||
2008-09-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/i386/i386.c (X86_64_VARARGS_SIZE): Removed.
|
||||
(setup_incoming_varargs_64): Set/check ix86_varargs_gpr_size and
|
||||
ix86_varargs_fpr_size. Use ix86_varargs_gpr_size instead of
|
||||
REGPARM_MAX. Don't set ix86_save_varrargs_registers.
|
||||
(ix86_va_start): Check ix86_varargs_gpr_size and
|
||||
ix86_varargs_fpr_size instead of cfun->va_list_gpr_size and
|
||||
cfun->va_list_fpr_size, respectively. Subtract 8*REGPARM_MAX
|
||||
from frame pointer if ix86_varargs_gpr_size == 0.
|
||||
(ix86_compute_frame_layout): Updated.
|
||||
* config/i386/i386.h (ix86_save_varrargs_registers): Removed.
|
||||
(ix86_varargs_gpr_size): Define.
|
||||
(ix86_varargs_fpr_size): Likewise.
|
||||
(machine_function): Remove save_varrargs_registers.
|
||||
Add varargs_gpr_size and varargs_fpr_size.
|
||||
|
||||
* gcc.target/i386/amd64-abi-3.c: New test.
|
||||
* gcc.target/i386/amd64-abi-4.c: Likewise.
|
||||
* gcc.target/i386/amd64-abi-5.c: Likewise.
|
||||
* gcc.target/i386/amd64-abi-6.c: Likewise.
|
||||
|
||||
--- gcc/config/i386/i386.h (revision 139909)
|
||||
+++ gcc/config/i386/i386.h (revision 139910)
|
||||
@@ -2440,7 +2440,8 @@ struct machine_function GTY(())
|
||||
struct stack_local_entry *stack_locals;
|
||||
const char *some_ld_name;
|
||||
rtx force_align_arg_pointer;
|
||||
- int save_varrargs_registers;
|
||||
+ int varargs_gpr_size;
|
||||
+ int varargs_fpr_size;
|
||||
int accesses_prev_frame;
|
||||
int optimize_mode_switching[MAX_386_ENTITIES];
|
||||
int needs_cld;
|
||||
@@ -2463,7 +2464,8 @@ struct machine_function GTY(())
|
||||
};
|
||||
|
||||
#define ix86_stack_locals (cfun->machine->stack_locals)
|
||||
-#define ix86_save_varrargs_registers (cfun->machine->save_varrargs_registers)
|
||||
+#define ix86_varargs_gpr_size (cfun->machine->varargs_gpr_size)
|
||||
+#define ix86_varargs_fpr_size (cfun->machine->varargs_fpr_size)
|
||||
#define ix86_optimize_mode_switching (cfun->machine->optimize_mode_switching)
|
||||
#define ix86_current_function_needs_cld (cfun->machine->needs_cld)
|
||||
#define ix86_tls_descriptor_calls_expanded_in_cfun \
|
||||
--- gcc/config/i386/i386.c (revision 139909)
|
||||
+++ gcc/config/i386/i386.c (revision 139910)
|
||||
@@ -1616,9 +1616,6 @@ rtx ix86_compare_op0 = NULL_RTX;
|
||||
rtx ix86_compare_op1 = NULL_RTX;
|
||||
rtx ix86_compare_emitted = NULL_RTX;
|
||||
|
||||
-/* Size of the register save area. */
|
||||
-#define X86_64_VARARGS_SIZE (REGPARM_MAX * UNITS_PER_WORD + SSE_REGPARM_MAX * 16)
|
||||
-
|
||||
/* Define the structure for the machine field in struct function. */
|
||||
|
||||
struct stack_local_entry GTY(())
|
||||
@@ -4976,11 +4973,22 @@ setup_incoming_varargs_64 (CUMULATIVE_AR
|
||||
alias_set_type set;
|
||||
int i;
|
||||
|
||||
- if (! cfun->va_list_gpr_size && ! cfun->va_list_fpr_size)
|
||||
+ /* GPR size of varargs save area. */
|
||||
+ if (cfun->va_list_gpr_size)
|
||||
+ ix86_varargs_gpr_size = REGPARM_MAX * UNITS_PER_WORD;
|
||||
+ else
|
||||
+ ix86_varargs_gpr_size = 0;
|
||||
+
|
||||
+ /* FPR size of varargs save area. We don't need it if we don't pass
|
||||
+ anything in SSE registers. */
|
||||
+ if (cum->sse_nregs && cfun->va_list_fpr_size)
|
||||
+ ix86_varargs_fpr_size = SSE_REGPARM_MAX * 16;
|
||||
+ else
|
||||
+ ix86_varargs_fpr_size = 0;
|
||||
+
|
||||
+ if (! ix86_varargs_gpr_size && ! ix86_varargs_fpr_size)
|
||||
return;
|
||||
|
||||
- /* Indicate to allocate space on the stack for varargs save area. */
|
||||
- ix86_save_varrargs_registers = 1;
|
||||
/* We need 16-byte stack alignment to save SSE registers. If user
|
||||
asked for lower preferred_stack_boundary, lets just hope that he knows
|
||||
what he is doing and won't varargs SSE values.
|
||||
@@ -5006,7 +5014,7 @@ setup_incoming_varargs_64 (CUMULATIVE_AR
|
||||
x86_64_int_parameter_registers[i]));
|
||||
}
|
||||
|
||||
- if (cum->sse_nregs && cfun->va_list_fpr_size)
|
||||
+ if (ix86_varargs_fpr_size)
|
||||
{
|
||||
/* Now emit code to save SSE registers. The AX parameter contains number
|
||||
of SSE parameter registers used to call this function. We use
|
||||
@@ -5041,7 +5049,7 @@ setup_incoming_varargs_64 (CUMULATIVE_AR
|
||||
tmp_reg = gen_reg_rtx (Pmode);
|
||||
emit_insn (gen_rtx_SET (VOIDmode, tmp_reg,
|
||||
plus_constant (save_area,
|
||||
- 8 * REGPARM_MAX + 127)));
|
||||
+ ix86_varargs_gpr_size + 127)));
|
||||
mem = gen_rtx_MEM (BLKmode, plus_constant (tmp_reg, -127));
|
||||
MEM_NOTRAP_P (mem) = 1;
|
||||
set_mem_alias_set (mem, set);
|
||||
@@ -5145,7 +5153,7 @@ ix86_va_start (tree valist, rtx nextarg)
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
||||
- if (cfun->va_list_fpr_size)
|
||||
+ if (TARGET_SSE && cfun->va_list_fpr_size)
|
||||
{
|
||||
type = TREE_TYPE (fpr);
|
||||
t = build2 (GIMPLE_MODIFY_STMT, type, fpr,
|
||||
@@ -5164,12 +5172,15 @@ ix86_va_start (tree valist, rtx nextarg)
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
- if (cfun->va_list_gpr_size || cfun->va_list_fpr_size)
|
||||
+ if (ix86_varargs_gpr_size || ix86_varargs_fpr_size)
|
||||
{
|
||||
/* Find the register save area.
|
||||
Prologue of the function save it right above stack frame. */
|
||||
type = TREE_TYPE (sav);
|
||||
t = make_tree (type, frame_pointer_rtx);
|
||||
+ if (!ix86_varargs_gpr_size)
|
||||
+ t = build2 (POINTER_PLUS_EXPR, type, t,
|
||||
+ size_int (-8 * REGPARM_MAX));
|
||||
t = build2 (GIMPLE_MODIFY_STMT, type, sav, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
@@ -6079,13 +6090,8 @@ ix86_compute_frame_layout (struct ix86_f
|
||||
offset += frame->nregs * UNITS_PER_WORD;
|
||||
|
||||
/* Va-arg area */
|
||||
- if (ix86_save_varrargs_registers)
|
||||
- {
|
||||
- offset += X86_64_VARARGS_SIZE;
|
||||
- frame->va_arg_size = X86_64_VARARGS_SIZE;
|
||||
- }
|
||||
- else
|
||||
- frame->va_arg_size = 0;
|
||||
+ frame->va_arg_size = ix86_varargs_gpr_size + ix86_varargs_fpr_size;
|
||||
+ offset += frame->va_arg_size;
|
||||
|
||||
/* Align start of frame for local function. */
|
||||
frame->padding1 = ((offset + stack_alignment_needed - 1)
|
||||
--- gcc/testsuite/gcc.target/i386/amd64-abi-3.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/amd64-abi-3.c (revision 139910)
|
||||
@@ -0,0 +1,18 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-require-effective-target lp64 } */
|
||||
+/* { dg-options "-O2 -mno-sse" } */
|
||||
+/* { dg-final { scan-assembler "subq\[\\t \]*\\\$88,\[\\t \]*%rsp" } } */
|
||||
+/* { dg-final { scan-assembler-not "subq\[\\t \]*\\\$216,\[\\t \]*%rsp" } } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+void foo (va_list va_arglist);
|
||||
+
|
||||
+void
|
||||
+test (int a1, ...)
|
||||
+{
|
||||
+ va_list va_arglist;
|
||||
+ va_start (va_arglist, a1);
|
||||
+ foo (va_arglist);
|
||||
+ va_end (va_arglist);
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/amd64-abi-5.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/amd64-abi-5.c (revision 139910)
|
||||
@@ -0,0 +1,64 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-require-effective-target lp64 } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+#include <assert.h>
|
||||
+
|
||||
+int n1 = 30;
|
||||
+double n2 = 324;
|
||||
+double n3 = 39494.94;
|
||||
+double n4 = 407;
|
||||
+double n5 = 32.304;
|
||||
+double n6 = 394.14;
|
||||
+double n7 = 4.07;
|
||||
+double n8 = 32.4;
|
||||
+double n9 = 314.194;
|
||||
+double n10 = 0.1407;
|
||||
+
|
||||
+int e1;
|
||||
+double e2;
|
||||
+double e3;
|
||||
+double e4;
|
||||
+double e5;
|
||||
+double e6;
|
||||
+double e7;
|
||||
+double e8;
|
||||
+double e9;
|
||||
+double e10;
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+test (int a1, ...)
|
||||
+{
|
||||
+ e1 = a1;
|
||||
+ va_list va_arglist;
|
||||
+ va_start (va_arglist, a1);
|
||||
+ e2 = va_arg (va_arglist, double);
|
||||
+ e3 = va_arg (va_arglist, double);
|
||||
+ e4 = va_arg (va_arglist, double);
|
||||
+ e5 = va_arg (va_arglist, double);
|
||||
+ e6 = va_arg (va_arglist, double);
|
||||
+ e7 = va_arg (va_arglist, double);
|
||||
+ e8 = va_arg (va_arglist, double);
|
||||
+ e9 = va_arg (va_arglist, double);
|
||||
+ e10 = va_arg (va_arglist, double);
|
||||
+ va_end (va_arglist);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ test (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10);
|
||||
+ assert (n1 == e1);
|
||||
+ assert (n2 == e2);
|
||||
+ assert (n3 == e3);
|
||||
+ assert (n4 == e4);
|
||||
+ assert (n5 == e5);
|
||||
+ assert (n6 == e6);
|
||||
+ assert (n7 == e7);
|
||||
+ assert (n8 == e8);
|
||||
+ assert (n9 == e9);
|
||||
+ assert (n10 == e10);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/amd64-abi-4.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/amd64-abi-4.c (revision 139910)
|
||||
@@ -0,0 +1,47 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-require-effective-target lp64 } */
|
||||
+/* { dg-options "-O2 -mno-sse" } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+#include <assert.h>
|
||||
+
|
||||
+int n1 = 30;
|
||||
+int n2 = 324;
|
||||
+void *n3 = (void *) &n2;
|
||||
+int n4 = 407;
|
||||
+
|
||||
+int e1;
|
||||
+int e2;
|
||||
+void *e3;
|
||||
+int e4;
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+foo (va_list va_arglist)
|
||||
+{
|
||||
+ e2 = va_arg (va_arglist, int);
|
||||
+ e3 = va_arg (va_arglist, void *);
|
||||
+ e4 = va_arg (va_arglist, int);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+test (int a1, ...)
|
||||
+{
|
||||
+ e1 = a1;
|
||||
+ va_list va_arglist;
|
||||
+ va_start (va_arglist, a1);
|
||||
+ foo (va_arglist);
|
||||
+ va_end (va_arglist);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ test (n1, n2, n3, n4);
|
||||
+ assert (n1 == e1);
|
||||
+ assert (n2 == e2);
|
||||
+ assert (n3 == e3);
|
||||
+ assert (n4 == e4);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/amd64-abi-6.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/amd64-abi-6.c (revision 139910)
|
||||
@@ -0,0 +1,71 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-require-effective-target lp64 } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+#include <assert.h>
|
||||
+
|
||||
+int n1 = 30;
|
||||
+double n2 = 324;
|
||||
+double n3 = 39494.94;
|
||||
+double n4 = 407;
|
||||
+double n5 = 32.304;
|
||||
+double n6 = 394.14;
|
||||
+double n7 = 4.07;
|
||||
+double n8 = 32.4;
|
||||
+double n9 = 314.194;
|
||||
+double n10 = 0.1407;
|
||||
+
|
||||
+int e1;
|
||||
+double e2;
|
||||
+double e3;
|
||||
+double e4;
|
||||
+double e5;
|
||||
+double e6;
|
||||
+double e7;
|
||||
+double e8;
|
||||
+double e9;
|
||||
+double e10;
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+foo (va_list va_arglist)
|
||||
+{
|
||||
+ e2 = va_arg (va_arglist, double);
|
||||
+ e3 = va_arg (va_arglist, double);
|
||||
+ e4 = va_arg (va_arglist, double);
|
||||
+ e5 = va_arg (va_arglist, double);
|
||||
+ e6 = va_arg (va_arglist, double);
|
||||
+ e7 = va_arg (va_arglist, double);
|
||||
+ e8 = va_arg (va_arglist, double);
|
||||
+ e9 = va_arg (va_arglist, double);
|
||||
+ e10 = va_arg (va_arglist, double);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+test (int a1, ...)
|
||||
+{
|
||||
+ va_list va_arglist;
|
||||
+ e1 = a1;
|
||||
+ va_start (va_arglist, a1);
|
||||
+ foo (va_arglist);
|
||||
+ va_end (va_arglist);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ test (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10);
|
||||
+ assert (n1 == e1);
|
||||
+ assert (n2 == e2);
|
||||
+ assert (n3 == e3);
|
||||
+ assert (n4 == e4);
|
||||
+ assert (n5 == e5);
|
||||
+ assert (n6 == e6);
|
||||
+ assert (n7 == e7);
|
||||
+ assert (n8 == e8);
|
||||
+ assert (n9 == e9);
|
||||
+ assert (n10 == e10);
|
||||
+ return 0;
|
||||
+}
|
2058
gcc43.spec
2058
gcc43.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.
|
5
sources
5
sources
|
@ -1,2 +1,3 @@
|
|||
eb9ce8c6f929283bc91c93a6087e8ced gcc-4.3.2-20081105.tar.bz2
|
||||
92a70f9e56223b653bce0f58f90cf950 fastjar-0.95.tar.gz
|
||||
SHA512 (gcc-10.0.1-20200216.tar.xz) = 56507e273b00e85ed4145e80df65d9b4e4791f23e7cb5d931f85b9420cbf3a7125ba49978dc73c2987c0a6101f741dc5a60a08cb3346d4c5082400cbcfcdd008
|
||||
SHA512 (newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz) = 9ceea0b883185fe489724d54a7e909bb6ed4785fcadf80162033dc6a133e2657337175601278e4155d1f8fac275ff9c8a02572aea876166c608774c809f832e9
|
||||
SHA512 (nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz) = f6d10db94fa1570ae0f94df073fa3c73c8e5ee16d59070b53d94f7db0de8a031bc44d7f3f1852533da04b625ce758e022263855ed43cfc6867e0708d001e53c7
|
||||
|
|
|
@ -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