https://bugs.winehq.org/show_bug.cgi?id=40330
Bug ID: 40330 Summary: Build fails with AddressSanitizer. Product: Wine Version: 1.9.5 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: adam.buchbinder@gmail.com Distribution: ---
https://wiki.winehq.org/Building_Wine#Memory_.26_Address_Checkers describes using AddressSanitizer with Wine. It seems not to compile. I'm using:
$ gcc --version gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4
A short excerpt:
$ ./configure --enable-win64 CFLAGS="-g -O1 -fsanitize=address" ... $ make ... make[1]: Entering directory `/home/abuchbinder/software/wine/tools' LC_ALL=C sed -e 's,@bindir@,/usr/local/bin,g' -e 's,@dlldir@,/usr/local/lib64/wine,g' -e 's,@PACKAGE_STRING@,Wine 1.9.6,g' -e 's,@PACKAGE_VERSION@,1.9.6,g' wineapploader.in >wineapploader || (rm -f wineapploader && false) gcc -m64 -c -o make_xftmpl.o make_xftmpl.c -I. -I../include -D__WINESRC__ -Wall -pipe -fno-strict-aliasing \ -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers -Wstrict-prototypes -Wtype-limits \ -Wunused-but-set-parameter -Wvla -Wwrite-strings -Wpointer-arith -Wlogical-op -gdwarf-2 \ -gstrict-dwarf -g -O1 -fsanitize=address -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 gcc -m64 -o make_xftmpl make_xftmpl.o ../libs/port/libwine_port.a make_xftmpl.o: In function `exit_on_signal': /home/abuchbinder/software/wine/tools/make_xftmpl.c:413: undefined reference to `__asan_handle_no_return' make_xftmpl.o: In function `fatal_error': /home/abuchbinder/software/wine/tools/make_xftmpl.c:127: undefined reference to `__asan_handle_no_return' ...
and so on. The problem here is that the command:
gcc -m64 -o make_xftmpl make_xftmpl.o ../libs/port/libwine_port.a
should be:
gcc -m64 -o make_xftmpl make_xftmpl.o ../libs/port/libwine_port.a -fsanitize=address
I can work around this in part with:
$ find . -name Makefile|xargs perl -pi -e 's/^(CC = gcc -m64)$/\1 -fsanitize=address/'
... but that's probably not the right way to do this, and it only works for tools/ and not dlls/ anyway. My Makefile-fu is not strong; I'm sure I'm missing something about how the configuration system works, but I'm equally sure that this is something worth reporting even if I'm not entirely certain what's going on.