| @@ -34,8 +34,28 @@ · 33 unmodified lines |
| 34 | 34 | |
| 35 | 35 | #ifdef TCC_TARGET_X86_64 |
| 36 | 36 | # define ADDR3264 ULONGLONG |
| 37 | | −#else |
| 37 | +# define REL_TYPE_DIRECT R_X86_64_64 |
| 38 | +# define R_XXX_THUNKFIX R_X86_64_PC32 |
| 39 | +# define R_XXX_RELATIVE R_X86_64_RELATIVE |
| 40 | +# define IMAGE_FILE_MACHINE 0x8664 |
| 41 | +# define RSRC_RELTYPE 3 |
| 42 | + |
| 43 | +#elif defined TCC_TARGET_ARM |
| 44 | +# define ADDR3264 DWORD |
| 45 | +# define REL_TYPE_DIRECT R_ARM_ABS32 |
| 46 | +# define R_XXX_THUNKFIX R_ARM_ABS32 |
| 47 | +# define R_XXX_RELATIVE R_ARM_RELATIVE |
| 48 | +# define IMAGE_FILE_MACHINE 0x01C0 |
| 49 | +# define RSRC_RELTYPE 7 /* ??? (not tested) */ |
| 50 | + |
| 51 | +#elif defined TCC_TARGET_I386 |
| 38 | 52 | # define ADDR3264 DWORD |
| 53 | +# define REL_TYPE_DIRECT R_386_32 |
| 54 | +# define R_XXX_THUNKFIX R_386_32 |
| 55 | +# define R_XXX_RELATIVE R_386_RELATIVE |
| 56 | +# define IMAGE_FILE_MACHINE 0x014C |
| 57 | +# define RSRC_RELTYPE 7 /* DIR32NB */ |
| 58 | + |
| 39 | 59 | #endif |
| 40 | 60 | |
| 41 | 61 | #ifdef _WIN32 |
| @@ -507,13 +527,7 @@ static int pe_write(struct pe_info *pe) · 465 unmodified lines |
| 507 | 527 | 0x00004550, /* DWORD nt_sig = IMAGE_NT_SIGNATURE */ |
| 508 | 528 | { |
| 509 | 529 | /* IMAGE_FILE_HEADER filehdr */ |
| 510 | | −#if defined(TCC_TARGET_I386) |
| 511 | | − 0x014C, /*WORD Machine; */ |
| 512 | | −#elif defined(TCC_TARGET_X86_64) |
| 513 | | − 0x8664, /*WORD Machine; */ |
| 514 | | −#elif defined(TCC_TARGET_ARM) |
| 515 | | − 0x01C0, /*WORD Machine; */ |
| 516 | | −#endif |
| 530 | + IMAGE_FILE_MACHINE, /*WORD Machine; */ |
| 517 | 531 | 0x0003, /*WORD NumberOfSections; */ |
| 518 | 532 | 0x00000000, /*DWORD TimeDateStamp; */ |
| 519 | 533 | 0x00000000, /*DWORD PointerToSymbolTable; */ |
| @@ -718,24 +732,6 @@ static int pe_write(struct pe_info *pe) · 198 unmodified lines |
| 718 | 732 | |
| 719 | 733 | /*----------------------------------------------------------------------------*/ |
| 720 | 734 | |
| 721 | | −#if defined(TCC_TARGET_X86_64) |
| 722 | | −#define REL_TYPE_DIRECT R_X86_64_64 |
| 723 | | −#define R_XXX_THUNKFIX R_X86_64_PC32 |
| 724 | | −#define R_XXX_RELATIVE R_X86_64_RELATIVE |
| 725 | | − |
| 726 | | −#elif defined(TCC_TARGET_I386) |
| 727 | | −#define REL_TYPE_DIRECT R_386_32 |
| 728 | | −#define R_XXX_THUNKFIX R_386_32 |
| 729 | | −#define R_XXX_RELATIVE R_386_RELATIVE |
| 730 | | − |
| 731 | | −#elif defined(TCC_TARGET_ARM) |
| 732 | | −#define REL_TYPE_DIRECT R_ARM_ABS32 |
| 733 | | −#define R_XXX_THUNKFIX R_ARM_ABS32 |
| 734 | | −#define R_XXX_RELATIVE R_ARM_RELATIVE |
| 735 | | − |
| 736 | | −#endif |
| 737 | | −/*----------------------------------------------------------------------------*/ |
| 738 | | − |
| 739 | 735 | static struct import_symbol *pe_add_import(struct pe_info *pe, int sym_index) |
| 740 | 736 | { |
| 741 | 737 | int i; |
| @@ -1539,7 +1535,7 @@ static int pe_load_res(TCCState *s1, int fd) · 797 unmodified lines |
| 1539 | 1535 | if (!read_mem(fd, 0, &hdr, sizeof hdr)) |
| 1540 | 1536 | goto quit; |
| 1541 | 1537 | |
| 1542 | | − if (hdr.filehdr.Machine != 0x014C |
| 1538 | + if (hdr.filehdr.Machine != IMAGE_FILE_MACHINE |
| 1543 | 1539 | || hdr.filehdr.NumberOfSections != 1 |
| 1544 | 1540 | || strcmp(hdr.sectionhdr.Name, ".rsrc") != 0) |
| 1545 | 1541 | goto quit; |
| @@ -1556,7 +1552,7 @@ static int pe_load_res(TCCState *s1, int fd) · 10 unmodified lines |
| 1556 | 1552 | if (!read_mem(fd, offs, &rel, sizeof rel)) |
| 1557 | 1553 | goto quit; |
| 1558 | 1554 | // printf("rsrc_reloc: %x %x %x\n", rel.offset, rel.size, rel.type); |
| 1559 | | − if (rel.type != 7) /* DIR32NB */ |
| 1555 | + if (rel.type != RSRC_RELTYPE) |
| 1560 | 1556 | goto quit; |
| 1561 | 1557 | put_elf_reloc(symtab_section, rsrc_section, |
| 1562 | 1558 | rel.offset, R_XXX_RELATIVE, 0); |