[Issue 24427] New: Crash when dlopen'ed library not dlclose'd explicitly
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Fri Mar  1 20:35:03 UTC 2024
    
    
  
https://issues.dlang.org/show_bug.cgi?id=24427
          Issue ID: 24427
           Summary: Crash when dlopen'ed library not dlclose'd explicitly
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: major
          Priority: P1
         Component: druntime
          Assignee: nobody at puremagic.com
          Reporter: sturtivant at gmail.com
Compiling pure C (no D source) with dmd and using dynamic loading (not dynamic
linking) causes a crash on program exit under certain conditions, where a gcc
compilation of the same source works fine.
Rewriting the C in D and compiling with dmd with identical switches causes the
same crash.
The following two examples are attached, using dlfcn.h from C source and
core.sys.posix.dlfcn from D source. Both crash.
A.
====
dmd -c main.c
dmd -of=main -L-E main.o -L-ldl
dmd -c -fPIC dynamic_lib.c
dmd -of=dynamic_lib.so -shared -fPIC dynamic_lib.o
====
B.
====
dmd -c main.d
dmd -of=main -L-E main.o -L-ldl
dmd -c -fPIC dynamic_lib.d
dmd -of=dynamic_lib.so -shared -fPIC dynamic_lib.o
====
A. and B.
* main dynamically loads dynamic_lib.so
* main calls a function in dynamic_lib.so which calls a function in main
* main is linked with a switch to export all symbols so this works
When A. is built with gcc it works fine.
Failure to call dlclose before main exits causes the crash; main runs correctly
before that. (If the commented out call of dlclose is made then everything
works.)
Crash:
====
$ main
1
2
3
4
Aborting from src/rt/sections_elf_shared.d(512) DSO being unregistered isn't
current last one.Aborted (core dumped)
====
This crash occurs only if
1.
Both main and dynamic_lib are built with dmd.
(either from C source or D source)
(If one of main, dynamic_lib.so is built with gcc, everything works.)
2.
Main is NOT linked with -defaultlib=libphobos2.so
(irrespective of how dynamic_lib is linked to phobos)
--
    
    
More information about the Digitalmars-d-bugs
mailing list