aboutsummaryrefslogtreecommitdiff
path: root/i386-asm.c
diff options
context:
space:
mode:
authorgrischka <grischka>2009-12-19 22:40:28 +0100
committergrischka <grischka>2009-12-20 01:54:37 +0100
commit50b040ef83252730d75463bdeea589294e698532 (patch)
tree92e82f58787576e018858939f97361b486d6bb6f /i386-asm.c
parent88a3ccab9f3c877e2ffb8fecc3303006e0640907 (diff)
downloadtinycc-50b040ef83252730d75463bdeea589294e698532.tar.gz
tinycc-50b040ef83252730d75463bdeea589294e698532.tar.bz2
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.
Diffstat (limited to 'i386-asm.c')
-rw-r--r--i386-asm.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/i386-asm.c b/i386-asm.c
index a378191..075d2ea 100644
--- a/i386-asm.c
+++ b/i386-asm.c
@@ -426,6 +426,10 @@ static void gen_disp32(ExprValue *pe)
elimination in the linker */
gen_le32(pe->v + sym->jnext - ind - 4);
} else {
+ if (sym && sym->type.t == VT_VOID) {
+ sym->type.t = VT_FUNC;
+ sym->type.ref = NULL;
+ }
gen_addrpc32(VT_SYM, sym, pe->v);
}
}