Use gcc/sections/elf_shared.d on Solaris 11.5 (PR d/88150)
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Sun, 14 Apr 2019 09:18:42 +0000 (09:18 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Sun, 14 Apr 2019 09:18:42 +0000 (09:18 +0000)
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

libphobos/ChangeLog
libphobos/libdruntime/Makefile.am
libphobos/libdruntime/Makefile.in
libphobos/libdruntime/gcc/sections/elf_shared.d
libphobos/libdruntime/gcc/sections/package.d
libphobos/libdruntime/gcc/sections/solaris.d [deleted file]

index 3dd4bbd68fa32864b3a156daa5f1cce9f3988d9c..b70288b4064baaf4104f8fe8e41f6d642f316334 100644 (file)
@@ -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>
 
        * libdruntime/Makefile.am (DRUNTIME_CSOURCES): Remove bss_sections.c.
index 8e36ce214499f354f399b1197af720f80572eec5..8cdea52eb5c0d4198041b5de307c9ceb72c6d279 100644 (file)
@@ -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/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 \
index 0a27afac545b804f41d315c81a26a06636134de8..efb1b952cf8e3a1d363b3235470e78579c634e0c 100644 (file)
@@ -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 \
        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 \
@@ -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/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 \
@@ -1090,7 +1090,6 @@ gcc/sections/android.lo: gcc/sections/$(am__dirstamp)
 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):
index f70c2329ade3cd0a70960df537bca89be0bbc3e0..40857ce28ede47993bbdba4d0dcc3a1afa689f64 100644 (file)
@@ -28,6 +28,7 @@ else version (FreeBSD) enum SharedELF = true;
 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):
 
@@ -61,6 +62,13 @@ else version (DragonFlyBSD)
     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");
@@ -163,6 +171,7 @@ __gshared bool _isRuntimeInitialized;
 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.
@@ -174,6 +183,7 @@ void initSections() nothrow @nogc
     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;
 }
 
 
@@ -719,6 +729,8 @@ version (Shared)
                     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;
@@ -745,7 +757,8 @@ version (Shared)
     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;
     }
 }
@@ -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
 {
-    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)
     {
@@ -864,6 +878,7 @@ version (linux) import core.sys.linux.errno : program_invocation_name;
 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
 {
@@ -871,6 +886,7 @@ version (NetBSD) extern(C) const(char)* getprogname() 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
index 07617ea977fa58da4c14e1da331f5dad46c8005f..02c9752ef528a93f5ba030109c6ddc00fe3a5e04 100644 (file)
@@ -35,7 +35,7 @@ else version (NetBSD)
 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)
diff --git a/libphobos/libdruntime/gcc/sections/solaris.d b/libphobos/libdruntime/gcc/sections/solaris.d
deleted file mode 100644 (file)
index e66325b..0000000
+++ /dev/null
@@ -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;
-    }
-}