OLD | NEW |
1 /****************************************************************************** | 1 /****************************************************************************** |
2 * Copyright (C) 2009-2013, International Business Machines | 2 * Copyright (C) 2009-2014, International Business Machines |
3 * Corporation and others. All Rights Reserved. | 3 * Corporation and others. All Rights Reserved. |
4 ******************************************************************************* | 4 ******************************************************************************* |
5 */ | 5 */ |
6 #include "unicode/utypes.h" | 6 #include "unicode/utypes.h" |
7 | 7 |
8 #if U_PLATFORM_HAS_WIN32_API | 8 #if U_PLATFORM_HAS_WIN32_API |
9 # define VC_EXTRALEAN | 9 # define VC_EXTRALEAN |
10 # define WIN32_LEAN_AND_MEAN | 10 # define WIN32_LEAN_AND_MEAN |
11 # define NOUSER | 11 # define NOUSER |
12 # define NOSERVICE | 12 # define NOSERVICE |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 where the name is the compiler or platform that you used in this | 105 where the name is the compiler or platform that you used in this |
106 assemblyHeader data structure. | 106 assemblyHeader data structure. |
107 */ | 107 */ |
108 static const struct AssemblyType { | 108 static const struct AssemblyType { |
109 const char *name; | 109 const char *name; |
110 const char *header; | 110 const char *header; |
111 const char *beginLine; | 111 const char *beginLine; |
112 const char *footer; | 112 const char *footer; |
113 int8_t hexType; /* HEX_0X or HEX_0h */ | 113 int8_t hexType; /* HEX_0X or HEX_0h */ |
114 } assemblyHeader[] = { | 114 } assemblyHeader[] = { |
115 // For gcc assemblers, the meaning of .align changes depending on the | 115 /* For gcc assemblers, the meaning of .align changes depending on the */ |
116 // hardware, so we use .balign 16 which always means 16 bytes. | 116 /* hardware, so we use .balign 16 which always means 16 bytes. */ |
117 // https://sourceware.org/binutils/docs/as/Pseudo-Ops.html | 117 /* https://sourceware.org/binutils/docs/as/Pseudo-Ops.html */ |
118 {"gcc", | 118 {"gcc", |
119 ".globl %s\n" | 119 ".globl %s\n" |
120 "\t.section .note.GNU-stack,\"\",%%progbits\n" | 120 "\t.section .note.GNU-stack,\"\",%%progbits\n" |
121 "\t.section .rodata\n" | 121 "\t.section .rodata\n" |
122 "\t.balign 16\n" | 122 "\t.balign 16\n" |
123 /* The 3 lines below are added for Chrome. */ | |
124 "#ifdef U_HIDE_DATA_SYMBOL\n" | |
125 "\t.hidden %s\n" | |
126 "#endif\n" | |
127 "\t.type %s,%%object\n" | 123 "\t.type %s,%%object\n" |
128 "%s:\n\n", | 124 "%s:\n\n", |
129 | 125 |
130 ".long ","",HEX_0X | 126 ".long ","",HEX_0X |
131 }, | 127 }, |
132 {"gcc-darwin", | 128 {"gcc-darwin", |
133 /*"\t.section __TEXT,__text,regular,pure_instructions\n" | 129 /*"\t.section __TEXT,__text,regular,pure_instructions\n" |
134 "\t.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32\n"
*/ | 130 "\t.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32\n"
*/ |
135 ".globl _%s\n" | 131 ".globl _%s\n" |
136 /* The 3 lines below are added for Chrome. */ | |
137 "#ifdef U_HIDE_DATA_SYMBOL\n" | |
138 "\t.private_extern _%s\n" | |
139 "#endif\n" | |
140 "\t.data\n" | 132 "\t.data\n" |
141 "\t.const\n" | 133 "\t.const\n" |
142 "\t.balign 16\n" | 134 "\t.balign 16\n" |
143 "_%s:\n\n", | 135 "_%s:\n\n", |
144 | 136 |
145 ".long ","",HEX_0X | 137 ".long ","",HEX_0X |
146 }, | 138 }, |
147 {"gcc-cygwin", | 139 {"gcc-cygwin", |
148 ".globl _%s\n" | 140 ".globl _%s\n" |
149 "\t.section .rodata\n" | 141 "\t.section .rodata\n" |
150 "\t.balign 16\n" | 142 "\t.balign 16\n" |
151 "_%s:\n\n", | 143 "_%s:\n\n", |
152 | 144 |
153 ".long ","",HEX_0X | 145 ".long ","",HEX_0X |
154 }, | 146 }, |
155 {"gcc-mingw64", | 147 {"gcc-mingw64", |
156 ".globl %s\n" | 148 ".globl %s\n" |
157 "\t.section .rodata\n" | 149 "\t.section .rodata\n" |
158 "\t.balign 16\n" | 150 "\t.balign 16\n" |
159 "%s:\n\n", | 151 "%s:\n\n", |
160 | 152 |
161 ".long ","",HEX_0X | 153 ".long ","",HEX_0X |
162 }, | 154 }, |
163 // 16 bytes alignment. | 155 /* 16 bytes alignment. */ |
164 // http://docs.oracle.com/cd/E19641-01/802-1947/802-1947.pdf | 156 /* http://docs.oracle.com/cd/E19641-01/802-1947/802-1947.pdf */ |
165 {"sun", | 157 {"sun", |
166 "\t.section \".rodata\"\n" | 158 "\t.section \".rodata\"\n" |
167 "\t.align 16\n" | 159 "\t.align 16\n" |
168 ".globl %s\n" | 160 ".globl %s\n" |
169 "%s:\n", | 161 "%s:\n", |
170 | 162 |
171 ".word ","",HEX_0X | 163 ".word ","",HEX_0X |
172 }, | 164 }, |
173 // 16 bytes alignment for sun-x86. | 165 /* 16 bytes alignment for sun-x86. */ |
174 // http://docs.oracle.com/cd/E19963-01/html/821-1608/eoiyg.html | 166 /* http://docs.oracle.com/cd/E19963-01/html/821-1608/eoiyg.html */ |
175 {"sun-x86", | 167 {"sun-x86", |
176 "Drodata.rodata:\n" | 168 "Drodata.rodata:\n" |
177 "\t.type Drodata.rodata,@object\n" | 169 "\t.type Drodata.rodata,@object\n" |
178 "\t.size Drodata.rodata,0\n" | 170 "\t.size Drodata.rodata,0\n" |
179 "\t.globl %s\n" | 171 "\t.globl %s\n" |
180 "\t.align 16\n" | 172 "\t.align 16\n" |
181 "%s:\n", | 173 "%s:\n", |
182 | 174 |
183 ".4byte ","",HEX_0X | 175 ".4byte ","",HEX_0X |
184 }, | 176 }, |
185 // 1<<4 bit alignment for aix. | 177 /* 1<<4 bit alignment for aix. */ |
186 // http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.aix
assem%2Fdoc%2Falangref%2Fidalangref_csect_pseudoop.htm | 178 /* http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.aix
assem%2Fdoc%2Falangref%2Fidalangref_csect_pseudoop.htm */ |
187 {"xlc", | 179 {"xlc", |
188 ".globl %s{RO}\n" | 180 ".globl %s{RO}\n" |
189 "\t.toc\n" | 181 "\t.toc\n" |
190 "%s:\n" | 182 "%s:\n" |
191 "\t.csect %s{RO}, 4\n", | 183 "\t.csect %s{RO}, 4\n", |
192 | 184 |
193 ".long ","",HEX_0X | 185 ".long ","",HEX_0X |
194 }, | 186 }, |
195 {"aCC-ia64", | 187 {"aCC-ia64", |
196 "\t.file \"%s.s\"\n" | 188 "\t.file \"%s.s\"\n" |
197 "\t.type %s,@object\n" | 189 "\t.type %s,@object\n" |
198 "\t.global %s\n" | 190 "\t.global %s\n" |
199 "\t.secalias .abe$0.rodata, \".rodata\"\n" | 191 "\t.secalias .abe$0.rodata, \".rodata\"\n" |
200 "\t.section .abe$0.rodata = \"a\", \"progbits\"\n" | 192 "\t.section .abe$0.rodata = \"a\", \"progbits\"\n" |
201 "\t.align 16\n" | 193 "\t.align 16\n" |
202 "%s::\t", | 194 "%s::\t", |
203 | 195 |
204 "data4 ","",HEX_0X | 196 "data4 ","",HEX_0X |
205 }, | 197 }, |
206 {"aCC-parisc", | 198 {"aCC-parisc", |
207 "\t.SPACE $TEXT$\n" | 199 "\t.SPACE $TEXT$\n" |
208 "\t.SUBSPA $LIT$\n" | 200 "\t.SUBSPA $LIT$\n" |
209 "%s\n" | 201 "%s\n" |
210 "\t.EXPORT %s\n" | 202 "\t.EXPORT %s\n" |
211 "\t.ALIGN 16\n", | 203 "\t.ALIGN 16\n", |
212 | 204 |
213 ".WORD ","",HEX_0X | 205 ".WORD ","",HEX_0X |
214 }, | 206 }, |
215 // align 16 bytes | 207 /* align 16 bytes */ |
216 // http://msdn.microsoft.com/en-us/library/dwa9fwef.aspx | 208 /* http://msdn.microsoft.com/en-us/library/dwa9fwef.aspx */ |
217 { "masm", | 209 { "masm", |
218 "\tTITLE %s\n" | 210 "\tTITLE %s\n" |
219 "; generated by genccode\n" | 211 "; generated by genccode\n" |
220 ".386\n" | 212 ".386\n" |
221 ".model flat\n" | 213 ".model flat\n" |
222 "\tPUBLIC _%s\n" | 214 "\tPUBLIC _%s\n" |
223 "ICUDATA_%s\tSEGMENT READONLY PARA PUBLIC FLAT 'DATA'\n" | 215 "ICUDATA_%s\tSEGMENT READONLY PARA PUBLIC FLAT 'DATA'\n" |
224 "\tALIGN 16\n" | 216 "\tALIGN 16\n" |
225 "_%s\tLABEL DWORD\n", | 217 "_%s\tLABEL DWORD\n", |
226 "\tDWORD ","\nICUDATA_%s\tENDS\n\tEND\n",HEX_0H | 218 "\tDWORD ","\nICUDATA_%s\tENDS\n\tEND\n",HEX_0H |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 char *bufferStr = (char *)buffer; | 257 char *bufferStr = (char *)buffer; |
266 FileStream *in, *out; | 258 FileStream *in, *out; |
267 size_t i, length; | 259 size_t i, length; |
268 | 260 |
269 in=T_FileStream_open(filename, "rb"); | 261 in=T_FileStream_open(filename, "rb"); |
270 if(in==NULL) { | 262 if(in==NULL) { |
271 fprintf(stderr, "genccode: unable to open input file %s\n", filename); | 263 fprintf(stderr, "genccode: unable to open input file %s\n", filename); |
272 exit(U_FILE_ACCESS_ERROR); | 264 exit(U_FILE_ACCESS_ERROR); |
273 } | 265 } |
274 | 266 |
275 getOutFilename(filename, destdir, bufferStr, entry, ".S", optFilename); | 267 getOutFilename(filename, destdir, bufferStr, entry, ".s", optFilename); |
276 out=T_FileStream_open(bufferStr, "w"); | 268 out=T_FileStream_open(bufferStr, "w"); |
277 if(out==NULL) { | 269 if(out==NULL) { |
278 fprintf(stderr, "genccode: unable to open output file %s\n", bufferStr); | 270 fprintf(stderr, "genccode: unable to open output file %s\n", bufferStr); |
279 exit(U_FILE_ACCESS_ERROR); | 271 exit(U_FILE_ACCESS_ERROR); |
280 } | 272 } |
281 | 273 |
282 if (outFilePath != NULL) { | 274 if (outFilePath != NULL) { |
283 uprv_strcpy(outFilePath, bufferStr); | 275 uprv_strcpy(outFilePath, bufferStr); |
284 } | 276 } |
285 | 277 |
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
762 #else | 754 #else |
763 # error "Unknown platform for CAN_GENERATE_OBJECTS." | 755 # error "Unknown platform for CAN_GENERATE_OBJECTS." |
764 #endif | 756 #endif |
765 | 757 |
766 T_FileStream_close(in); | 758 T_FileStream_close(in); |
767 } | 759 } |
768 | 760 |
769 U_CAPI void U_EXPORT2 | 761 U_CAPI void U_EXPORT2 |
770 writeObjectCode(const char *filename, const char *destdir, const char *optEntryP
oint, const char *optMatchArch, const char *optFilename, char *outFilePath) { | 762 writeObjectCode(const char *filename, const char *destdir, const char *optEntryP
oint, const char *optMatchArch, const char *optFilename, char *outFilePath) { |
771 /* common variables */ | 763 /* common variables */ |
772 char buffer[4096], entry[40]={ 0 }; | 764 char buffer[4096], entry[96]={ 0 }; |
773 FileStream *in, *out; | 765 FileStream *in, *out; |
774 const char *newSuffix; | 766 const char *newSuffix; |
775 int32_t i, entryLength, length, size, entryOffset=0, entryLengthOffset=0; | 767 int32_t i, entryLength, length, size, entryOffset=0, entryLengthOffset=0; |
776 | 768 |
777 uint16_t cpu, bits; | 769 uint16_t cpu, bits; |
778 UBool makeBigEndian; | 770 UBool makeBigEndian; |
779 | 771 |
780 /* platform-specific variables and initialization code */ | 772 /* platform-specific variables and initialization code */ |
781 #ifdef U_ELF | 773 #ifdef U_ELF |
782 /* 32-bit Elf file header */ | 774 /* 32-bit Elf file header */ |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1190 | 1182 |
1191 if(T_FileStream_error(out)) { | 1183 if(T_FileStream_error(out)) { |
1192 fprintf(stderr, "genccode: file write error while generating from file %
s\n", filename); | 1184 fprintf(stderr, "genccode: file write error while generating from file %
s\n", filename); |
1193 exit(U_FILE_ACCESS_ERROR); | 1185 exit(U_FILE_ACCESS_ERROR); |
1194 } | 1186 } |
1195 | 1187 |
1196 T_FileStream_close(out); | 1188 T_FileStream_close(out); |
1197 T_FileStream_close(in); | 1189 T_FileStream_close(in); |
1198 } | 1190 } |
1199 #endif | 1191 #endif |
OLD | NEW |