From ef4ddfa482b9d1d07b44b96a57a0a738bd3aca05 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Wed, 15 Sep 2021 15:08:28 +0200 Subject: vlib: add option to plugin registration to prefer deep binding Type: improvement Change-Id: I9ce7e1ee7e7afe8e9befe36ae8c59291beaaaf36 Signed-off-by: Damjan Marion --- src/vlib/unix/plugin.c | 3 ++- src/vlib/unix/plugin.h | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/vlib/unix/plugin.c b/src/vlib/unix/plugin.c index a714c7c29ce..4a7ff2753f2 100644 --- a/src/vlib/unix/plugin.c +++ b/src/vlib/unix/plugin.c @@ -304,7 +304,8 @@ process_reg: } vec_free (version_required); - handle = dlopen ((char *) pi->filename, RTLD_LAZY); + handle = dlopen ((char *) pi->filename, + RTLD_LAZY | (reg->deep_bind ? RTLD_DEEPBIND : 0)); if (handle == 0) { diff --git a/src/vlib/unix/plugin.h b/src/vlib/unix/plugin.h index ae15e5db973..e3555fe3ba9 100644 --- a/src/vlib/unix/plugin.h +++ b/src/vlib/unix/plugin.h @@ -56,16 +56,16 @@ * vlib_load_new_plugins(). */ -/* *INDENT-OFF* */ -typedef CLIB_PACKED(struct { - u8 default_disabled; +typedef struct +{ + u8 default_disabled : 1; + u8 deep_bind : 1; const char version[32]; const char version_required[32]; const char overrides[256]; const char *early_init; const char *description; -}) vlib_plugin_registration_t; -/* *INDENT-ON* */ +} __clib_packed vlib_plugin_registration_t; /* * Plugins may also use this registration format, which is -- cgit 1.2.3-korg