https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88150
--- Comment #2 from ro at CeBiTec dot Uni-Bielefeld.DE <ro at CeBiTec dot
Uni-Bielefeld.DE> ---
A couple of issues in the patch bear commenting:
* The core/sys/solaris/dlfcn.d change was needed to silence
/vol/gcc/src/hg/trunk/local/libphobos/libdruntime/rt/sections_elf_shared.d:628:15:
error: @nogc function 'rt.sections_elf_shared.linkMapForHandle' cannot call
non-@nogc function 'core.sys.solaris.dlfcn.dlinfo'
628 | dlinfo(handle, RTLD_DI_LINKMAP, &map) == 0 || assert(0);
| ^
/vol/gcc/src/hg/trunk/local/libphobos/libdruntime/rt/sections_elf_shared.d:977:15:
error: @nogc function 'rt.sections_elf_shared.handleForAddr' cannot call
non-@nogc function 'core.sys.solaris.dlfcn.dladdr'
977 | if (dladdr(addr, &info) != 0)
| ^
* The core/sys/solaris/sys/link.d change was required against
/vol/gcc/src/hg/trunk/local/libphobos/libdruntime/rt/sections_elf_shared.d:692:48:
error: need 'this' for 'd_ptr' of type 'uint'
692 | strtab = cast(const(char)*)dyn.d_un.d_ptr; //
FIXME: Which one?
| ^
/vol/gcc/src/hg/trunk/local/libphobos/libdruntime/rt/sections_elf_shared.d:705:34:
error: need 'this' for 'd_val' of type 'uint'
705 | auto name = strtab + dyn.d_un.d_val;
| ^
This didn't tell me anything and only after I'd closely compared the
solaris and freebsd versions did I see the difference.
* Enabling the compilation of rt/bss_section.c on Solaris was needed to
get definitions for rt_get_bss_start and rt_get_end. I don't know
what the upstream policy for linelength is, so I just use an overlong
line here.
* As the FIXME comment says, I don't know if the _Dmodule_ref in
rt/sections_elf_shared.d is good for anything. I couldn't find any
definition.
* The Solaris struct dl_phdr_info doesn't have a dlpi_tls_modid member.
For now, I've hacked around this to make things compile.
<rtld_db.h>'s rd_loadobj_t has a rt_tlsmodid member; maybe it's
possible to use that. I'll check with the Solaris linker engineers if
I get stuck.
* Besides, dl_iterate_phdr was only introduced in some (late) Solaris 10
patch and only lives in libdl there, not libc as on Solaris 11.
Enabling libphobos will have to check for that condition.
* Right now, we have three identical versions of findDSOInfoForAddr. It
may be useful to unify them.
* Solaris 10 lacks getprogname; one could just return a hardcoded
"a.out" instead as a fallback.
* I don't know details about the files in core/sys/solaris: according to
their comments they were produced on/for Illumos, and Oracle Solaris
may well have deviated since. I'll have to compare them in detail at
some point. No idea if they were handwritten or generated.
* Solaris <sys/elf.h> includes <sys/elf_SPARC.h>, <sys/elf_386.h>, and
<sys/elf/amd64.h> as appropriate. It seems to me that
core/sys/solaris/sys/elf.d should do the same.