Set ELF visibility to keep all of our external symbols to ourselves.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 1 Oct 2019 10:40:41 +0000 (11:40 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 1 Oct 2019 20:51:10 +0000 (21:51 +0100)
algorithms.c
catacomb-python.h
catacomb.c
rand.c

index d73981e..e6dbe21 100644 (file)
@@ -27,7 +27,9 @@
 /*----- Header files ------------------------------------------------------*/
 
 #include "catacomb-python.h"
+PUBLIC_SYMBOLS;
 #include "algorithms.h"
+PRIVATE_SYMBOLS;
 
 /*----- Key sizes ---------------------------------------------------------*/
 
index df29099..5815343 100644 (file)
 #include <catacomb/share.h>
 #include <catacomb/gfshare.h>
 
+/*----- Other preliminaries -----------------------------------------------*/
+
+#define GOBBLE_SEMI extern int notexist
+#if defined(__GNUC__) && defined(__ELF__)
+#  define PRIVATE_SYMBOLS _Pragma("GCC visibility push(hidden)") GOBBLE_SEMI
+#  define PUBLIC_SYMBOLS _Pragma("GCC visibility pop") GOBBLE_SEMI
+#  define EXPORT __attribute__((__visibility__("default")))
+#else
+#  define PRIVATE_SYMBOLS GOBBLE_SEMI
+#  define PUBLIC_SYMBOLS GOBBLE_SEMI
+#  define EXPORT
+#endif
+
+PRIVATE_SYMBOLS;
+
 /*----- Utility macros ----------------------------------------------------*/
 
 #define RETURN_OBJ(obj) do { Py_INCREF(obj); return (obj); } while (0)
index b596b5e..affb5d3 100644 (file)
@@ -167,7 +167,7 @@ static void init_random(void)
 #endif
 }
 
-void init_base(void)
+EXPORT void init_base(void)
 {
   PyObject *mod;
   addmethods(methods);
diff --git a/rand.c b/rand.c
index 9afb271..15a0788 100644 (file)
--- a/rand.c
+++ b/rand.c
@@ -27,7 +27,9 @@
 /*----- Header files ------------------------------------------------------*/
 
 #include "catacomb-python.h"
+PUBLIC_SYMBOLS;
 #include "algorithms.h"
+PRIVATE_SYMBOLS;
 
 /*----- Main code ---------------------------------------------------------*/