[CDRIVER-1466] clang exports private symbols Created: 09/Aug/16  Updated: 07/Oct/16  Resolved: 07/Oct/16

Status: Closed
Project: C Driver
Component/s: None
Affects Version/s: 1.4.0
Fix Version/s: 1.5.0

Type: Bug Priority: Major - P3
Reporter: Hannes Magnusson Assignee: Hannes Magnusson
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
is related to CDRIVER-1347 Define per symbol visibility rather t... Closed

 Description   

clang doesn't support --version-script so falls back on linking with –-export-symbols-regex "^mongoc_".

Unfortunately, we haven't been entirely religious about our function naming conventions, and have plenty of private functions that start with mongoc_ rather then _mongoc.

This leads to functions like mongoc_set_new, mongoc_stream_tls_openssl_bio_meth_new, mongoc_topology_scanner_add and plenty more are part of our "public abi" when using clang.

We need to fix this, likely by removing the use of --version-script so we can have just one implementation of this, rather then multiple



 Comments   
Comment by Hannes Magnusson [ 07/Oct/16 ]

We no longer bundle external symbol lists and rather mark the explicitly and compile with -fvisiblity=hidden. See CDRIVER-1347

Comment by Hannes Magnusson [ 09/Aug/16 ]

mongoc_apm_command_failed_cleanup
mongoc_apm_command_failed_init
mongoc_apm_command_started_cleanup
mongoc_apm_command_started_init
mongoc_apm_command_succeeded_cleanup
mongoc_apm_command_succeeded_init
mongoc_async_cmd
mongoc_async_cmd_destroy
mongoc_async_cmd_new
mongoc_async_cmd_run
mongoc_async_cmd_tls_setup
mongoc_async_destroy
mongoc_async_new
mongoc_async_run
mongoc_b64_initialize_rmap
mongoc_b64_ntop
mongoc_b64_pton
mongoc_client_default_stream_initiator
mongoc_client_pool_get_size
mongoc_cluster_destroy
mongoc_cluster_disconnect_node
mongoc_cluster_get_max_bson_obj_size
mongoc_cluster_get_max_msg_size
mongoc_cluster_init
mongoc_cluster_run_command
mongoc_cluster_run_command_internal
mongoc_cluster_run_command_monitored
mongoc_cluster_sendv_to_server
mongoc_cluster_stream_for_reads
mongoc_cluster_stream_for_server
mongoc_cluster_stream_for_writes
mongoc_cluster_try_recv
mongoc_crypto_common_crypto_hmac_sha1
mongoc_crypto_common_crypto_sha1
mongoc_crypto_hmac_sha1
mongoc_crypto_init
mongoc_crypto_sha1
mongoc_log_trace_bytes
mongoc_log_trace_iovec
mongoc_memcmp
mongoc_read_prefs_get_max_staleness_ms
mongoc_read_prefs_set_max_staleness_ms
mongoc_secure_transport_read
mongoc_secure_transport_setup_ca
mongoc_secure_transport_setup_certificate
mongoc_secure_transport_write
mongoc_server_description_cleanup
mongoc_server_description_filter_stale
mongoc_server_description_filter_tags
mongoc_server_description_handle_ismaster
mongoc_server_description_has_election_id
mongoc_server_description_has_rs_member
mongoc_server_description_has_set_version
mongoc_server_description_init
mongoc_server_description_reset
mongoc_server_description_set_election_id
mongoc_server_description_set_set_version
mongoc_server_description_set_state
mongoc_server_description_update_rtt
mongoc_server_stream_cleanup
mongoc_server_stream_max_bson_obj_size
mongoc_server_stream_max_msg_size
mongoc_server_stream_max_write_batch_size
mongoc_server_stream_new
mongoc_set_add
mongoc_set_destroy
mongoc_set_find_id
mongoc_set_find_item
mongoc_set_for_each
mongoc_set_get
mongoc_set_get_item
mongoc_set_new
mongoc_set_rm
mongoc_socket_accept_ex
mongoc_socket_poll
mongoc_ssl_extract_subject
mongoc_stream_get_tls_stream
mongoc_stream_poll
mongoc_stream_tls_handshake
mongoc_stream_tls_handshake_block
mongoc_stream_tls_secure_transport_handshake
mongoc_stream_tls_secure_transport_new
mongoc_stream_wait
mongoc_topology_compatible
mongoc_topology_description_add_server
mongoc_topology_description_all_sds_have_write_date
mongoc_topology_description_destroy
mongoc_topology_description_handle_ismaster
mongoc_topology_description_init
mongoc_topology_description_invalidate_server
mongoc_topology_description_lowest_max_wire_version
mongoc_topology_description_select
mongoc_topology_description_server_by_id
mongoc_topology_description_suitable_servers
mongoc_topology_destroy
mongoc_topology_invalidate_server
mongoc_topology_new
mongoc_topology_reconcile
mongoc_topology_scanner_add
mongoc_topology_scanner_add_and_scan
mongoc_topology_scanner_destroy
mongoc_topology_scanner_get_error
mongoc_topology_scanner_get_node
mongoc_topology_scanner_has_node_for_host
mongoc_topology_scanner_new
mongoc_topology_scanner_node_destroy
mongoc_topology_scanner_node_disconnect
mongoc_topology_scanner_node_retire
mongoc_topology_scanner_node_setup
mongoc_topology_scanner_reset
mongoc_topology_scanner_set_ssl_opts
mongoc_topology_scanner_set_stream_initiator
mongoc_topology_scanner_start
mongoc_topology_scanner_work
mongoc_topology_select
mongoc_topology_server_by_id
mongoc_topology_server_timestamp
mongoc_uri_append_host
mongoc_uri_get_appname
mongoc_uri_lowercase_hostname
mongoc_uri_parse_host
mongoc_uri_set_appname

According to my poking around, the above symbols are being exported unexpectedly when using clang

Generated at Wed Feb 07 21:12:38 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.