Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(473)

Side by Side Diff: third_party/yasm/patched-yasm/modules/objfmts/coff/coff-objfmt.c

Issue 6170009: Update our yasm copy to yasm 1.1.0 (Part 1: yasm side)... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * COFF (DJGPP) object format 2 * COFF (DJGPP) object format
3 * 3 *
4 * Copyright (C) 2002-2007 Peter Johnson 4 * Copyright (C) 2002-2007 Peter Johnson
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright 11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the 12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution. 13 * documentation and/or other materials provided with the distribution.
14 * 14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS''
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE. 25 * POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 #include <util.h> 27 #include <util.h>
28 #include <time.h> 28 #include <time.h>
29 /*@unused@*/ RCSID("$Id: coff-objfmt.c 2166 2009-01-02 08:33:21Z peter $"); 29 /*@unused@*/ RCSID("$Id: coff-objfmt.c 2347 2010-08-01 17:31:12Z peter $");
30 30
31 #include <libyasm.h> 31 #include <libyasm.h>
32 32
33 #include "coff-objfmt.h" 33 #include "coff-objfmt.h"
34 34
35 35
36 #define REGULAR_OUTBUF_SIZE 1024 36 #define REGULAR_OUTBUF_SIZE 1024
37 37
38 /* Defining this to 0 sets all section VMA's to 0 rather than as the same as 38 /* Defining this to 0 sets all section VMA's to 0 rather than as the same as
39 * the LMA. According to the DJGPP COFF Spec, this should be set to 1 39 * the LMA. According to the DJGPP COFF Spec, this should be set to 1
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 /*@owned@*/ char *fname; /* filename aux entry */ 155 /*@owned@*/ char *fname; /* filename aux entry */
156 } coff_symtab_auxent; 156 } coff_symtab_auxent;
157 157
158 typedef enum coff_symtab_auxtype { 158 typedef enum coff_symtab_auxtype {
159 COFF_SYMTAB_AUX_NONE = 0, 159 COFF_SYMTAB_AUX_NONE = 0,
160 COFF_SYMTAB_AUX_SECT, 160 COFF_SYMTAB_AUX_SECT,
161 COFF_SYMTAB_AUX_FILE 161 COFF_SYMTAB_AUX_FILE
162 } coff_symtab_auxtype; 162 } coff_symtab_auxtype;
163 163
164 typedef struct coff_symrec_data { 164 typedef struct coff_symrec_data {
165 int forcevis; /* force visibility in symbol table */
165 unsigned long index; /* assigned COFF symbol table index */ 166 unsigned long index; /* assigned COFF symbol table index */
167 unsigned int type; /* type */
166 coff_symrec_sclass sclass; /* storage class */ 168 coff_symrec_sclass sclass; /* storage class */
167 169
168 int numaux; /* number of auxiliary entries */ 170 int numaux; /* number of auxiliary entries */
169 coff_symtab_auxtype auxtype; /* type of aux entries */ 171 coff_symtab_auxtype auxtype; /* type of aux entries */
170 coff_symtab_auxent aux[1]; /* actually may be any size (including 0) */ 172 coff_symtab_auxent aux[1]; /* actually may be any size (including 0) */
171 } coff_symrec_data; 173 } coff_symrec_data;
172 174
173 typedef struct yasm_objfmt_coff { 175 typedef struct yasm_objfmt_coff {
174 yasm_objfmt_base objfmt; /* base structure */ 176 yasm_objfmt_base objfmt; /* base structure */
175 177
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 249
248 250
249 static /*@dependent@*/ coff_symrec_data * 251 static /*@dependent@*/ coff_symrec_data *
250 coff_objfmt_sym_set_data(yasm_symrec *sym, coff_symrec_sclass sclass, 252 coff_objfmt_sym_set_data(yasm_symrec *sym, coff_symrec_sclass sclass,
251 int numaux, coff_symtab_auxtype auxtype) 253 int numaux, coff_symtab_auxtype auxtype)
252 { 254 {
253 coff_symrec_data *sym_data; 255 coff_symrec_data *sym_data;
254 256
255 sym_data = yasm_xmalloc(sizeof(coff_symrec_data) + 257 sym_data = yasm_xmalloc(sizeof(coff_symrec_data) +
256 (numaux-1)*sizeof(coff_symtab_auxent)); 258 (numaux-1)*sizeof(coff_symtab_auxent));
259 sym_data->forcevis = 0;
257 sym_data->index = 0; 260 sym_data->index = 0;
261 sym_data->type = 0;
258 sym_data->sclass = sclass; 262 sym_data->sclass = sclass;
259 sym_data->numaux = numaux; 263 sym_data->numaux = numaux;
260 sym_data->auxtype = auxtype; 264 sym_data->auxtype = auxtype;
261 265
262 yasm_symrec_add_data(sym, &coff_symrec_data_cb, sym_data); 266 yasm_symrec_add_data(sym, &coff_symrec_data_cb, sym_data);
263 267
264 return sym_data; 268 return sym_data;
265 } 269 }
266 270
267 static yasm_objfmt_coff * 271 static yasm_objfmt_coff *
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 "amd64") == 0) { 340 "amd64") == 0) {
337 objfmt_coff->machine = COFF_MACHINE_AMD64; 341 objfmt_coff->machine = COFF_MACHINE_AMD64;
338 objfmt_coff->objfmt.module = &yasm_win64_LTX_objfmt; 342 objfmt_coff->objfmt.module = &yasm_win64_LTX_objfmt;
339 objfmt_coff->win64 = 1; 343 objfmt_coff->win64 = 1;
340 } else { 344 } else {
341 yasm_xfree(objfmt_coff); 345 yasm_xfree(objfmt_coff);
342 return NULL; 346 return NULL;
343 } 347 }
344 348
345 objfmt_coff->win32 = 1; 349 objfmt_coff->win32 = 1;
350 /* Define a @feat.00 symbol for win32 safeseh handling */
351 if (!objfmt_coff->win64) {
352 yasm_symrec *feat00;
353 coff_symrec_data *sym_data;
354 feat00 = yasm_symtab_define_equ(object->symtab, "@feat.00",
355 yasm_expr_create_ident(yasm_expr_int(
356 yasm_intnum_create_uint(1)), 0), 0);
357 sym_data = coff_objfmt_sym_set_data(feat00, COFF_SCL_STAT, 0,
358 COFF_SYMTAB_AUX_NONE);
359 sym_data->forcevis = 1;
360 }
346 } 361 }
347 return (yasm_objfmt *)objfmt_coff; 362 return (yasm_objfmt *)objfmt_coff;
348 } 363 }
349 364
350 static yasm_objfmt * 365 static yasm_objfmt *
351 win64_objfmt_create(yasm_object *object) 366 win64_objfmt_create(yasm_object *object)
352 { 367 {
353 yasm_objfmt_coff *objfmt_coff = coff_common_create(object); 368 yasm_objfmt_coff *objfmt_coff = coff_common_create(object);
354 369
355 if (objfmt_coff) { 370 if (objfmt_coff) {
356 /* Support amd64 machine of x86 arch */ 371 /* Support amd64 machine of x86 arch */
357 if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), 372 if (yasm__strcasecmp(yasm_arch_get_machine(object->arch),
358 "amd64") == 0) { 373 "amd64") == 0) {
359 objfmt_coff->machine = COFF_MACHINE_AMD64; 374 objfmt_coff->machine = COFF_MACHINE_AMD64;
360 } else { 375 } else {
361 yasm_xfree(objfmt_coff); 376 yasm_xfree(objfmt_coff);
362 return NULL; 377 return NULL;
363 } 378 }
364 379
365 objfmt_coff->objfmt.module = &yasm_win64_LTX_objfmt; 380 objfmt_coff->objfmt.module = &yasm_win64_LTX_objfmt;
366 objfmt_coff->win32 = 1; 381 objfmt_coff->win32 = 1;
367 objfmt_coff->win64 = 1; 382 objfmt_coff->win64 = 1;
368 } 383 }
369 return (yasm_objfmt *)objfmt_coff; 384 return (yasm_objfmt *)objfmt_coff;
370 } 385 }
371 386
372 static coff_section_data * 387 static void
373 coff_objfmt_init_new_section(yasm_object *object, yasm_section *sect, 388 coff_objfmt_init_new_section(yasm_section *sect, unsigned long line)
374 const char *sectname, unsigned long line)
375 { 389 {
390 yasm_object *object = yasm_section_get_object(sect);
391 const char *sectname = yasm_section_get_name(sect);
376 yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; 392 yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
377 coff_section_data *data; 393 coff_section_data *data;
378 yasm_symrec *sym; 394 yasm_symrec *sym;
379 395
380 data = yasm_xmalloc(sizeof(coff_section_data)); 396 data = yasm_xmalloc(sizeof(coff_section_data));
381 data->scnum = objfmt_coff->parse_scnum++; 397 data->scnum = objfmt_coff->parse_scnum++;
382 data->flags = 0; 398 data->flags = 0;
383 data->addr = 0; 399 data->addr = 0;
384 data->scnptr = 0; 400 data->scnptr = 0;
385 data->size = 0; 401 data->size = 0;
386 data->relptr = 0; 402 data->relptr = 0;
387 data->nreloc = 0; 403 data->nreloc = 0;
388 data->flags2 = 0; 404 data->flags2 = 0;
389 data->strtab_name = 0; 405 data->strtab_name = 0;
390 data->isdebug = 0; 406 data->isdebug = 0;
407
408 if (yasm__strncasecmp(sectname, ".debug", 6)==0) {
409 data->flags = COFF_STYP_DATA;
410 if (objfmt_coff->win32)
411 data->flags |= COFF_STYP_DISCARD|COFF_STYP_READ;
412 data->isdebug = 1;
413 } else
414 data->flags = COFF_STYP_TEXT;
415
391 yasm_section_add_data(sect, &coff_section_data_cb, data); 416 yasm_section_add_data(sect, &coff_section_data_cb, data);
392 417
393 sym = yasm_symtab_define_label(object->symtab, sectname, 418 sym = yasm_symtab_define_label(object->symtab, sectname,
394 yasm_section_bcs_first(sect), 1, line); 419 yasm_section_bcs_first(sect), 1, line);
395 yasm_symrec_declare(sym, YASM_SYM_GLOBAL, line); 420 yasm_symrec_declare(sym, YASM_SYM_GLOBAL, line);
396 coff_objfmt_sym_set_data(sym, COFF_SCL_STAT, 1, COFF_SYMTAB_AUX_SECT); 421 coff_objfmt_sym_set_data(sym, COFF_SCL_STAT, 1, COFF_SYMTAB_AUX_SECT);
397 data->sym = sym; 422 data->sym = sym;
398 return data;
399 }
400
401 static int
402 coff_objfmt_init_remaining_section(yasm_section *sect, /*@null@*/ void *d)
403 {
404 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d;
405 /*@dependent@*/ /*@null@*/ coff_section_data *csd;
406
407 assert(info != NULL);
408 csd = yasm_section_get_data(sect, &coff_section_data_cb);
409 if (!csd) {
410 /* Initialize new one */
411 const char *sectname = yasm_section_get_name(sect);
412 csd = coff_objfmt_init_new_section(info->object, sect, sectname, 0);
413 if (yasm__strncasecmp(sectname, ".debug", 6)==0) {
414 csd->flags = COFF_STYP_DATA;
415 if (info->objfmt_coff->win32)
416 csd->flags |= COFF_STYP_DISCARD|COFF_STYP_READ;
417 csd->isdebug = 1;
418 } else
419 csd->flags = COFF_STYP_TEXT;
420 }
421
422 return 0;
423 } 423 }
424 424
425 static int 425 static int
426 coff_objfmt_set_section_addr(yasm_section *sect, /*@null@*/ void *d) 426 coff_objfmt_set_section_addr(yasm_section *sect, /*@null@*/ void *d)
427 { 427 {
428 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; 428 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d;
429 /*@dependent@*/ /*@null@*/ coff_section_data *csd; 429 /*@dependent@*/ /*@null@*/ coff_section_data *csd;
430 430
431 assert(info != NULL); 431 assert(info != NULL);
432 csd = yasm_section_get_data(sect, &coff_section_data_cb); 432 csd = yasm_section_get_data(sect, &coff_section_data_cb);
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 /*@notreached@*/ 786 /*@notreached@*/
787 return 1; 787 return 1;
788 } 788 }
789 789
790 info->sect = sect; 790 info->sect = sect;
791 info->csd = csd; 791 info->csd = csd;
792 yasm_section_bcs_traverse(sect, info->errwarns, info, 792 yasm_section_bcs_traverse(sect, info->errwarns, info,
793 coff_objfmt_output_bytecode); 793 coff_objfmt_output_bytecode);
794 794
795 /* Sanity check final section size */ 795 /* Sanity check final section size */
796 if (csd->size != yasm_bc_next_offset(yasm_section_bcs_last(sect))) 796 if (yasm_errwarns_num_errors(info->errwarns, 0) == 0 &&
797 csd->size != yasm_bc_next_offset(yasm_section_bcs_last(sect)))
797 yasm_internal_error( 798 yasm_internal_error(
798 N_("coff: section computed size did not match actual size")); 799 N_("coff: section computed size did not match actual size"));
799 } 800 }
800 801
801 /* Empty? Go on to next section */ 802 /* Empty? Go on to next section */
802 if (csd->size == 0) 803 if (csd->size == 0)
803 return 0; 804 return 0;
804 805
805 if (!csd->isdebug) 806 if (!csd->isdebug)
806 info->addr += csd->size; 807 info->addr += csd->size;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 static int 941 static int
941 coff_objfmt_count_sym(yasm_symrec *sym, /*@null@*/ void *d) 942 coff_objfmt_count_sym(yasm_symrec *sym, /*@null@*/ void *d)
942 { 943 {
943 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; 944 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d;
944 yasm_sym_vis vis = yasm_symrec_get_visibility(sym); 945 yasm_sym_vis vis = yasm_symrec_get_visibility(sym);
945 coff_symrec_data *sym_data; 946 coff_symrec_data *sym_data;
946 947
947 assert(info != NULL); 948 assert(info != NULL);
948 949
949 sym_data = yasm_symrec_get_data(sym, &coff_symrec_data_cb); 950 sym_data = yasm_symrec_get_data(sym, &coff_symrec_data_cb);
950 if ((vis & (YASM_SYM_EXTERN|YASM_SYM_GLOBAL|YASM_SYM_COMMON)) && !sym_data)
951 sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_EXT, 0,
952 COFF_SYMTAB_AUX_NONE);
953 951
954 if (info->all_syms || vis != YASM_SYM_LOCAL || yasm_symrec_is_abs(sym)) { 952 if (info->all_syms || vis != YASM_SYM_LOCAL || yasm_symrec_is_abs(sym) ||
953 (sym_data && sym_data->forcevis)) {
955 /* Save index in symrec data */ 954 /* Save index in symrec data */
956 if (!sym_data) { 955 if (!sym_data)
957 sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_STAT, 0, 956 sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_NULL, 0,
958 COFF_SYMTAB_AUX_NONE); 957 COFF_SYMTAB_AUX_NONE);
958 /* Set storage class based on visibility if not already set */
959 if (sym_data->sclass == COFF_SCL_NULL) {
960 if (vis & (YASM_SYM_EXTERN|YASM_SYM_GLOBAL|YASM_SYM_COMMON))
961 sym_data->sclass = COFF_SCL_EXT;
962 else
963 sym_data->sclass = COFF_SCL_STAT;
959 } 964 }
965
960 sym_data->index = info->indx; 966 sym_data->index = info->indx;
961 967
962 info->indx += sym_data->numaux + 1; 968 info->indx += sym_data->numaux + 1;
963 } 969 }
964 return 0; 970 return 0;
965 } 971 }
966 972
967 static int 973 static int
968 coff_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d) 974 coff_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d)
969 { 975 {
970 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; 976 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d;
971 yasm_sym_vis vis = yasm_symrec_get_visibility(sym); 977 yasm_sym_vis vis = yasm_symrec_get_visibility(sym);
972 int is_abs = yasm_symrec_is_abs(sym); 978 int is_abs = yasm_symrec_is_abs(sym);
979 /*@dependent@*/ /*@null@*/ coff_symrec_data *csymd;
980 csymd = yasm_symrec_get_data(sym, &coff_symrec_data_cb);
973 981
974 assert(info != NULL); 982 assert(info != NULL);
975 983
976 /* Don't output local syms unless outputting all syms */ 984 /* Don't output local syms unless outputting all syms */
977 if (info->all_syms || vis != YASM_SYM_LOCAL || is_abs) { 985 if (info->all_syms || vis != YASM_SYM_LOCAL || is_abs ||
986 (csymd && csymd->forcevis)) {
978 /*@only*/ char *name; 987 /*@only*/ char *name;
979 const yasm_expr *equ_val; 988 const yasm_expr *equ_val;
980 const yasm_intnum *intn; 989 const yasm_intnum *intn;
981 unsigned char *localbuf; 990 unsigned char *localbuf;
982 size_t len; 991 size_t len;
983 int aux; 992 int aux;
984 /*@dependent@*/ /*@null@*/ coff_symrec_data *csymd;
985 unsigned long value = 0; 993 unsigned long value = 0;
986 unsigned int scnum = 0xfffe; /* -2 = debugging symbol */ 994 unsigned int scnum = 0xfffe; /* -2 = debugging symbol */
987 /*@dependent@*/ /*@null@*/ yasm_section *sect; 995 /*@dependent@*/ /*@null@*/ yasm_section *sect;
988 /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; 996 /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc;
989 unsigned long scnlen = 0; /* for sect auxent */ 997 unsigned long scnlen = 0; /* for sect auxent */
990 unsigned long nreloc = 0; /* for sect auxent */ 998 unsigned long nreloc = 0; /* for sect auxent */
991 yasm_objfmt_coff *objfmt_coff = info->objfmt_coff; 999 yasm_objfmt_coff *objfmt_coff = info->objfmt_coff;
992 1000
993 if (is_abs) 1001 if (is_abs)
994 name = yasm__xstrdup(".absolut"); 1002 name = yasm__xstrdup(".absolut");
995 else 1003 else
996 name = yasm_symrec_get_global_name(sym, info->object); 1004 name = yasm_symrec_get_global_name(sym, info->object);
997 len = strlen(name); 1005 len = strlen(name);
998 1006
999 /* Get symrec's of_data (needed for storage class) */ 1007 /* Get symrec's of_data (needed for storage class) */
1000 csymd = yasm_symrec_get_data(sym, &coff_symrec_data_cb);
1001 if (!csymd) 1008 if (!csymd)
1002 yasm_internal_error(N_("coff: expected sym data to be present")); 1009 yasm_internal_error(N_("coff: expected sym data to be present"));
1003 1010
1004 /* Look at symrec for value/scnum/etc. */ 1011 /* Look at symrec for value/scnum/etc. */
1005 if (yasm_symrec_get_label(sym, &precbc)) { 1012 if (yasm_symrec_get_label(sym, &precbc)) {
1006 if (precbc) 1013 if (precbc)
1007 sect = yasm_bc_get_section(precbc); 1014 sect = yasm_bc_get_section(precbc);
1008 else 1015 else
1009 sect = NULL; 1016 sect = NULL;
1010 /* it's a label: get value and offset. 1017 /* it's a label: get value and offset.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 YASM_WRITE_32_L(localbuf, 0); /* "zeros" field */ 1069 YASM_WRITE_32_L(localbuf, 0); /* "zeros" field */
1063 YASM_WRITE_32_L(localbuf, info->strtab_offset); /* strtab offset */ 1070 YASM_WRITE_32_L(localbuf, info->strtab_offset); /* strtab offset */
1064 info->strtab_offset += (unsigned long)(len+1); 1071 info->strtab_offset += (unsigned long)(len+1);
1065 } else { 1072 } else {
1066 /* <8 chars, so no string table entry needed */ 1073 /* <8 chars, so no string table entry needed */
1067 strncpy((char *)localbuf, name, 8); 1074 strncpy((char *)localbuf, name, 8);
1068 localbuf += 8; 1075 localbuf += 8;
1069 } 1076 }
1070 YASM_WRITE_32_L(localbuf, value); /* value */ 1077 YASM_WRITE_32_L(localbuf, value); /* value */
1071 YASM_WRITE_16_L(localbuf, scnum); /* section number */ 1078 YASM_WRITE_16_L(localbuf, scnum); /* section number */
1072 YASM_WRITE_16_L(localbuf, 0); /* type is always zero (for now) */ 1079 YASM_WRITE_16_L(localbuf, csymd->type); /* type */
1073 YASM_WRITE_8(localbuf, csymd->sclass); /* storage class */ 1080 YASM_WRITE_8(localbuf, csymd->sclass); /* storage class */
1074 YASM_WRITE_8(localbuf, csymd->numaux); /* number of aux entries */ 1081 YASM_WRITE_8(localbuf, csymd->numaux); /* number of aux entries */
1075 fwrite(info->buf, 18, 1, info->f); 1082 fwrite(info->buf, 18, 1, info->f);
1076 for (aux=0; aux<csymd->numaux; aux++) { 1083 for (aux=0; aux<csymd->numaux; aux++) {
1077 localbuf = info->buf; 1084 localbuf = info->buf;
1078 memset(localbuf, 0, 18); 1085 memset(localbuf, 0, 18);
1079 switch (csymd->auxtype) { 1086 switch (csymd->auxtype) {
1080 case COFF_SYMTAB_AUX_NONE: 1087 case COFF_SYMTAB_AUX_NONE:
1081 break; 1088 break;
1082 case COFF_SYMTAB_AUX_SECT: 1089 case COFF_SYMTAB_AUX_SECT:
(...skipping 19 matching lines...) Expand all
1102 yasm_xfree(name); 1109 yasm_xfree(name);
1103 } 1110 }
1104 return 0; 1111 return 0;
1105 } 1112 }
1106 1113
1107 static int 1114 static int
1108 coff_objfmt_output_str(yasm_symrec *sym, /*@null@*/ void *d) 1115 coff_objfmt_output_str(yasm_symrec *sym, /*@null@*/ void *d)
1109 { 1116 {
1110 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; 1117 /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d;
1111 yasm_sym_vis vis = yasm_symrec_get_visibility(sym); 1118 yasm_sym_vis vis = yasm_symrec_get_visibility(sym);
1119 /*@dependent@*/ /*@null@*/ coff_symrec_data *csymd;
1120 csymd = yasm_symrec_get_data(sym, &coff_symrec_data_cb);
1112 1121
1113 assert(info != NULL); 1122 assert(info != NULL);
1114 1123
1115 /* Don't output local syms unless outputting all syms */ 1124 /* Don't output local syms unless outputting all syms */
1116 if (info->all_syms || vis != YASM_SYM_LOCAL) { 1125 if (info->all_syms || vis != YASM_SYM_LOCAL ||
1126 (csymd && csymd->forcevis)) {
1117 /*@only@*/ char *name = yasm_symrec_get_global_name(sym, info->object); 1127 /*@only@*/ char *name = yasm_symrec_get_global_name(sym, info->object);
1118 /*@dependent@*/ /*@null@*/ coff_symrec_data *csymd;
1119 size_t len = strlen(name); 1128 size_t len = strlen(name);
1120 int aux; 1129 int aux;
1121 1130
1122 csymd = yasm_symrec_get_data(sym, &coff_symrec_data_cb);
1123 if (!csymd) 1131 if (!csymd)
1124 yasm_internal_error(N_("coff: expected sym data to be present")); 1132 yasm_internal_error(N_("coff: expected sym data to be present"));
1125 1133
1126 if (len > 8) 1134 if (len > 8)
1127 fwrite(name, len+1, 1, info->f); 1135 fwrite(name, len+1, 1, info->f);
1128 for (aux=0; aux<csymd->numaux; aux++) { 1136 for (aux=0; aux<csymd->numaux; aux++) {
1129 switch (csymd->auxtype) { 1137 switch (csymd->auxtype) {
1130 case COFF_SYMTAB_AUX_FILE: 1138 case COFF_SYMTAB_AUX_FILE:
1131 len = strlen(csymd->aux[0].fname); 1139 len = strlen(csymd->aux[0].fname);
1132 if (len > 14) 1140 if (len > 14)
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 */ 1182 */
1175 all_syms |= objfmt_coff->win64; 1183 all_syms |= objfmt_coff->win64;
1176 1184
1177 info.strtab_offset = 4; 1185 info.strtab_offset = 4;
1178 info.object = object; 1186 info.object = object;
1179 info.objfmt_coff = objfmt_coff; 1187 info.objfmt_coff = objfmt_coff;
1180 info.errwarns = errwarns; 1188 info.errwarns = errwarns;
1181 info.f = f; 1189 info.f = f;
1182 info.buf = yasm_xmalloc(REGULAR_OUTBUF_SIZE); 1190 info.buf = yasm_xmalloc(REGULAR_OUTBUF_SIZE);
1183 1191
1184 /* Initialize section data (and count in parse_scnum) any sections that
1185 * we've not initialized so far.
1186 */
1187 yasm_object_sections_traverse(object, &info,
1188 coff_objfmt_init_remaining_section);
1189
1190 /* Allocate space for headers by seeking forward */ 1192 /* Allocate space for headers by seeking forward */
1191 if (fseek(f, (long)(20+40*(objfmt_coff->parse_scnum-1)), SEEK_SET) < 0) { 1193 if (fseek(f, (long)(20+40*(objfmt_coff->parse_scnum-1)), SEEK_SET) < 0) {
1192 yasm__fatal(N_("could not seek on output file")); 1194 yasm__fatal(N_("could not seek on output file"));
1193 /*@notreached@*/ 1195 /*@notreached@*/
1194 return; 1196 return;
1195 } 1197 }
1196 1198
1197 /* Finalize symbol table (assign index to each symbol) */ 1199 /* Finalize symbol table (assign index to each symbol) */
1198 info.indx = 0; 1200 info.indx = 0;
1199 info.all_syms = all_syms; 1201 info.all_syms = all_syms;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 static yasm_section * 1282 static yasm_section *
1281 coff_objfmt_add_default_section(yasm_object *object) 1283 coff_objfmt_add_default_section(yasm_object *object)
1282 { 1284 {
1283 yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; 1285 yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt;
1284 yasm_section *retval; 1286 yasm_section *retval;
1285 coff_section_data *csd; 1287 coff_section_data *csd;
1286 int isnew; 1288 int isnew;
1287 1289
1288 retval = yasm_object_get_general(object, ".text", 16, 1, 0, &isnew, 0); 1290 retval = yasm_object_get_general(object, ".text", 16, 1, 0, &isnew, 0);
1289 if (isnew) { 1291 if (isnew) {
1290 csd = coff_objfmt_init_new_section(object, retval, ".text", 0); 1292 csd = yasm_section_get_data(retval, &coff_section_data_cb);
1291 csd->flags = COFF_STYP_TEXT; 1293 csd->flags = COFF_STYP_TEXT;
1292 if (objfmt_coff->win32) 1294 if (objfmt_coff->win32)
1293 csd->flags |= COFF_STYP_EXECUTE | COFF_STYP_READ; 1295 csd->flags |= COFF_STYP_EXECUTE | COFF_STYP_READ;
1294 yasm_section_set_default(retval, 1); 1296 yasm_section_set_default(retval, 1);
1295 } 1297 }
1296 return retval; 1298 return retval;
1297 } 1299 }
1298 1300
1299 struct coff_section_switch_data { 1301 struct coff_section_switch_data {
1300 int isdefault; 1302 int isdefault;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
1563 * files via "/nnnn" (where nnnn is decimal offset into string table), 1565 * files via "/nnnn" (where nnnn is decimal offset into string table),
1564 * so only warn for regular COFF. 1566 * so only warn for regular COFF.
1565 */ 1567 */
1566 yasm_warn_set(YASM_WARN_GENERAL, 1568 yasm_warn_set(YASM_WARN_GENERAL,
1567 N_("COFF section names limited to 8 characters: truncating")); 1569 N_("COFF section names limited to 8 characters: truncating"));
1568 realname[8] = '\0'; 1570 realname[8] = '\0';
1569 } 1571 }
1570 1572
1571 retval = yasm_object_get_general(object, realname, align, iscode, 1573 retval = yasm_object_get_general(object, realname, align, iscode,
1572 resonly, &isnew, line); 1574 resonly, &isnew, line);
1575 yasm_xfree(realname);
1573 1576
1574 if (isnew) 1577 csd = yasm_section_get_data(retval, &coff_section_data_cb);
1575 csd = coff_objfmt_init_new_section(object, retval, realname, line);
1576 else
1577 csd = yasm_section_get_data(retval, &coff_section_data_cb);
1578
1579 yasm_xfree(realname);
1580 1578
1581 if (isnew || yasm_section_is_default(retval)) { 1579 if (isnew || yasm_section_is_default(retval)) {
1582 yasm_section_set_default(retval, 0); 1580 yasm_section_set_default(retval, 0);
1583 csd->flags = data.flags; 1581 csd->flags = data.flags;
1584 csd->flags2 = data.flags2; 1582 csd->flags2 = data.flags2;
1585 yasm_section_set_align(retval, align, line); 1583 yasm_section_set_align(retval, align, line);
1586 } else if (flags_override && !data.gasflags) 1584 } else if (flags_override && !data.gasflags)
1587 yasm_warn_set(YASM_WARN_GENERAL, 1585 yasm_warn_set(YASM_WARN_GENERAL,
1588 N_("section flags ignored on section redeclaration")); 1586 N_("section flags ignored on section redeclaration"));
1589 return retval; 1587 return retval;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1668 N_("argument to EXPORT must be symbol name")); 1666 N_("argument to EXPORT must be symbol name"));
1669 return; 1667 return;
1670 } 1668 }
1671 1669
1672 /* Add to end of linker directives */ 1670 /* Add to end of linker directives */
1673 sect = yasm_object_get_general(object, ".drectve", 0, 0, 0, &isnew, line); 1671 sect = yasm_object_get_general(object, ".drectve", 0, 0, 0, &isnew, line);
1674 1672
1675 /* Initialize directive section if needed */ 1673 /* Initialize directive section if needed */
1676 if (isnew) { 1674 if (isnew) {
1677 coff_section_data *csd; 1675 coff_section_data *csd;
1678 csd = coff_objfmt_init_new_section(object, sect, 1676 csd = yasm_section_get_data(sect, &coff_section_data_cb);
1679 yasm_section_get_name(sect), line);
1680 csd->flags = COFF_STYP_INFO | COFF_STYP_DISCARD | COFF_STYP_READ; 1677 csd->flags = COFF_STYP_INFO | COFF_STYP_DISCARD | COFF_STYP_READ;
1681 } 1678 }
1682 1679
1683 /* Add text as data bytecode */ 1680 /* Add text as data bytecode */
1684 yasm_dvs_initialize(&dvs); 1681 yasm_dvs_initialize(&dvs);
1685 yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup("-export:"), 1682 yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup("-export:"),
1686 strlen("-export:"))); 1683 strlen("-export:")));
1687 yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup(symname), 1684 yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup(symname),
1688 strlen(symname))); 1685 strlen(symname)));
1689 yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup(" "), 1)); 1686 yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup(" "), 1));
1690 yasm_section_bcs_append(sect, yasm_bc_create_data(&dvs, 1, 0, NULL, line)); 1687 yasm_section_bcs_append(sect, yasm_bc_create_data(&dvs, 1, 0, NULL, line));
1691 } 1688 }
1692 1689
1693 static void 1690 static void
1694 dir_safeseh(yasm_object *object, yasm_valparamhead *valparams, 1691 dir_safeseh(yasm_object *object, yasm_valparamhead *valparams,
1695 yasm_valparamhead *objext_valparams, unsigned long line) 1692 yasm_valparamhead *objext_valparams, unsigned long line)
1696 { 1693 {
1697 yasm_valparam *vp; 1694 yasm_valparam *vp;
1698 /*@null@*/ const char *symname; 1695 /*@null@*/ const char *symname;
1699 yasm_symrec *sym; 1696 yasm_symrec *sym;
1700 int isnew; 1697 int isnew;
1701 yasm_section *sect; 1698 yasm_section *sect;
1702 1699
1703 /* Reference symbol (to generate error if not declared). 1700 /* Reference symbol (to generate error if not declared).
1704 * Also, symbol must be externally visible, so force global. 1701 * Also, symbol must be externally visible, so force it.
1705 */ 1702 */
1706 vp = yasm_vps_first(valparams); 1703 vp = yasm_vps_first(valparams);
1707 symname = yasm_vp_id(vp); 1704 symname = yasm_vp_id(vp);
1708 if (symname) { 1705 if (symname) {
1706 coff_symrec_data *sym_data;
1709 sym = yasm_symtab_use(object->symtab, symname, line); 1707 sym = yasm_symtab_use(object->symtab, symname, line);
1710 yasm_symrec_declare(sym, YASM_SYM_GLOBAL, line); 1708 sym_data = yasm_symrec_get_data(sym, &coff_symrec_data_cb);
1709 if (!sym_data) {
1710 sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_NULL, 0,
1711 COFF_SYMTAB_AUX_NONE);
1712 }
1713 sym_data->forcevis = 1;
1714 sym_data->type = 0x20; /* function */
1711 } else { 1715 } else {
1712 yasm_error_set(YASM_ERROR_SYNTAX, 1716 yasm_error_set(YASM_ERROR_SYNTAX,
1713 N_("argument to SAFESEH must be symbol name")); 1717 N_("argument to SAFESEH must be symbol name"));
1714 return; 1718 return;
1715 } 1719 }
1716 1720
1717 /* 1721 /*
1718 * Add symbol number to end of .sxdata section. 1722 * Add symbol number to end of .sxdata section.
1719 */ 1723 */
1720 1724
1721 sect = yasm_object_get_general(object, ".sxdata", 0, 0, 0, &isnew, line); 1725 sect = yasm_object_get_general(object, ".sxdata", 0, 0, 0, &isnew, line);
1722 1726
1723 /* Initialize sxdata section if needed */ 1727 /* Initialize sxdata section if needed */
1724 if (isnew) { 1728 if (isnew) {
1725 coff_section_data *csd; 1729 coff_section_data *csd;
1726 csd = coff_objfmt_init_new_section(object, sect, ".sxdata", line); 1730 csd = yasm_section_get_data(sect, &coff_section_data_cb);
1727 csd->flags = COFF_STYP_INFO; 1731 csd->flags = COFF_STYP_INFO;
1728 } 1732 }
1729 1733
1730 /* Add as sxdata bytecode */ 1734 /* Add as sxdata bytecode */
1731 yasm_section_bcs_append(sect, 1735 yasm_section_bcs_append(sect,
1732 yasm_bc_create_common(&win32_sxdata_bc_callback, 1736 yasm_bc_create_common(&win32_sxdata_bc_callback,
1733 sym, line)); 1737 sym, line));
1734 } 1738 }
1735 1739
1736 static void 1740 static void
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
2126 curpos = get_curpos(object, "ENDPROC_FRAME", line); 2130 curpos = get_curpos(object, "ENDPROC_FRAME", line);
2127 2131
2128 /* 2132 /*
2129 * Add unwind info to end of .xdata section. 2133 * Add unwind info to end of .xdata section.
2130 */ 2134 */
2131 2135
2132 sect = yasm_object_get_general(object, ".xdata", 0, 0, 0, &isnew, line); 2136 sect = yasm_object_get_general(object, ".xdata", 0, 0, 0, &isnew, line);
2133 2137
2134 /* Initialize xdata section if needed */ 2138 /* Initialize xdata section if needed */
2135 if (isnew) { 2139 if (isnew) {
2136 csd = coff_objfmt_init_new_section(object, sect, ".xdata", line); 2140 csd = yasm_section_get_data(sect, &coff_section_data_cb);
2137 csd->flags = COFF_STYP_DATA | COFF_STYP_READ; 2141 csd->flags = COFF_STYP_DATA | COFF_STYP_READ;
2138 yasm_section_set_align(sect, 8, line); 2142 yasm_section_set_align(sect, 8, line);
2139 } 2143 }
2140 2144
2141 /* Get current position in .xdata section */ 2145 /* Get current position in .xdata section */
2142 unwindpos = yasm_symtab_define_curpos(object->symtab, "$", 2146 unwindpos = yasm_symtab_define_curpos(object->symtab, "$",
2143 yasm_section_bcs_last(sect), line); 2147 yasm_section_bcs_last(sect), line);
2144 /* Get symbol for .xdata as we'll want to reference it with WRT */ 2148 /* Get symbol for .xdata as we'll want to reference it with WRT */
2145 csd = yasm_section_get_data(sect, &coff_section_data_cb); 2149 csd = yasm_section_get_data(sect, &coff_section_data_cb);
2146 xdata_sym = csd->sym; 2150 xdata_sym = csd->sym;
2147 2151
2148 /* Add unwind info. Use line number of start of procedure. */ 2152 /* Add unwind info. Use line number of start of procedure. */
2149 yasm_win64__unwind_generate(sect, objfmt_coff->unwind, 2153 yasm_win64__unwind_generate(sect, objfmt_coff->unwind,
2150 objfmt_coff->proc_frame); 2154 objfmt_coff->proc_frame);
2151 objfmt_coff->unwind = NULL; /* generate keeps the unwind pointer */ 2155 objfmt_coff->unwind = NULL; /* generate keeps the unwind pointer */
2152 2156
2153 /* 2157 /*
2154 * Add function lookup to end of .pdata section. 2158 * Add function lookup to end of .pdata section.
2155 */ 2159 */
2156 2160
2157 sect = yasm_object_get_general(object, ".pdata", 0, 0, 0, &isnew, line); 2161 sect = yasm_object_get_general(object, ".pdata", 0, 0, 0, &isnew, line);
2158 2162
2159 /* Initialize pdata section if needed */ 2163 /* Initialize pdata section if needed */
2160 if (isnew) { 2164 if (isnew) {
2161 csd = coff_objfmt_init_new_section(object, sect, ".pdata", line); 2165 csd = yasm_section_get_data(sect, &coff_section_data_cb);
2162 csd->flags = COFF_STYP_DATA | COFF_STYP_READ; 2166 csd->flags = COFF_STYP_DATA | COFF_STYP_READ;
2163 csd->flags2 = COFF_FLAG_NOBASE; 2167 csd->flags2 = COFF_FLAG_NOBASE;
2164 yasm_section_set_align(sect, 4, line); 2168 yasm_section_set_align(sect, 4, line);
2165 } 2169 }
2166 2170
2167 /* Add function structure as data bytecode */ 2171 /* Add function structure as data bytecode */
2168 yasm_dvs_initialize(&dvs); 2172 yasm_dvs_initialize(&dvs);
2169 yasm_dvs_append(&dvs, yasm_dv_create_expr( 2173 yasm_dvs_append(&dvs, yasm_dv_create_expr(
2170 yasm_expr_create_ident(yasm_expr_sym(proc_sym), line))); 2174 yasm_expr_create_ident(yasm_expr_sym(proc_sym), line)));
2171 yasm_dvs_append(&dvs, yasm_dv_create_expr( 2175 yasm_dvs_append(&dvs, yasm_dv_create_expr(
(...skipping 29 matching lines...) Expand all
2201 32, 2205 32,
2202 0, 2206 0,
2203 coff_objfmt_dbgfmt_keywords, 2207 coff_objfmt_dbgfmt_keywords,
2204 "null", 2208 "null",
2205 coff_objfmt_directives, 2209 coff_objfmt_directives,
2206 NULL, /* no standard macros */ 2210 NULL, /* no standard macros */
2207 coff_objfmt_create, 2211 coff_objfmt_create,
2208 coff_objfmt_output, 2212 coff_objfmt_output,
2209 coff_objfmt_destroy, 2213 coff_objfmt_destroy,
2210 coff_objfmt_add_default_section, 2214 coff_objfmt_add_default_section,
2215 coff_objfmt_init_new_section,
2211 coff_objfmt_section_switch, 2216 coff_objfmt_section_switch,
2212 coff_objfmt_get_special_sym 2217 coff_objfmt_get_special_sym
2213 }; 2218 };
2214 2219
2215 /* Define valid debug formats to use with this object format */ 2220 /* Define valid debug formats to use with this object format */
2216 static const char *winXX_objfmt_dbgfmt_keywords[] = { 2221 static const char *winXX_objfmt_dbgfmt_keywords[] = {
2217 "null", 2222 "null",
2218 "dwarf2", 2223 "dwarf2",
2219 "cv8", 2224 "cv8",
2220 NULL 2225 NULL
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2253 32, 2258 32,
2254 1, 2259 1,
2255 winXX_objfmt_dbgfmt_keywords, 2260 winXX_objfmt_dbgfmt_keywords,
2256 "null", 2261 "null",
2257 win32_objfmt_directives, 2262 win32_objfmt_directives,
2258 win32_objfmt_stdmacs, 2263 win32_objfmt_stdmacs,
2259 win32_objfmt_create, 2264 win32_objfmt_create,
2260 coff_objfmt_output, 2265 coff_objfmt_output,
2261 coff_objfmt_destroy, 2266 coff_objfmt_destroy,
2262 coff_objfmt_add_default_section, 2267 coff_objfmt_add_default_section,
2268 coff_objfmt_init_new_section,
2263 coff_objfmt_section_switch, 2269 coff_objfmt_section_switch,
2264 coff_objfmt_get_special_sym 2270 coff_objfmt_get_special_sym
2265 }; 2271 };
2266 2272
2267 static const yasm_directive win64_objfmt_directives[] = { 2273 static const yasm_directive win64_objfmt_directives[] = {
2268 { ".ident", "gas", dir_ident, YASM_DIR_ANY }, 2274 { ".ident", "gas", dir_ident, YASM_DIR_ANY },
2269 { "ident", "nasm", dir_ident, YASM_DIR_ANY }, 2275 { "ident", "nasm", dir_ident, YASM_DIR_ANY },
2270 { ".export", "gas", dir_export, YASM_DIR_ID_REQUIRED }, 2276 { ".export", "gas", dir_export, YASM_DIR_ID_REQUIRED },
2271 { "export", "nasm", dir_export, YASM_DIR_ID_REQUIRED }, 2277 { "export", "nasm", dir_export, YASM_DIR_ID_REQUIRED },
2272 { ".proc_frame", "gas", dir_proc_frame, YASM_DIR_ID_REQUIRED }, 2278 { ".proc_frame", "gas", dir_proc_frame, YASM_DIR_ID_REQUIRED },
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2307 64, 2313 64,
2308 1, 2314 1,
2309 winXX_objfmt_dbgfmt_keywords, 2315 winXX_objfmt_dbgfmt_keywords,
2310 "null", 2316 "null",
2311 win64_objfmt_directives, 2317 win64_objfmt_directives,
2312 win64_objfmt_stdmacs, 2318 win64_objfmt_stdmacs,
2313 win64_objfmt_create, 2319 win64_objfmt_create,
2314 coff_objfmt_output, 2320 coff_objfmt_output,
2315 coff_objfmt_destroy, 2321 coff_objfmt_destroy,
2316 coff_objfmt_add_default_section, 2322 coff_objfmt_add_default_section,
2323 coff_objfmt_init_new_section,
2317 coff_objfmt_section_switch, 2324 coff_objfmt_section_switch,
2318 coff_objfmt_get_special_sym 2325 coff_objfmt_get_special_sym
2319 }; 2326 };
2320 yasm_objfmt_module yasm_x64_LTX_objfmt = { 2327 yasm_objfmt_module yasm_x64_LTX_objfmt = {
2321 "Win64", 2328 "Win64",
2322 "x64", 2329 "x64",
2323 "obj", 2330 "obj",
2324 64, 2331 64,
2325 1, 2332 1,
2326 winXX_objfmt_dbgfmt_keywords, 2333 winXX_objfmt_dbgfmt_keywords,
2327 "null", 2334 "null",
2328 win64_objfmt_directives, 2335 win64_objfmt_directives,
2329 win64_objfmt_stdmacs, 2336 win64_objfmt_stdmacs,
2330 win64_objfmt_create, 2337 win64_objfmt_create,
2331 coff_objfmt_output, 2338 coff_objfmt_output,
2332 coff_objfmt_destroy, 2339 coff_objfmt_destroy,
2333 coff_objfmt_add_default_section, 2340 coff_objfmt_add_default_section,
2341 coff_objfmt_init_new_section,
2334 coff_objfmt_section_switch, 2342 coff_objfmt_section_switch,
2335 coff_objfmt_get_special_sym 2343 coff_objfmt_get_special_sym
2336 }; 2344 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698