Module: wine Branch: master Commit: 973138c06891b9ec36c0c6cd6ca593554bb69043 URL: https://source.winehq.org/git/wine.git/?a=commit;h=973138c06891b9ec36c0c6cd6...
Author: Gerald Pfeifer gerald@pfeifer.com Date: Sun Apr 19 10:43:44 2020 +0200
ntdll: Fix call_constructor build on FreeBSD.
Signed-off-by: Gerald Pfeifer gerald@pfeifer.com Signed-off-by: Alexandre Julliard julliard@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 ),