Re: pgsql: Default to hidden visibility for extension libraries where possi

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: pgsql: Default to hidden visibility for extension libraries where possi
Дата
Msg-id CAFj8pRCQ6TAJD=sP8-oOKA0BGhpUMPzUFsZQfAbW=fwssnqzig@mail.gmail.com
обсуждение исходный текст
Ответ на pgsql: Default to hidden visibility for extension libraries where possi  (Andres Freund <andres@anarazel.de>)
Ответы Re: pgsql: Default to hidden visibility for extension libraries where possi  (Alvaro Herrera <alvherre@alvh.no-ip.org>)
Список pgsql-committers
Hi

po 18. 7. 2022 v 3:06 odesílatel Andres Freund <andres@anarazel.de> napsal:
Default to hidden visibility for extension libraries where possible

Until now postgres built extension libraries with global visibility, i.e.
exporting all symbols.  On the one platform where that behavior is not
natively available, namely windows, we emulate it by analyzing the input files
to the shared library and exporting all the symbols therein.

Not exporting all symbols is actually desirable, as it can improve loading
speed, reduces the likelihood of symbol conflicts and can improve intra
extension library function call performance. It also makes the non-windows
builds more similar to windows builds.

Additionally, with meson implementing the export-all-symbols behavior for
windows, turns out to be more verbose than desirable.

This patch adds support for hiding symbols by default and, to counteract that,
explicit symbol visibility annotation for compilers that support
__attribute__((visibility("default"))) and -fvisibility=hidden. That is
expected to be most, if not all, compilers except msvc (for which we already
support explicit symbol export annotations).

Now that extension library symbols are explicitly exported, we don't need to
export all symbols on windows anymore, hence remove that behavior from
src/tools/msvc. The supporting code can't be removed, as we still need to
export all symbols from the main postgres binary.

Author: Andres Freund <andres@anarazel.de>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/20211101020311.av6hphdl6xbjbuif@alap3.anarazel.de


Unfortunately, this commit definitely breaks plpgsql_check. Can the following routines be visible?

    AssertVariableIsOfType(&plpgsql_build_datatype, plpgsql_check__build_datatype_t);
    plpgsql_check__build_datatype_p = (plpgsql_check__build_datatype_t)
        LOAD_EXTERNAL_FUNCTION("$libdir/plpgsql", "plpgsql_build_datatype");

    AssertVariableIsOfType(&plpgsql_compile, plpgsql_check__compile_t);
    plpgsql_check__compile_p = (plpgsql_check__compile_t)
        LOAD_EXTERNAL_FUNCTION("$libdir/plpgsql", "plpgsql_compile");
   
    AssertVariableIsOfType(&plpgsql_parser_setup, plpgsql_check__parser_setup_t);
    plpgsql_check__parser_setup_p = (plpgsql_check__parser_setup_t)
        LOAD_EXTERNAL_FUNCTION("$libdir/plpgsql", "plpgsql_parser_setup");
   
    AssertVariableIsOfType(&plpgsql_stmt_typename, plpgsql_check__stmt_typename_t);
    plpgsql_check__stmt_typename_p = (plpgsql_check__stmt_typename_t)
        LOAD_EXTERNAL_FUNCTION("$libdir/plpgsql", "plpgsql_stmt_typename");
   
    AssertVariableIsOfType(&plpgsql_exec_get_datum_type, plpgsql_check__exec_get_datum_type_t);
    plpgsql_check__exec_get_datum_type_p = (plpgsql_check__exec_get_datum_type_t)
        LOAD_EXTERNAL_FUNCTION("$libdir/plpgsql", "plpgsql_exec_get_datum_type");

    AssertVariableIsOfType(&plpgsql_recognize_err_condition, plpgsql_check__recognize_err_condition_t);
    plpgsql_check__recognize_err_condition_p = (plpgsql_check__recognize_err_condition_t)
        LOAD_EXTERNAL_FUNCTION("$libdir/plpgsql", "plpgsql_recognize_err_condition");

    AssertVariableIsOfType(&plpgsql_ns_lookup, plpgsql_check__ns_lookup_t);
    plpgsql_check__ns_lookup_p = (plpgsql_check__ns_lookup_t)
        LOAD_EXTERNAL_FUNCTION("$libdir/plpgsql", "plpgsql_ns_lookup");

Regards

Pavel

 
 
Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/089480c077056fc20fa8d8f5a3032a9dcf5ed812

Modified Files
--------------
configure                  | 152 +++++++++++++++++++++++++++++++++++++++++++++
configure.ac               |  13 ++++
src/Makefile.global.in     |   3 +
src/Makefile.shlib         |  13 ++++
src/include/c.h            |  13 ++--
src/include/pg_config.h.in |   3 +
src/makefiles/pgxs.mk      |   5 +-
src/tools/msvc/Project.pm  |   7 ---
src/tools/msvc/Solution.pm |   1 +
9 files changed, 198 insertions(+), 12 deletions(-)

В списке pgsql-committers по дате отправления:

Предыдущее
От: Michael Paquier
Дата:
Сообщение: pgsql: Rework logic and simplify syntax of REINDEX DATABASE/SYSTEM
Следующее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: Clean up temp file from refactored dtrace rule