http://bugs.winehq.org/show_bug.cgi?id=28050
Summary: llvm-gcc-4.5 fails to compile loader/preloader.c with optimizations enabled Product: Wine Version: 1.3.26 Platform: x86 URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=63718 2 OS/Version: Linux Status: NEW Keywords: download, source Severity: blocker Priority: P2 Component: loader AssignedTo: wine-bugs@winehq.org ReportedBy: austinenglish@gmail.com
austin@debian:~/wine-git/loader$ make llvm-gcc -o wine-preloader -static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7c400000 preloader.o ../libs/port/libwine_port.a preloader.o: In function `set_process_name': /home/austin/wine-git/loader//preloader.c:455: undefined reference to `memset' preloader.o: In function `map_so_lib': /home/austin/wine-git/loader//preloader.c:455: undefined reference to `memset' collect2: ld returned 1 exit status make: *** [wine-preloader] Error 1
make -k lets it compile and wine runs. Alternatively, you can disable optimization in loader/Makefile, and it will compile.
I tried a simple patch: diff --git a/loader/preloader.c b/loader/preloader.c index a94c52c..2e55d2a 100644 --- a/loader/preloader.c +++ b/loader/preloader.c @@ -173,6 +173,9 @@ void *__stack_chk_guard = 0; void __stack_chk_fail_local(void) { return; } void __stack_chk_fail(void) { return; }
+/* for dragonegg */ +void *memset(void *s, int c, size_t n) { return s; } + #ifdef __i386__
/* data for setting up the glibc-style thread-local storage in %gs */
but then wine segfaults :/. Additionally, using a simple implementation: (from http://clc-wiki.net/wiki/C_standard_library:string.h:memset) void *memset(void *s, int c, size_t n) { unsigned char* p=s; while(n--) *p++ = (unsigned char)c; return s; }
fails in the same way.
This is the only failure with llvm-gcc-4.5 (aka dragonegg), after that, at least noteapd runs. Haven't checked what tests fail yet though :)..