w32: Always compile with __builtin_ffs

Message ID 1361039412-4064-1-git-send-email-sw@weilnetz.de
State New
Headers show

Commit Message

Stefan Weil Feb. 16, 2013, 6:30 p.m.
Not all MinGW build environments include a library which provides ffs(),
and some versions of gcc create a function call instead of inline code.

When gcc is called with -ansi, it will always create a function call.
This usually results in an unresolved symbol "ffs" at link time.

The patch enforces inline code for this special case.

Cc: Jacob Kroon <jacob.kroon@gmail.com>
Signed-off-by: Stefan Weil <sw@weilnetz.de>

Hi Jacob,

please try the patch below. If it does not fix the linker problem,
you can define ffs unconditionally.


 include/sysemu/os-win32.h |    3 +++
 1 file changed, 3 insertions(+)


diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
index bf9edeb..a885162 100644
--- a/include/sysemu/os-win32.h
+++ b/include/sysemu/os-win32.h
@@ -66,6 +66,9 @@ 
 /* Declaration of ffs() is missing in MinGW's strings.h. */
 int ffs(int i);
+#if defined(__STRICT_ANSI__)
+# define ffs(i) __builtin_ffs(i)
 /* Missing POSIX functions. Don't use MinGW-w64 macros. */
 #undef gmtime_r