Gerald Pfeifer : ntdll: Fix call_constructor build on FreeBSD.
Alexandre Julliard
julliard at winehq.org
Mon Apr 20 15:48:20 CDT 2020
Module: wine
Branch: master
Commit: 973138c06891b9ec36c0c6cd6ca593554bb69043
URL: https://source.winehq.org/git/wine.git/?a=commit;h=973138c06891b9ec36c0c6cd6ca593554bb69043
Author: Gerald Pfeifer <gerald at pfeifer.com>
Date: Sun Apr 19 10:43:44 2020 +0200
ntdll: Fix call_constructor build on FreeBSD.
Signed-off-by: Gerald Pfeifer <gerald at pfeifer.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/loader.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index c713a5d0a6..b0d5cf46a5 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1324,17 +1324,21 @@ static void call_constructors( WINE_MODREF *wm )
void (*init_func)(int, char **, char **) = NULL;
void (**init_array)(int, char **, char **) = NULL;
ULONG_PTR i, init_arraysz = 0;
+#ifdef _WIN64
+ const Elf64_Dyn *dyn;
+#else
+ const Elf32_Dyn *dyn;
+#endif
if (dlinfo( wm->so_handle, RTLD_DI_LINKMAP, &map ) == -1) return;
- while (map->l_ld->d_tag)
+ for (dyn = map->l_ld; dyn->d_tag; dyn++)
{
- switch (map->l_ld->d_tag)
+ switch (dyn->d_tag)
{
- case 0x60009990: init_array = (void *)((char *)map->l_addr + map->l_ld->d_un.d_val); break;
- case 0x60009991: init_arraysz = map->l_ld->d_un.d_val; break;
- case 0x60009992: init_func = (void *)((char *)map->l_addr + map->l_ld->d_un.d_val); break;
+ case 0x60009990: init_array = (void *)((char *)map->l_addr + dyn->d_un.d_val); break;
+ case 0x60009991: init_arraysz = dyn->d_un.d_val; break;
+ case 0x60009992: init_func = (void *)((char *)map->l_addr + dyn->d_un.d_val); break;
}
- map->l_ld++;
}
TRACE( "%s: got init_func %p init_array %p %lu\n", debugstr_us( &wm->ldr.BaseDllName ),
More information about the wine-cvs
mailing list