Dmitry Eremin-Solenikov(lumag) replied on github web page:

platform/libodp-linux.map
line 594
@@ -0,0 +1,600 @@
+LIBODP_LINUX_1.17 {
+  global:
+       odp_atomic_add_rel_u32;
+       odp_atomic_add_rel_u64;
+       odp_atomic_add_u32;
+       odp_atomic_add_u64;
+       odp_atomic_cas_acq_rel_u32;
+       odp_atomic_cas_acq_rel_u64;
+       odp_atomic_cas_acq_u32;
+       odp_atomic_cas_acq_u64;
+       odp_atomic_cas_rel_u32;
+       odp_atomic_cas_rel_u64;
+       odp_atomic_cas_u32;
+       odp_atomic_cas_u64;
+       odp_atomic_dec_u32;
+       odp_atomic_dec_u64;
+       odp_atomic_fetch_add_u32;
+       odp_atomic_fetch_add_u64;
+       odp_atomic_fetch_dec_u32;
+       odp_atomic_fetch_dec_u64;
+       odp_atomic_fetch_inc_u32;
+       odp_atomic_fetch_inc_u64;
+       odp_atomic_fetch_sub_u32;
+       odp_atomic_fetch_sub_u64;
+       odp_atomic_inc_u32;
+       odp_atomic_inc_u64;
+       odp_atomic_init_u32;
+       odp_atomic_init_u64;
+       odp_atomic_load_acq_u32;
+       odp_atomic_load_acq_u64;
+       odp_atomic_load_u32;
+       odp_atomic_load_u64;
+       odp_atomic_lock_free_u64;
+       odp_atomic_max_u32;
+       odp_atomic_max_u64;
+       odp_atomic_min_u32;
+       odp_atomic_min_u64;
+       odp_atomic_store_rel_u32;
+       odp_atomic_store_rel_u64;
+       odp_atomic_store_u32;
+       odp_atomic_store_u64;
+       odp_atomic_sub_rel_u32;
+       odp_atomic_sub_rel_u64;
+       odp_atomic_sub_u32;
+       odp_atomic_sub_u64;
+       odp_atomic_xchg_u32;
+       odp_atomic_xchg_u64;
+       odp_barrier_init;
+       odp_barrier_wait;
+       odp_be_to_cpu_16;
+       odp_be_to_cpu_32;
+       odp_be_to_cpu_64;
+       odp_buffer_addr;
+       odp_buffer_alloc;
+       odp_buffer_alloc_multi;
+       odp_buffer_free;
+       odp_buffer_free_multi;
+       odp_buffer_from_event;
+       odp_buffer_is_valid;
+       odp_buffer_pool;
+       odp_buffer_print;
+       odp_buffer_size;
+       odp_buffer_to_event;
+       odp_buffer_to_u64;
+       odp_chksum_ones_comp16;
+       odp_cls_capability;
+       odp_cls_cos_create;
+       odp_cls_cos_num_queue;
+       odp_cls_cos_param_init;
+       odp_cls_cos_pool;
+       odp_cls_cos_pool_set;
+       odp_cls_cos_queues;
+       odp_cls_pmr_create;
+       odp_cls_pmr_destroy;
+       odp_cls_pmr_param_init;
+       odp_cos_destroy;
+       odp_cos_drop;
+       odp_cos_drop_set;
+       odp_cos_queue;
+       odp_cos_queue_set;
+       odp_cos_to_u64;
+       odp_cos_with_l2_priority;
+       odp_cos_with_l3_qos;
+       odp_cpu_count;
+       odp_cpu_cycles;
+       odp_cpu_cycles_diff;
+       odp_cpu_cycles_max;
+       odp_cpu_cycles_resolution;
+       odp_cpu_hz;
+       odp_cpu_hz_id;
+       odp_cpu_hz_max;
+       odp_cpu_hz_max_id;
+       odp_cpu_id;
+       odp_cpumask_all_available;
+       odp_cpumask_and;
+       odp_cpumask_clr;
+       odp_cpumask_copy;
+       odp_cpumask_count;
+       odp_cpumask_default_control;
+       odp_cpumask_default_worker;
+       odp_cpumask_equal;
+       odp_cpumask_first;
+       odp_cpumask_from_str;
+       odp_cpumask_isset;
+       odp_cpumask_last;
+       odp_cpumask_next;
+       odp_cpumask_or;
+       odp_cpumask_set;
+       odp_cpumask_setall;
+       odp_cpumask_to_str;
+       odp_cpumask_xor;
+       odp_cpumask_zero;
+       odp_cpu_model_str;
+       odp_cpu_model_str_id;
+       odp_cpu_to_be_16;
+       odp_cpu_to_be_32;
+       odp_cpu_to_be_64;
+       odp_cpu_to_le_16;
+       odp_cpu_to_le_32;
+       odp_cpu_to_le_64;
+       odp_crypto_auth_capability;
+       odp_crypto_capability;
+       odp_crypto_cipher_capability;
+       odp_crypto_compl_free;
+       odp_crypto_compl_from_event;
+       odp_crypto_compl_result;
+       odp_crypto_compl_to_event;
+       odp_crypto_compl_to_u64;
+       odp_crypto_op;
+       odp_crypto_op_enq;
+       odp_crypto_operation;
+       odp_crypto_packet_from_event;
+       odp_crypto_packet_to_event;
+       odp_crypto_result;
+       odp_crypto_session_create;
+       odp_crypto_session_destroy;
+       odp_crypto_session_param_init;
+       odp_crypto_session_to_u64;
+       odp_errno;
+       odp_errno_print;
+       odp_errno_str;
+       odp_errno_zero;
+       odp_event_filter_packet;
+       odp_event_free;
+       odp_event_free_multi;
+       odp_event_free_sp;
+       odp_event_subtype;
+       odp_event_to_u64;
+       odp_event_type;
+       odp_event_type_multi;
+       odp_event_types;
+       odp_hash_crc32c;
+       odp_init_global;
+       odp_init_local;
+       odp_init_param_init;
+       odp_ipsec_auth_capability;
+       odp_ipsec_capability;
+       odp_ipsec_cipher_capability;
+       odp_ipsec_config;
+       odp_ipsec_config_init;
+       odp_ipsec_in;
+       odp_ipsec_in_enq;
+       odp_ipsec_out;
+       odp_ipsec_out_enq;
+       odp_ipsec_out_inline;
+       odp_ipsec_packet_from_event;
+       odp_ipsec_packet_to_event;
+       odp_ipsec_result;
+       odp_ipsec_sa_context;
+       odp_ipsec_sa_create;
+       odp_ipsec_sa_destroy;
+       odp_ipsec_sa_disable;
+       odp_ipsec_sa_mtu_update;
+       odp_ipsec_sa_param_init;
+       odp_ipsec_sa_to_u64;
+       odp_ipsec_status;
+       odp_le_to_cpu_16;
+       odp_le_to_cpu_32;
+       odp_le_to_cpu_64;
+       odp_mb_acquire;
+       odp_mb_full;
+       odp_mb_release;
+       odp_memcmp;
+       odp_memcpy;
+       odp_memset;
+       odp_override_abort;
+       odp_override_log;
+       odp_packet_add_data;
+       odp_packet_align;
+       odp_packet_alloc;
+       odp_packet_alloc_multi;
+       odp_packet_buf_len;
+       odp_packet_color;
+       odp_packet_color_set;
+       odp_packet_concat;
+       odp_packet_copy;
+       odp_packet_copy_data;
+       odp_packet_copy_from_mem;
+       odp_packet_copy_from_pkt;
+       odp_packet_copy_part;
+       odp_packet_copy_to_mem;
+       odp_packet_data;
+       odp_packet_drop_eligible;
+       odp_packet_drop_eligible_set;
+       odp_packet_extend_head;
+       odp_packet_extend_tail;
+       odp_packet_first_seg;
+       odp_packet_flow_hash;
+       odp_packet_flow_hash_set;
+       odp_packet_free;
+       odp_packet_free_multi;
+       odp_packet_free_sp;
+       odp_packet_from_event;
+       odp_packet_from_event_multi;
+       odp_packet_has_arp;
+       odp_packet_has_arp_set;
+       odp_packet_has_error;
+       odp_packet_has_eth;
+       odp_packet_has_eth_bcast;
+       odp_packet_has_eth_bcast_set;
+       odp_packet_has_eth_mcast;
+       odp_packet_has_eth_mcast_set;
+       odp_packet_has_eth_set;
+       odp_packet_has_flow_hash;
+       odp_packet_has_flow_hash_clr;
+       odp_packet_has_icmp;
+       odp_packet_has_icmp_set;
+       odp_packet_has_ip_bcast;
+       odp_packet_has_ip_bcast_set;
+       odp_packet_has_ipfrag;
+       odp_packet_has_ipfrag_set;
+       odp_packet_has_ip_mcast;
+       odp_packet_has_ip_mcast_set;
+       odp_packet_has_ipopt;
+       odp_packet_has_ipopt_set;
+       odp_packet_has_ipsec;
+       odp_packet_has_ipsec_set;
+       odp_packet_has_ipv4;
+       odp_packet_has_ipv4_set;
+       odp_packet_has_ipv6;
+       odp_packet_has_ipv6_set;
+       odp_packet_has_jumbo;
+       odp_packet_has_jumbo_set;
+       odp_packet_has_l2;
+       odp_packet_has_l2_error;
+       odp_packet_has_l2_set;
+       odp_packet_has_l3;
+       odp_packet_has_l3_error;
+       odp_packet_has_l3_set;
+       odp_packet_has_l4;
+       odp_packet_has_l4_error;
+       odp_packet_has_l4_set;
+       odp_packet_has_ref;
+       odp_packet_has_sctp;
+       odp_packet_has_sctp_set;
+       odp_packet_has_tcp;
+       odp_packet_has_tcp_set;
+       odp_packet_has_ts;
+       odp_packet_has_ts_clr;
+       odp_packet_has_udp;
+       odp_packet_has_udp_set;
+       odp_packet_has_vlan;
+       odp_packet_has_vlan_qinq;
+       odp_packet_has_vlan_qinq_set;
+       odp_packet_has_vlan_set;
+       odp_packet_head;
+       odp_packet_headroom;
+       odp_packet_input;
+       odp_packet_input_index;
+       odp_packet_is_segmented;
+       odp_packet_is_valid;
+       odp_packet_l2_offset;
+       odp_packet_l2_offset_set;
+       odp_packet_l2_ptr;
+       odp_packet_l3_chksum_insert;
+       odp_packet_l3_chksum_status;
+       odp_packet_l3_offset;
+       odp_packet_l3_offset_set;
+       odp_packet_l3_ptr;
+       odp_packet_l4_chksum_insert;
+       odp_packet_l4_chksum_status;
+       odp_packet_l4_offset;
+       odp_packet_l4_offset_set;
+       odp_packet_l4_ptr;
+       odp_packet_last_seg;
+       odp_packet_len;
+       odp_packet_move_data;
+       odp_packet_next_seg;
+       odp_packet_num_segs;
+       odp_packet_offset;
+       odp_packet_ones_comp;
+       odp_packet_parse;
+       odp_packet_parse_multi;
+       odp_packet_pool;
+       odp_packet_prefetch;
+       odp_packet_print;
+       odp_packet_print_data;
+       odp_packet_pull_head;
+       odp_packet_pull_tail;
+       odp_packet_push_head;
+       odp_packet_push_tail;
+       odp_packet_ref;
+       odp_packet_ref_pkt;
+       odp_packet_ref_static;
+       odp_packet_rem_data;
+       odp_packet_reset;
+       odp_packet_seg_data;
+       odp_packet_seg_data_len;
+       odp_packet_seg_len;
+       odp_packet_seg_to_u64;
+       odp_packet_shaper_len_adjust;
+       odp_packet_shaper_len_adjust_set;
+       odp_packet_split;
+       odp_packet_tail;
+       odp_packet_tailroom;
+       odp_packet_to_event;
+       odp_packet_to_event_multi;
+       odp_packet_to_u64;
+       odp_packet_trunc_head;
+       odp_packet_trunc_tail;
+       odp_packet_ts;
+       odp_packet_ts_set;
+       odp_packet_user_area;
+       odp_packet_user_area_size;
+       odp_packet_user_ptr;
+       odp_packet_user_ptr_set;
+       odp_pktin_event_queue;
+       odp_pktin_maxlen;
+       odp_pktin_queue;
+       odp_pktin_queue_config;
+       odp_pktin_queue_param_init;
+       odp_pktin_recv;
+       odp_pktin_recv_mq_tmo;
+       odp_pktin_recv_tmo;
+       odp_pktin_ts_from_ns;
+       odp_pktin_ts_res;
+       odp_pktin_wait_time;
+       odp_pktio_capability;
+       odp_pktio_close;
+       odp_pktio_config;
+       odp_pktio_config_init;
+       odp_pktio_default_cos_set;
+       odp_pktio_error_cos_set;
+       odp_pktio_headroom_set;
+       odp_pktio_index;
+       odp_pktio_info;
+       odp_pktio_link_status;
+       odp_pktio_lookup;
+       odp_pktio_mac_addr;
+       odp_pktio_mac_addr_set;
+       odp_pktio_max_index;
+       odp_pktio_open;
+       odp_pktio_param_init;
+       odp_pktio_print;
+       odp_pktio_promisc_mode;
+       odp_pktio_promisc_mode_set;
+       odp_pktio_skip_set;
+       odp_pktio_start;
+       odp_pktio_stats;
+       odp_pktio_stats_reset;
+       odp_pktio_stop;
+       odp_pktio_to_u64;
+       odp_pktout_event_queue;
+       odp_pktout_maxlen;
+       odp_pktout_queue;
+       odp_pktout_queue_config;
+       odp_pktout_queue_param_init;
+       odp_pktout_send;
+       odp_pmr_to_u64;
+       odp_pool_capability;
+       odp_pool_create;
+       odp_pool_destroy;
+       odp_pool_info;
+       odp_pool_lookup;
+       odp_pool_param_init;
+       odp_pool_print;
+       odp_pool_to_u64;
+       odp_queue_capability;
+       odp_queue_context;
+       odp_queue_context_set;
+       odp_queue_create;
+       odp_queue_deq;
+       odp_queue_deq_multi;
+       odp_queue_destroy;
+       odp_queue_enq;
+       odp_queue_enq_multi;
+       odp_queue_info;
+       odp_queue_lock_count;
+       odp_queue_lookup;
+       odp_queue_param_init;
+       odp_queue_sched_group;
+       odp_queue_sched_prio;
+       odp_queue_sched_type;
+       odp_queue_to_u64;
+       odp_queue_type;
+       odp_random_data;
+       odp_random_max_kind;
+       odp_random_test_data;
+       odp_rwlock_init;
+       odp_rwlock_read_lock;
+       odp_rwlock_read_trylock;
+       odp_rwlock_read_unlock;
+       odp_rwlock_recursive_init;
+       odp_rwlock_recursive_read_lock;
+       odp_rwlock_recursive_read_trylock;
+       odp_rwlock_recursive_read_unlock;
+       odp_rwlock_recursive_write_lock;
+       odp_rwlock_recursive_write_trylock;
+       odp_rwlock_recursive_write_unlock;
+       odp_rwlock_write_lock;
+       odp_rwlock_write_trylock;
+       odp_rwlock_write_unlock;
+       odp_schedule;
+       odp_schedule_group_create;
+       odp_schedule_group_destroy;
+       odp_schedule_group_info;
+       odp_schedule_group_join;
+       odp_schedule_group_leave;
+       odp_schedule_group_lookup;
+       odp_schedule_group_thrmask;
+       odp_schedule_multi;
+       odp_schedule_num_prio;
+       odp_schedule_order_lock;
+       odp_schedule_order_unlock;
+       odp_schedule_order_unlock_lock;
+       odp_schedule_pause;
+       odp_schedule_prefetch;
+       odp_schedule_release_atomic;
+       odp_schedule_release_ordered;
+       odp_schedule_resume;
+       odp_schedule_wait_time;
+       odp_shm_addr;
+       odp_shm_capability;
+       odp_shm_free;
+       odp_shm_import;
+       odp_shm_info;
+       odp_shm_lookup;
+       odp_shm_print;
+       odp_shm_print_all;
+       odp_shm_reserve;
+       odp_shm_to_u64;
+       odp_spinlock_init;
+       odp_spinlock_is_locked;
+       odp_spinlock_lock;
+       odp_spinlock_recursive_init;
+       odp_spinlock_recursive_is_locked;
+       odp_spinlock_recursive_lock;
+       odp_spinlock_recursive_trylock;
+       odp_spinlock_recursive_unlock;
+       odp_spinlock_trylock;
+       odp_spinlock_unlock;
+       odp_sys_cache_line_size;
+       odp_sys_huge_page_size;
+       odp_sys_huge_page_size_all;
+       odp_sys_info_print;
+       odp_sys_page_size;
+       odp_term_global;
+       odp_term_local;
+       odp_thread_count;
+       odp_thread_count_max;
+       odp_thread_id;
+       odp_thread_type;
+       odp_thrmask_and;
+       odp_thrmask_clr;
+       odp_thrmask_control;
+       odp_thrmask_copy;
+       odp_thrmask_count;
+       odp_thrmask_equal;
+       odp_thrmask_first;
+       odp_thrmask_from_str;
+       odp_thrmask_isset;
+       odp_thrmask_last;
+       odp_thrmask_next;
+       odp_thrmask_or;
+       odp_thrmask_set;
+       odp_thrmask_setall;
+       odp_thrmask_to_str;
+       odp_thrmask_worker;
+       odp_thrmask_xor;
+       odp_thrmask_zero;
+       odp_ticketlock_init;
+       odp_ticketlock_is_locked;
+       odp_ticketlock_lock;
+       odp_ticketlock_trylock;
+       odp_ticketlock_unlock;
+       odp_time_cmp;
+       odp_time_diff;
+       odp_time_diff_ns;
+       odp_time_global;
+       odp_time_global_from_ns;
+       odp_time_global_res;
+       odp_time_local;
+       odp_time_local_from_ns;
+       odp_time_local_res;
+       odp_timeout_alloc;
+       odp_timeout_free;
+       odp_timeout_fresh;
+       odp_timeout_from_event;
+       odp_timeout_tick;
+       odp_timeout_timer;
+       odp_timeout_to_event;
+       odp_timeout_to_u64;
+       odp_timeout_user_ptr;
+       odp_timer_alloc;
+       odp_timer_cancel;
+       odp_timer_capability;
+       odp_timer_current_tick;
+       odp_timer_free;
+       odp_timer_ns_to_tick;
+       odp_timer_pool_create;
+       odp_timer_pool_destroy;
+       odp_timer_pool_info;
+       odp_timer_pool_start;
+       odp_timer_pool_to_u64;
+       odp_timer_set_abs;
+       odp_timer_set_rel;
+       odp_timer_tick_to_ns;
+       odp_timer_to_u64;
+       odp_time_sum;
+       odp_time_to_ns;
+       odp_time_wait_ns;
+       odp_time_wait_until;
+       odp_tm_capabilities;
+       odp_tm_capability;
+       odp_tm_create;
+       odp_tm_destroy;
+       odp_tm_drop_prec_marking;
+       odp_tm_ecn_marking;
+       odp_tm_egress_init;
+       odp_tm_enq;
+       odp_tm_enq_with_cnt;
+       odp_tm_find;
+       odp_tm_is_idle;
+       odp_tm_node_connect;
+       odp_tm_node_context;
+       odp_tm_node_context_set;
+       odp_tm_node_create;
+       odp_tm_node_destroy;
+       odp_tm_node_disconnect;
+       odp_tm_node_fanin_info;
+       odp_tm_node_info;
+       odp_tm_node_lookup;
+       odp_tm_node_params_init;
+       odp_tm_node_sched_config;
+       odp_tm_node_shaper_config;
+       odp_tm_node_threshold_config;
+       odp_tm_node_wred_config;
+       odp_tm_priority_query;
+       odp_tm_priority_threshold_config;
+       odp_tm_queue_connect;
+       odp_tm_queue_context;
+       odp_tm_queue_context_set;
+       odp_tm_queue_create;
+       odp_tm_queue_destroy;
+       odp_tm_queue_disconnect;
+       odp_tm_queue_info;
+       odp_tm_queue_params_init;
+       odp_tm_queue_query;
+       odp_tm_queue_sched_config;
+       odp_tm_queue_shaper_config;
+       odp_tm_queue_threshold_config;
+       odp_tm_queue_wred_config;
+       odp_tm_requirements_init;
+       odp_tm_sched_create;
+       odp_tm_sched_destroy;
+       odp_tm_sched_lookup;
+       odp_tm_sched_params_init;
+       odp_tm_sched_params_read;
+       odp_tm_sched_params_update;
+       odp_tm_shaper_create;
+       odp_tm_shaper_destroy;
+       odp_tm_shaper_lookup;
+       odp_tm_shaper_params_init;
+       odp_tm_shaper_params_read;
+       odp_tm_shaper_params_update;
+       odp_tm_stats_print;
+       odp_tm_threshold_create;
+       odp_tm_threshold_destroy;
+       odp_tm_threshold_params_init;
+       odp_tm_thresholds_lookup;
+       odp_tm_thresholds_params_read;
+       odp_tm_thresholds_params_update;
+       odp_tm_total_query;
+       odp_tm_total_threshold_config;
+       odp_tm_vlan_marking;
+       odp_tm_wred_create;
+       odp_tm_wred_destroy;
+       odp_tm_wred_lookup;
+       odp_tm_wred_params_init;
+       odp_tm_wred_params_read;
+       odp_tm_wred_params_update;
+       odp_version_api_str;
+       odp_version_impl_name;
+       odp_version_impl_str;


Comment:
@muvarov no, it does not capture an error. It can be implemented though.

@Bill-Fischofer-Linaro as I wrote, second patch is to be discussed.

> Dmitry Eremin-Solenikov(lumag) wrote:
> @muvarov no, as far as I remember. I will check, when I get back to this PR.
> @Bill-Fischofer-Linaro this list should not be autogenerated, it binds 
> symbols to library versions. Consider 
> [libc](https://sourceware.org/git/?p=glibc.git;a=blob;f=math/Versions;h=01ed388ae5dc05115713dbb3c7abfa88b649e260;hb=HEAD),
>  [GnuTLS](https://gitlab.com/gnutls/gnutls/blob/master/lib/libgnutls.map), 
> [libgcrypt](https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=blob;f=src/libgcrypt.vers;h=edf8a76ae72b9c74431c1b85567f9d33369a45c8;hb=HEAD).
> 
> In theory we can go 
> [nettle](https://git.lysator.liu.se/nettle/nettle/blob/master/libnettle.map.in)
>  way. However this limits usefullness of version mapping (versions are 
> limited to the same id).


>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>> It's a burden because it requires a separate list to be maintained apart 
>> from the main API definitions contained in the `.h` files, as well as the 
>> associated file lists we maintain in the various `Makefile.am` files.  
>> Whenever you have to keep multiple lists in sync that's always an 
>> error-prone process unless these are auto-generated by scripts or other 
>> build tools.
>> 
>> The original idea behind the visibility controls was to make all symbols 
>> internal by default and only export symbols defined between the 
>> `visibility_begin.h` and `visibility_end.h` include files. It seems this has 
>> a similar goal, but via a different enumeration. It's not clear what we're 
>> gaining here vs. using a pattern since all ODP APIs share the `odp_` prefix.


>>> muvarov wrote
>>> will Travis capture error if some function is missed in this list?


>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>> @Bill-Fischofer-Linaro is that really a "burden"? First commit does 
>>>> exactly that, however it makes impossible to stop library from exporting 
>>>> extra `_odp_*` symbols (which makes ABI definition loose).  Having such 
>>>> list would allow us to have proper symbol versioning, if we decide to have 
>>>> stable ABI (and we are almost there, judging from library ABI tracking).


>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>> Not sure I follow. The concern is that maintaining this list would impose 
>>>>> a burden as every new API defined (or removed) would have to remember to 
>>>>> update this list.


>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>> Yes. However we must be sure to export correct symbols with correct 
>>>>>> versions.


>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>> Must these be enumerated individually? The ODP API symbols should all 
>>>>>>> match the pattern `odp_*`.


https://github.com/Linaro/odp/pull/449#discussion_r165751632
updated_at 2018-02-02 20:28:42

Reply via email to