win64: add tiny unwind data for setjmp/longjmp

This enables native unwind semantics with longjmp on
win64 by putting an entry into the .pdata section for
each compiled fuction.

Also, the function now use a fixed stack and store arguments
into X(%rsp) rather than using push.
This commit is contained in:
grischka
2009-12-19 22:40:28 +01:00
parent 88a3ccab9f
commit 50b040ef83
7 changed files with 322 additions and 110 deletions

7
tcc.h
View File

@ -521,6 +521,10 @@ struct TCCState {
/* PE info */
int pe_subsystem;
unsigned long pe_file_align;
struct pe_uw {
Section *pdata;
int sym_1, sym_2, offs_1;
} pe_unwind;
#endif
#ifndef TCC_TARGET_PE
@ -1167,6 +1171,9 @@ ST_FUNC int pe_output_file(TCCState * s1, const char *filename);
ST_FUNC int pe_dllimport(int r, SValue *sv, void (*fn)(int r, SValue *sv));
/* tiny_impdef.c */
ST_FUNC char *get_export_names(FILE *fp);
#ifdef TCC_TARGET_X86_64
ST_FUNC void pe_add_unwind_data(unsigned start, unsigned end, unsigned stack);
#endif
#endif
/* ------------ tccrun.c ----------------- */