Skip to content

global symbol name pollution #10708

Closed
Closed
@markalle

Description

@markalle

You can download testcase files here:
https://github.com/open-mpi/ompi-tests-public/blob/master/packaging/run_nmcheck.c
https://github.com/open-mpi/ompi-tests-public/blob/master/packaging/nmcheck_prefix.pl

With those in place and a build of OMPI available, running the test is just:

#!/bin/sh
export OPAL_PREFIX=/path/to/some/ompi_install
export LD_LIBRARY_PATH=${OPAL_PREFIX}/lib
$OPAL_PREFIX/bin/mpicc -o x run_nmcheck.c
$OPAL_PREFIX/bin/mpirun -np 1 ./x

And a big list of questionable global exports should get listed.

Or a lighter weight way to get similar output is simply

nm ompi_install/lib/libmpi.so | grep ' [TWBCDVR] ' | grep -v -e ' MPI_' -e ' mpi_' -e ' PMPI_' -e ' MPIX_' -e ' MPL_' -e ' ADIOI_' -e ' ADIO_' -e ' ompi_' -e ' OMPI_' -e ' mca_' | less

although I recommend the ompi-tests-public testcase since it checks more libraries and has a longer list of global exports it allows as "acceptable" prefixes. Those prefixes are a somewhat arbitrary decision based on pragmatism -- eg what symbol names are likely to collide with symbols from a user's application or possibly their other support libraries.

When I run the test on branch v5.0.x I get

*** checking /u/markalle/space/Projects/OMPIDev.symbol/install/lib/libopen-pal.so.0
    [error]   common_sm_mpool_create
    [error]   selected_component
    [error]   shmem_posix_shm_open
    [error]   wait_sync_global_wakeup_mt
    [error]   wait_sync_global_wakeup_st
    [error]   wait_sync_list
*** checking /u/markalle/space/Projects/OMPIDev.symbol/install/lib/libpmix.so.0
    [error]   file_caddy_t_class
    [error]   file_tracker_t_class
    [error]   heartbeat_caddy_t_class
*** checking /u/markalle/space/Projects/OMPIDev.symbol/install/lib/libmpi.so.0
    [error]   _dict_free
    [error]   _dict_malloc
    [error]   ad_get_env_vars
    [error]   adapt_module_cached_topology
    [error]   adapt_topology_cache_item_t_class
    [error]   add_edge_3
    [error]   add_to_bucket
    [error]   add_to_list
    [error]   adjacency_asc
    [error]   adjacency_dsc
    [error]   aggregate_obj_weight
    [error]   algo
    [error]   allocate_vertex
    [error]   allocate_vertex2
    [error]   append_frag_to_ordered_list
    [error]   available_components
    [error]   balancing
    [error]   bottom_up_build_tree_from_topology
    [error]   bucket_grouping
    [error]   bucket_id
    [error]   build_cost_matrix
    [error]   build_level_topology
    [error]   build_p_vector
    [error]   build_synthetic_proc_id
    [error]   built_pivot_tree
    [error]   check_bucket
    [error]   check_cantmatch_for_match
    [error]   check_constraints
    [error]   choose
    [error]   clone_tree
    [error]   common_monitoring_translation_ht
    [error]   complete_aff_mat
    [error]   complete_obj_weight
    [error]   complete_tab_node
    [error]   compute_gain
    [error]   compute_nb_leaves_from_level
    [error]   compute_weighted_degree
    [error]   create_dumb_tree
    [error]   create_work
    [error]   delete_group_list
    [error]   depth_first
    [error]   destroy_work
    [error]   destruction
    [error]   dfs
    [error]   dict_destroy
    [error]   dict_int_cmp
    [error]   dict_itor_destroy
    [error]   dict_long_cmp
    [error]   dict_ptr_cmp
    [error]   dict_set_free
    [error]   dict_set_malloc
    [error]   dict_str_cmp
    [error]   dict_uint_cmp
    [error]   dict_ulong_cmp
    [error]   display_bucket
    [error]   display_bucket_list
    [error]   display_grouping
    [error]   display_node
    [error]   display_pivots
    [error]   display_selection
    [error]   display_sol
    [error]   display_sol_sum_com
    [error]   display_tab
    [error]   display_tab_group
    [error]   distance
    [error]   era_agreement_info_t_class
    [error]   era_comm_agreement_specific_t_class
    [error]   era_iagree_request_t_class
    [error]   era_rank_item_t_class
    [error]   era_value_t_class
    [error]   eval_cost
    [error]   eval_cost2
    [error]   eval_grouping
    [error]   eval_sol
    [error]   exchange
    [error]   fast_group
    [error]   fast_grouping
    [error]   fbtl_posix_max_aio_active_reqs
    [error]   fiboTreeConsolidate
    [error]   fiboTreeDel
    [error]   fiboTreeExit
    [error]   fiboTreeFree
    [error]   fiboTreeInit
    [error]   fiboTreeMin
    [error]   file_stats
   ...
    [error]   zero_dte_mapping
*** checking /u/markalle/space/Projects/OMPIDev.symbol/install/lib/libmpi_mpifh.so
*** checking /u/markalle/space/Projects/OMPIDev.symbol/install/lib/libmpi_usempif08.so
*** checking /u/markalle/space/Projects/OMPIDev.symbol/install/lib/libmpi_usempi_ignore_tkr.so

Note, when it comes to fixing them sometimes you can make things static, but often the symbols will span multiple files so in that case a prefix can be added to the symbol. Also when symbols like adapt_topology_cache_item_t_class show up (things that end with _class) that means there's a line like

OBJ_CLASS_INSTANCE(adapt_topology_cache_item_t, ...)

and the occurrances of adapt_topology_cache_item_t need updated. Eg I'm just noting that you can't search the code for adapt_topology_cache_item_t_class, you have to just search for adapt_topology_cache_item_t to find the cause of the adapt_topology_cache_item_t_class export.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions