Test if we need to put the .type directive inside a .def directive.
diff --git a/include/acconfig.h b/include/acconfig.h
index fef7b43..2bf4f64 100644
--- a/include/acconfig.h
+++ b/include/acconfig.h
@@ -3,6 +3,9 @@
* defined in the 'configure' script.
*/
+/* Define if .type asm directive must be inside a .def directive */
+#undef NEED_TYPE_IN_DEF
+
/* Define if symbols declared in assembly code need an underscore prefix */
#undef NEED_UNDERSCORE_PREFIX
diff --git a/include/config.h.in b/include/config.h.in
index 2a5ac4a..2dedec4 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -47,6 +47,9 @@
/* Define if lex declares yytext as a char * by default, not a char[]. */
#undef YYTEXT_POINTER
+/* Define if .type asm directive must be inside a .def directive */
+#undef NEED_TYPE_IN_DEF
+
/* Define if symbols declared in assembly code need an underscore prefix */
#undef NEED_UNDERSCORE_PREFIX
diff --git a/include/winnt.h b/include/winnt.h
index 05433b0..ece5eed 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -721,11 +721,17 @@
# define __ASM_NAME(name) name
#endif
+#ifdef NEED_TYPE_IN_DEF
+# define __ASM_TYPE(name) ".def " __ASM_NAME(#name) "; .scl 2; .type 32; .endef\n"
+#else
+# define __ASM_TYPE(name) ".type " __ASM_NAME(#name) ",@function\n"
+#endif
+
#ifdef __GNUC__
# define __ASM_GLOBAL_FUNC(name,code) \
__asm__( ".align 4\n\t" \
".globl " __ASM_NAME(#name) "\n\t" \
- ".type " __ASM_NAME(#name) ",@function\n" \
+ __ASM_TYPE(name) \
__ASM_NAME(#name) ":\n\t" \
code );
#else /* __GNUC__ */
@@ -733,7 +739,7 @@
void __asm_dummy_##name(void) { \
asm( ".align 4\n\t" \
".globl " __ASM_NAME(#name) "\n\t" \
- ".type " __ASM_NAME(#name) ",@function\n" \
+ __ASM_TYPE(name) \
__ASM_NAME(#name) ":\n\t" \
code ); \
}