diff options
| author | janus.lt <janus.lt> | 2017-11-04 00:16:37 +0100 |
|---|---|---|
| committer | janus.lt <janus.lt> | 2017-11-04 00:18:37 +0100 |
| commit | 32c9b51401c13fba9f0e2d2a4e791cdc9116143c (patch) | |
| tree | be2350affca2e3ce06fb17ae91f4ec3378a6051d /tccrun.c | |
| parent | fc0188ffbcf29f856caedee8cef07d88be01e439 (diff) | |
| download | tinycc-32c9b51401c13fba9f0e2d2a4e791cdc9116143c.tar.gz tinycc-32c9b51401c13fba9f0e2d2a4e791cdc9116143c.tar.bz2 | |
Win64/PE: Changed runtime function unwind info to be added after relocation, fixes SEH + long jmps
Diffstat (limited to 'tccrun.c')
| -rw-r--r-- | tccrun.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -247,10 +247,6 @@ static int tcc_relocate_ex(TCCState *s1, void *ptr, addr_t ptr_diff) } relocate_plt(s1); -#ifdef _WIN64 - *(void**)ptr = win64_add_function_table(s1); -#endif - for(i = 1; i < s1->nb_sections; i++) { s = s1->sections[i]; if (0 == (s->sh_flags & SHF_ALLOC)) @@ -267,6 +263,11 @@ static int tcc_relocate_ex(TCCState *s1, void *ptr, addr_t ptr_diff) if (s->sh_flags & SHF_EXECINSTR) set_pages_executable((char*)ptr + ptr_diff, length); } + +#ifdef _WIN64 + *(void**)mem = win64_add_function_table(s1); +#endif + return 0; } |
