[363] | 1 |
|
---|
| 2 | ï¼ TOPPERS/JSPã«ã¼ãã« ã¦ã¼ã¶ãºããã¥ã¢ã« ï¼
|
---|
| 3 | ï¼C++ãã¤ã³ãã£ã³ã°ï¼
|
---|
| 4 |
|
---|
| 5 | ï¼Release 1.4.1 対å¿ï¼æçµæ´æ°: 16-Sep-2004ï¼
|
---|
| 6 |
|
---|
| 7 | ------------------------------------------------------------------------
|
---|
| 8 | TOPPERS/JSP Kernel
|
---|
| 9 | Toyohashi Open Platform for Embedded Real-Time Systems/
|
---|
| 10 | Just Standard Profile Kernel
|
---|
| 11 |
|
---|
| 12 | Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
|
---|
| 13 | Toyohashi Univ. of Technology, JAPAN
|
---|
| 14 | Copyright (C) 2003-2004 by Takagi Nobuhisa
|
---|
| 15 |
|
---|
| 16 | ä¸è¨èä½æ¨©è
|
---|
| 17 | ã¯ï¼ä»¥ä¸ã® (1)ã(4) ã®æ¡ä»¶ãï¼Free Software Foundation
|
---|
| 18 | ã«ãã£ã¦å
|
---|
| 19 | ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
|
---|
| 20 | è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
|
---|
| 21 | ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé
|
---|
| 22 | å¸ï¼ä»¥ä¸ï¼
|
---|
| 23 | å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
|
---|
| 24 | (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
|
---|
| 25 | 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
|
---|
| 26 | ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼
|
---|
| 27 | (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
| 28 | ç¨ã§ããå½¢ã§åé
|
---|
| 29 | å¸ããå ´åã«ã¯ï¼åé
|
---|
| 30 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨
|
---|
| 31 | è
|
---|
| 32 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
|
---|
| 33 | ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
| 34 | (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
| 35 | ç¨ã§ããªãå½¢ã§åé
|
---|
| 36 | å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
|
---|
| 37 | ã¨ï¼
|
---|
| 38 | (a) åé
|
---|
| 39 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
| 40 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
|
---|
| 41 | ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
| 42 | (b) åé
|
---|
| 43 | å¸ã®å½¢æ
|
---|
| 44 | ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã«
|
---|
| 45 | å ±åãããã¨ï¼
|
---|
| 46 | (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
|
---|
| 47 | 害ãããï¼ä¸è¨èä½æ¨©è
|
---|
| 48 | ããã³TOPPERSããã¸ã§ã¯ããå
|
---|
| 49 | 責ãããã¨ï¼
|
---|
| 50 |
|
---|
| 51 | æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
|
---|
| 52 | ã
|
---|
| 53 | ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
|
---|
| 54 | å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
|
---|
| 55 | æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
|
---|
| 56 | ------------------------------------------------------------------------
|
---|
| 57 |
|
---|
| 58 | ï¼ï¼C++ãã¤ã³ãã£ã³ã°ã®æ¦è¦
|
---|
| 59 |
|
---|
| 60 | 1.1 ç®ç
|
---|
| 61 |
|
---|
| 62 | TOPPERS/JSPã«ã¼ãã«ã¯ãæ¬æ¥Cè¨èªAPIãæä¾ãããã®ã§ããããã®ã¾ã¾ã§ã¯
|
---|
| 63 | C++ãç¨ããã¢ããªã±ã¼ã·ã§ã³éçºãè¡ãä¸ã§æ¯éãããã
|
---|
| 64 | C++ãã¤ã³ãã£ã³ã°ã¯ãTOPPERS/JSPã«ã¼ãã«ãæä¾ãããµã¼ãã¹ã³ã¼ã«ãC++
|
---|
| 65 | ããå¼åºããã¨ãå¯è½ã«ãããã¤TOPPERS/JSPã«ã¼ãã«ä¸ã§æ¨æºC++ã®æ©è½ã
|
---|
| 66 | å©ç¨ã§ããããã«ãããã®ã§ããã
|
---|
| 67 |
|
---|
| 68 | 1.2 éçºç°å¢ã¨å®è¡ç°å¢
|
---|
| 69 |
|
---|
| 70 | C++ãã¤ã³ãã£ã³ã°ã§ã¯ãGCCçã®GNUéçºç°å¢ã使ç¨ããããªããWindowsä¸
|
---|
| 71 | ã®ã·ãã¥ã¬ã¼ã·ã§ã³ç°å¢ï¼Visual C++ï¼ã§C++ã使ç¨ããéã¯ãC++ãã¤ã³ã
|
---|
| 72 | ã£ã³ã°ã®æ©è½ãå¿
|
---|
| 73 | è¦ã¨ããªãã
|
---|
| 74 |
|
---|
| 75 | ç¾å¨ãC++ãã¤ã³ãã£ã³ã°ããµãã¼ãããå®è¡ç°å¢ã¯ãMS7727CP01(SH3)ãã
|
---|
| 76 | ã³AKI-H8/3069Fã§ãããä»ã®å®è¡ç°å¢ã§ä½¿ç¨ããã«ã¯ãã¿ã¼ã²ããä¾åé¨ã®
|
---|
| 77 | Makefile.configããã³ãªã³ã«ã¹ã¯ãªããã®ä¿®æ£ãå¿
|
---|
| 78 | è¦ã¨ãªãã
|
---|
| 79 | ã¾ããLinuxä¸ã®ã·ãã¥ã¬ã¼ã·ã§ã³ç°å¢ã§ã¯ä½¿ç¨ãããã¨ãã§ããªãã
|
---|
| 80 |
|
---|
| 81 | 1.3 C++ãã¤ã³ãã£ã³ã°ã®æ©è½ã®æ¦è¦
|
---|
| 82 |
|
---|
| 83 | æ¨æºC++ã®æ©è½ã®ãã¡ãå®è¡ç°å¢ã«ä¾åããé¨åã«ã¤ãã¦ãTOPPERS/JSPã«ã¼
|
---|
| 84 | ãã«ã«å¯¾å¿ããã¦ãããå
|
---|
| 85 | ·ä½çã«ã¯ãéãã¼ã«ã«ãªãã¸ã§ã¯ãã®åæåå¦çã
|
---|
| 86 | çµäºå¦çãã°ãã¼ãã«ãªnewæ¼ç®åã¨deleteæ¼ç®åãä¾å¤å¦çãããã³ããªã¼
|
---|
| 87 | ã¹ã¿ã³ãã£ã³ã°ç°å¢ã«ãããæ¨æºã©ã¤ãã©ãªé¢æ°ã§ããã
|
---|
| 88 |
|
---|
| 89 | GCCèªä½ãæªãµãã¼ãã®æ©è½ï¼exportãã¦ããã¼ãµã«æååçï¼ãè£å®ããã
|
---|
| 90 | ã®ã§ã¯ãªãã
|
---|
| 91 |
|
---|
| 92 | 1.4 C++ãã¤ã³ãã£ã³ã°ã®ä½¿ç¨æ¹æ³
|
---|
| 93 |
|
---|
| 94 | TOPPERS/JSPã«ã¼ãã«ã§C++ãã¤ã³ãã£ã³ã°ã使ç¨ããã«ã¯ãã³ã³ãã£ã®ã¥ã¬
|
---|
| 95 | ã¼ã·ã§ã³ãã¡ã¤ã«ï¼.cfgï¼ãããjsp/systask/cxxrt.cfgãã¤ã³ã¯ã«ã¼ããã
|
---|
| 96 | ã ãã§ãããï¼éçAPIã®INCLUDEã§ã¯ãªããããããã»ããµæ令ã®#include
|
---|
| 97 | ã使ç¨ãããã¨ï¼
|
---|
| 98 |
|
---|
| 99 | TOPPERS/JSPã«ã¼ãã«ã®configureã使ç¨ããå ´åãC++ã使ãã«ã¯"-l c++"
|
---|
| 100 | ãªãã·ã§ã³ãä»å ããå¿
|
---|
| 101 | è¦ãããã
|
---|
| 102 |
|
---|
| 103 |
|
---|
| 104 | ï¼ï¼C++ãã¤ã³ãã£ã³ã°ã®æ©è½
|
---|
| 105 |
|
---|
| 106 | 2.1 éãã¼ã«ã«ãªãã¸ã§ã¯ãã®åæåå¦ç
|
---|
| 107 |
|
---|
| 108 | é¢æ°ã®å¤é¨ã§å®£è¨ããããªãã¸ã§ã¯ãï¼ç¹å®ã®åå空éãã¯ã©ã¹ã®éçãã¼
|
---|
| 109 | ã¿ã¡ã³ããå«ãï¼ã®ã³ã³ã¹ãã©ã¯ã¿ããèµ·åæã«å¼åºãæ©è½ãæä¾ããã
|
---|
| 110 |
|
---|
| 111 | éãã¼ã«ã«ãªãã¸ã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã¯ãkernel_starté¢æ°ã®å¼åºãã
|
---|
| 112 | ãåã«å®è¡ãããsyslogã®æ©è½ã使ç¨ãããã¨ã¯ã§ããªãã
|
---|
| 113 | ã¾ããã³ã³ã¹ãã©ã¯ã¿ã®å
|
---|
| 114 | é¨ã§ã¯ãvsns_iniãé¤ããµã¼ãã¹ã³ã¼ã«ãå¼åºã
|
---|
| 115 | ãã¨ã¯ã§ããªãã
|
---|
| 116 |
|
---|
| 117 | é¢æ°ã®å
|
---|
| 118 | é¨ã§å®£è¨ããããªãã¸ã§ã¯ãã¯ãèµ·åæã§ã¯ãªãã宣è¨ãããç®æ
|
---|
| 119 | ã«æåã«å®è¡ãã¹ãå·®ãæãã£ãã¨ãã«ã³ã³ã¹ãã©ã¯ã¿ãå¼åºãããããã
|
---|
| 120 | èµ·åæã®åæåå¦çã«ã¯å«ã¾ããªãã
|
---|
| 121 | ããããã³ã³ã¹ãã©ã¯ã¿ã®å¼åºãã¯ãã«ãã¿ã¹ã¯ã«å¯¾å¿ããªããããã¦ã¼ã¶
|
---|
| 122 | ã¯å¿
|
---|
| 123 | è¦ã«å¿ãã¦æä»å¶å¾¡ãç¬èªã«è¡ãå¿
|
---|
| 124 | è¦ãããã
|
---|
| 125 |
|
---|
| 126 | 2.2 çµäºå¦ç
|
---|
| 127 |
|
---|
| 128 | éçãªãªãã¸ã§ã¯ãï¼é¢æ°å
|
---|
| 129 | ã§å®£è¨ããããã®ãå«ãï¼ã®ãã¹ãã©ã¯ã¿ã¯ã
|
---|
| 130 | std::exité¢æ°ã®ä¸ããå¼åºããããæ示çã«std::exité¢æ°ãå¼åºããªãé
|
---|
| 131 | ããå
|
---|
| 132 | ¨ã¿ã¹ã¯ãçµäºããã¨ãã¦ããã¹ãã©ã¯ã¿ãå¼åºããããã¨ã¯ãªãã
|
---|
| 133 | ãªããkernel_exité¢æ°ãå¼åºããå ´åããstd::exité¢æ°ãå¼åºããå ´åã¨
|
---|
| 134 | åæ§ã«ãéçãªãªãã¸ã§ã¯ãã®ãã¹ãã©ã¯ã¿ã¯å¼åºãããã
|
---|
| 135 |
|
---|
| 136 | çµäºæã®åä½é åºã¯ãéçAPIã®VATT_TERã§ç»é²ããçµäºå¦çã«ã¼ãã³ãå¼åº
|
---|
| 137 | ãããå¾ãstd::atexité¢æ°ã§ç»é²ããçµäºæé¢æ°ãå¼åºãããæå¾ã«ãã¹ã
|
---|
| 138 | ã©ã¯ã¿ãå¼åºãããã
|
---|
| 139 | ããã©ã«ãã®æ¨æºã¹ããªã¼ã ï¼stdin, stdout, stderrï¼ããµãã¼ãããå ´åã
|
---|
| 140 | ãããã®ã¯ãã¼ãºå¦çã¯ãã¹ãã©ã¯ã¿ã®å¼åºãå¾ã«è¡ããªããã°ãªããªãã
|
---|
| 141 | ï¼ã¦ã¼ã¶ã®æã§ã«ã¹ã¿ãã¤ãºããå¿
|
---|
| 142 | è¦ãããï¼
|
---|
| 143 |
|
---|
| 144 | 2.3 ã°ãã¼ãã«ãªnewæ¼ç®åã¨deleteæ¼ç®å
|
---|
| 145 |
|
---|
| 146 | TOPPERS/JSPã«ã¼ãã«ã®ãã«ãã¿ã¹ã¯ç°å¢ããã³éãã«ãã¿ã¹ã¯ç°å¢ï¼åæå
|
---|
| 147 | ã¾ãã¯çµäºå¦çæï¼ã§åä½ããnewããã³deleteæ¼ç®åãæä¾ããã
|
---|
| 148 | GCCã¯ã°ãã¼ãã«ãªnewããã³deleteæ¼ç®åãstd::mallocããã³std:freeé¢æ°
|
---|
| 149 | ãç¨ãã¦å®è£
|
---|
| 150 | ãã¦ãããããNEWLIBã®mallocããã³freeé¢æ°ã«æä»å¶å¾¡ã追
|
---|
| 151 | å ãããã¨ã§å®ç¾ãã¦ããã
|
---|
| 152 |
|
---|
| 153 | C++ãã¤ã³ãã£ã³ã°ã¯ãC++ã®ããªã¼ã¹ã¿ã³ãã£ã³ã°ç°å¢ã対象ã¨ãã¦ãããã
|
---|
| 154 | ä¸è¨ã®çç±ã«ãããæ¬æ¥ããªã¼ã¹ã¿ã³ãã£ã³ã°ç°å¢ã§ã¯ãµãã¼ããããªãã
|
---|
| 155 | std::mallocããã³std::freeé¢æ°ãçµæçã«ãµãã¼ããã¦ããã
|
---|
| 156 | ããããã¯std::callocããã³std::reallocé¢æ°ãåä½ããã¨æãããããæ¤
|
---|
| 157 | 証ã¯è¡ã£ã¦ããªãã
|
---|
| 158 |
|
---|
| 159 | æ¨æºC++ã®ã°ãã¼ãã«ãªnewããã³deleteæ¼ç®åã«ã¯ãä¾å¤ãã¹ãã¼ãããã¨
|
---|
| 160 | ããªããconst std::nothrow_t&ãå¼æ°ã«ã¨ãé
|
---|
| 161 | ç½®æ§æåã®ãã®ãããããé
|
---|
| 162 | 常ã®ãã®åæ§ã«ä½¿ç¨ãããã¨ãã§ããã
|
---|
| 163 |
|
---|
| 164 | 2.4 ä¾å¤å¦ç
|
---|
| 165 |
|
---|
| 166 | C++ã®è¨èªæ©è½ã§ããä¾å¤å¦çæ©è½ï¼tryãcatchããã³throwï¼ãæä¾ããã
|
---|
| 167 | ä¾å¤å¦çã¯ã³ã³ãã¤ã©ã®å®è£
|
---|
| 168 | ã«å¯æ¥ã«çµ¡ããããã³ã³ãã¤ã©èªä½ã«ãããã
|
---|
| 169 | å¿
|
---|
| 170 | è¦ã«ãªãã
|
---|
| 171 |
|
---|
| 172 | ä¾å¤å¦çã¯ãtryããã³catchã®ä½ç½®ã¨ãthrowããcatchã¾ã§ã®éã«åå¨ãã
|
---|
| 173 | ãã¼ã«ã«ãªãã¸ã§ã¯ãã®ãã¹ãã©ã¯ã¿ã管çããå¿
|
---|
| 174 | è¦ãããããããã£ã¦ã
|
---|
| 175 | ã³ã³ãã¤ã©ã«ã¨ã£ã¦æªç¥ã®æ¹æ³ã§ã³ã³ããã¹ããåãæ¿ãã£ãå ´åã«ã¯ãä¾
|
---|
| 176 | å¤å¦çç¨ã®ç®¡çæ
|
---|
| 177 | å ±ãåãæ¿ããå¿
|
---|
| 178 | è¦ãçããã
|
---|
| 179 | C++ãã¤ã³ãã£ã³ã°ã¯ããã«ãã¿ã¹ã¯ç°å¢ããã³éãã«ãã¿ã¹ã¯ç°å¢ï¼åæå
|
---|
| 180 | ã¾ãã¯çµäºå¦çæï¼ã§ãã³ã³ããã¹ãã«å¿ãã¦ç®¡çæ
|
---|
| 181 | å ±ãåãæ¿ããæ©è½ã
|
---|
| 182 | åææ©è½ãå®ç¾ãã¦ããã
|
---|
| 183 |
|
---|
| 184 | GCCã§ã¯ãã³ã³ãã¤ã«æã«-fno-exceptionsãªãã·ã§ã³ãæå®ãããã¨ã§ãä¾
|
---|
| 185 | å¤å¦çãç¡å¹ã«ãããã¨ãã§ããããããã¯ãªãã·ã§ã³ãæå®ãã翻訳åä½
|
---|
| 186 | ã«å¯¾ãã¦ã®ã¿éç¨ãããã¨ã§ãããã©ã¤ãã©ãªçã¯ãé常éããä¾å¤å¦çã
|
---|
| 187 | 使ããå ´åã¨åæ§ã«æ¯èããã¨ã«ãªãããããã£ã¦ãnewãdynamic_castã
|
---|
| 188 | ãããã¯typeidæ¼ç®åã失æããå ´åçã«ã¯ãäºæãã¬èª¤åä½ã«ã¤ãªããå±
|
---|
| 189 | éºæ§ããããããå¿
|
---|
| 190 | ãããæ¨å¥¨ããªãã
|
---|
| 191 |
|
---|
| 192 | 2.5 æ¨æºã©ã¤ãã©ãªé¢æ°
|
---|
| 193 |
|
---|
| 194 | ããªã¼ã¹ã¿ã³ãã£ã³ã°ç°å¢ã®C++ã§ã¯ãçµäºå¦çã«é¢ããæ¨æºã©ã¤ãã©ãªé¢æ°
|
---|
| 195 | ã¨ãã¦ãstd::abortãstd::atexitãããã³std::exité¢æ°ããµãã¼ããããã
|
---|
| 196 | C++ãã¤ã³ãã£ã³ã°ã§ããããã3種é¡ã®é¢æ°ãæä¾ãã¦ããã
|
---|
| 197 |
|
---|
| 198 | (1) std::abort
|
---|
| 199 |
|
---|
| 200 | std::aborté¢æ°ã¯ãéçAPIã®VATT_TERã§ç»é²ãããçµäºå¦çã«ã¼ãã³ãã
|
---|
| 201 | std::atexité¢æ°ã§ç»é²ãããçµäºæé¢æ°ããªãã¸ã§ã¯ãã®ãã¹ãã©ã¯ã¿ãå¼
|
---|
| 202 | åºããã¨ãªããã·ã¹ãã ãç°å¸¸çµäºããã
|
---|
| 203 | ã·ã¹ãã ã®çµäºå¦çã¯ããã«ãã¿ã¹ã¯åä½ä¸ã¯ã¿ã¼ã²ããä¾åé¨ã§å®ç¾©ãã
|
---|
| 204 | ãkernel_aborté¢æ°ã«å¾ããéãã«ãã¿ã¹ã¯åä½ä¸ï¼åæåã¾ãã¯çµäºå¦çæï¼
|
---|
| 205 | ã¯NEWLIBã®_exité¢æ°ã«å¾ãã
|
---|
| 206 |
|
---|
| 207 | C++ãã¤ã³ãã£ã³ã°ã§ã¯ãé¢æ°ã¸ã®ãã¤ã³ã¿void (*_atabort)(void)ã0以å¤
|
---|
| 208 | ã«å®ç¾©ããã¦ããå ´åãå®éã®çµäºå¦çããåã«ãããå¼åºãããã«ãªã£ã¦
|
---|
| 209 | ããã
|
---|
| 210 | ãã¹ãç°å¢ã®std::abortã¯ãå®éã®çµäºå¦çã®åã«std::raise(SIGABRT);ã
|
---|
| 211 | å¼åºããã_atabortãé©åã«è¨å®ãããã¨ã§åæ§ã®æ©è½ãã¨ãã¥ã¬ã¼ããã
|
---|
| 212 | ãã¨ãã§ããã
|
---|
| 213 |
|
---|
| 214 | (2) std::atexit
|
---|
| 215 |
|
---|
| 216 | std::atexité¢æ°ã¯ãstd::exitã¾ãã¯kernel_exité¢æ°ããå¼åºãããçµäºæ
|
---|
| 217 | é¢æ°ãç»é²ãããstd::atexité¢æ°ã§ç»é²ããé¢æ°ã¯ãstd::aborté¢æ°ã§çµäº
|
---|
| 218 | ããå ´åããvsns_iniãTRUEãè¿ãæéã«std::exité¢æ°ãç¨ããå ´åã«ã¯ã
|
---|
| 219 | å¼åºããããã¨ããªãã
|
---|
| 220 |
|
---|
| 221 | éçãªãªãã¸ã§ã¯ãã®ãã¹ãã©ã¯ã¿ã¯ãå®éã«ã¯std::atexité¢æ°ãç¨ããã
|
---|
| 222 | ã¨ã§å®ç¾ãã¦ããããã ãããã¹ãã©ã¯ã¿ã®å¼åºãã¯ãstd::atexité¢æ°ã§ç»
|
---|
| 223 | é²ããããã®ä»ã®ãããªãçµäºæé¢æ°ãããå¾ã«å¼åºãããã
|
---|
| 224 |
|
---|
| 225 | std::atexité¢æ°ã§ç»é²ã§ããçµäºæé¢æ°ã¯ãï¼ãã¹ãã©ã¯ã¿ã®ç»é²ãé¤ãã¦ï¼
|
---|
| 226 | 32åã¾ã§ã§ããã
|
---|
| 227 |
|
---|
| 228 | (3) std::exit
|
---|
| 229 |
|
---|
| 230 | std::exité¢æ°ã¯ãC++ã®æ¨æºçãªçµäºå¦çãè¡ãã詳細ãªåä½ã¯ã2.2 çµäº
|
---|
| 231 | å¦çãåç
|
---|
| 232 | §ã®ãã¨ã
|
---|
| 233 |
|
---|
| 234 | std::exité¢æ°ãç¨ãã¦çµäºããå ´åããã¼ã«ã«ãªãã¸ã§ã¯ãã®ãã¹ãã©ã¯ã¿
|
---|
| 235 | ãå¼åºããããã¨ã¯ãªãã
|
---|
| 236 |
|
---|
| 237 |
|
---|
| 238 | ï¼ï¼C++å®è¡ç°å¢ã¨ãã¦ã®TOPPERS/JSPã«ã¼ãã«
|
---|
| 239 |
|
---|
| 240 | 3.1 BOOLå
|
---|
| 241 |
|
---|
| 242 | æ¨æºC++ã«ã¯ãè«çåã§ããboolåã¨ãè«çå¤ã§ããtrueããã³falseãåå¨
|
---|
| 243 | ãããããããTOPPERS/JSPã«ã¼ãã«ãCè¨èªã§å®è£
|
---|
| 244 | ããã¦ãããããè¨èªé
|
---|
| 245 | ã®äºææ§ãã¨ãæå³ã§ãBOOLåã«ã¯intåã使ç¨ããå¿
|
---|
| 246 | è¦ãããã
|
---|
| 247 | ã«ã¼ãã«ã®ã³ã³ãã¤ã«ã«C99ãç¨ããå ´åã§ãã_Boolåã¨boolåã®éã«ã¯ã
|
---|
| 248 | å³å¯ãªäºææ§ãããã¨ã¯è¨ããããããããã¯ãintåã使ç¨ããæ¹ãç¡é£ã§
|
---|
| 249 | ããã
|
---|
| 250 |
|
---|
| 251 | 3.2 ã¿ã¹ã¯ããã®ä¾å¤ãªã¼ã¯
|
---|
| 252 |
|
---|
| 253 | ã¿ã¹ã¯ã®ã¨ã³ããªé¢æ°ãããã£ãããããªãä¾å¤ããªã¼ã¯ããå ´åã®åä½ã¯
|
---|
| 254 | æªå®ç¾©ã§ããã
|
---|
| 255 |
|
---|
| 256 | 3.3 ATT_INIã¨VATT_TER
|
---|
| 257 |
|
---|
| 258 | éçAPIã®ATT_INIããã³VATT_TERã§ç»é²ãããé¢æ°ããä¾å¤ããªã¼ã¯ããå ´
|
---|
| 259 | åã®åä½ã¯æªå®ç¾©ã§ããã
|
---|
| 260 |
|
---|
| 261 | 3.4 éã¿ã¹ã¯ã³ã³ããã¹ãã¨ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³
|
---|
| 262 |
|
---|
| 263 | éã¿ã¹ã¯ã³ã³ããã¹ãã¨ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã§ã¯ãä¾å¤å¦çãnewããã³
|
---|
| 264 | deleteæ¼ç®åã使ç¨ãããã¨ãã§ããªããåç
|
---|
| 265 | §åã«å¯¾ããdynamic_castãã
|
---|
| 266 | ä»®æ³é¢æ°ãæã¤ã¯ã©ã¹ã¸ã®åç
|
---|
| 267 | §ããã¤ã³ã¿ã«å¯¾ããtypeidããä¾å¤ãçºçã
|
---|
| 268 | ãå¯è½æ§ãããããã使ç¨ãããã¨ãã§ããªããã¾ããæ¨æºã©ã¤ãã©ãªé¢æ°
|
---|
| 269 | ãå¼åºããã¨ãã§ããªãã
|
---|
| 270 |
|
---|
| 271 | ãªããã¿ã¹ã¯ä¾å¤è¨±å¯ç¶æ
|
---|
| 272 | ã§èªã¿ã¹ã¯ã«å¯¾ããras_texã«ãã£ã¦å¼åºãããã¿
|
---|
| 273 | ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã«éããä¸è¨ã®å¶ç´ã¯åããªãããã ããã¿ã¹ã¯ä¾å¤
|
---|
| 274 | å¦çã«ã¼ãã³ããä¾å¤ããªã¼ã¯ããå ´åã®åä½ã¯æªå®ç¾©ã§ããã
|
---|
| 275 |
|
---|
| 276 | 3.5 ãµã¼ãã¹ã³ã¼ã«ã®ä¾å¤æå®
|
---|
| 277 |
|
---|
| 278 | TOPPERS/JSPã«ã¼ãã«ãæä¾ããå
|
---|
| 279 | ¨ãµã¼ãã¹ã³ã¼ã«ã¯ä¾å¤ãã¹ãã¼ãããã¨ã
|
---|
| 280 | ãªããããä¾å¤æå®throw()ãä»å ãããã
|
---|
| 281 | ããã«ãããä¾å¤å¦çã®ããã®ãã¼ãã«ãçæããããã¨ãæå°éã«æãã
|
---|
| 282 | ããå ´åãããã主ã¨ãã¦ç©ºéå¹çã®åä¸ãæå¾
|
---|
| 283 | ã§ããã
|
---|
| 284 |
|
---|
| 285 |
|
---|
| 286 | ï¼ï¼éçºç°å¢ã®æ§ç¯
|
---|
| 287 |
|
---|
| 288 | C++éçºç°å¢ã®æ§ç¯ã¯ãåºæ¬çã«ã¯ãGNUéçºç°å¢æ§ç¯ããã¥ã¢ã«ãã®å
|
---|
| 289 | 容ã«
|
---|
| 290 | å¾ãããä¸é¨ç°ãªãç¹ãããã®ã§ãç¸éç¹ãä¸å¿ã«è§£èª¬ããã
|
---|
| 291 | ãªããåä½ç¢ºèªã«ã¯ããã¹ãç°å¢ã¨ãã¦ã¯Cygwin 1.3.22ã使ç¨ããã
|
---|
| 292 |
|
---|
| 293 | 4.1 å¿
|
---|
| 294 | è¦ãªã½ããã¦ã§ã¢
|
---|
| 295 |
|
---|
| 296 | C++éçºç°å¢ãæ§ç¯ããã«ã¯ãGCC-COREããã³G++ãã¾ãã¯GCCãå¿
|
---|
| 297 | è¦ã«ãªãã
|
---|
| 298 | ã¾ããNEWLIBã¯å¿
|
---|
| 299 | é ã§ããã
|
---|
| 300 |
|
---|
| 301 | GNUéçºç°å¢
|
---|
| 302 | BINUTILSï¼ã¢ã»ã³ãã©ï¼ãªã³ã«ãªã©ï¼
|
---|
| 303 | GCCï¼C/C++ã³ã³ãã¤ã©ï¼
|
---|
| 304 | GDBï¼ãããã¬ï¼
|
---|
| 305 | NEWLIBï¼æ¨æºCã©ã¤ãã©ãªï¼
|
---|
| 306 | Perlï¼åä½ç¢ºèªã¯ 5.8.0ï¼
|
---|
| 307 | GNU Makeï¼åä½ç¢ºèªã¯ 3.80ï¼
|
---|
| 308 | GNU sedï¼åä½ç¢ºèªã¯ 4.0.7ï¼
|
---|
| 309 | patchï¼åä½ç¢ºèªã¯ 2.5.8ï¼
|
---|
| 310 |
|
---|
| 311 | 4.2 BINUTILSã®ã¤ã³ã¹ãã¼ã«
|
---|
| 312 |
|
---|
| 313 | BINUTILSã¯ãGCCã®ã¤ã³ã¹ãã¼ã«ã«å¿
|
---|
| 314 | è¦ãªããï¼GCCã«å
|
---|
| 315 | ã ã£ã¦ã¤ã³ã¹ãã¼ã«
|
---|
| 316 | ãããBINUTILSã®ã¤ã³ã¹ãã¼ã«æé ã¯æ¬¡ã®éãã
|
---|
| 317 |
|
---|
| 318 | % mkdir <BINUTILS-OBJDIR>
|
---|
| 319 | % cd <BINUTILS-OBJDIR>
|
---|
| 320 | % <BINUTILS-SRCDIR>/configure --target=<TARGET> --prefix=<PREFIX>\
|
---|
| 321 | --disable-nls
|
---|
| 322 | % make
|
---|
| 323 | % make install
|
---|
| 324 |
|
---|
| 325 | 4.3 GCCã¸ã®ããã
|
---|
| 326 |
|
---|
| 327 | Cygwinä¸ã§GCC 3.2.3ãmakeããå ´åã«ä¸é¨é害ãçºçããããã次ã®ããã
|
---|
| 328 | ãå¿
|
---|
| 329 | è¦ã¨ãªããï¼SHçã®ã¿ãGCC 3.3.x以éã§ã¯ä¸è¦ï¼
|
---|
| 330 |
|
---|
| 331 | % cp gcc-3.2.3_fixinc_gnu-regex.patch <GCC-SRCDIR>
|
---|
| 332 | % cd <GCC-SRCDIR>
|
---|
| 333 | % patch -p1 < gcc-3.2.3_fixinc_gnu-regex.patch
|
---|
| 334 |
|
---|
| 335 | 以ä¸ã®æé ã«å¾ã£ã¦ãGCCãTOPPERS/JSPã«ã¼ãã«ã«å¯¾å¿ãããããã®ããã
|
---|
| 336 | ããã¦ãã
|
---|
| 337 |
|
---|
| 338 | % cp gcc-3.2.3_gthr-toppers-1.patch <GCC-SRCDIR>
|
---|
| 339 | % cd <GCC-SRCDIR>
|
---|
| 340 | % patch -p1 < gcc-3.2.3_gthr-toppers-1.patch
|
---|
| 341 |
|
---|
| 342 | 4.4 GCCã®ã¤ã³ã¹ãã¼ã«(1)
|
---|
| 343 |
|
---|
| 344 | GCCã®ã¤ã³ã¹ãã¼ã«ã«ã¯NEWLIBãå¿
|
---|
| 345 | è¦ã§ããããNEWLIBãã¤ã³ã¹ãã¼ã«ããã«
|
---|
| 346 | ã¯GCCãå¿
|
---|
| 347 | è¦ãªãããè¥å¹²ã®å·¥å¤«ãå¿
|
---|
| 348 | è¦ã«ãªãã
|
---|
| 349 |
|
---|
| 350 | % mkdir <GCC-OBJDIR>
|
---|
| 351 | % cd <GCC-OBJDIR>
|
---|
| 352 | % <GCC-SRCDIR>/configure --target=<TARGET> --prefix=<PREFIX>\
|
---|
| 353 | --enable-languages=c,c++ --enable-threads=toppers\
|
---|
| 354 | --disable-nls
|
---|
| 355 | % make all-gcc
|
---|
| 356 | % make install-host
|
---|
| 357 |
|
---|
| 358 | 4.5 NEWLIBã®ã¤ã³ã¹ãã¼ã«
|
---|
| 359 |
|
---|
| 360 | 次ã®æé ã«å¾ã£ã¦ãNEWLIBãã¤ã³ã¹ãã¼ã«ããï¼
|
---|
| 361 |
|
---|
| 362 | % mkdir <NEWLIB-OBJDIR>
|
---|
| 363 | % cd <NEWLIB-OBJDIR>
|
---|
| 364 | % <NEWLIB-SRCDIR>/configure --target=<TARGET> --prefix=<PREFIX>
|
---|
| 365 | % make
|
---|
| 366 | % make install
|
---|
| 367 |
|
---|
| 368 | ãªããCygwinã®ãã¼ã¸ã§ã³ã«ãã£ã¦ã¯NEWLIBã®ã¤ã³ã¹ãã¼ã«ã«å¤±æããå ´å
|
---|
| 369 | ãããããã®ãããªå ´åã¯ãCygwinã®ãã¼ã¸ã§ã³ãå¤æ´ããããNEWLIBãã
|
---|
| 370 | ã¤ããªã§å
|
---|
| 371 | ¥æãããã¨ã
|
---|
| 372 |
|
---|
| 373 | 4.6 GCCã®ã¤ã³ã¹ãã¼ã«(2)
|
---|
| 374 |
|
---|
| 375 | 次ã®æé ã«å¾ã£ã¦ãGCCã®æ®ãé¨åãã¤ã³ã¹ãã¼ã«ããï¼
|
---|
| 376 |
|
---|
| 377 | % cd <GCC-OBJDIR>
|
---|
| 378 | % make
|
---|
| 379 | % make install
|
---|
| 380 |
|
---|
| 381 |
|
---|
| 382 | ï¼ï¼C++ãã¤ã³ãã£ã³ã°ã®å®è£
|
---|
| 383 | 詳細
|
---|
| 384 |
|
---|
| 385 | 5.1 ãã¡ã¤ã«æ§æ
|
---|
| 386 |
|
---|
| 387 | (1) cxxrt.cfg
|
---|
| 388 |
|
---|
| 389 | cxxrt.cfgã¯C++対å¿ã©ã³ã¿ã¤ã ã®å
|
---|
| 390 | é¨ã§ä½¿ç¨ãããªãã¸ã§ã¯ããçæããã
|
---|
| 391 | C++ã®æ©è½ã使ç¨ããå ´åã«ã¯ãå¿
|
---|
| 392 | ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ããã
|
---|
| 393 | cxxrt.cfgãã¤ã³ã¯ã«ã¼ãããå¿
|
---|
| 394 | è¦ãããã
|
---|
| 395 |
|
---|
| 396 | (2) cxxrt.c
|
---|
| 397 |
|
---|
| 398 | cxxrt.cã¯C++対å¿ã©ã³ã¿ã¤ã ã®æ¬ä½ã§ãããä¾å¤å¦ççã§å¿
|
---|
| 399 | è¦ã¨ãªãé¢æ°ã
|
---|
| 400 | å¤æ°ã®å®ç¾©ãè¡ãããã
|
---|
| 401 |
|
---|
| 402 | (3) newlibrt.c
|
---|
| 403 |
|
---|
| 404 | newlibrt.cã¯NEWLIBã®é¢æ°ãTOPPERS/JSPã«ã¼ãã«ã«å¯¾å¿ãããããã®ã©ã³ã¿
|
---|
| 405 | ã¤ã ã§ãããC++ã使ç¨ããå ´åã«ã¯å¿
|
---|
| 406 | é ã§ããã
|
---|
| 407 | ãã®ã©ã³ã¿ã¤ã ã¯ãC++ã使ç¨ããªãå ´åã§ããNEWLIBã使ç¨ããéã«ã¯åç¬
|
---|
| 408 | ã§ä½¿ç¨ãããã¨ãã§ããã
|
---|
| 409 |
|
---|
| 410 | 5.2 åææ©è½
|
---|
| 411 |
|
---|
| 412 | ä¾å¤å¦çããã³æ¨æºC++ã©ã¤ãã©ãªå
|
---|
| 413 | é¨ã§ä½¿ç¨ããåææ©è½ãæä¾ããé¢æ°ç¾¤ã
|
---|
| 414 | æ¨æºC++ã©ã¤ãã©ãªã¯ããªã¼ã¹ã¿ã³ãã£ã³ã°ç°å¢ã§ã¯ãµãã¼ããããªãããã
|
---|
| 415 | ãããlibstdc++ã®å
|
---|
| 416 | ¨æ©è½ã使ç¨ãããã¨ãã§ããã¨æããããï¼ãã ããå
|
---|
| 417 | ä½ã¯ç¢ºèªãã¦ããªãï¼
|
---|
| 418 |
|
---|
| 419 | (1) int _toppers_cxxrt_lock(_toppers_cxxrt_sync_t *sync);
|
---|
| 420 |
|
---|
| 421 | ãã«ãã¿ã¹ã¯åä½æã§ã¯ãããã¯ãæããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãéå§ã
|
---|
| 422 | ããéãã«ãã¿ã¹ã¯åä½æã«ã¯ä½ãããªãã
|
---|
| 423 | æåæã«ã¯0ãè¿ãã失ææã«ã¯è² ã®å¤ãè¿ãã
|
---|
| 424 |
|
---|
| 425 | ãã®é¢æ°ã¯ãã¹ãã£ã³ã°å¯è½ã§ããã
|
---|
| 426 |
|
---|
| 427 | (2) int _toppers_cxxrt_trylock(_toppers_cxxrt_sync_t *sync);
|
---|
| 428 |
|
---|
| 429 | _toppers_cxxrt_locké¢æ°ã¨ã»ã¼åãã§ããããæ¢ã«ä»ã®ã¿ã¹ã¯ã«ãã£ã¦ããã¯
|
---|
| 430 | ä¸ã®å ´åã§ãå¾
|
---|
| 431 | æ©ç¶æ
|
---|
| 432 | ã«ã¯ç§»è¡ãããåã«å¼åºãã«å¤±æããã
|
---|
| 433 | ç¾å¨ã®å®è£
|
---|
| 434 | ã§ã¯ã_toppers_cxxrt_locké¢æ°ã¯ãã£ã¹ãããç¦æ¢ãç¨ãã¦å®ç¾ã
|
---|
| 435 | ã¦ãããããã©ã¡ããåãã§ããã
|
---|
| 436 |
|
---|
| 437 | (3) int _toppers_cxxrt_unlock(_toppers_cxxrt_sync_t *sync);
|
---|
| 438 |
|
---|
| 439 | ãã«ãã¿ã¹ã¯åä½æã§ã¯ãããã¯ã解é¤ããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãçµäº
|
---|
| 440 | ãããéãã«ãã¿ã¹ã¯åä½æã«ã¯ä½ãããªãã
|
---|
| 441 | æåæã«ã¯0ãè¿ãã失ææã«ã¯è² ã®å¤ãè¿ãã
|
---|
| 442 |
|
---|
| 443 | (4) int _toppers_cxxrt_once(_toppers_cxxrt_once_t *once,
|
---|
| 444 | void (*func)(void));
|
---|
| 445 |
|
---|
| 446 | æå®ããé¢æ°ããã·ã¹ãã å
|
---|
| 447 | ¨ä½ã§ä¸åº¦ã ãå®è¡ããããfuncãå®è¡ä¸ã«ãç°
|
---|
| 448 | ãªãã¿ã¹ã¯ã§ãåãé¢æ°ãå®è¡ããããã¨ããå ´åãfuncã®å®è¡ãå®äºãã
|
---|
| 449 | ã¾ã§å¾
|
---|
| 450 | æ©ç¶æ
|
---|
| 451 | ã«ç§»è¡ããã
|
---|
| 452 | æåæã«ã¯0ãè¿ãã失ææã«ã¯è² ã®å¤ãè¿ãã
|
---|
| 453 |
|
---|
| 454 | 5.3 ã¿ã¹ã¯ãã¼ã«ã«è¨æ¶åæ©è½
|
---|
| 455 |
|
---|
| 456 | ã¿ã¹ã¯ãã¨ã«ç¨æããããè¦ããä¸éçãªè¨æ¶åãæä¾ããé¢æ°ç¾¤ã§ããã
|
---|
| 457 | ä¾å¤å¦çã§ä½¿ç¨ãããã
|
---|
| 458 | ã¿ã¹ã¯ãã¼ã«ã«è¨æ¶åã¨ãã¦ç¢ºä¿ã§ããã®ã¯ãããã©ã«ãã§ã¯2åã¾ã§ã§ãã
|
---|
| 459 | ãã_CXXRT_KEY_MAXãã¯ããã¦ã¼ã¶å®ç¾©ãããã¨ã§ã3å以ä¸ã«æ¡å¼µãããã¨
|
---|
| 460 | ãã§ããã
|
---|
| 461 |
|
---|
| 462 | (1) int _toppers_cxxrt_key_create(struct _toppers_cxxrt_tls **key,
|
---|
| 463 | void (*dtor)(void*))
|
---|
| 464 |
|
---|
| 465 | ã¿ã¹ã¯ãã¼ã«ã«è¨æ¶åã«ç¢ºä¿ããå¤æ°ãæ°è¦ä½æããã
|
---|
| 466 | æåæã«ã¯0ãè¿ãã*keyã«å¤æ°ãèå¥ããããã®ãã¼ãæ ¼ç´ãããã
|
---|
| 467 | dtorã«ã¯ããã¼ãåé¤ããéã«ãã¿ã¹ã¯ãã¨ã®åå¤æ°ã«å¯¾ãã¦å®è¡ãã¹ãçµ
|
---|
| 468 | äºå¦çãæå®ããã
|
---|
| 469 | 失ææã«ã¯è² ã®å¤ãè¿ãã
|
---|
| 470 |
|
---|
| 471 | (2) int _toppers_cxxrt_key_delete(struct _toppers_cxxrt_tls *key);
|
---|
| 472 |
|
---|
| 473 | _toppers_cxxrt_key_createé¢æ°ã§ä½æãããã¼ãåé¤ããã
|
---|
| 474 | æåæã«ã¯0ãè¿ãã失ææã«ã¯è² ã®å¤ãè¿ãã
|
---|
| 475 |
|
---|
| 476 | 5.4 NEWLIBã®ã«ã¹ã¿ãã¤ãº
|
---|
| 477 |
|
---|
| 478 | (1) void __malloc_lock(struct _reent *ptr);
|
---|
| 479 |
|
---|
| 480 | mallocããã³freeã®æä»å¶å¾¡ãè¡ããä»ã®ã¿ã¹ã¯ã«ãã£ã¦ããã¯ããã¦ãã
|
---|
| 481 | ç¶æ³ã§å¼åºãããå ´åã¯å¾
|
---|
| 482 | æ©ç¶æ
|
---|
| 483 | ã«ç§»è¡ããã
|
---|
| 484 |
|
---|
| 485 | (2) void __malloc_unlock(struct _reent *ptr);
|
---|
| 486 |
|
---|
| 487 | __malloc_locké¢æ°ã«ããããã¯ã解é¤ããã
|
---|
| 488 |
|
---|
| 489 | (3) void *_sbrk_r(struct _reent *ptr, ptrdiff_t nbytes);
|
---|
| 490 |
|
---|
| 491 | ããã°ã©ã ã®ãã¼ãé åãnbyteã ãæ¡å¤§ãããæåæã«ã¯ãæ°ããé åã®å
|
---|
| 492 |
|
---|
| 493 | é ã¸ã®ãã¤ã³ã¿ãè¿ãã失ææã¯è² ã®å¤ãè¿ããerrnoããã³ptr->_errnoã«
|
---|
| 494 | ENOMEMãè¨å®ããã
|
---|
| 495 |
|
---|
| 496 | ãã¼ãé åã«ã¯ãå¤é¨èå¥åendï¼.bssã»ã¯ã·ã§ã³ã®çµç«¯ï¼ããããã«ãã¿ã¹
|
---|
| 497 | ã¯åä½éå§åã®ã¹ã¿ãã¯ãã¤ã³ã¿ã¾ã§ã使ç¨ããã
|
---|
| 498 | ã¡ã¢ãªãããä¸ãè¤æ°ã®ã¡ã¢ãªã¤ã¡ã¼ã¸ãçºçããã¿ã¼ã²ããã§ã¯ã.bssã»
|
---|
| 499 | ã¯ã·ã§ã³ã¨ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå¤ãåä¸ã¤ã¡ã¼ã¸ä¸ã«é
|
---|
| 500 | ç½®ããå¿
|
---|
| 501 | è¦ãã
|
---|
| 502 | ãã
|
---|
| 503 | ãã¼ãé åã¨èµ·åæã®ã¹ã¿ãã¯é åãé£ç¶ãã¦ããªãå ´åãsys_config.hå
|
---|
| 504 |
|
---|
| 505 | ã§HEAP_TOPãã¯ãããã¼ãã®çµç«¯ã¢ãã¬ã¹ã«å®ç¾©ããå¿
|
---|
| 506 | è¦ãããã
|
---|
| 507 |
|
---|
| 508 | æ¬æ¥ã§ããã°ã_sbrk_ré¢æ°ã®åå§é¢æ°ã«ããã_sbrké¢æ°ãã«ã¹ã¿ãã¤ãºã
|
---|
| 509 | ã¹ãã§ããããã¿ã¼ã²ããã«ãã£ã¦ã¯ã_writeé¢æ°çã¨åä¸ã®ç¿»è¨³åä½ã«ãª
|
---|
| 510 | ãªã¸ãã«ã®_sbrké¢æ°ãå®ç¾©ããã¦ããããªã³ã¯æã«é害ãçºçããåå ã¨ãª
|
---|
| 511 | ãããã_sbrk_ré¢æ°ãã«ã¹ã¿ãã¤ãºãã¦ããã
|
---|
| 512 |
|
---|
| 513 | 5.5 ãã®ä»
|
---|
| 514 |
|
---|
| 515 | (1) int main();
|
---|
| 516 |
|
---|
| 517 | JSPã«ã¼ãã«ä¸ã§åä½ããC/C++ããã°ã©ã ã¯ããªã¼ã¹ã¿ã³ãã£ã³ã°ç°å¢ã§ã
|
---|
| 518 | ããããã¨ã³ããªé¢æ°ã¯mainã§ã¯ãªãkernel_startã§ãããããããNEWLIB
|
---|
| 519 | ã§ã¯ã¨ã³ããªãã¤ã³ãã¨ãã¦mainã使ç¨ããããã¨ãæå¾
|
---|
| 520 | ãã¦ããããã
|
---|
| 521 | mainé¢æ°ããªããã°ãªã³ã¯ã¨ã©ã¼ã«ãªãå ´åãããã
|
---|
| 522 | C++対å¿ã©ã³ã¿ã¤ã ã§ã¯ããªã³ã¯ã解決ãããã¨ã®ã¿ãç®çã¨ãã¦mainé¢æ°ã
|
---|
| 523 | å®ç¾©ããã
|
---|
| 524 |
|
---|
| 525 |
|
---|
| 526 | ï¼ï¼ã¿ã¼ã²ããä¾åé¨ã®å®è£
|
---|
| 527 |
|
---|
| 528 |
|
---|
| 529 | ç¾å¨ãC++ãã¤ã³ãã£ã³ã°ããµãã¼ãããå®è¡ç°å¢ã¯ãMS7727CP01(SH3)ãã
|
---|
| 530 | ã³AKI-H8/3069Fã§ããã
|
---|
| 531 | ã¾ããGNUéçºç°å¢ã®ã¿ã¼ã²ããã¨ãã¦ãSHç¨ã«ã¯sh-hitachi-elfãH8ç¨ã«ã¯
|
---|
| 532 | h8300-hmsã使ç¨ãã¦ããã
|
---|
| 533 |
|
---|
| 534 | 6.1 GNUéçºç°å¢ã«é¢ãããã®
|
---|
| 535 |
|
---|
| 536 | GNUéçºç°å¢å
|
---|
| 537 | ¨è¬ã«é¢ããè¦ç´ ã¨ãã¦ã以ä¸ã®ãã®ãããã
|
---|
| 538 |
|
---|
| 539 | (1) ãªã³ã«ã¹ã¯ãªããã®å¯¾å¿
|
---|
| 540 |
|
---|
| 541 | C++ãç¨ããå ´åã®ãªã³ã«ã¹ã¯ãªããã«ã¯ã.ctorããã³.dtorãããªãã¡ã°ã
|
---|
| 542 | ã¼ãã«ãªã³ã³ã¹ãã©ã¯ã¿ããã¹ãã©ã¯ã¿ã®ãã¤ã³ã¿ãã¼ãã«ãå½¢æãããã
|
---|
| 543 | ã®ã»ã¯ã·ã§ã³å®ç¾©ãå¿
|
---|
| 544 | è¦ã§ããã
|
---|
| 545 | ã¾ãã.eh_frameã.gcc_except_tableãªã©ã®ä¾å¤å¦çç¨ã®ã»ã¯ã·ã§ã³å®ç¾©ã
|
---|
| 546 | å¿
|
---|
| 547 | è¦ã«ãªãã
|
---|
| 548 |
|
---|
| 549 | 6.2 ELFå½¢å¼ã«é¢é£ãããã®
|
---|
| 550 |
|
---|
| 551 | SHã«éãããELFå½¢å¼ã«ä¾åããè¦ç´ ã¨ãã¦ãä¸è¨å
|
---|
| 552 | 容ã®å¯¾å¿ãå¿
|
---|
| 553 | è¦ã§ããã
|
---|
| 554 |
|
---|
| 555 | (1) crti.o, crtbegin.o, crtend.o, crtn.oã®ãªã³ã¯
|
---|
| 556 |
|
---|
| 557 | ã°ãã¼ãã«ãªã³ã³ã¹ãã©ã¯ã¿ããã³ãã¹ãã©ã¯ã¿ã®å¼åºãããä¾å¤å¦çé¢é£
|
---|
| 558 | ã«å¿
|
---|
| 559 | è¦ãªããããããã®ãã¡ã¤ã«ãæ£ããé åºã§ãªã³ã¯ããå¿
|
---|
| 560 | è¦ãããã
|
---|
| 561 | ãªã³ã¯ã®é åºã¯ã
|
---|
| 562 |
|
---|
| 563 | start.o crti.o crtbegin.o ã¦ã¼ã¶ããã°ã©ã libkernel.a libstdc++.a
|
---|
| 564 | libm.a libc.a libgcc.a crtend.o crtn.o
|
---|
| 565 |
|
---|
| 566 | ã§ããã
|
---|
| 567 | ãã®æå®ã«ã¯ãã¿ã¼ã²ããä¾åé¨ã®config/sh3/Makefile.configã«ããã¦ã
|
---|
| 568 |
|
---|
| 569 | START_OBJS = \
|
---|
| 570 | start.o \
|
---|
| 571 | $(shell $(CC) $(COPTS) -print-file-name=crti.o | sed -e 's/\\/\//g') \
|
---|
| 572 | $(shell $(CC) $(COPTS) -print-file-name=crtbegin.o | sed -e 's/\\/\//g')
|
---|
| 573 | END_OBJS = \
|
---|
| 574 | $(shell $(CC) $(COPTS) -print-file-name=crtend.o | sed -e 's/\\/\//g') \
|
---|
| 575 | $(shell $(CC) $(COPTS) -print-file-name=crtn.o | sed -e 's/\\/\//g')
|
---|
| 576 |
|
---|
| 577 | ã®ããã«å®ç¾©ããã¦ããã
|
---|
| 578 | ãªããæå'\'ã'/'ã«ç½®æãã¦ããã®ã¯ãMinGW + MSysã®ç°å¢ã§ä½¿ç¨ã§ãã
|
---|
| 579 | ããã«ããããã§ããã
|
---|
| 580 | ã¾ããmakeæã«èª¤ã£ã¦crti.oãªã©ã®ã³ã³ãã¤ã«ã試ã¿ããã¨ãããã¨ãåé¿
|
---|
| 581 | ããç®çã§ãSTART_OBJSã¨END_OBJSï¼ããã³start.oï¼ã®makeã«ã¼ã«ãç¹åã
|
---|
| 582 | ã¦ããã
|
---|
| 583 |
|
---|
| 584 | (2) ãªã³ã«ã¹ã¯ãªããã®å¯¾å¿
|
---|
| 585 |
|
---|
| 586 | .initã.finiçã®ELFå½¢å¼ç¹æã®ã»ã¯ã·ã§ã³å®ç¾©ãå¿
|
---|
| 587 | è¦ã§ããã
|
---|
| 588 |
|
---|
| 589 | 6.3 SHã«ç¹æã®ãã®
|
---|
| 590 |
|
---|
| 591 | ã¿ã¼ã²ãããSHã®å ´åã«ç¹æãªè¦ç´ ã¨ãã¦ã以ä¸ã®ãã®ãããã
|
---|
| 592 |
|
---|
| 593 | (1) _inité¢æ°ããã³_finié¢æ°
|
---|
| 594 |
|
---|
| 595 | GCCã®å¤ãã®ã¿ã¼ã²ããã§ã¯ãELFå½¢å¼ã®å ´åãåæåé¢æ°ããã³çµäºæé¢æ°
|
---|
| 596 | ã¨ãã¦ã_inité¢æ°ã¨_finié¢æ°ã使ç¨ãããããããSHã®å ´åã«ã¯inité¢æ°
|
---|
| 597 | ã¨finié¢æ°ï¼å
|
---|
| 598 | é ã®ä¸ç·ããªãï¼ã使ç¨ãã¦ããããã®ãããtool_defs.h
|
---|
| 599 | ã«ããã¦ãinitããã³finiã«ãããããã¯ãç½®æãã¦ããã
|
---|
| 600 |
|
---|
| 601 |
|
---|
| 602 | ï¼ï¼ã¢ããªã±ã¼ã·ã§ã³ä½æã«ããããã³ã
|
---|
| 603 |
|
---|
| 604 | 7.1 éçãªãªãã¸ã§ã¯ã
|
---|
| 605 |
|
---|
| 606 | éçãªãªãã¸ã§ã¯ãã¯æ®éã«å®ç¾©ãããã¨ãã§ãããã以ä¸ã®ç¹ã«æ³¨æãã
|
---|
| 607 | å¿
|
---|
| 608 | è¦ãããã
|
---|
| 609 |
|
---|
| 610 | (1) ã«ã¼ãã«éåä½ç¶æ
|
---|
| 611 |
|
---|
| 612 |
|
---|
| 613 | ã°ãã¼ãã«ãªã³ã³ã¹ãã©ã¯ã¿ããã¹ãã©ã¯ã¿ã¯ãã«ã¼ãã«éåä½ç¶æ
|
---|
| 614 | ã§å¼åº
|
---|
| 615 | ãããããããã£ã¦ããããã®é¢æ°å
|
---|
| 616 | ã§ã¯ãμITRONã®ãµã¼ãã¹ã³ã¼ã«ãå¼åº
|
---|
| 617 | ããã¨ã¯åºæ¥ãªããå¯ä¸å¼åºããã¨ãåºæ¥ããµã¼ãã¹ã³ã¼ã«ã¯ãJSPã«ã¼ãã«
|
---|
| 618 | ã®ç¬èªæ¡å¼µã§ããvsns_iniã ãã§ããã
|
---|
| 619 |
|
---|
| 620 | ã¯ã©ã¹ãã°ãã¼ãã«ã§ããã¼ã«ã«ã§ã使ããããã«ããã«ã¯ãå¿
|
---|
| 621 | è¦ã«å¿ãã¦ã
|
---|
| 622 | vsns_iniã§ã«ã¼ãã«ã®åä½ç¶æ
|
---|
| 623 | ãå¤å¥ããç¶æ
|
---|
| 624 | ã«å¿ãã¦å¦çãåããå¿
|
---|
| 625 | è¦ã
|
---|
| 626 | ããã
|
---|
| 627 |
|
---|
| 628 | (2) é¢æ°å
|
---|
| 629 | ã®éçãªãã¸ã§ã¯ã
|
---|
| 630 |
|
---|
| 631 | é¢æ°å
|
---|
| 632 | ã§å®ç¾©ãããéçãªãã¸ã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã¯ãå¿
|
---|
| 633 | ãããèµ·åæ
|
---|
| 634 | ã«å¼åºããã訳ã§ã¯ãªããå®è¡ãã¹ãæåã«ãã®ãªãã¸ã§ã¯ãã®å®ç¾©ç®æã«
|
---|
| 635 | å·®æãã£ãæç¹ã§å¼åºãããã
|
---|
| 636 | ãããã£ã¦ãã³ã³ã¹ãã©ã¯ã¿ãã«ã¼ãã«åä½ç¶æ
|
---|
| 637 | ã§å¼åºãããããéåä½ç¶
|
---|
| 638 | æ
|
---|
| 639 | ã§å¼åºããããã¯ããã®ãªãã¸ã§ã¯ããå®ç¾©ãããé¢æ°ãæåã«å¼åºãã
|
---|
| 640 | ãã¿ã¤ãã³ã°ã«ä¾åããã
|
---|
| 641 |
|
---|
| 642 | ä¸è¬çã«ããã®åé¡ãåé¿ããã«ã¯Double-Checked Lockingã¨å¼ã°ããææ³
|
---|
| 643 | ãç¨ããããã
|
---|
| 644 |
|
---|
| 645 | class foo
|
---|
| 646 | {
|
---|
| 647 | // ã¯ã©ã¹å®ç¾©
|
---|
| 648 | };
|
---|
| 649 |
|
---|
| 650 | void func()
|
---|
| 651 | {
|
---|
| 652 | static foo* ptr = 0;
|
---|
| 653 | if (ptr == 0)
|
---|
| 654 | {
|
---|
| 655 | wai_sem(SEMID);
|
---|
| 656 | if (ptr == 0)
|
---|
| 657 | {
|
---|
| 658 | static foo x;
|
---|
| 659 | ptr = &x;
|
---|
| 660 | }
|
---|
| 661 | sig_sem(SEMID);
|
---|
| 662 | }
|
---|
| 663 | // é¢æ°æ¬ä½ã®å¦ç
|
---|
| 664 | }
|
---|
| 665 |
|
---|
| 666 | (3) ã·ã¹ãã ãã°ã®ä½¿ç¨
|
---|
| 667 |
|
---|
| 668 | ãã¹ãã©ã¯ã¿ã§ã¯ãã·ã¹ãã ãã°ãå¶éãªã使ç¨ãããã¨ãã§ããããã°ã
|
---|
| 669 | ã¼ãã«ãªã³ã³ã¹ãã©ã¯ã¿ã§ã¯ãããã©ã«ãã§ã¯ã·ã¹ãã ãã°ã使ç¨ãããã¨
|
---|
| 670 | ãã§ããªãã
|
---|
| 671 |
|
---|
| 672 | 7.2 newæ¼ç®åã¨deleteæ¼ç®å
|
---|
| 673 |
|
---|
| 674 | (1) æä»å¶å¾¡ã«ã¤ãã¦
|
---|
| 675 |
|
---|
| 676 | newæ¼ç®åã¨deleteæ¼ç®åã¯ãå¦çé度ãåä¸ãããããããªã¼ã¹ãã¢ããã®
|
---|
| 677 | ã¡ã¢ãªå²ä»ãï¼std::mallocé¢æ°ãç¨ãã¦å®è£
|
---|
| 678 | ï¼ã¯ãã£ã¹ãããç¦æ¢ç¶æ
|
---|
| 679 | ã§è¡
|
---|
| 680 | ã£ã¦ããã
|
---|
| 681 | ã¢ããªã±ã¼ã·ã§ã³ã®è¦æ±ã«ãã£ã¦ãä»ã®æ¹æ³ã§æä»å¶å¾¡ãè¡ãå¿
|
---|
| 682 | è¦ãããå ´
|
---|
| 683 | åã«ã¯ãsystask/cxxrt.cã®ä¸ã®__malloc_locké¢æ°ã¨__malloc_unlocké¢æ°ã
|
---|
| 684 | ã«ã¹ã¿ãã¤ãºããã°ããã
|
---|
| 685 |
|
---|
| 686 | (2) 使ç¨ã«é¢ããå¶ç´
|
---|
| 687 |
|
---|
| 688 | éã¿ã¹ã¯ã³ã³ããã¹ããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã§å¼åºããã¨ã¯ã§ããªãã
|
---|
| 689 | ã«ã¼ãã«éåä½ç¶æ
|
---|
| 690 | ï¼vsns_inié¢æ°ãTRUEãè¿ãæéï¼ã§ã¯ãé常éã使ç¨
|
---|
| 691 | ãããã¨ãã§ããã
|
---|
| 692 |
|
---|
| 693 | (3) ãªã¼ãã¼ãã¼ãã«ã¤ãã¦
|
---|
| 694 |
|
---|
| 695 | ã°ãã¼ãã«ãªnewæ¼ç®åã¨deleteæ¼ç®åã¯ãå®è¡å¹çã¯ã¾ãã¾ãã§ãããã空
|
---|
| 696 | éå¹çã¯æ±ºãã¦é«ãã¨ã¯ãããªããã¾ããç¹å®ã®ã¯ã©ã¹ã®æä½çææ°ã«ã¤ã
|
---|
| 697 | ã¦ãè©ä¾¡ãã«ãããããå³å¯ãªåä½ä¿è¨¼ãå¿
|
---|
| 698 | è¦ã¨ããã¯ã©ã¹ã«é¢ãã¦ã¯ãnew
|
---|
| 699 | æ¼ç®åã¨deleteæ¼ç®åããªã¼ãã¼ãã¼ããããã¨ãæ¨å¥¨ããã
|
---|
| 700 |
|
---|
| 701 | ãªã¼ãã¼ãã¼ãã«éãã¦ã¯ãåºå®é·ã¡ã¢ãªãã¼ã«çãç¨ãããã¨ãåºæ¥ãã
|
---|
| 702 | ä¾ãã°ã以ä¸ã®ããã«ã¯ã©ã¹ãå®ç¾©ãããã¨ãåºæ¥ãã
|
---|
| 703 |
|
---|
| 704 | #include <t_services.h>
|
---|
| 705 | #include <cstddef>
|
---|
| 706 | #include "kernel_id.h"
|
---|
| 707 |
|
---|
| 708 | class foo
|
---|
| 709 | {
|
---|
| 710 | static ID mpfid_;
|
---|
| 711 | public:
|
---|
| 712 | static void* operator new(std::size_t size) throw()
|
---|
| 713 | {
|
---|
| 714 | VP ptr;
|
---|
| 715 | get_mpf(mpfid_, &ptr);
|
---|
| 716 | assert(ptr != 0);
|
---|
| 717 | return ptr;
|
---|
| 718 | }
|
---|
| 719 | static void operator delete(void* ptr) throw()
|
---|
| 720 | {
|
---|
| 721 | rel_mpf(mpfid_, ptr);
|
---|
| 722 | }
|
---|
| 723 | };
|
---|
| 724 |
|
---|
| 725 | static ID foo::mpfid_ = FOO_MPF; // åºå®é·ã¡ã¢ãªãã¼ã«ã®IDçªå·
|
---|
| 726 |
|
---|
| 727 | ã¾ããnewæ¼ç®åã®é
|
---|
| 728 | ç½®æ§æã使ç¨ãããã¨ã§ãã¿ã¤ã ã¢ã¦ãæå®çã®æ©è½ã
|
---|
| 729 | 追å ãããã¨ãå¯è½ã§ããã
|
---|
| 730 |
|
---|
| 731 | static void* operator new(std::size_t size, TMO tmout);
|
---|
| 732 | static void operator delete(void* ptr, TMO) throw();
|
---|
| 733 |
|
---|
| 734 | ãªããnewæ¼ç®åããªã¼ãã¼ãã¼ãããå ´åãå¿
|
---|
| 735 | ã対å¿ããdeleteæ¼ç®åãå
|
---|
| 736 | ããã¦ãªã¼ãã¼ãã¼ãããªããã°ãªããªãã
|
---|
| 737 | ä¸è¨ã®å ´åãdeleteæ¼ç®åã§TMOåã®å¼æ°ã使ç¨ãããã¨ã¯ãªãããnewãã
|
---|
| 738 | ãã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ããä¾å¤ãã¹ãã¼ãããå ´åï¼newæ¼ç®åãã®ãã®
|
---|
| 739 | ã§ã¯ãªãï¼ã対å¿ããdeleteæ¼ç®åãå¿
|
---|
| 740 | è¦ã«ãªãã
|
---|
| 741 |
|
---|
| 742 | 7.3 ä¾å¤å¦ç
|
---|
| 743 |
|
---|
| 744 | (1) ä¾å¤å¦çã®å
|
---|
| 745 | é¨å¦ç
|
---|
| 746 |
|
---|
| 747 | GCCã§ã¯ãconfigureæã«--enable-sjlj-exceptionsãæå®ããå ´åãä¾å¤å¦
|
---|
| 748 | çãå®ç¾ããããã«setjmpããã³longjmpé¢æ°ã使ç¨ãã¦ãããã¿ã¼ã²ããã«
|
---|
| 749 | ãã£ã¦ã¯ä»ã®å®ç¾æ¹æ³ãé¸æãããã¨ãã§ããããåä½ç¢ºèªã¯è¡ã£ã¦ããªãã
|
---|
| 750 |
|
---|
| 751 | ä¾å¤ãTåã®ãªãã¸ã§ã¯ããthrowããå ´åãå
|
---|
| 752 | é¨çã«ã¯ä»¥ä¸ã®é åºã§å¦çã
|
---|
| 753 | è¡ãããã
|
---|
| 754 |
|
---|
| 755 | 1) std::mallocé¢æ°ã«ãããTåã®ãªãã¸ã§ã¯ããæ ¼ç´å¯è½ãªã¡ã¢ãªãã
|
---|
| 756 | ãã¯ãå²ä»ããããã
|
---|
| 757 | å²ä»ãã«å¤±æããå ´åãç·æ¥ç¨ã®éçãªãããã¡ãå½ã¦ãããã
|
---|
| 758 |
|
---|
| 759 | 2) Tåã®ã³ãã¼ã³ã³ã¹ãã©ã¯ã¿ãå¼åºãããthrowããããªãã¸ã§ã¯ãã®
|
---|
| 760 | ã³ãã¼ãã1)ã§å²ä»ãããããã¯ãç¨ãã¦çæãããã
|
---|
| 761 | ã³ãã¼ã³ã³ã¹ãã©ã¯ã¿å
|
---|
| 762 | ã§ä¾å¤ãthrowãããå ´åã¯std::terminate
|
---|
| 763 | é¢æ°ãå¼åºãããå¾ãstd::aborté¢æ°ã«ããç°å¸¸çµäºããã
|
---|
| 764 |
|
---|
| 765 | 3) ä¾å¤å¦çãã¬ã¼ã ãæ¤ç´¢ããcatchãããã¾ã§ã®çµè·¯ã«åå¨ãããã¼
|
---|
| 766 | ã«ã«ãªãªãã¸ã§ã¯ãã®ãã¹ãã©ã¯ã¿ãå¼åºãããã
|
---|
| 767 | ããã§ããã¹ãã©ã¯ã¿å
|
---|
| 768 | ã§ä¾å¤ãthrowãããå ´åã¯std::terminate
|
---|
| 769 | é¢æ°ãå¼åºãããå¾ãstd::aborté¢æ°ã«ããç°å¸¸çµäºããã
|
---|
| 770 |
|
---|
| 771 | 4) Tåï¼ã¾ãã¯ãã®åºåºã¯ã©ã¹ï¼ã«å¯¾å¿ããcatchãããã¯ãè¦ã¤ãã£ã
|
---|
| 772 | å ´åã¯ããã®ãããã¯ã«åºååå²ãããcatchãããã¯ã®ãã©ã¡ã¼ã¿
|
---|
| 773 | ãå¤æ¸¡ãã®å ´åãã³ãã¼ã³ã³ã¹ãã©ã¯ã¿ã«ãã£ã¦æ°ãããã¼ã«ã«ãªãª
|
---|
| 774 | ãã¸ã§ã¯ããçæãããã
|
---|
| 775 | 対å¿ããcatchãããã¯ãè¦ã¤ãããªãã£ãå ´åãå¤æ¸¡ãã®éã«ä¾å¤
|
---|
| 776 | ãthrowãããå ´åã¯std::terminateé¢æ°ãå¼åºãããå¾ãstd::abort
|
---|
| 777 | é¢æ°ã«ããç°å¸¸çµäºããã
|
---|
| 778 |
|
---|
| 779 | 5) catchãããã¯å
|
---|
| 780 | ã®å¦çãå®è¡ãããã
|
---|
| 781 |
|
---|
| 782 | 6) ä¸è¨2)ã§çæããããªãã¸ã§ã¯ãã®ãã¹ãã©ã¯ã¿ãå¼åºãããã
|
---|
| 783 |
|
---|
| 784 | (2) ã¿ã¹ã¯åèµ·åæã®åæå
|
---|
| 785 |
|
---|
| 786 | JSP 1.4ã§ã¯åèµ·åæã®åæåå¦çã¨ãã¦_toppers_cxxrt_reset_specificé¢
|
---|
| 787 | æ°ãå¼ã³åºãå¿
|
---|
| 788 | è¦ããã£ãããJSP 1.4.1ã§ã¯_toppers_cxxrt_reset_specific
|
---|
| 789 | é¢æ°ã®å¼ã³åºãã¯å¿
|
---|
| 790 | è¦ã¨ããªãã
|
---|
| 791 | ãã®ä»£ãããã¿ã¹ã¯ã®ã¨ã³ããªé¢æ°ããä¾å¤ãåä½ããå ´åã®åä½ã¯æªå®ç¾©
|
---|
| 792 | ã§ããã
|
---|
| 793 |
|
---|
| 794 | (3) å¹çã®åä¸
|
---|
| 795 |
|
---|
| 796 | configureæã«--enable-sjlj-exceptionsãæå®ããå ´åãä¾å¤ãthrowããª
|
---|
| 797 | ãå ´åã§ããè¥å¹²ã®å®è¡å¹çã®ä½ä¸ãèµ·ãããã¾ãã空éå¹çãèããä½ä¸
|
---|
| 798 | ããå ´åãããã
|
---|
| 799 | å¹çãå°ãã§ãæ¹åããã«ã¯ã以ä¸ã®æ¹æ³ãæå¹ã§ããã
|
---|
| 800 |
|
---|
| 801 | 1) ã§ããã ãã¤ã³ã©ã¤ã³é¢æ°ã使ç¨ãããä¾å¤å¦çã«é¢ãããªã¼ãã¼ã
|
---|
| 802 | ããã®å¤ãã¯ãé¢æ°ã®å¼åºãã«ä»éãã¦çºçããã
|
---|
| 803 |
|
---|
| 804 | 2) 決ãã¦ä¾å¤ãçºçããªãé¢æ°ã«ã¯ãå¿
|
---|
| 805 | ãä¾å¤æå®throw()ãä»å ããã
|
---|
| 806 | ç¹ã«ãCè¨èªã§å®è£
|
---|
| 807 | ãããé¢æ°ã¯ãå¿
|
---|
| 808 | ãthrow()ãä»ãããã¨ã
|
---|
| 809 |
|
---|
| 810 | 3) ä¾å¤ãçºçãããããããªãé¢æ°ã«ã¯ä¾å¤æå®ãä»ããªãã
|
---|
| 811 | ä¾å¤æå®ãä»ããã¨ãã£ã«ã¿ãªã³ã°å¦çãæé»çã«å±éãããã
|
---|
| 812 |
|
---|
| 813 | 4) å¯è½ãªéããã¹ãã©ã¯ã¿ãå®ç¾©ããªãã
|
---|
| 814 | é¢æ°å
|
---|
| 815 | ã§ãã¹ãã©ã¯ã¿ãæã¤ãã¼ã«ã«ãªãªãã¸ã§ã¯ãã使ããªããã°ã
|
---|
| 816 | ä¾å¤ãthrowãããããããªãé¢æ°ãå¼ãã§ãããªã¼ãã¼ãããã«ãª
|
---|
| 817 | ããªãå ´åãããã
|
---|
| 818 |
|
---|
| 819 | 5) ä¸æãªãã¸ã§ã¯ãã®çæãé¿ãã
|
---|
| 820 | ä¸æãªãã¸ã§ã¯ãçæã¯ããèªä½ããªã¼ãã¼ãããã§ããã ãã§ãªãã
|
---|
| 821 | ã³ã³ã¹ãã©ã¯ã¿ã§ä¾å¤ãçºçããæ©ä¼ãä½ããã¾ããã¹ãã©ã¯ã¿ãå¼
|
---|
| 822 | ã³åºãããæ©ä¼ãå¢ããã
|
---|
| 823 |
|
---|
| 824 | 7.4 Cè¨èªã¨ã®æ··å¨
|
---|
| 825 |
|
---|
| 826 | C++ããCè¨èªã§å®ç¾©ããé¢æ°ãå¼åºãå ´åãextern "C"ã«ãã"C"ãªã³ã±ã¼ã¸
|
---|
| 827 | ã§ãããã¨ãæ示çã«æå®ããªããã°ãªããªãã
|
---|
| 828 |
|
---|
| 829 | extern "C" int foo();
|
---|
| 830 |
|
---|
| 831 | extern "C" {
|
---|
| 832 | void hoge();
|
---|
| 833 | void bar();
|
---|
| 834 | }
|
---|
| 835 |
|
---|
| 836 | ã¾ããCè¨èªããå¼åºãå¯è½æ§ã®ããé¢æ°ãC++ã§å®ç¾©ããå ´åãextern "C"
|
---|
| 837 | ãé¢æ°å®ç¾©ã«ä»å ããå¿
|
---|
| 838 | è¦ãããã
|
---|
| 839 |
|
---|
| 840 | Cã¨C++ã§ã¯äºææ§ã®ãªãåãããããã両æ¹ãã使ç¨ããé¢æ°ã«ããããã
|
---|
| 841 | åã使ç¨ãã¹ãã§ã¯ãªããä¾ãã°ãboolãã¯ã©ã¹åãªã©ã§ããã
|
---|
| 842 | ç¹ã«ãkernel_cfg.cã¯Cè¨èªã§ãããããã¿ã¹ã¯çã®æ¡å¼µæ
|
---|
| 843 | å ±ã«ã¯ã©ã¹ã®ãã¤
|
---|
| 844 | ã³ã¿ãæå®ãããã¨ã¯ã§ããªãã
|
---|
| 845 |
|
---|
| 846 | Cé¢æ°ããC++é¢æ°ã®å¼åºãã¯ãååã¨ãã¦è¡ãã¹ãã§ã¯ãªããå
|
---|
| 847 | é¨ã§ä¾å¤ã
|
---|
| 848 | çºçããå ´åãåä½ãä¿è¨¼ã§ããªãã®ããã®çç±ã§ããã
|
---|
| 849 | é常ã®å¼åºãã®ä»ãã³ã¼ã«ããã¯é¢æ°ãç¨ããå ´åãä¾å¤ã§ã¯ãªãã
|
---|
| 850 |
|
---|
| 851 | C++é¢æ°ããCé¢æ°ãå¼åºãå ´åãCé¢æ°ã«ã¯ä¾å¤æå®throw()ãä»å ãã¹ãã§
|
---|
| 852 | ããããããããã¨ã§å¤§å¹
|
---|
| 853 | ã«å¹çã®åä¸ãæå¾
|
---|
| 854 | ã§ããã
|
---|
| 855 |
|
---|
| 856 | 以ä¸
|
---|
| 857 |
|
---|