https://bugs.winehq.org/show_bug.cgi?id=49139
Gen Otsuji otsugen0000@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Attachment #67162|dyn->d_un.d_ptr is already |[patch for description|summed base address |FreeBSD]dyn->d_un.d_ptr is | |already summed by base | |address
--- Comment #3 from Gen Otsuji otsugen0000@gmail.com --- Comment on attachment 67162 --> https://bugs.winehq.org/attachment.cgi?id=67162 [patch for FreeBSD]dyn->d_un.d_ptr is already summed by base address
--- dlls/ntdll/loader.c.orig 2020-04-24 20:09:10.000000000 +0000 +++ dlls/ntdll/loader.c 2020-05-10 20:20:28.755105000 +0000 @@ -1344,7 +1344,21 @@ { 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;
case 0x60009992:
{
char * addr1 = (char *)map->l_addr;
char * addr2 = (char *)dyn->d_un.d_ptr;
// assumption
if(addr1 < addr2)
{
//FIXME("file:%s : base:%p < addr:%p\n", debugstr_w(wm->ldr.BaseDllName.Buffer), addr1, addr2);
//FIXME("file:%s : base:%p < addr:%p\n", map->l_name, addr1, addr2);
init_func = (void *)((char *)dyn->d_un.d_ptr);
}
else
init_func = (void *)((char *)map->l_addr + dyn->d_un.d_val);
break;
}} }