| @@ -34,8 +34,28 @@ · 33 unmodified lines |
| 34 | | 34 | |
| 35 | #ifdef TCC_TARGET_X86_64 | 35 | #ifdef TCC_TARGET_X86_64 |
| 36 | # define ADDR3264 ULONGLONG | 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 | # define ADDR3264 DWORD | 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 | #endif | 59 | #endif |
| 40 | | 60 | |
| 41 | #ifdef _WIN32 | 61 | #ifdef _WIN32 |
| @@ -507,13 +527,7 @@ static int pe_write(struct pe_info *pe) · 465 unmodified lines |
| 507 | 0x00004550, /* DWORD nt_sig = IMAGE_NT_SIGNATURE */ | 527 | 0x00004550, /* DWORD nt_sig = IMAGE_NT_SIGNATURE */ |
| 508 | { | 528 | { |
| 509 | /* IMAGE_FILE_HEADER filehdr */ | 529 | /* IMAGE_FILE_HEADER filehdr */ |
| 510 | #if defined(TCC_TARGET_I386) | 530 | IMAGE_FILE_MACHINE, /*WORD Machine; */ |
| 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 | | |
| 517 | 0x0003, /*WORD NumberOfSections; */ | 531 | 0x0003, /*WORD NumberOfSections; */ |
| 518 | 0x00000000, /*DWORD TimeDateStamp; */ | 532 | 0x00000000, /*DWORD TimeDateStamp; */ |
| 519 | 0x00000000, /*DWORD PointerToSymbolTable; */ | 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 | static struct import_symbol *pe_add_import(struct pe_info *pe, int sym_index) | 735 | static struct import_symbol *pe_add_import(struct pe_info *pe, int sym_index) |
| 740 | { | 736 | { |
| 741 | int i; | 737 | int i; |
| @@ -1539,7 +1535,7 @@ static int pe_load_res(TCCState *s1, int fd) · 797 unmodified lines |
| 1539 | if (!read_mem(fd, 0, &hdr, sizeof hdr)) | 1535 | if (!read_mem(fd, 0, &hdr, sizeof hdr)) |
| 1540 | goto quit; | 1536 | goto quit; |
| 1541 | | 1537 | |
| 1542 | if (hdr.filehdr.Machine != 0x014C | 1538 | if (hdr.filehdr.Machine != IMAGE_FILE_MACHINE |
| 1543 | || hdr.filehdr.NumberOfSections != 1 | 1539 | || hdr.filehdr.NumberOfSections != 1 |
| 1544 | || strcmp(hdr.sectionhdr.Name, ".rsrc") != 0) | 1540 | || strcmp(hdr.sectionhdr.Name, ".rsrc") != 0) |
| 1545 | goto quit; | 1541 | goto quit; |
| @@ -1556,7 +1552,7 @@ static int pe_load_res(TCCState *s1, int fd) · 10 unmodified lines |
| 1556 | if (!read_mem(fd, offs, &rel, sizeof rel)) | 1552 | if (!read_mem(fd, offs, &rel, sizeof rel)) |
| 1557 | goto quit; | 1553 | goto quit; |
| 1558 | // printf("rsrc_reloc: %x %x %x\n", rel.offset, rel.size, rel.type); | 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 | goto quit; | 1556 | goto quit; |
| 1561 | put_elf_reloc(symtab_section, rsrc_section, | 1557 | put_elf_reloc(symtab_section, rsrc_section, |
| 1562 | rel.offset, R_XXX_RELATIVE, 0); | 1558 | rel.offset, R_XXX_RELATIVE, 0); |