]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use libuv's shared library handling capabilities
authorOndřej Surý <ondrej@sury.org>
Tue, 20 Oct 2020 21:51:08 +0000 (23:51 +0200)
committerMichał Kępień <michal@isc.org>
Wed, 28 Oct 2020 14:48:58 +0000 (15:48 +0100)
While libltdl is a feature-rich library, BIND 9 code only uses its basic
capabilities, which are also provided by libuv and which BIND 9 already
uses for other purposes.  As libuv's cross-platform shared library
handling interface is modeled after the POSIX dlopen() interface,
converting code using the latter to the former is simple.  Replace
libltdl function calls with their libuv counterparts, refactoring the
code as necessary.  Remove all use of libltdl from the BIND 9 source
tree.

43 files changed:
.gitignore
.gitlab-ci.yml
.lgtm.yml
Makefile.am
Makefile.top
README.md
bin/named/Makefile.am
bin/named/unix/dlz_dlopen_driver.c
bin/plugins/filter-aaaa.c
bin/tests/system/dlzexternal/driver/driver.c
bin/tests/system/dlzexternal/ns1/named.conf.in
bin/tests/system/dyndb/driver/driver.c
bin/tests/system/dyndb/ns1/named.conf.in
bin/tests/system/filter-aaaa/conf/bad1.conf
bin/tests/system/filter-aaaa/conf/bad2.conf
bin/tests/system/filter-aaaa/conf/bad3.conf
bin/tests/system/filter-aaaa/conf/bad4.conf
bin/tests/system/filter-aaaa/conf/bad5.conf
bin/tests/system/filter-aaaa/conf/good1.conf
bin/tests/system/filter-aaaa/conf/good2.conf
bin/tests/system/filter-aaaa/conf/good3.conf
bin/tests/system/filter-aaaa/conf/good4.conf
bin/tests/system/filter-aaaa/conf/good5.conf
bin/tests/system/filter-aaaa/ns1/named1.conf.in
bin/tests/system/filter-aaaa/ns1/named2.conf.in
bin/tests/system/filter-aaaa/ns2/named1.conf.in
bin/tests/system/filter-aaaa/ns2/named2.conf.in
bin/tests/system/filter-aaaa/ns3/named1.conf.in
bin/tests/system/filter-aaaa/ns3/named2.conf.in
bin/tests/system/filter-aaaa/ns4/named1.conf.in
bin/tests/system/filter-aaaa/ns4/named2.conf.in
bin/tests/system/filter-aaaa/ns5/named.conf.in
configure.ac
lib/dns/Makefile.am
lib/dns/dyndb.c
lib/dns/win32/libdns.vcxproj.in
lib/isc/Makefile.am
lib/isc/win32/ltdl.h [deleted file]
lib/ns/Makefile.am
lib/ns/hooks.c
lib/ns/win32/libns.vcxproj.in
util/copyrights
util/suppressions.txt

index 871997de021e94142547bb550f0dfed28e821e38..11d5f33890f1ab3d54c6d3617d8ceb2258c825dd 100644 (file)
@@ -39,7 +39,6 @@ __pycache__/
 /depcomp
 /install-sh
 /isc-config.sh
-/libltdl/*
 /libtool
 /ltmain.sh
 /m4/libtool.m4
index b6fc343daa5a77467fea27b25c9de0ec6f57f63c..99ba57ceeb7ed1f7dae66be8dc58ec1a98c22ab7 100644 (file)
@@ -1527,9 +1527,9 @@ gcov:
     # Generate XML file in the Cobertura XML format suitable for use by GitLab
     # for the purpose of displaying code coverage information in the diff view
     # of a given merge request.
-    - gcovr --root . --exclude-directories bin/tests --exclude-directories doc --exclude-directories libltdl --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' --xml -o coverage.xml
-    - gcovr --root . --exclude-directories bin/tests --exclude-directories doc --exclude-directories libltdl --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' --html-details -o coverage.html
-    - gcovr --root . --exclude-directories bin/tests --exclude-directories doc --exclude-directories libltdl --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' -o coverage.txt
+    - gcovr --root . --exclude-directories bin/tests --exclude-directories doc  --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' --xml -o coverage.xml
+    - gcovr --root . --exclude-directories bin/tests --exclude-directories doc  --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' --html-details -o coverage.html
+    - gcovr --root . --exclude-directories bin/tests --exclude-directories doc  --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' -o coverage.txt
     - tail -n 3 coverage.txt
   artifacts:
     paths:
index faf16513fa8c6f592f84b9bacb3be65995b91c7b..3f36c409fafd81a1f054b0a7b68c05cbdaa40f05 100644 (file)
--- a/.lgtm.yml
+++ b/.lgtm.yml
@@ -29,7 +29,6 @@ path_classifiers:
     - "**/*.5"
     - "**/*.8"
 queries:
-  - exclude: libltdl/
   - exclude: fuzz/
   - exclude: "bin/tests/system/*/ans*/*.py"
   - exclude: cpp/use-of-goto
index 88c72f144de2fa9b2801600622b88b8f3f73cfa5..f2005cfab78436159e77c055202e4cbe3d2d80b7 100644 (file)
@@ -1,6 +1,6 @@
 include $(top_srcdir)/Makefile.top
 
-SUBDIRS = . libltdl lib doc bin fuzz
+SUBDIRS = . lib doc bin fuzz
 
 BUILT_SOURCES = bind.keys.h
 CLEANFILES = bind.keys.h
index 66aaecf7bdace1e4869cff6f431d02e201a02c66..c784c175188e7a75c3d05cc9ad0d8f559230cd52 100644 (file)
@@ -93,9 +93,3 @@ LIBBIND9_CFLAGS = \
 
 LIBBIND9_LIBS = \
        $(top_builddir)/lib/bind9/libbind9.la
-
-LIBLTDL_CFLAGS = \
-       -I$(top_srcdir)/libltdl
-
-LIBLTDL_LIBS = \
-       $(top_builddir)/libltdl/libltdlc.la
index 18a2ae3eb6065a4c7766ddebc1fc37917b49a578..39211079236c1a0f252f609254172cb5a044efc0 100644 (file)
--- a/README.md
+++ b/README.md
@@ -201,7 +201,6 @@ installed:
     autoconf (includes autoreconf)
     automake
     libtool
-    libltdl-dev (Debian) / libtool-ltdl-dev (Fedora/CentOS) / libltdl (FreeBSD)
 
 #### <a name="opts"/> Compile-time options
 
index ce783b8c309a483cf0eb2749438469b9de68025f..1c9483a0c55edc7879160b1a0f0e3e9df11bb589 100644 (file)
@@ -9,7 +9,6 @@ AM_CPPFLAGS +=                          \
        $(LIBISCCC_CFLAGS)              \
        $(LIBISCCFG_CFLAGS)             \
        $(LIBBIND9_CFLAGS)              \
-       $(LIBLTDL_CFLAGS)               \
        $(OPENSSL_CFLAGS)               \
        $(LIBCAP_CFLAGS)                \
        $(LMDB_CFLAGS)                  \
index 4cee110f786c1a8227785bf0f05cd3e505f74234..df119849701381e6419f178e8438aac5b0cc0b8c 100644 (file)
  */
 
 #include <inttypes.h>
-#include <ltdl.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <uv.h>
 
 #include <isc/mem.h>
 #include <isc/print.h>
@@ -34,7 +34,7 @@ typedef struct dlopen_data {
        isc_mem_t *mctx;
        char *dl_path;
        char *dlzname;
-       void *dl_handle;
+       uv_lib_t dl_handle;
        void *dbdata;
        unsigned int flags;
        isc_mutex_t lock;
@@ -180,9 +180,10 @@ dlopen_dlz_lookup(const char *zone, const char *name, void *driverarg,
  */
 static void *
 dl_load_symbol(dlopen_data_t *cd, const char *symbol, bool mandatory) {
-       void *ptr = lt_dlsym((lt_dlhandle)cd->dl_handle, symbol);
-       if (ptr == NULL) {
-               const char *errmsg = lt_dlerror();
+       void *ptr = NULL;
+       int r = uv_dlsym(&cd->dl_handle, symbol, &ptr);
+       if (r != 0) {
+               const char *errmsg = uv_dlerror(&cd->dl_handle);
                if (errmsg == NULL) {
                        errmsg = "returned function pointer is NULL";
                }
@@ -209,6 +210,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
        dlopen_data_t *cd;
        isc_mem_t *mctx = NULL;
        isc_result_t result = ISC_R_FAILURE;
+       int r;
 
        UNUSED(driverarg);
 
@@ -220,10 +222,6 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
                return (ISC_R_FAILURE);
        }
 
-       if (lt_dlinit() != 0) {
-               return (ISC_R_FAILURE);
-       }
-
        isc_mem_create(&mctx);
        cd = isc_mem_get(mctx, sizeof(*cd));
        memset(cd, 0, sizeof(*cd));
@@ -236,9 +234,9 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
        /* Initialize the lock */
        isc_mutex_init(&cd->lock);
 
-       cd->dl_handle = lt_dlopenext(cd->dl_path);
-       if (cd->dl_handle == NULL) {
-               const char *errmsg = lt_dlerror();
+       r = uv_dlopen(cd->dl_path, &cd->dl_handle);
+       if (r != 0) {
+               const char *errmsg = uv_dlerror(&cd->dl_handle);
                if (errmsg == NULL) {
                        errmsg = "unknown error";
                }
@@ -347,9 +345,7 @@ dlopen_dlz_destroy(void *driverarg, void *dbdata) {
                MAYBE_UNLOCK(cd);
        }
 
-       if (cd->dl_handle) {
-               lt_dlclose(cd->dl_handle);
-       }
+       uv_dlclose(&cd->dl_handle);
        isc_mutex_destroy(&cd->lock);
        isc_mem_free(cd->mctx, cd->dl_path);
        isc_mem_free(cd->mctx, cd->dlzname);
index 3ba38f8fc2ea21a608e7b6d6e189ad6ab2047a1f..f530b596ad119b463c8f176142263cb4158476b5 100644 (file)
 
 /* aliases for the exported symbols */
 
-#define plugin_destroy filter_aaaa_LTX_plugin_destroy
-#define plugin_register filter_aaaa_LTX_plugin_register
-#define plugin_version filter_aaaa_LTX_plugin_version
-#define plugin_check   filter_aaaa_LTX_plugin_check
-
 #include <inttypes.h>
 #include <stdbool.h>
 #include <string.h>
index 952171b38bc9d554544ca4a0b3f80ae37b478b16..3a98a32f5b2410888bd524b3640ae5a30b23bd46 100644 (file)
 
 /* aliases for exported symbols */
 
-#define dlz_version     dlzexternal_LTX_dlz_version
-#define dlz_create      dlzexternal_LTX_dlz_create
-#define dlz_destroy     dlzexternal_LTX_dlz_destroy
-#define dlz_findzonedb  dlzexternal_LTX_dlz_findzonedb
-#define dlz_lookup      dlzexternal_LTX_dlz_lookup
-#define dlz_allowzonexfr dlzexternal_LTX_dlz_allowzonexfr
-#define dlz_allnodes    dlzexternal_LTX_dlz_allnodes
-#define dlz_newversion  dlzexternal_LTX_dlz_newversion
-#define dlz_closeversion dlzexternal_LTX_dlz_closeversion
-#define dlz_configure   dlzexternal_LTX_dlz_configure
-#define dlz_ssumatch    dlzexternal_LTX_dlz_ssumatch
-#define dlz_addrdataset         dlzexternal_LTX_dlz_addrdataset
-#define dlz_sbrdataset  dlzexternal_LTX_dlz_sbrdataset
-#define dlz_delrdataset         dlzexternal_LTX_dlz_delrdataset
-
 dlz_dlopen_version_t dlz_version;
 dlz_dlopen_create_t dlz_create;
 dlz_dlopen_destroy_t dlz_destroy;
index 8eb46cc33f9893042d7758d6f9c7141f31b158a6..1fa0d458090dec3bd4351a42df4bd57393d547de 100644 (file)
@@ -35,29 +35,29 @@ controls {
 };
 
 dlz "example one" {
-       database "dlopen ../driver/dlzexternal.la example.nil";
+       database "dlopen ../driver/.libs/dlzexternal.so example.nil";
 };
 
 dlz "example two" {
-       database "dlopen ../driver/dlzexternal.la alternate.nil";
+       database "dlopen ../driver/.libs/dlzexternal.so alternate.nil";
 };
 
 dlz "example three" {
-       database "dlopen ../driver/dlzexternal.la example.org";
+       database "dlopen ../driver/.libs/dlzexternal.so example.org";
 };
 
 dlz "unsearched1" {
-       database "dlopen ../driver/dlzexternal.la other.nil";
+       database "dlopen ../driver/.libs/dlzexternal.so other.nil";
        search no;
 };
 
 dlz "unsearched2" {
-       database "dlopen ../driver/dlzexternal.la zone.nil";
+       database "dlopen ../driver/.libs/dlzexternal.so zone.nil";
        search no;
 };
 
 dlz redzone {
-       database "dlopen ../driver/dlzexternal.la .";
+       database "dlopen ../driver/.libs/dlzexternal.so .";
        search no;
 };
 
index 0ed2937bcec4fd3226e10b1eb0d171f714371fea..1af50c6c14ec47312a362e96de73e9d5c8bee1ce 100644 (file)
 
 /* aliases for the exported symbols */
 
-#define dyndb_init    sample_LTX_dyndb_init
-#define dyndb_destroy sample_LTX_dyndb_destroy
-#define dyndb_version sample_LTX_dyndb_version
-
 dns_dyndb_destroy_t dyndb_destroy;
 dns_dyndb_register_t dyndb_init;
 dns_dyndb_version_t dyndb_version;
index 49828ef620669c4751a13077b377e4a26972ef27..bc49e5d64aca0a721aec0d1e2cbddb671a8441da 100644 (file)
@@ -33,5 +33,5 @@ controls {
        inet 10.53.0.1 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
 };
 
-dyndb sample "../driver/sample.la" { ipv4.example.nil. in-addr.arpa. };
-dyndb sample2 "../driver/sample.la" { ipv6.example.nil. 8.b.d.0.1.0.0.2.ip6.arpa. };
+dyndb sample "../driver/.libs/sample.so" { ipv4.example.nil. in-addr.arpa. };
+dyndb sample2 "../driver/.libs/sample.so" { ipv6.example.nil. 8.b.d.0.1.0.0.2.ip6.arpa. };
index 97ce0dcad74e8f7abf8b4638e80a52489f4fc005..e09f27e6f39ca7fc77ee69dab4b2759cf4c43b9d 100644 (file)
@@ -9,7 +9,7 @@
  * information regarding copyright ownership.
  */
 
-plugin query "../../../plugins/filter-aaaa.la" {
+plugin query "../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 yes;
        filter-aaaa { none; };
 };
index a9410aa5235621a90de6ad4a06bbee7650da1a27..bc22c3a9e7db445f77e506128ec5dff2385d8042 100644 (file)
@@ -9,7 +9,7 @@
  * information regarding copyright ownership.
  */
 
-plugin query "../../../plugins/filter-aaaa.la" {
+plugin query "../../../plugins/.libs/filter-aaaa.so" {
        /*
         * While this matches the defaults, it is not a good configuration
         * to have in named.conf as the two options contradict each other
index 091cf147aaa98ab54e28443fb015ef90194fcd81..9d4aa9a6fd225603bf3d5e1fa8fb49cf207e9866 100644 (file)
@@ -10,7 +10,7 @@
  */
 
 view myview {
-       plugin query "../../../plugins/filter-aaaa.la" {
+       plugin query "../../../plugins/.libs/filter-aaaa.so" {
                filter-aaaa-on-v4 no;
                filter-aaaa { any; };
        };
index a21ac4fdfb5e9f2d1f5cb0e32a1d6ab488ef71ad..2db334c815d9635b60fa6c393cc659367cabf2f1 100644 (file)
@@ -10,7 +10,7 @@
  */
 
 view myview {
-       plugin query "../../../plugins/filter-aaaa.la" {
+       plugin query "../../../plugins/.libs/filter-aaaa.so" {
                filter-aaaa-on-v4 yes;
                filter-aaaa { none; };
        };
index 54c3abb9ee26dfcc442bff389526ea83c42ec67d..7aa2633e58caac4fc70f4e8dc007585bc642eb2c 100644 (file)
@@ -9,7 +9,7 @@
  * information regarding copyright ownership.
  */
 
-plugin query "../../../plugins/filter-aaaa.la" {
+plugin query "../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 yes;
        filter-aaaa { 1.0.0.0/8; };
 };
index 9f29bfd15b735aaad8f1703fd6b73512ba34f7b5..d1b26c55d41f6841a8c8dc650c0fd0f14d312465 100644 (file)
@@ -9,6 +9,6 @@
  * information regarding copyright ownership.
  */
 
-plugin query "../../../plugins/filter-aaaa.la" {
+plugin query "../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 yes;
 };
index 93c7abdb487767c808cc10cdcf9fa704e071d429..fb9073a0fc370986132e8465d5fa48240a777533 100644 (file)
@@ -9,6 +9,6 @@
  * information regarding copyright ownership.
  */
 
-plugin query "../../../plugins/filter-aaaa.la" {
+plugin query "../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 break-dnssec;
 };
index 853f341aa113dcdd9e8cc076cc4901d99612ebb0..4021d34e1e80204d92349df497eefd53c8b3ae05 100644 (file)
@@ -9,7 +9,7 @@
  * information regarding copyright ownership.
  */
 
-plugin query "../../../plugins/filter-aaaa.la" {
+plugin query "../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 break-dnssec;
        filter-aaaa { 1.0.0.0/8; };
 };
index dad7b5bfc3e6b143095a914b51095b00bdb005f8..0cdb747c2188b9ec42a2ef50a4405ed062c097e9 100644 (file)
@@ -9,7 +9,7 @@
  * information regarding copyright ownership.
  */
 
-plugin query "../../../plugins/filter-aaaa.la" {
+plugin query "../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 yes;
        filter-aaaa { 1.0.0.0/8; };
 };
index c26e57a5d66c3fe8a5db292970c34959db8bc84e..0c2cd6e52c14f15791a9b3359a6516196af8048f 100644 (file)
@@ -10,7 +10,7 @@
  */
 
 view myview {
-       plugin query "../../../plugins/filter-aaaa.la" {
+       plugin query "../../../plugins/.libs/filter-aaaa.so" {
                filter-aaaa-on-v4 yes;
                filter-aaaa { 1.0.0.0/8; };
        };
index a72007d76ea332333a79504bdd0e8da3f392df7b..6996b9601ce4c22c0589ca865660792f16d8e18b 100644 (file)
@@ -25,7 +25,7 @@ options {
 
 acl filterees { 10.53.0.1; };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 yes;
        filter-aaaa { filterees; };
 };
index fbc4b721d54e0795453f5664ce8c98bb2082987c..7fcaec11e59599812e5345a48b8f2c156ba23fcb 100644 (file)
@@ -23,7 +23,7 @@ options {
        minimal-responses no;
 };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v6 yes;
        filter-aaaa { fd92:7065:b8e:ffff::1; };
 };
index bd2063417058207975cb3da04005fa4d4244fc96..bb2f6cbfc2f5f27e2b4d468e384278e35de5dec9 100644 (file)
@@ -23,7 +23,7 @@ options {
        minimal-responses no;
 };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 yes;
        filter-aaaa { 10.53.0.2; };
 };
index 831e017f6f858da0fc0bd8c2975a81d047df57d8..9d779d9870788a594c931720eedf5b6cb6eecaf4 100644 (file)
@@ -23,7 +23,7 @@ options {
        minimal-responses no;
 };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v6 yes;
        filter-aaaa { fd92:7065:b8e:ffff::2; };
 };
index db30e0b469669615b7e8b35b3a154f9c33220c80..602fadd5738e9c8190c6317d572922280bed3317 100644 (file)
@@ -23,7 +23,7 @@ options {
        minimal-responses no;
 };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 break-dnssec;
        filter-aaaa { 10.53.0.3; };
 };
index 48dc568cf1a8bb55a65a2f4b76dc9a4553aa636d..372cf66b11dddff3442a76de33d5104b206da3d1 100644 (file)
@@ -23,7 +23,7 @@ options {
        minimal-responses no;
 };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v6 break-dnssec;
        filter-aaaa { fd92:7065:b8e:ffff::3; };
 };
index 44fcd7cdbcfb3f57168598e8e2a83e2e94e23838..0f48a9e541896f94ab0d45b56e6c8bc224b3fa21 100644 (file)
@@ -23,7 +23,7 @@ options {
        minimal-responses no;
 };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 break-dnssec;
        filter-aaaa { 10.53.0.4; };
 };
index 93af1bae13412e88456906ba5eae93cf4169b2ef..c11a8024edcd57aa9f65ad63c9e3c4ad75af7186 100644 (file)
@@ -23,7 +23,7 @@ options {
        minimal-responses no;
 };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v6 break-dnssec;
        filter-aaaa { fd92:7065:b8e:ffff::4; };
 };
index 4712c5aef454a4932c95499b110319a1ed570827..4d3aa0b76e1d2a531a120f3201fa6158ab564791 100644 (file)
@@ -28,7 +28,7 @@ options {
        minimal-responses no;
 };
 
-plugin query "../../../../plugins/filter-aaaa.la" {
+plugin query "../../../../plugins/.libs/filter-aaaa.so" {
        filter-aaaa-on-v4 break-dnssec;
        filter-aaaa { any; };
 };
index 54ea36f2c3b17575868b47b05330c311f8c5ab7e..6c16a76c19066979ab6ec31026c3f5c82dc6ff81 100644 (file)
@@ -124,10 +124,6 @@ LT_INIT([disable-static dlopen pic-only])
 AS_IF([test "$enable_static" != "no" && test "$enable_developer" != "yes"],
       [AC_MSG_ERROR([Static linking is not supported as it disables dlopen() and certain security features (e.g. RELRO, ASLR)])])
 
-LT_CONFIG_LTDL_DIR([libltdl])
-LTDL_INIT([recursive])
-AC_CONFIG_FILES([libltdl/Makefile])
-
 #
 # Set the default CFLAGS and CPPFLAGS
 #
index 78bd453f90005f3c06cecc2ae4d6cf9c5a4889e0..e830aed29580aa76b39bc0de13432c743807a38a 100644 (file)
@@ -25,7 +25,7 @@ gen_SOURCES = gen.c gen-unix.h
 gen_CPPFLAGS =                 \
        $(AM_CPPFLAGS)
 
-EXTRA_DIST =           \
+EXTRA_DIST =           \
        api             \
        dnstap.proto    \
        gen-win32.h     \
@@ -277,10 +277,10 @@ endif
 
 libdns_la_CPPFLAGS =           \
        $(AM_CPPFLAGS)          \
-       $(LIBISC_CFLAGS)        \
        $(LIBDNS_CFLAGS)        \
-       $(OPENSSL_CFLAGS)       \
-       $(LIBLTDL_CFLAGS)
+       $(LIBISC_CFLAGS)        \
+       $(LIBUV_CFLAGS)         \
+       $(OPENSSL_CFLAGS)
 
 libdns_la_LDFLAGS =            \
        $(AM_LDFLAGS)           \
@@ -288,6 +288,7 @@ libdns_la_LDFLAGS =         \
 
 libdns_la_LIBADD =             \
        $(LIBISC_LIBS)          \
+       $(LIBUV_LIBS)           \
        $(OPENSSL_LIBS)
 
 if HAVE_JSON_C
index b91a2b9f2621cb7743c3a1cb8b41a95895cb1d52..d9c536e91d8dec2938a440f5e7283d78c523f45f 100644 (file)
@@ -9,8 +9,8 @@
  * information regarding copyright ownership.
  */
 
-#include <ltdl.h>
 #include <string.h>
+#include <uv.h>
 
 #include <isc/buffer.h>
 #include <isc/mem.h>
@@ -38,7 +38,7 @@
 typedef struct dyndb_implementation dyndb_implementation_t;
 struct dyndb_implementation {
        isc_mem_t *mctx;
-       void *handle;
+       uv_lib_t handle;
        dns_dyndb_register_t *register_func;
        dns_dyndb_destroy_t *destroy_func;
        char *name;
@@ -79,16 +79,17 @@ impfind(const char *name) {
 }
 
 static isc_result_t
-load_symbol(lt_dlhandle handle, const char *filename, const char *symbol_name,
+load_symbol(uv_lib_t *handle, const char *filename, const char *symbol_name,
            void **symbolp) {
        void *symbol;
+       int r;
 
        REQUIRE(handle != NULL);
        REQUIRE(symbolp != NULL && *symbolp == NULL);
 
-       symbol = lt_dlsym(handle, symbol_name);
-       if (symbol == NULL) {
-               const char *errmsg = lt_dlerror();
+       r = uv_dlsym(handle, symbol_name, &symbol);
+       if (r != 0) {
+               const char *errmsg = uv_dlerror(handle);
                if (errmsg == NULL) {
                        errmsg = "returned function pointer is NULL";
                }
@@ -115,6 +116,7 @@ load_library(isc_mem_t *mctx, const char *filename, const char *instname,
        dyndb_implementation_t *imp = NULL;
        dns_dyndb_version_t *version_func = NULL;
        int version;
+       int r;
 
        REQUIRE(impp != NULL && *impp == NULL);
 
@@ -130,13 +132,9 @@ load_library(isc_mem_t *mctx, const char *filename, const char *instname,
 
        INIT_LINK(imp, link);
 
-       if (lt_dlinit() != 0) {
-               CHECK(ISC_R_FAILURE);
-       }
-
-       imp->handle = lt_dlopen(filename);
-       if (imp->handle == NULL) {
-               const char *errmsg = lt_dlerror();
+       r = uv_dlopen(filename, &imp->handle);
+       if (r != 0) {
+               const char *errmsg = uv_dlerror(&imp->handle);
                if (errmsg == NULL) {
                        errmsg = "unknown error";
                }
@@ -148,7 +146,7 @@ load_library(isc_mem_t *mctx, const char *filename, const char *instname,
                CHECK(ISC_R_FAILURE);
        }
 
-       CHECK(load_symbol(imp->handle, filename, "dyndb_version",
+       CHECK(load_symbol(&imp->handle, filename, "dyndb_version",
                          (void **)&version_func));
 
        version = version_func(NULL);
@@ -162,9 +160,9 @@ load_library(isc_mem_t *mctx, const char *filename, const char *instname,
                CHECK(ISC_R_FAILURE);
        }
 
-       CHECK(load_symbol(imp->handle, filename, "dyndb_init",
+       CHECK(load_symbol(&imp->handle, filename, "dyndb_init",
                          (void **)&imp->register_func));
-       CHECK(load_symbol(imp->handle, filename, "dyndb_destroy",
+       CHECK(load_symbol(&imp->handle, filename, "dyndb_destroy",
                          (void **)&imp->destroy_func));
 
        *impp = imp;
@@ -196,9 +194,7 @@ unload_library(dyndb_implementation_t **impp) {
         * This is a resource leak, but there is nothing we can currently do
         * about it due to how configuration loading/reloading is designed.
         */
-       if (imp->handle != NULL) {
-               (void)lt_dlclose(imp->handle);
-       }
+       /* uv_dlclose(&imp->handle); */
        isc_mem_free(imp->mctx, imp->name);
        isc_mem_putanddetach(&imp->mctx, imp, sizeof(*imp));
 }
index 6c9fbd62b8cef533671b5f205e3cc9ecc03e8c1c..cc008979dd174c67c970082dac6f4f28aadec21b 100644 (file)
@@ -61,7 +61,7 @@
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>BIND9;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBDNS_EXPORTS;%(PreprocessorDefinitions);%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ForcedIncludeFiles>..\..\..\config.h</ForcedIncludeFiles>
-      <AdditionalIncludeDirectories>.\;..\..\..\;include;..\include;..\..\isc;..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;@LIBXML2_INC@@OPENSSL_INC@@GSSAPI_INC@@GEOIP_INC@%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\..\;include;..\include;..\..\isc;..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;@LIBXML2_INC@@LIBUV_INC@@OPENSSL_INC@@GSSAPI_INC@@GEOIP_INC@%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -75,7 +75,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
       <AdditionalLibraryDirectories>..\..\isc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>@OPENSSL_LIB@libisc.lib;@LIBXML2_LIB@@GSSAPI_LIB@@KRB5_LIB@@GEOIP_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>@LIBUV_LIB@@OPENSSL_LIB@libisc.lib;@LIBXML2_LIB@@GSSAPI_LIB@@KRB5_LIB@@GEOIP_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ModuleDefinitionFile>$(ProjectName).def</ModuleDefinitionFile>
       <ImportLibrary>.\$(Configuration)\$(ProjectName).lib</ImportLibrary>
     </Link>
@@ -91,7 +91,7 @@
       <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
       <PreprocessorDefinitions>BIND9;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBDNS_EXPORTS;%(PreprocessorDefinitions);%(PreprocessorDefinitions);%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ForcedIncludeFiles>..\..\..\config.h</ForcedIncludeFiles>
-      <AdditionalIncludeDirectories>.\;..\..\..\;include;..\include;..\..\isc;..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;@LIBXML2_INC@@OPENSSL_INC@@GSSAPI_INC@@GEOIP_INC@%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\..\;include;..\include;..\..\isc;..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;@LIBXML2_INC@@LIBUV_INC@@OPENSSL_INC@@GSSAPI_INC@@GEOIP_INC@%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <StringPooling>true</StringPooling>
       <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
       <OptimizeReferences>true</OptimizeReferences>
       <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
       <AdditionalLibraryDirectories>..\..\isc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>@OPENSSL_LIB@libisc.lib;@LIBXML2_LIB@@GSSAPI_LIB@@KRB5_LIB@@GEOIP_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>@LIBUV_LIB@@OPENSSL_LIB@libisc.lib;@LIBXML2_LIB@@GSSAPI_LIB@@KRB5_LIB@@GEOIP_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ModuleDefinitionFile>$(ProjectName).def</ModuleDefinitionFile>
       <ImportLibrary>.\$(Configuration)\$(ProjectName).lib</ImportLibrary>
       <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
index 717da02e5612a366ccafca9b67db9a892768e813..7b025e1d0de28fefebce0845fb4f9ed1c1ad4cd1 100644 (file)
@@ -230,7 +230,6 @@ libisc_la_LDFLAGS =         \
        $(libisc_VERSION_INFO)
 
 libisc_la_LIBADD =             \
-       $(LIBLTDL_LIBS)         \
        $(LIBUV_LIBS)           \
        $(OPENSSL_LIBS)         \
        $(ZLIB_LIBS)
diff --git a/lib/isc/win32/ltdl.h b/lib/isc/win32/ltdl.h
deleted file mode 100644 (file)
index c032524..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, you can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * See the COPYRIGHT file distributed with this work for additional
- * information regarding copyright ownership.
- */
-
-#pragma once
-
-#include <windows.h>
-
-#define lt_dlhandle    HMODULE
-#define lt_dlinit()    ISC_R_SUCCESS
-#define lt_dlopen(f)   LoadLibraryW(f)
-#define lt_dlsym(h, s) GetProcAddress(h, s)
-#define lt_dlclose(h)  FreeLibrary(h)
-
-__declspec(thread) LPSTR __dlerror_message[1024] = { 0 };
-
-static const char *
-lt_dlerror(void) {
-       DWORD errorMessageID = GetLastError();
-       if (errorMessageID == 0) {
-               return (NULL);
-       }
-
-       LPSTR messageBuffer = NULL;
-       size_t size = FormatMessageA(
-               FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
-                       FORMAT_MESSAGE_IGNORE_INSERTS,
-               NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-               (LPSTR)&messageBuffer, 0, NULL);
-
-       strlcpy(__dlerror_message, messageBuffer, sizeof(__dlerror_message));
-
-       LocalFree(messageBuffer);
-
-       return ((const char *)__dlerror_message);
-}
index 7f79af429274e4ac24ce88a9e93382813d47f703..5c93b2e85b7026e5ba70b9872ebe4939d64ddf9b 100644 (file)
@@ -41,14 +41,15 @@ libns_la_SOURCES =          \
 
 libns_la_CPPFLAGS =                            \
        $(AM_CPPFLAGS)                          \
-       $(LIBISC_CFLAGS)                        \
        $(LIBDNS_CFLAGS)                        \
+       $(LIBISC_CFLAGS)                        \
        $(LIBNS_CFLAGS)                         \
-       $(LIBLTDL_CFLAGS)
+       $(LIBUV_CFLAGS)
 
 libns_la_LIBADD =      \
+       $(LIBDNS_LIBS)  \
        $(LIBISC_LIBS)  \
-       $(LIBDNS_LIBS)
+       $(LIBUV_LIBS)
 
 libns_la_LDFLAGS =             \
        $(AM_LDFLAGS)           \
index 4e9bc9e632b0be7e05b4394baddd7d5ea71f1045..9cb2fe4fb8aadf1669fa25cff0d6619dd27219de 100644 (file)
@@ -12,9 +12,9 @@
 /*! \file */
 
 #include <errno.h>
-#include <ltdl.h>
 #include <stdio.h>
 #include <string.h>
+#include <uv.h>
 
 #include <isc/errno.h>
 #include <isc/list.h>
@@ -43,7 +43,7 @@
 
 struct ns_plugin {
        isc_mem_t *mctx;
-       void *handle;
+       uv_lib_t handle;
        void *inst;
        char *modpath;
        ns_plugin_check_t *check_func;
@@ -91,16 +91,17 @@ ns_plugin_expandpath(const char *src, char *dst, size_t dstsize) {
 }
 
 static isc_result_t
-load_symbol(void *handle, const char *modpath, const char *symbol_name,
+load_symbol(uv_lib_t *handle, const char *modpath, const char *symbol_name,
            void **symbolp) {
        void *symbol = NULL;
+       int r;
 
        REQUIRE(handle != NULL);
        REQUIRE(symbolp != NULL && *symbolp == NULL);
 
-       symbol = lt_dlsym(handle, symbol_name);
-       if (symbol == NULL) {
-               const char *errmsg = lt_dlerror();
+       r = uv_dlsym(handle, symbol_name, &symbol);
+       if (r != 0) {
+               const char *errmsg = uv_dlerror(handle);
                if (errmsg == NULL) {
                        errmsg = "returned function pointer is NULL";
                }
@@ -126,6 +127,7 @@ load_plugin(isc_mem_t *mctx, const char *modpath, ns_plugin_t **pluginp) {
        ns_plugin_t *plugin = NULL;
        ns_plugin_version_t *version_func = NULL;
        int version;
+       int r;
 
        REQUIRE(pluginp != NULL && *pluginp == NULL);
 
@@ -137,13 +139,9 @@ load_plugin(isc_mem_t *mctx, const char *modpath, ns_plugin_t **pluginp) {
 
        ISC_LINK_INIT(plugin, link);
 
-       if (lt_dlinit() != 0) {
-               CHECK(ISC_R_FAILURE);
-       }
-
-       plugin->handle = lt_dlopen(modpath);
-       if (plugin->handle == NULL) {
-               const char *errmsg = lt_dlerror();
+       r = uv_dlopen(modpath, &plugin->handle);
+       if (r != 0) {
+               const char *errmsg = uv_dlerror(&plugin->handle);
                if (errmsg == NULL) {
                        errmsg = "unknown error";
                }
@@ -154,7 +152,7 @@ load_plugin(isc_mem_t *mctx, const char *modpath, ns_plugin_t **pluginp) {
                CHECK(ISC_R_FAILURE);
        }
 
-       CHECK(load_symbol(plugin->handle, modpath, "plugin_version",
+       CHECK(load_symbol(&plugin->handle, modpath, "plugin_version",
                          (void **)&version_func));
 
        version = version_func();
@@ -168,11 +166,11 @@ load_plugin(isc_mem_t *mctx, const char *modpath, ns_plugin_t **pluginp) {
                CHECK(ISC_R_FAILURE);
        }
 
-       CHECK(load_symbol(plugin->handle, modpath, "plugin_check",
+       CHECK(load_symbol(&plugin->handle, modpath, "plugin_check",
                          (void **)&plugin->check_func));
-       CHECK(load_symbol(plugin->handle, modpath, "plugin_register",
+       CHECK(load_symbol(&plugin->handle, modpath, "plugin_register",
                          (void **)&plugin->register_func));
-       CHECK(load_symbol(plugin->handle, modpath, "plugin_destroy",
+       CHECK(load_symbol(&plugin->handle, modpath, "plugin_destroy",
                          (void **)&plugin->destroy_func));
 
        *pluginp = plugin;
@@ -207,9 +205,7 @@ unload_plugin(ns_plugin_t **pluginp) {
                plugin->destroy_func(&plugin->inst);
        }
 
-       if (plugin->handle != NULL) {
-               (void)lt_dlclose(plugin->handle);
-       }
+       uv_dlclose(&plugin->handle);
        isc_mem_free(plugin->mctx, plugin->modpath);
        isc_mem_putanddetach(&plugin->mctx, plugin, sizeof(*plugin));
 }
index 48488d14e007b9cba2156835967073fcf74b45c3..41604ba1716ba847a7287ac66307a565df5629e6 100644 (file)
@@ -60,7 +60,7 @@
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_USRDLL;LIBNS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ForcedIncludeFiles>..\..\..\config.h</ForcedIncludeFiles>
-      <AdditionalIncludeDirectories>.\;..\..\..\;include;..\include;..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;..\..\..\lib\dns\include;@LIBXML2_INC@@OPENSSL_INC@@GSSAPI_INC@@GEOIP_INC@%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\..\;include;..\include;..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;..\..\..\lib\dns\include;@LIBXML2_INC@@LIBUV_INC@@OPENSSL_INC@@GSSAPI_INC@@GEOIP_INC@%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -74,7 +74,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
       <AdditionalLibraryDirectories>..\..\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>@OPENSSL_LIB@libisc.lib;libdns.lib;@LIBXML2_LIB@@GSSAPI_LIB@@GEOIP_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>@LIBUV_LIB@@OPENSSL_LIB@libisc.lib;libdns.lib;@LIBXML2_LIB@@GSSAPI_LIB@@GEOIP_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ModuleDefinitionFile>$(ProjectName).def</ModuleDefinitionFile>
       <ImportLibrary>.\$(Configuration)\$(ProjectName).lib</ImportLibrary>
     </Link>
@@ -90,7 +90,7 @@
       <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN32;NDEBUG;_USRDLL;LIBNS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ForcedIncludeFiles>..\..\..\config.h</ForcedIncludeFiles>
-      <AdditionalIncludeDirectories>.\;..\..\..\;include;..\include;..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;..\..\..\lib\dns\include;@LIBXML2_INC@@OPENSSL_INC@@GSSAPI_INC@@GEOIP_INC@%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\..\;include;..\include;..\..\isc\win32;..\..\isc\win32\include;..\..\isc\include;..\..\..\lib\dns\include;@LIBXML2_INC@@LIBUV_INC@@OPENSSL_INC@@GSSAPI_INC@@GEOIP_INC@%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <StringPooling>true</StringPooling>
       <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
       <OptimizeReferences>true</OptimizeReferences>
       <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
       <AdditionalLibraryDirectories>..\..\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>@OPENSSL_LIB@libisc.lib;libdns.lib;@LIBXML2_LIB@@GSSAPI_LIB@@GEOIP_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>@LIBUV_LIB@@OPENSSL_LIB@libisc.lib;libdns.lib;@LIBXML2_LIB@@GSSAPI_LIB@@GEOIP_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ModuleDefinitionFile>$(ProjectName).def</ModuleDefinitionFile>
       <ImportLibrary>.\$(Configuration)\$(ProjectName).lib</ImportLibrary>
       <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
index 20d0240542eadc6c49928a0618e3b92f82d4e030..c3f702b7a70eaab01c6555f2dbcde95ba997bdbc 100644 (file)
 ./lib/isc/win32/libisc.vcxproj.filters.in      X       2013,2014,2015,2016,2018,2019,2020
 ./lib/isc/win32/libisc.vcxproj.in              X       2013,2014,2015,2016,2017,2018,2019,2020
 ./lib/isc/win32/libisc.vcxproj.user            X       2013,2018,2019,2020
-./lib/isc/win32/ltdl.h                         C       2020
 ./lib/isc/win32/meminfo.c                      C       2015,2016,2018,2019,2020
 ./lib/isc/win32/net.c                          C       1999,2000,2001,2002,2003,2004,2005,2007,2008,2009,2011,2012,2013,2014,2015,2016,2018,2019,2020
 ./lib/isc/win32/netdb.h                                C       2000,2001,2004,2006,2007,2009,2013,2016,2018,2019,2020
index bb86dd6fb286e1a3b22289ff104b082b91af9ea8..ea5ff3b2920307821a4464e0b4e63438fe8174aa 100644 (file)
@@ -1,5 +1,3 @@
 unmatchedSuppression:*
 preprocessorErrorDirective:*
 unknownMacro:*
-uselessAssignmentPtrArg:libltdl/loaders/preopen.c:201
-deallocret:libltdl/lt__alloc.c:78