Mark all symbols exported from extension libraries PGDLLEXPORT.
authorAndres Freund <[email protected]>
Mon, 18 Jul 2022 01:50:14 +0000 (18:50 -0700)
committerAndres Freund <[email protected]>
Mon, 18 Jul 2022 01:50:14 +0000 (18:50 -0700)
This is in preparation for defaulting to -fvisibility=hidden in extensions,
instead of relying on all symbols in extensions to be exported.

This should have been committed before 089480c0770, but something in my commit
scripts went wrong.

Author: Andres Freund <[email protected]>
Reviewed-By: Tom Lane <[email protected]>
Discussion: https://postgr.es/m/20211101020311[email protected]

contrib/hstore/hstore.h
contrib/ltree/ltree.h
src/include/fmgr.h
src/pl/plpython/plpy_elog.h
src/pl/plpython/plpy_typeio.h
src/pl/plpython/plpy_util.h
src/test/modules/test_shm_mq/test_shm_mq.h
src/test/modules/worker_spi/worker_spi.c

index bf4a565ed9b33aafc5bc0212e17f2d5ac3c7ebf0..4713e6ea7ab0a168d534ef71d89bcacd04277ba6 100644 (file)
@@ -147,7 +147,7 @@ typedef struct
    } while (0)
 
 /* DatumGetHStoreP includes support for reading old-format hstore values */
-extern HStore *hstoreUpgrade(Datum orig);
+extern PGDLLEXPORT HStore *hstoreUpgrade(Datum orig);
 
 #define DatumGetHStoreP(d) hstoreUpgrade(d)
 
@@ -168,14 +168,14 @@ typedef struct
    bool        needfree;       /* need to pfree the value? */
 } Pairs;
 
-extern int hstoreUniquePairs(Pairs *a, int32 l, int32 *buflen);
-extern HStore *hstorePairs(Pairs *pairs, int32 pcount, int32 buflen);
+extern PGDLLEXPORT int hstoreUniquePairs(Pairs *a, int32 l, int32 *buflen);
+extern PGDLLEXPORT HStore *hstorePairs(Pairs *pairs, int32 pcount, int32 buflen);
 
-extern size_t hstoreCheckKeyLen(size_t len);
-extern size_t hstoreCheckValLen(size_t len);
+extern PGDLLEXPORT size_t hstoreCheckKeyLen(size_t len);
+extern PGDLLEXPORT size_t hstoreCheckValLen(size_t len);
 
-extern int hstoreFindKey(HStore *hs, int *lowbound, char *key, int keylen);
-extern Pairs *hstoreArrayToPairs(ArrayType *a, int *npairs);
+extern PGDLLEXPORT int hstoreFindKey(HStore *hs, int *lowbound, char *key, int keylen);
+extern PGDLLEXPORT Pairs *hstoreArrayToPairs(ArrayType *a, int *npairs);
 
 #define HStoreContainsStrategyNumber   7
 #define HStoreExistsStrategyNumber     9
@@ -194,7 +194,7 @@ extern Pairs *hstoreArrayToPairs(ArrayType *a, int *npairs);
 #if HSTORE_POLLUTE_NAMESPACE
 #define HSTORE_POLLUTE(newname_,oldname_) \
    PG_FUNCTION_INFO_V1(oldname_);        \
-   Datum newname_(PG_FUNCTION_ARGS);     \
+   extern PGDLLEXPORT Datum newname_(PG_FUNCTION_ARGS);      \
    Datum oldname_(PG_FUNCTION_ARGS) { return newname_(fcinfo); } \
    extern int no_such_variable
 #else
index 564e4fa81b87bb0fb6f69ec6fa29070c9ba8beba..3dd99ca68487b6e846de71c106a5dc403c418613 100644 (file)
@@ -176,30 +176,30 @@ typedef struct
 
 
 /* use in array iterator */
-Datum      ltree_isparent(PG_FUNCTION_ARGS);
-Datum      ltree_risparent(PG_FUNCTION_ARGS);
-Datum      ltq_regex(PG_FUNCTION_ARGS);
-Datum      ltq_rregex(PG_FUNCTION_ARGS);
-Datum      lt_q_regex(PG_FUNCTION_ARGS);
-Datum      lt_q_rregex(PG_FUNCTION_ARGS);
-Datum      ltxtq_exec(PG_FUNCTION_ARGS);
-Datum      ltxtq_rexec(PG_FUNCTION_ARGS);
-Datum      _ltq_regex(PG_FUNCTION_ARGS);
-Datum      _ltq_rregex(PG_FUNCTION_ARGS);
-Datum      _lt_q_regex(PG_FUNCTION_ARGS);
-Datum      _lt_q_rregex(PG_FUNCTION_ARGS);
-Datum      _ltxtq_exec(PG_FUNCTION_ARGS);
-Datum      _ltxtq_rexec(PG_FUNCTION_ARGS);
-Datum      _ltree_isparent(PG_FUNCTION_ARGS);
-Datum      _ltree_risparent(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltree_isparent(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltree_risparent(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltq_regex(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltq_rregex(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum lt_q_regex(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum lt_q_rregex(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltxtq_exec(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltxtq_rexec(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum _ltq_regex(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum _ltq_rregex(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum _lt_q_regex(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum _lt_q_rregex(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum _ltxtq_exec(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum _ltxtq_rexec(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum _ltree_isparent(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum _ltree_risparent(PG_FUNCTION_ARGS);
 
 /* Concatenation functions */
-Datum      ltree_addltree(PG_FUNCTION_ARGS);
-Datum      ltree_addtext(PG_FUNCTION_ARGS);
-Datum      ltree_textadd(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltree_addltree(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltree_addtext(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltree_textadd(PG_FUNCTION_ARGS);
 
 /* Util function */
-Datum      ltree_in(PG_FUNCTION_ARGS);
+PGDLLEXPORT Datum ltree_in(PG_FUNCTION_ARGS);
 
 bool       ltree_execute(ITEM *curitem, void *checkval,
                          bool calcnot, bool (*chkcond) (void *checkval, ITEM *val));
index f251ac9ba2bc8de86dde4d33f367a050c0abccd7..380a82b9de3582e5d984b997bd2ad35e83c0ffab 100644 (file)
@@ -413,7 +413,7 @@ typedef const Pg_finfo_record *(*PGFInfoFunction) (void);
  * info function, since authors shouldn't need to be explicitly aware of it.
  */
 #define PG_FUNCTION_INFO_V1(funcname) \
-extern Datum funcname(PG_FUNCTION_ARGS); \
+extern PGDLLEXPORT Datum funcname(PG_FUNCTION_ARGS); \
 extern PGDLLEXPORT const Pg_finfo_record * CppConcat(pg_finfo_,funcname)(void); \
 const Pg_finfo_record * \
 CppConcat(pg_finfo_,funcname) (void) \
index e02ef4ffe9f9e6600f53acfb698a33594cf3aa97..dc65f2f6ee29b38444743846c5fb67a0d9fbbf7f 100644 (file)
@@ -34,13 +34,13 @@ extern PyObject *PLy_exc_spi_error;
    } while(0)
 #endif                         /* HAVE__BUILTIN_CONSTANT_P */
 
-extern void PLy_elog_impl(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
+extern PGDLLEXPORT void PLy_elog_impl(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
 
-extern void PLy_exception_set(PyObject *exc, const char *fmt,...) pg_attribute_printf(2, 3);
+extern PGDLLEXPORT void PLy_exception_set(PyObject *exc, const char *fmt,...) pg_attribute_printf(2, 3);
 
-extern void PLy_exception_set_plural(PyObject *exc, const char *fmt_singular, const char *fmt_plural,
-                                    unsigned long n,...) pg_attribute_printf(2, 5) pg_attribute_printf(3, 5);
+extern PGDLLEXPORT void PLy_exception_set_plural(PyObject *exc, const char *fmt_singular, const char *fmt_plural,
+                                                unsigned long n,...) pg_attribute_printf(2, 5) pg_attribute_printf(3, 5);
 
-extern void PLy_exception_set_with_details(PyObject *excclass, ErrorData *edata);
+extern PGDLLEXPORT void PLy_exception_set_with_details(PyObject *excclass, ErrorData *edata);
 
 #endif                         /* PLPY_ELOG_H */
index d11e6ae1b89571fe70c869b94ab59d2e1450f8b4..5417f0945d26021e7eb1b594cbb179353d4c10b6 100644 (file)
@@ -147,29 +147,29 @@ struct PLyObToDatum
 };
 
 
-extern PyObject *PLy_input_convert(PLyDatumToOb *arg, Datum val);
-extern Datum PLy_output_convert(PLyObToDatum *arg, PyObject *val,
-                               bool *isnull);
+extern PGDLLEXPORT PyObject *PLy_input_convert(PLyDatumToOb *arg, Datum val);
+extern PGDLLEXPORT Datum PLy_output_convert(PLyObToDatum *arg, PyObject *val,
+                                           bool *isnull);
 
-extern PyObject *PLy_input_from_tuple(PLyDatumToOb *arg, HeapTuple tuple,
-                                     TupleDesc desc, bool include_generated);
+extern PGDLLEXPORT PyObject *PLy_input_from_tuple(PLyDatumToOb *arg, HeapTuple tuple,
+                                                 TupleDesc desc, bool include_generated);
 
-extern void PLy_input_setup_func(PLyDatumToOb *arg, MemoryContext arg_mcxt,
-                                Oid typeOid, int32 typmod,
-                                struct PLyProcedure *proc);
-extern void PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt,
-                                 Oid typeOid, int32 typmod,
-                                 struct PLyProcedure *proc);
+extern PGDLLEXPORT void PLy_input_setup_func(PLyDatumToOb *arg, MemoryContext arg_mcxt,
+                                            Oid typeOid, int32 typmod,
+                                            struct PLyProcedure *proc);
+extern PGDLLEXPORT void PLy_output_setup_func(PLyObToDatum *arg, MemoryContext arg_mcxt,
+                                             Oid typeOid, int32 typmod,
+                                             struct PLyProcedure *proc);
 
-extern void PLy_input_setup_tuple(PLyDatumToOb *arg, TupleDesc desc,
-                                 struct PLyProcedure *proc);
-extern void PLy_output_setup_tuple(PLyObToDatum *arg, TupleDesc desc,
-                                  struct PLyProcedure *proc);
+extern PGDLLEXPORT void PLy_input_setup_tuple(PLyDatumToOb *arg, TupleDesc desc,
+                                             struct PLyProcedure *proc);
+extern PGDLLEXPORT void PLy_output_setup_tuple(PLyObToDatum *arg, TupleDesc desc,
+                                              struct PLyProcedure *proc);
 
-extern void PLy_output_setup_record(PLyObToDatum *arg, TupleDesc desc,
-                                   struct PLyProcedure *proc);
+extern PGDLLEXPORT void PLy_output_setup_record(PLyObToDatum *arg, TupleDesc desc,
+                                               struct PLyProcedure *proc);
 
 /* conversion from Python objects to C strings --- exported for transforms */
-extern char *PLyObject_AsString(PyObject *plrv);
+extern PGDLLEXPORT char *PLyObject_AsString(PyObject *plrv);
 
 #endif                         /* PLPY_TYPEIO_H */
index 7c6577925ea5568746ded86b98eb2e6aa6de53f2..6f491b0f95b6417a6f68c6ce48942d5b252b61c6 100644 (file)
@@ -8,10 +8,10 @@
 
 #include "plpython.h"
 
-extern PyObject *PLyUnicode_Bytes(PyObject *unicode);
-extern char *PLyUnicode_AsString(PyObject *unicode);
+extern PGDLLEXPORT PyObject *PLyUnicode_Bytes(PyObject *unicode);
+extern PGDLLEXPORT char *PLyUnicode_AsString(PyObject *unicode);
 
-extern PyObject *PLyUnicode_FromString(const char *s);
-extern PyObject *PLyUnicode_FromStringAndSize(const char *s, Py_ssize_t size);
+extern PGDLLEXPORT PyObject *PLyUnicode_FromString(const char *s);
+extern PGDLLEXPORT PyObject *PLyUnicode_FromStringAndSize(const char *s, Py_ssize_t size);
 
 #endif                         /* PLPY_UTIL_H */
index 0310caf50bd9289df63c82bd4fa5796fba25cf2f..8f97be78d3ed6ed0ff416feb8616c0f809340340 100644 (file)
@@ -40,6 +40,6 @@ extern void test_shm_mq_setup(int64 queue_size, int32 nworkers,
                              shm_mq_handle **input);
 
 /* Main entrypoint for a worker. */
-extern void test_shm_mq_main(Datum) pg_attribute_noreturn();
+extern PGDLLEXPORT void test_shm_mq_main(Datum) pg_attribute_noreturn();
 
 #endif
index b37ef8beb60c4e84fde29d75e163b22379703d58..d63a7631ad2940cb468992845ced3280f9453304 100644 (file)
@@ -46,7 +46,7 @@ PG_MODULE_MAGIC;
 
 PG_FUNCTION_INFO_V1(worker_spi_launch);
 
-void       worker_spi_main(Datum) pg_attribute_noreturn();
+PGDLLEXPORT void worker_spi_main(Datum) pg_attribute_noreturn();
 
 /* GUC variables */
 static int worker_spi_naptime = 10;