+2019-04-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR d/88150
+ * libdruntime/gcc/sections/elf_shared.d [Solaris] (SharedELF): Set
+ to true.
+ Import core.sys.solaris.dlfcn, core.sys.solaris.link,
+ core.sys.solaris.sys.elf, core.sys.solaris.sys.link.
+ (dummy_ref): Declare.
+ (initSections): Initialize dummy_ref.
+ (getDependencies): Set strtab.
+ (handleForName): Don't dlclose handle.
+ (findDSOInfoForAddr): Set IterateManually.
+ (getprogname): Declare.
+ (progname): Use it.
+ * libdruntime/gcc/sections/package.d [Solaris]: Import
+ gcc.sections.elf_shared instead of gcc.sections.solaris.
+ * libdruntime/gcc/sections/solaris.d: Remove.
+ * libdruntime/Makefile.am (DRUNTIME_DSOURCES): Remove
+ gcc/sections/solaris.d.
+ * libdruntime/Makefile.in: Regenerate.
+
2019-04-13 Iain Buclaw <ibuclaw@gdcproject.org>
* libdruntime/Makefile.am (DRUNTIME_CSOURCES): Remove bss_sections.c.
core/sync/rwmutex.d core/sync/semaphore.d core/thread.d core/time.d \
core/vararg.d gcc/attribute.d gcc/backtrace.d gcc/builtins.d gcc/deh.d \
gcc/sections/android.d gcc/sections/elf_shared.d gcc/sections/osx.d \
- gcc/sections/package.d gcc/sections/solaris.d gcc/sections/win32.d \
+ gcc/sections/package.d gcc/sections/win32.d \
gcc/sections/win64.d gcc/unwind/arm.d gcc/unwind/arm_common.d \
gcc/unwind/c6x.d gcc/unwind/generic.d gcc/unwind/package.d \
gcc/unwind/pe.d object.d rt/aApply.d rt/aApplyR.d rt/aaA.d rt/adi.d \
core/vararg.lo gcc/attribute.lo gcc/backtrace.lo \
gcc/builtins.lo gcc/deh.lo gcc/sections/android.lo \
gcc/sections/elf_shared.lo gcc/sections/osx.lo \
- gcc/sections/package.lo gcc/sections/solaris.lo \
- gcc/sections/win32.lo gcc/sections/win64.lo gcc/unwind/arm.lo \
+ gcc/sections/package.lo gcc/sections/win32.lo \
+ gcc/sections/win64.lo gcc/unwind/arm.lo \
gcc/unwind/arm_common.lo gcc/unwind/c6x.lo \
gcc/unwind/generic.lo gcc/unwind/package.lo gcc/unwind/pe.lo \
object.lo rt/aApply.lo rt/aApplyR.lo rt/aaA.lo rt/adi.lo \
core/sync/rwmutex.d core/sync/semaphore.d core/thread.d core/time.d \
core/vararg.d gcc/attribute.d gcc/backtrace.d gcc/builtins.d gcc/deh.d \
gcc/sections/android.d gcc/sections/elf_shared.d gcc/sections/osx.d \
- gcc/sections/package.d gcc/sections/solaris.d gcc/sections/win32.d \
+ gcc/sections/package.d gcc/sections/win32.d \
gcc/sections/win64.d gcc/unwind/arm.d gcc/unwind/arm_common.d \
gcc/unwind/c6x.d gcc/unwind/generic.d gcc/unwind/package.d \
gcc/unwind/pe.d object.d rt/aApply.d rt/aApplyR.d rt/aaA.d rt/adi.d \
gcc/sections/elf_shared.lo: gcc/sections/$(am__dirstamp)
gcc/sections/osx.lo: gcc/sections/$(am__dirstamp)
gcc/sections/package.lo: gcc/sections/$(am__dirstamp)
-gcc/sections/solaris.lo: gcc/sections/$(am__dirstamp)
gcc/sections/win32.lo: gcc/sections/$(am__dirstamp)
gcc/sections/win64.lo: gcc/sections/$(am__dirstamp)
gcc/unwind/$(am__dirstamp):
else version (NetBSD) enum SharedELF = true;
else version (DragonFlyBSD) enum SharedELF = true;
else version (CRuntime_UClibc) enum SharedELF = true;
+else version (Solaris) enum SharedELF = true;
else enum SharedELF = false;
static if (SharedELF):
import core.sys.dragonflybsd.sys.elf;
import core.sys.dragonflybsd.sys.link_elf;
}
+else version (Solaris)
+{
+ import core.sys.solaris.dlfcn;
+ import core.sys.solaris.link;
+ import core.sys.solaris.sys.elf;
+ import core.sys.solaris.sys.link;
+}
else
{
static assert(0, "unimplemented");
version (FreeBSD) private __gshared void* dummy_ref;
version (DragonFlyBSD) private __gshared void* dummy_ref;
version (NetBSD) private __gshared void* dummy_ref;
+version (Solaris) private __gshared void* dummy_ref;
/****
* Gets called on program startup just before GC is initialized.
version (FreeBSD) dummy_ref = &_d_dso_registry;
version (DragonFlyBSD) dummy_ref = &_d_dso_registry;
version (NetBSD) dummy_ref = &_d_dso_registry;
+ version (Solaris) dummy_ref = &_d_dso_registry;
}
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
else version (DragonFlyBSD)
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
+ else version (Solaris)
+ strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
else
static assert(0, "unimplemented");
break;
void* handleForName(const char* name)
{
auto handle = .dlopen(name, RTLD_NOLOAD | RTLD_LAZY);
- if (handle !is null) .dlclose(handle); // drop reference count
+ version (Solaris) { }
+ else if (handle !is null) .dlclose(handle); // drop reference count
return handle;
}
}
*/
bool findDSOInfoForAddr(in void* addr, dl_phdr_info* result=null) nothrow @nogc
{
- version (linux) enum IterateManually = true;
- else version (NetBSD) enum IterateManually = true;
- else enum IterateManually = false;
+ version (linux) enum IterateManually = true;
+ else version (NetBSD) enum IterateManually = true;
+ else version (Solaris) enum IterateManually = true;
+ else enum IterateManually = false;
static if (IterateManually)
{
version (FreeBSD) extern(C) const(char)* getprogname() nothrow @nogc;
version (DragonFlyBSD) extern(C) const(char)* getprogname() nothrow @nogc;
version (NetBSD) extern(C) const(char)* getprogname() nothrow @nogc;
+version (Solaris) extern(C) const(char)* getprogname() nothrow @nogc;
@property const(char)* progname() nothrow @nogc
{
version (FreeBSD) return getprogname();
version (DragonFlyBSD) return getprogname();
version (NetBSD) return getprogname();
+ version (Solaris) return getprogname();
}
const(char)[] dsoName(const char* dlpi_name) nothrow @nogc
else version (DragonFlyBSD)
public import gcc.sections.elf_shared;
else version (Solaris)
- public import gcc.sections.solaris;
+ public import gcc.sections.elf_shared;
else version (OSX)
public import gcc.sections.osx;
else version (CRuntime_DigitalMars)
+++ /dev/null
-// Solaris-specific support for sections.
-// Copyright (C) 2019 Free Software Foundation, Inc.
-
-// GCC is free software; you can redistribute it and/or modify it under
-// the terms of the GNU General Public License as published by the Free
-// Software Foundation; either version 3, or (at your option) any later
-// version.
-
-// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-// WARRANTY; without even the implied warranty of MERCHANTABILITY or
-// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-// for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-module gcc.sections.solaris;
-
-version (Solaris):
-
-// debug = PRINTF;
-debug(PRINTF) import core.stdc.stdio;
-import core.stdc.stdlib : malloc, free;
-import rt.deh, rt.minfo;
-
-struct SectionGroup
-{
- static int opApply(scope int delegate(ref SectionGroup) dg)
- {
- return dg(_sections);
- }
-
- static int opApplyReverse(scope int delegate(ref SectionGroup) dg)
- {
- return dg(_sections);
- }
-
- @property immutable(ModuleInfo*)[] modules() const nothrow @nogc
- {
- return _moduleGroup.modules;
- }
-
- @property ref inout(ModuleGroup) moduleGroup() inout nothrow @nogc
- {
- return _moduleGroup;
- }
-
- @property immutable(FuncTable)[] ehTables() const nothrow @nogc
- {
- auto pbeg = cast(immutable(FuncTable)*)&__start_deh;
- auto pend = cast(immutable(FuncTable)*)&__stop_deh;
- return pbeg[0 .. pend - pbeg];
- }
-
- @property inout(void[])[] gcRanges() inout nothrow @nogc
- {
- return _gcRanges[];
- }
-
-private:
- ModuleGroup _moduleGroup;
- void[][1] _gcRanges;
-}
-
-void initSections() nothrow @nogc
-{
- auto mbeg = cast(immutable ModuleInfo**)&__start_minfo;
- auto mend = cast(immutable ModuleInfo**)&__stop_minfo;
- _sections.moduleGroup = ModuleGroup(mbeg[0 .. mend - mbeg]);
-
- auto pbeg = cast(void*)&__dso_handle;
- auto pend = cast(void*)&_end;
- _sections._gcRanges[0] = pbeg[0 .. pend - pbeg];
-}
-
-void finiSections() nothrow @nogc
-{
-}
-
-void[] initTLSRanges() nothrow @nogc
-{
- auto pbeg = cast(void*)&_tlsstart;
- auto pend = cast(void*)&_tlsend;
- return pbeg[0 .. pend - pbeg];
-}
-
-void finiTLSRanges(void[] rng) nothrow @nogc
-{
-}
-
-void scanTLSRanges(void[] rng, scope void delegate(void* pbeg, void* pend) nothrow dg) nothrow
-{
- dg(rng.ptr, rng.ptr + rng.length);
-}
-
-private:
-
-__gshared SectionGroup _sections;
-
-extern(C)
-{
- /* Symbols created by the compiler/linker and inserted into the
- * object file that 'bracket' sections.
- */
- extern __gshared
- {
- void* __start_deh;
- void* __stop_deh;
- void* __start_minfo;
- void* __stop_minfo;
- int __dso_handle;
- int _end;
- }
-
- extern
- {
- void* _tlsstart;
- void* _tlsend;
- }
-}