https://bugs.winehq.org/show_bug.cgi?id=49437
Damjan Jovanovic damjan.jov@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|-unknown |ntdll Status|UNCONFIRMED |NEW Ever confirmed|0 |1
--- Comment #13 from Damjan Jovanovic damjan.jov@gmail.com --- I am pretty sure I figured this out after 2 days of git bisect, after Wine on FreeBSD 12.2 started crashing non-stop while 12.1 worked.
The attempt by FreeBSD developers to preserve binary compatibility didn't go too well. To quote from my patch:
/* l_addr changed meaning from absolute load address (which is now l_base) * to relocation offset, but also got moved within the struct, breaking * the ABI via struct layout change: * * OLD header: NEW header: * typedef struct link_map { typedef struct link_map { * caddr_t l_addr; caddr_t l_base; * ... ... * ... caddr_t l_addr; * }; }; * * OLD ld-elf.so: NEW ld-elf.so: * ... exports _rtld_version_laddr_offset * * Since the header change and rtld change aren't coupled, we have to * worry about the interaction between link.h version at compile time, * and ld-elf.so version at runtime...
I've submitted a patch that seems to get it working: https://source.winehq.org/patches/data/195960
It should allow a Wine binary to work correctly on all FreeBSD 12.x versions, whether they have that ld-elf patch or not, and regardless of the link.h header used at compile-time. All 4 combinations of old/new header vs library are handled correctly.