From 619a818dde23dfc6361a2edce9fe0b18aa249d40 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Sun, 6 Nov 2016 20:31:28 +0100 Subject: win32.c: install SEH handler only on i386 --- src/grt/config/win32.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/grt/config') diff --git a/src/grt/config/win32.c b/src/grt/config/win32.c index c473b246c..677943c4a 100644 --- a/src/grt/config/win32.c +++ b/src/grt/config/win32.c @@ -164,18 +164,22 @@ int __ghdl_run_through_longjump (int (*func)(void)) { int res; + +#ifdef __i386__ + /* Install an SEH handler. */ struct exception_registration er; struct exception_registration *prev; /* Get current handler. */ - asm ("mov %%fs:(0),%0" : "=r" (prev)); + asm volatile ("mov %%fs:(0),%0" : "=r" (prev)); /* Build regisration. */ er.prev = prev; er.handler = ghdl_SEH_handler; /* Register. */ - asm ("mov %0,%%fs:(0)" : : "r" (&er)); + asm volatile ("mov %0,%%fs:(0)" : : "r" (&er)); +#endif run_env_en = 1; res = setjmp (run_env); @@ -183,8 +187,10 @@ __ghdl_run_through_longjump (int (*func)(void)) res = (*func)(); run_env_en = 0; +#ifdef __i386__ /* Restore. */ - asm ("mov %0,%%fs:(0)" : : "r" (prev)); + asm volatile ("mov %0,%%fs:(0)" : : "r" (prev)); +#endif return res; } -- cgit v1.2.3