[dm-devel] [PATCH v4 07/12] libmultipath: remove weak attribute for {get, put}_multipath_config

mwilck at suse.com mwilck at suse.com
Tue Aug 30 19:27:08 UTC 2022


From: Martin Wilck <mwilck at suse.com>

The "weak" attribute was set to make sure that these symbols are overridden by
symbols of the same name in the main executable. This is unnecessary, as the
standard ELF symbol resolution algorithm ensures this even without the "weak"
attribute.

See ELF Specification, III.2 Dynamic Linking / Shared Object Dependencies:
"The dynamic linker examines the symbol tables with a breadth-first
search. That is, it first looks at the symbol table of the executable program
itself, then at the symbol tables of the DT_NEEDED entries (in order), then at
the second level DT_NEEDED entries, and so on".

Signed-off-by: Martin Wilck <mwilck at suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>
---
 libmultipath/config.c |  4 ++--
 libmultipath/config.h | 11 -----------
 2 files changed, 2 insertions(+), 13 deletions(-)

diff --git a/libmultipath/config.c b/libmultipath/config.c
index a2c79a4..5c5c072 100644
--- a/libmultipath/config.c
+++ b/libmultipath/config.c
@@ -82,7 +82,7 @@ struct config *libmp_get_multipath_config(void)
 }
 
 struct config *get_multipath_config(void)
-	__attribute__((weak, alias("libmp_get_multipath_config")));
+	__attribute__((alias("libmp_get_multipath_config")));
 
 void libmp_put_multipath_config(void *conf __attribute__((unused)))
 {
@@ -90,7 +90,7 @@ void libmp_put_multipath_config(void *conf __attribute__((unused)))
 }
 
 void put_multipath_config(void *conf)
-	__attribute__((weak, alias("libmp_put_multipath_config")));
+	__attribute__((alias("libmp_put_multipath_config")));
 
 static int
 hwe_strmatch (const struct hwentry *hwe1, const struct hwentry *hwe2)
diff --git a/libmultipath/config.h b/libmultipath/config.h
index fdcdff0..2d00ad2 100644
--- a/libmultipath/config.h
+++ b/libmultipath/config.h
@@ -303,17 +303,6 @@ void free_config (struct config * conf);
 int init_config(const char *file);
 void uninit_config(void);
 
-/*
- * libmultipath provides default implementations of
- * get_multipath_config() and put_multipath_config().
- * Applications using these should use init_config(file, NULL)
- * to load the configuration, rather than load_config(file).
- * Likewise, uninit_config() should be used for teardown, but
- * using free_config() for that is supported, too.
- * Applications can define their own {get,put}_multipath_config()
- * functions, which override the library-internal ones, but
- * could still call libmp_{get,put}_multipath_config().
- */
 struct config *libmp_get_multipath_config(void);
 struct config *get_multipath_config(void);
 void libmp_put_multipath_config(void *);
-- 
2.37.1



More information about the dm-devel mailing list