Marcus Meissner
b99849cf22
OBS-URL: https://build.opensuse.org/package/show/Emulators/wine?expand=0&rev=287
87 lines
4.7 KiB
Diff
87 lines
4.7 KiB
Diff
From aa7698f55186eb974cf974398198bc63d4fd3c02 Mon Sep 17 00:00:00 2001
|
|
From: Marcus Meissner <marcus@jet.franken.de>
|
|
Date: Sat, 13 Jun 2015 12:15:39 +0200
|
|
Subject: [PATCH] ntdll: link libunwind if present
|
|
|
|
On openSUSE 13.1/13.2 otherwise ntdll x86_64 build will fail with:
|
|
|
|
../../tools/winegcc/winegcc -o ntdll.dll.so -B../../tools/winebuild -m64 -fasynchronous-unwind-tables -shared /home/marcus/projects/wine/dlls/ntdll/ntdll.spec \
|
|
-nodefaultlibs -Wl,--image-base,0x7bc00000 actctx.o atom.o cdrom.o critsection.o debugbuffer.o \
|
|
debugtools.o directory.o env.o error.o exception.o file.o handletable.o heap.o large_int.o \
|
|
loader.o loadorder.o misc.o nt.o om.o path.o printf.o process.o reg.o relay.o resource.o rtl.o \
|
|
rtlbitmap.o rtlstr.o sec.o serial.o server.o signal_arm.o signal_arm64.o signal_i386.o \
|
|
signal_powerpc.o signal_x86_64.o string.o sync.o tape.o thread.o threadpool.o time.o version.o \
|
|
virtual.o wcstring.o version.res -lwinecrt0 -lwine ../../libs/port/libwine_port.a -lpthread \
|
|
|
|
signal_x86_64.o: In function `libunwind_virtual_unwind':
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1554: undefined reference to `_Ux86_64_getcontext'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1556: undefined reference to `_ULx86_64_init_local'
|
|
signal_x86_64.o: In function `libunwind_set_cursor_from_context':
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1442: undefined reference to `_ULx86_64_set_reg'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1444: undefined reference to `_ULx86_64_set_reg'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1446: undefined reference to `_ULx86_64_set_reg'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1448: undefined reference to `_ULx86_64_set_reg'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1450: undefined reference to `_ULx86_64_set_reg'
|
|
signal_x86_64.o:/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1452: more undefined references to `_ULx86_64_set_reg' follow
|
|
signal_x86_64.o: In function `libunwind_virtual_unwind':
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1565: undefined reference to `_ULx86_64_get_proc_info'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1581: undefined reference to `_ULx86_64_step'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1488: undefined reference to `_ULx86_64_get_reg'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1488: undefined reference to `_ULx86_64_get_reg'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1488: undefined reference to `_ULx86_64_get_reg'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1488: undefined reference to `_ULx86_64_get_reg'
|
|
/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1488: undefined reference to `_ULx86_64_get_reg'
|
|
signal_x86_64.o:/home/marcus/projects/wine/dlls/ntdll/signal_x86_64.c:1488: more undefined references to `_ULx86_64_get_reg' follow
|
|
collect2: error: ld returned 1 exit status
|
|
|
|
(probably on x86 it all is inlined, but this is not the case for x86_64)
|
|
---
|
|
configure.ac | 3 +++
|
|
dlls/ntdll/Makefile.in | 2 +-
|
|
2 files changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index df28b27..97b335d 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -1974,6 +1974,7 @@ AC_CACHE_CHECK([whether CFI directives are supported in assembly code], ac_cv_c_
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[asm(".text\nac_test:\t.cfi_startproc\n\t.long 0\n\t.cfi_endproc");]])],
|
|
ac_cv_c_cfi_support="yes",ac_cv_c_cfi_support="no"))
|
|
|
|
+UNWIND_LIBS=
|
|
asm_func_header=".globl $asm_name_prefix\" #name suffix \"\\n\\t$asm_func_header\\n$asm_name_prefix\" #name suffix \":\\n\\t"
|
|
asm_func_trailer=""
|
|
if test "$ac_cv_c_dot_previous" = "yes"
|
|
@@ -1986,6 +1987,7 @@ then
|
|
asm_func_trailer="\\n\\t.cfi_endproc$asm_func_trailer"
|
|
AC_DEFINE([__ASM_CFI(str)],[str],[Define to a macro to output a .cfi assembly pseudo-op])
|
|
AC_SUBST([UNWINDFLAGS],[-fasynchronous-unwind-tables])
|
|
+ AC_CHECK_LIB(unwind,_U_dyn_register,[UNWIND_LIBS="-lunwind"])
|
|
else
|
|
AC_DEFINE([__ASM_CFI(str)],[""])
|
|
if test "x$enable_win64" = "xyes"
|
|
@@ -1993,6 +1995,7 @@ else
|
|
WINE_WARNING([building 64-bit Wine without support for CFI directives; exception handling will not work properly.])
|
|
fi
|
|
fi
|
|
+AC_SUBST(UNWIND_LIBS)
|
|
|
|
asm_func_code="$asm_func_header\" code \"$asm_func_trailer"
|
|
|
|
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
|
|
index ed4bb94..08f094a 100644
|
|
--- a/dlls/ntdll/Makefile.in
|
|
+++ b/dlls/ntdll/Makefile.in
|
|
@@ -2,7 +2,7 @@ EXTRADEFS = -D_NTSYSTEM_
|
|
MODULE = ntdll.dll
|
|
IMPORTLIB = ntdll
|
|
IMPORTS = winecrt0
|
|
-EXTRALIBS = $(IOKIT_LIBS) $(RT_LIBS) $(PTHREAD_LIBS)
|
|
+EXTRALIBS = $(IOKIT_LIBS) $(RT_LIBS) $(PTHREAD_LIBS) $(UNWIND_LIBS)
|
|
EXTRADLLFLAGS = -nodefaultlibs -Wl,--image-base,0x7bc00000
|
|
|
|
C_SRCS = \
|
|
--
|
|
1.8.4.5
|
|
|