Use gcc/sections/elf_shared.d on Solaris 11.5 (PR d/88150)
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. From-SVN: r270345
This commit is contained in:
parent
77086e0125
commit
4d51312053
|
@ -1,3 +1,24 @@
|
||||||
|
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>
|
2019-04-13 Iain Buclaw <ibuclaw@gdcproject.org>
|
||||||
|
|
||||||
* libdruntime/Makefile.am (DRUNTIME_CSOURCES): Remove bss_sections.c.
|
* libdruntime/Makefile.am (DRUNTIME_CSOURCES): Remove bss_sections.c.
|
||||||
|
|
|
@ -141,7 +141,7 @@ DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
|
||||||
core/sync/rwmutex.d core/sync/semaphore.d core/thread.d core/time.d \
|
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 \
|
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/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/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/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/unwind/pe.d object.d rt/aApply.d rt/aApplyR.d rt/aaA.d rt/adi.d \
|
||||||
|
|
|
@ -196,8 +196,8 @@ am__objects_1 = core/atomic.lo core/attribute.lo core/bitop.lo \
|
||||||
core/vararg.lo gcc/attribute.lo gcc/backtrace.lo \
|
core/vararg.lo gcc/attribute.lo gcc/backtrace.lo \
|
||||||
gcc/builtins.lo gcc/deh.lo gcc/sections/android.lo \
|
gcc/builtins.lo gcc/deh.lo gcc/sections/android.lo \
|
||||||
gcc/sections/elf_shared.lo gcc/sections/osx.lo \
|
gcc/sections/elf_shared.lo gcc/sections/osx.lo \
|
||||||
gcc/sections/package.lo gcc/sections/solaris.lo \
|
gcc/sections/package.lo gcc/sections/win32.lo \
|
||||||
gcc/sections/win32.lo gcc/sections/win64.lo gcc/unwind/arm.lo \
|
gcc/sections/win64.lo gcc/unwind/arm.lo \
|
||||||
gcc/unwind/arm_common.lo gcc/unwind/c6x.lo \
|
gcc/unwind/arm_common.lo gcc/unwind/c6x.lo \
|
||||||
gcc/unwind/generic.lo gcc/unwind/package.lo gcc/unwind/pe.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 \
|
object.lo rt/aApply.lo rt/aApplyR.lo rt/aaA.lo rt/adi.lo \
|
||||||
|
@ -737,7 +737,7 @@ DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
|
||||||
core/sync/rwmutex.d core/sync/semaphore.d core/thread.d core/time.d \
|
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 \
|
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/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/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/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/unwind/pe.d object.d rt/aApply.d rt/aApplyR.d rt/aaA.d rt/adi.d \
|
||||||
|
@ -1090,7 +1090,6 @@ gcc/sections/android.lo: gcc/sections/$(am__dirstamp)
|
||||||
gcc/sections/elf_shared.lo: gcc/sections/$(am__dirstamp)
|
gcc/sections/elf_shared.lo: gcc/sections/$(am__dirstamp)
|
||||||
gcc/sections/osx.lo: gcc/sections/$(am__dirstamp)
|
gcc/sections/osx.lo: gcc/sections/$(am__dirstamp)
|
||||||
gcc/sections/package.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/win32.lo: gcc/sections/$(am__dirstamp)
|
||||||
gcc/sections/win64.lo: gcc/sections/$(am__dirstamp)
|
gcc/sections/win64.lo: gcc/sections/$(am__dirstamp)
|
||||||
gcc/unwind/$(am__dirstamp):
|
gcc/unwind/$(am__dirstamp):
|
||||||
|
|
|
@ -28,6 +28,7 @@ else version (FreeBSD) enum SharedELF = true;
|
||||||
else version (NetBSD) enum SharedELF = true;
|
else version (NetBSD) enum SharedELF = true;
|
||||||
else version (DragonFlyBSD) enum SharedELF = true;
|
else version (DragonFlyBSD) enum SharedELF = true;
|
||||||
else version (CRuntime_UClibc) enum SharedELF = true;
|
else version (CRuntime_UClibc) enum SharedELF = true;
|
||||||
|
else version (Solaris) enum SharedELF = true;
|
||||||
else enum SharedELF = false;
|
else enum SharedELF = false;
|
||||||
static if (SharedELF):
|
static if (SharedELF):
|
||||||
|
|
||||||
|
@ -61,6 +62,13 @@ else version (DragonFlyBSD)
|
||||||
import core.sys.dragonflybsd.sys.elf;
|
import core.sys.dragonflybsd.sys.elf;
|
||||||
import core.sys.dragonflybsd.sys.link_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
|
else
|
||||||
{
|
{
|
||||||
static assert(0, "unimplemented");
|
static assert(0, "unimplemented");
|
||||||
|
@ -163,6 +171,7 @@ __gshared bool _isRuntimeInitialized;
|
||||||
version (FreeBSD) private __gshared void* dummy_ref;
|
version (FreeBSD) private __gshared void* dummy_ref;
|
||||||
version (DragonFlyBSD) private __gshared void* dummy_ref;
|
version (DragonFlyBSD) private __gshared void* dummy_ref;
|
||||||
version (NetBSD) 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.
|
* Gets called on program startup just before GC is initialized.
|
||||||
|
@ -174,6 +183,7 @@ void initSections() nothrow @nogc
|
||||||
version (FreeBSD) dummy_ref = &_d_dso_registry;
|
version (FreeBSD) dummy_ref = &_d_dso_registry;
|
||||||
version (DragonFlyBSD) dummy_ref = &_d_dso_registry;
|
version (DragonFlyBSD) dummy_ref = &_d_dso_registry;
|
||||||
version (NetBSD) dummy_ref = &_d_dso_registry;
|
version (NetBSD) dummy_ref = &_d_dso_registry;
|
||||||
|
version (Solaris) dummy_ref = &_d_dso_registry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -719,6 +729,8 @@ version (Shared)
|
||||||
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
|
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
|
||||||
else version (DragonFlyBSD)
|
else version (DragonFlyBSD)
|
||||||
strtab = cast(const(char)*)(info.dlpi_addr + dyn.d_un.d_ptr); // relocate
|
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
|
else
|
||||||
static assert(0, "unimplemented");
|
static assert(0, "unimplemented");
|
||||||
break;
|
break;
|
||||||
|
@ -745,7 +757,8 @@ version (Shared)
|
||||||
void* handleForName(const char* name)
|
void* handleForName(const char* name)
|
||||||
{
|
{
|
||||||
auto handle = .dlopen(name, RTLD_NOLOAD | RTLD_LAZY);
|
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;
|
return handle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -799,9 +812,10 @@ void scanSegments(in ref dl_phdr_info info, DSO* pdso) nothrow @nogc
|
||||||
*/
|
*/
|
||||||
bool findDSOInfoForAddr(in void* addr, dl_phdr_info* result=null) nothrow @nogc
|
bool findDSOInfoForAddr(in void* addr, dl_phdr_info* result=null) nothrow @nogc
|
||||||
{
|
{
|
||||||
version (linux) enum IterateManually = true;
|
version (linux) enum IterateManually = true;
|
||||||
else version (NetBSD) enum IterateManually = true;
|
else version (NetBSD) enum IterateManually = true;
|
||||||
else enum IterateManually = false;
|
else version (Solaris) enum IterateManually = true;
|
||||||
|
else enum IterateManually = false;
|
||||||
|
|
||||||
static if (IterateManually)
|
static if (IterateManually)
|
||||||
{
|
{
|
||||||
|
@ -864,6 +878,7 @@ version (linux) import core.sys.linux.errno : program_invocation_name;
|
||||||
version (FreeBSD) extern(C) const(char)* getprogname() nothrow @nogc;
|
version (FreeBSD) extern(C) const(char)* getprogname() nothrow @nogc;
|
||||||
version (DragonFlyBSD) 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 (NetBSD) extern(C) const(char)* getprogname() nothrow @nogc;
|
||||||
|
version (Solaris) extern(C) const(char)* getprogname() nothrow @nogc;
|
||||||
|
|
||||||
@property const(char)* progname() nothrow @nogc
|
@property const(char)* progname() nothrow @nogc
|
||||||
{
|
{
|
||||||
|
@ -871,6 +886,7 @@ version (NetBSD) extern(C) const(char)* getprogname() nothrow @nogc;
|
||||||
version (FreeBSD) return getprogname();
|
version (FreeBSD) return getprogname();
|
||||||
version (DragonFlyBSD) return getprogname();
|
version (DragonFlyBSD) return getprogname();
|
||||||
version (NetBSD) return getprogname();
|
version (NetBSD) return getprogname();
|
||||||
|
version (Solaris) return getprogname();
|
||||||
}
|
}
|
||||||
|
|
||||||
const(char)[] dsoName(const char* dlpi_name) nothrow @nogc
|
const(char)[] dsoName(const char* dlpi_name) nothrow @nogc
|
||||||
|
|
|
@ -35,7 +35,7 @@ else version (NetBSD)
|
||||||
else version (DragonFlyBSD)
|
else version (DragonFlyBSD)
|
||||||
public import gcc.sections.elf_shared;
|
public import gcc.sections.elf_shared;
|
||||||
else version (Solaris)
|
else version (Solaris)
|
||||||
public import gcc.sections.solaris;
|
public import gcc.sections.elf_shared;
|
||||||
else version (OSX)
|
else version (OSX)
|
||||||
public import gcc.sections.osx;
|
public import gcc.sections.osx;
|
||||||
else version (CRuntime_DigitalMars)
|
else version (CRuntime_DigitalMars)
|
||||||
|
|
|
@ -1,126 +0,0 @@
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue