Visibility hidden by default
authorSimon Marchi <simon.marchi@efficios.com>
Mon, 4 Jul 2022 13:43:27 +0000 (09:43 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Thu, 30 Mar 2023 14:35:11 +0000 (10:35 -0400)
commit1353b066072e6c389ff35853bac83f65597e7a6a
treea7d5a2581561da377438a5361fabfa9dfada8cc0
parent5b616db96266d25cb0749e472cfc78c4944675e2
Visibility hidden by default

Change the default visibility of functions to be hidden.  Tag the
functions we want exported as "BT_EXPORT", rather than tagging the ones
we want hidden as "BT_HIDDEN".

The benefits of this method are explained here:

  https://gcc.gnu.org/wiki/Visibility

This is the only practical way to avoid some C++ symbols to be
externally visible (for example, the
bt_param_validation_map_value_entry_descr symbol below).

Change configure.ac to add -fvisibility=hidden to CFLAGS and CXXFLAGS,
and -fvisibility-inlines-hidden to CXXFLAGS.  Remove all mentions of
BT_HIDDEN and its definition.  Add BT_EXPORT, and tag all functions
meant to be exported with it.

Using the abidiff tool, I confirmed that there is not change in exported
symbols for these two libraries:

  - ./src/lib/.libs/libbabeltrace2.so
  - ./src/ctf-writer/.libs/libbabeltrace2-ctf-writer.so

In the CTF plugin, some symbols that used to be exported are now hidden.
There are some C++ symbols like:

  [D] 'method bt_param_validation_map_value_entry_descr::bt_param_validation_map_value_entry_descr()'    {_ZN41bt_param_validation_map_value_entry_descrC2Ev, aliases _ZN41bt_param_validation_map_value_entry_descrC1Ev}

And some bison/flex symbols like:

  [D] 'function void bt_yyset_out(FILE*, yyscan_t)'    {_Z12bt_yyset_outP8_IO_FILEPv}

I think this is OK, it is extremely unlikely that anybody is relying on
this, and the plugins do not claim to offer a stable ABI anyway.

In plugins "with id", the following symbol becomes not visible:

  [D] '__bt_plugin_descriptor __bt_plugin_descriptor_lttng_utils' {__bt_plugin_descriptor_lttng_utils}

I think this is OK, this symbol is only referenced internally, its
address is put in the plugin descriptors table.  But its address is
never looked up by an external party.  The equivalent symbol for plugins
without an explicit id (__bt_plugin_descriptor_auto) was already local,
I'm not sure why.

Change-Id: I2dcb41af9bf9ff6aec4f1f950da4bad52707ada9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/8543
Tested-by: jenkins <jenkins@lttng.org>
240 files changed:
CONTRIBUTING.adoc
configure.ac
include/babeltrace2/plugin/plugin-dev.h
src/cli/babeltrace2-plugins.h
src/cli/babeltrace2-query.c
src/cli/babeltrace2-query.h
src/common/assert.h
src/common/common.c
src/common/common.h
src/common/macros.h
src/common/uuid.c
src/common/uuid.h
src/compat/mman.c
src/ctf-writer/attributes.c
src/ctf-writer/attributes.h
src/ctf-writer/clock-class.c
src/ctf-writer/clock-class.h
src/ctf-writer/clock.c
src/ctf-writer/clock.h
src/ctf-writer/event-class.c
src/ctf-writer/event-class.h
src/ctf-writer/event.c
src/ctf-writer/event.h
src/ctf-writer/field-path.c
src/ctf-writer/field-path.h
src/ctf-writer/field-types.c
src/ctf-writer/field-types.h
src/ctf-writer/field-wrapper.c
src/ctf-writer/field-wrapper.h
src/ctf-writer/fields.c
src/ctf-writer/fields.h
src/ctf-writer/functor.c
src/ctf-writer/functor.h
src/ctf-writer/object-pool.c
src/ctf-writer/object.c
src/ctf-writer/resolve.c
src/ctf-writer/resolve.h
src/ctf-writer/stream-class.c
src/ctf-writer/stream-class.h
src/ctf-writer/stream.c
src/ctf-writer/stream.h
src/ctf-writer/trace.c
src/ctf-writer/trace.h
src/ctf-writer/utils.c
src/ctf-writer/validation.c
src/ctf-writer/validation.h
src/ctf-writer/values.c
src/ctf-writer/values.h
src/ctf-writer/visitor.c
src/ctf-writer/visitor.h
src/ctf-writer/writer.c
src/ctf-writer/writer.h
src/ctfser/ctfser.c
src/ctfser/ctfser.h
src/fd-cache/fd-cache.c
src/fd-cache/fd-cache.h
src/lib/assert-cond-base.h
src/lib/assert-cond.c
src/lib/babeltrace2.c
src/lib/current-thread.c
src/lib/error.c
src/lib/error.h
src/lib/graph/component-class-sink-simple.c
src/lib/graph/component-class-sink-simple.h
src/lib/graph/component-class.c
src/lib/graph/component-class.h
src/lib/graph/component-descriptor-set.c
src/lib/graph/component-filter.c
src/lib/graph/component-filter.h
src/lib/graph/component-sink.c
src/lib/graph/component-sink.h
src/lib/graph/component-source.c
src/lib/graph/component-source.h
src/lib/graph/component.c
src/lib/graph/component.h
src/lib/graph/connection.c
src/lib/graph/connection.h
src/lib/graph/graph.c
src/lib/graph/graph.h
src/lib/graph/interrupter.c
src/lib/graph/iterator.c
src/lib/graph/message-iterator-class.c
src/lib/graph/message-iterator-class.h
src/lib/graph/message/discarded-items.c
src/lib/graph/message/event.c
src/lib/graph/message/event.h
src/lib/graph/message/iterator.h
src/lib/graph/message/message-iterator-inactivity.c
src/lib/graph/message/message.c
src/lib/graph/message/message.h
src/lib/graph/message/packet.c
src/lib/graph/message/packet.h
src/lib/graph/message/stream.c
src/lib/graph/mip.c
src/lib/graph/port.c
src/lib/graph/port.h
src/lib/graph/query-executor.c
src/lib/integer-range-set.c
src/lib/integer-range-set.h
src/lib/lib-logging.c
src/lib/logging.c
src/lib/logging.h
src/lib/object-pool.h
src/lib/plugin/plugin-so.c
src/lib/plugin/plugin-so.h
src/lib/plugin/plugin.c
src/lib/prio-heap/prio-heap.h
src/lib/trace-ir/attributes.c
src/lib/trace-ir/attributes.h
src/lib/trace-ir/clock-class.c
src/lib/trace-ir/clock-class.h
src/lib/trace-ir/clock-snapshot.c
src/lib/trace-ir/clock-snapshot.h
src/lib/trace-ir/event-class.c
src/lib/trace-ir/event-class.h
src/lib/trace-ir/event.c
src/lib/trace-ir/event.h
src/lib/trace-ir/field-class.c
src/lib/trace-ir/field-class.h
src/lib/trace-ir/field-path.c
src/lib/trace-ir/field-path.h
src/lib/trace-ir/field-wrapper.c
src/lib/trace-ir/field-wrapper.h
src/lib/trace-ir/field.c
src/lib/trace-ir/field.h
src/lib/trace-ir/packet.c
src/lib/trace-ir/packet.h
src/lib/trace-ir/resolve-field-path.c
src/lib/trace-ir/resolve-field-path.h
src/lib/trace-ir/stream-class.c
src/lib/trace-ir/stream-class.h
src/lib/trace-ir/stream.c
src/lib/trace-ir/stream.h
src/lib/trace-ir/trace-class.c
src/lib/trace-ir/trace-class.h
src/lib/trace-ir/trace.c
src/lib/trace-ir/trace.h
src/lib/util.c
src/lib/value.c
src/lib/value.h
src/logging/log.c
src/logging/log.h
src/param-parse/param-parse.c
src/param-parse/param-parse.h
src/plugins/common/muxing/muxing.c
src/plugins/common/muxing/muxing.h
src/plugins/common/param-validation/param-validation.h
src/plugins/ctf/common/bfcr/bfcr.cpp
src/plugins/ctf/common/bfcr/bfcr.hpp
src/plugins/ctf/common/metadata/ast.hpp
src/plugins/ctf/common/metadata/ctf-meta-configure-ir-trace.cpp
src/plugins/ctf/common/metadata/ctf-meta-configure-ir-trace.hpp
src/plugins/ctf/common/metadata/ctf-meta-resolve.cpp
src/plugins/ctf/common/metadata/ctf-meta-translate.cpp
src/plugins/ctf/common/metadata/ctf-meta-update-alignments.cpp
src/plugins/ctf/common/metadata/ctf-meta-update-default-clock-classes.cpp
src/plugins/ctf/common/metadata/ctf-meta-update-in-ir.cpp
src/plugins/ctf/common/metadata/ctf-meta-update-meanings.cpp
src/plugins/ctf/common/metadata/ctf-meta-update-stream-class-config.cpp
src/plugins/ctf/common/metadata/ctf-meta-update-text-array-sequence.cpp
src/plugins/ctf/common/metadata/ctf-meta-update-value-storing-indexes.cpp
src/plugins/ctf/common/metadata/ctf-meta-validate.cpp
src/plugins/ctf/common/metadata/ctf-meta-visitors.hpp
src/plugins/ctf/common/metadata/ctf-meta-warn-meaningless-header-fields.cpp
src/plugins/ctf/common/metadata/decoder-packetized-file-stream-to-buf.cpp
src/plugins/ctf/common/metadata/decoder-packetized-file-stream-to-buf.hpp
src/plugins/ctf/common/metadata/decoder.cpp
src/plugins/ctf/common/metadata/decoder.hpp
src/plugins/ctf/common/metadata/objstack.cpp
src/plugins/ctf/common/metadata/objstack.hpp
src/plugins/ctf/common/metadata/parser.ypp
src/plugins/ctf/common/metadata/scanner.hpp
src/plugins/ctf/common/metadata/visitor-generate-ir.cpp
src/plugins/ctf/common/msg-iter/msg-iter.cpp
src/plugins/ctf/common/msg-iter/msg-iter.hpp
src/plugins/ctf/fs-sink/fs-sink-stream.cpp
src/plugins/ctf/fs-sink/fs-sink-stream.hpp
src/plugins/ctf/fs-sink/fs-sink-trace.cpp
src/plugins/ctf/fs-sink/fs-sink-trace.hpp
src/plugins/ctf/fs-sink/fs-sink.cpp
src/plugins/ctf/fs-sink/fs-sink.hpp
src/plugins/ctf/fs-sink/translate-ctf-ir-to-tsdl.cpp
src/plugins/ctf/fs-sink/translate-ctf-ir-to-tsdl.hpp
src/plugins/ctf/fs-sink/translate-trace-ir-to-ctf-ir.cpp
src/plugins/ctf/fs-sink/translate-trace-ir-to-ctf-ir.hpp
src/plugins/ctf/fs-src/data-stream-file.cpp
src/plugins/ctf/fs-src/data-stream-file.hpp
src/plugins/ctf/fs-src/file.cpp
src/plugins/ctf/fs-src/file.hpp
src/plugins/ctf/fs-src/fs.cpp
src/plugins/ctf/fs-src/fs.hpp
src/plugins/ctf/fs-src/metadata.cpp
src/plugins/ctf/fs-src/metadata.hpp
src/plugins/ctf/fs-src/query.cpp
src/plugins/ctf/fs-src/query.hpp
src/plugins/ctf/lttng-live/data-stream.cpp
src/plugins/ctf/lttng-live/lttng-live.cpp
src/plugins/ctf/lttng-live/lttng-live.hpp
src/plugins/ctf/lttng-live/metadata.cpp
src/plugins/ctf/lttng-live/viewer-connection.cpp
src/plugins/lttng-utils/debug-info/bin-info.c
src/plugins/lttng-utils/debug-info/bin-info.h
src/plugins/lttng-utils/debug-info/crc32.h
src/plugins/lttng-utils/debug-info/debug-info.c
src/plugins/lttng-utils/debug-info/debug-info.h
src/plugins/lttng-utils/debug-info/dwarf.c
src/plugins/lttng-utils/debug-info/dwarf.h
src/plugins/lttng-utils/debug-info/trace-ir-data-copy.c
src/plugins/lttng-utils/debug-info/trace-ir-data-copy.h
src/plugins/lttng-utils/debug-info/trace-ir-mapping.c
src/plugins/lttng-utils/debug-info/trace-ir-mapping.h
src/plugins/lttng-utils/debug-info/trace-ir-metadata-copy.c
src/plugins/lttng-utils/debug-info/trace-ir-metadata-copy.h
src/plugins/lttng-utils/debug-info/trace-ir-metadata-field-class-copy.c
src/plugins/lttng-utils/debug-info/trace-ir-metadata-field-class-copy.h
src/plugins/lttng-utils/debug-info/utils.c
src/plugins/lttng-utils/debug-info/utils.h
src/plugins/text/details/details.c
src/plugins/text/details/details.h
src/plugins/text/details/obj-lifetime-mgmt.c
src/plugins/text/details/obj-lifetime-mgmt.h
src/plugins/text/details/write.c
src/plugins/text/details/write.h
src/plugins/text/dmesg/dmesg.c
src/plugins/text/dmesg/dmesg.h
src/plugins/text/pretty/pretty.c
src/plugins/text/pretty/pretty.h
src/plugins/text/pretty/print.c
src/plugins/utils/counter/counter.c
src/plugins/utils/counter/counter.h
src/plugins/utils/dummy/dummy.c
src/plugins/utils/dummy/dummy.h
src/plugins/utils/muxer/muxer.c
src/plugins/utils/muxer/muxer.h
src/plugins/utils/trimmer/trimmer.c
src/plugins/utils/trimmer/trimmer.h
src/py-common/py-common.c
src/py-common/py-common.h
src/string-format/format-error.h
src/string-format/format-plugin-comp-cls-name.h
This page took 0.047555 seconds and 4 git commands to generate.