summaryrefslogtreecommitdiff
path: root/libdm/misc
diff options
context:
space:
mode:
authorJoe Thornber <ejt@redhat.com>2018-06-08 13:01:41 +0100
committerJoe Thornber <ejt@redhat.com>2018-06-08 13:01:41 +0100
commitc78239d8605f333915543c0e0c3ccf4f4ef5ee8f (patch)
treed5f551a8a5da8687819d0f71ee4dd47ac7c06b78 /libdm/misc
parent286c1ba3369d1901480425e305e313e8ea365da4 (diff)
downloadlvm2-c78239d8605f333915543c0e0c3ccf4f4ef5ee8f.tar.gz
libdm: Stop libdm/misc/dmlib.h from including lib/misc/lib.h
Diffstat (limited to 'libdm/misc')
-rw-r--r--libdm/misc/dmlib.h67
1 files changed, 64 insertions, 3 deletions
diff --git a/libdm/misc/dmlib.h b/libdm/misc/dmlib.h
index bc14ece92..4c6bcfc2d 100644
--- a/libdm/misc/dmlib.h
+++ b/libdm/misc/dmlib.h
@@ -14,13 +14,74 @@
*/
/*
- * This file must be included first by every device-mapper library source file.
+ * This file must be included first by every library source file.
*/
#ifndef _DM_LIB_H
#define _DM_LIB_H
-#define DM
+#include "configure.h"
-#include "lib/misc/lib.h"
+#define _REENTRANT
+#define _GNU_SOURCE
+
+/*
+ * Symbol export control macros
+ *
+ * DM_EXPORT_SYMBOL(func,ver)
+ * DM_EXPORT_SYMBOL_BASE(func,ver)
+ *
+ * For functions that have multiple implementations these macros control
+ * symbol export and versioning.
+ *
+ * Function definitions that exist in only one version never need to use
+ * these macros.
+ *
+ * Backwards compatible implementations must include a version tag of
+ * the form "_v1_02_104" as a suffix to the function name and use the
+ * macro DM_EXPORT_SYMBOL to export the function and bind it to the
+ * specified version string.
+ *
+ * Since versioning is only available when compiling with GCC the entire
+ * compatibility version should be enclosed in '#if defined(__GNUC__)',
+ * for example:
+ *
+ * int dm_foo(int bar)
+ * {
+ * return bar;
+ * }
+ *
+ * #if defined(__GNUC__)
+ * // Backward compatible dm_foo() version 1.02.104
+ * int dm_foo_v1_02_104(void);
+ * int dm_foo_v1_02_104(void)
+ * {
+ * return 0;
+ * }
+ * DM_EXPORT_SYMBOL(dm_foo,1_02_104)
+ * #endif
+ *
+ * A prototype for the compatibility version is required as these
+ * functions must not be declared static.
+ *
+ * The DM_EXPORT_SYMBOL_BASE macro is only used to export the base
+ * versions of library symbols prior to the introduction of symbol
+ * versioning: it must never be used for new symbols.
+ */
+#if defined(__GNUC__)
+#define DM_EXPORT_SYMBOL(func, ver) \
+ __asm__(".symver " #func "_v" #ver ", " #func "@DM_" #ver )
+#define DM_EXPORT_SYMBOL_BASE(func) \
+ __asm__(".symver " #func "_base, " #func "@Base" )
+#else
+#define DM_EXPORT_SYMBOL(func, ver)
+#define DM_EXPORT_SYMBOL_BASE(func)
+#endif
+
+#include "lib/misc/util.h"
+
+#include "libdm/libdevmapper.h"
+#include "libdm/misc/dm-logging.h"
+
+#include <unistd.h>
#endif