[PATCH 1/2] ntdll: Read auxillary vector directly as fallback.
Rémi Bernon
rbernon at codeweavers.com
Fri Jul 31 08:25:06 CDT 2020
On 2020-07-31 11:51, Rémi Bernon wrote:
> When getauxval isn't available we can read the auxillary vector after
> environment pointers according to System V ABI.
>
> Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
> ---
>
> I'm not sure if this is very useful, but some runtimes (steamrt for
> instance) have old glibc where getauxval isn't available and it then
> causes SymInitializeW to fail because of NULL process image addresses.
>
> dlls/ntdll/unix/loader.c | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
> diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
> index bd3a0958757..02ffc0ca775 100644
> --- a/dlls/ntdll/unix/loader.c
> +++ b/dlls/ntdll/unix/loader.c
> @@ -1343,6 +1343,27 @@ ULONG_PTR get_image_address(void)
>
> if (task_info(mach_task_self(), TASK_DYLD_INFO, (task_info_t)&dyld_info, &size) == KERN_SUCCESS)
> return dyld_info.all_image_info_addr;
> +#elif defined(__linux__)
> + ULONG_PTR size, num, phdr_addr;
> + ElfW(Phdr) *phdr;
> + Elf64_auxv_t *auxp;
> + char **envp = main_envp;
> + while (*envp++ != NULL);
> +
> + for (auxp = (Elf64_auxv_t *)envp; auxp->a_type != 0; auxp++)
And this is obviously 64bit specific, please ignore it.
--
Rémi Bernon <rbernon at codeweavers.com>
More information about the wine-devel
mailing list