crt: Move .seh_handlerdata to the end of functions

On aarch64, the length of the enclosing function is part of the .xdata
entry (contrary to x86_64, where there's an EndAddress pointer in the
.pdata), and the .seh_handlerdata directive forces the assembler to
output the main .xdata entry right there. This means that if this is
done early in the function, the .xdata entry ends up with a too short
function length.

Signed-off-by: Martin Storsjö <martin@martin.st>
diff --git a/mingw-w64-crt/crt/crtexe.c b/mingw-w64-crt/crt/crtexe.c
index 3dc5e8e..e788005 100644
--- a/mingw-w64-crt/crt/crtexe.c
+++ b/mingw-w64-crt/crt/crtexe.c
@@ -180,19 +180,18 @@
 {
   int ret = 255;
 #ifdef SEH_INLINE_ASM
-  asm ("\t.l_startw:\n"
-    "\t.seh_handler __C_specific_handler, @except\n"
-    "\t.seh_handlerdata\n"
-    "\t.long 1\n"
-    "\t.rva .l_startw, .l_endw, _gnu_exception_handler ,.l_endw\n"
-    "\t.text"
-    );
+  asm ("\t.l_startw:\n");
 #endif
   mingw_app_type = 1;
   ret = __tmainCRTStartup ();
 #ifdef SEH_INLINE_ASM
   asm ("\tnop\n"
-    "\t.l_endw: nop\n");
+    "\t.l_endw: nop\n"
+    "\t.seh_handler __C_specific_handler, @except\n"
+    "\t.seh_handlerdata\n"
+    "\t.long 1\n"
+    "\t.rva .l_startw, .l_endw, _gnu_exception_handler ,.l_endw\n"
+    "\t.text");
 #endif
   return ret;
 }
@@ -207,19 +206,18 @@
 {
   int ret = 255;
 #ifdef SEH_INLINE_ASM
-  asm ("\t.l_start:\n"
-    "\t.seh_handler __C_specific_handler, @except\n"
-    "\t.seh_handlerdata\n"
-    "\t.long 1\n"
-    "\t.rva .l_start, .l_end, _gnu_exception_handler ,.l_end\n"
-    "\t.text"
-    );
+  asm ("\t.l_start:\n");
 #endif
   mingw_app_type = 0;
   ret = __tmainCRTStartup ();
 #ifdef SEH_INLINE_ASM
   asm ("\tnop\n"
-    "\t.l_end: nop\n");
+    "\t.l_end: nop\n"
+    "\t.seh_handler __C_specific_handler, @except\n"
+    "\t.seh_handlerdata\n"
+    "\t.long 1\n"
+    "\t.rva .l_start, .l_end, _gnu_exception_handler ,.l_end\n"
+    "\t.text");
 #endif
   return ret;
 }