From 9deacfd124895a1623af187e91e2529c77737007 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Wed, 18 Sep 2024 15:32:13 -0700 Subject: [PATCH] Track symbols exposed by built so's We really ought to know when we're adding or removing symbols. Change-Id: I4e2fc6c2d9f685dbf852b65716657bd2374bc092 --- check-symbols.sh | 51 +++++++++ libXorcode.sym | 110 ++++++++++++++++++ liberasurecode.sym | 130 ++++++++++++++++++++++ liberasurecode_rs_vand.sym | 34 ++++++ libnullcode.sym | 5 + roles/test_liberasurecode/tasks/main.yaml | 1 + 6 files changed, 331 insertions(+) create mode 100755 check-symbols.sh create mode 100644 libXorcode.sym create mode 100644 liberasurecode.sym create mode 100644 liberasurecode_rs_vand.sym create mode 100644 libnullcode.sym diff --git a/check-symbols.sh b/check-symbols.sh new file mode 100755 index 0000000..41c1893 --- /dev/null +++ b/check-symbols.sh @@ -0,0 +1,51 @@ +#!/bin/bash +#/ Usage: check-symbols.sh {check,build} +#/ Commands: +#/ +#/ build - Update the *.sym files at the root of this repository +#/ based on the *.so files that have been built. +#/ check - Compare the *.sym files against the symbols exposed in +#/ the *.so files that have been built. +#/ +#/ By checking in the *.sym files and running `check-symbols.sh check` +#/ in the gate, we establish an auditable record of when symbols are +#/ added or removed from the various *.so files we produce. +set -e + +get() { + nm --dynamic --defined-only $1 | cut -c18- | LC_COLLATE=C sort +} + +check() { + if [ ! -e $2 ]; then + touch $2 + fi + diff -u $2 <( get $1 ) +} + +build() { + get $1 > $2 +} + +case $1 in + check | build) + func=$1 + ;; + *) + grep '^#/' "$0" |cut -c4- + exit 1 +esac + +rc=0 +for lib in $(find . -name '*.so') ; do + echo "${func}ing $( basename $lib )" + if ! $func $lib $( basename ${lib/%.so/.sym} ) ; then + rc=1 + echo + fi +done + +if [ $rc == 1 ]; then + echo "Symbols don't match! Try running '$0 build' before committing." +fi +exit $rc diff --git a/libXorcode.sym b/libXorcode.sym new file mode 100644 index 0000000..1f0156b --- /dev/null +++ b/libXorcode.sym @@ -0,0 +1,110 @@ +D data_bm_hd3 +D data_bm_hd4 +D g_10_5_3_hd_code_data_bms +D g_10_5_3_hd_code_parity_bms +D g_10_5_4_hd_code_data_bms +D g_10_5_4_hd_code_parity_bms +D g_10_6_3_hd_code_data_bms +D g_10_6_3_hd_code_parity_bms +D g_10_6_4_hd_code_data_bms +D g_10_6_4_hd_code_parity_bms +D g_11_6_3_hd_code_data_bms +D g_11_6_3_hd_code_parity_bms +D g_11_6_4_hd_code_data_bms +D g_11_6_4_hd_code_parity_bms +D g_12_6_3_hd_code_data_bms +D g_12_6_3_hd_code_parity_bms +D g_12_6_4_hd_code_data_bms +D g_12_6_4_hd_code_parity_bms +D g_13_6_3_hd_code_data_bms +D g_13_6_3_hd_code_parity_bms +D g_13_6_4_hd_code_data_bms +D g_13_6_4_hd_code_parity_bms +D g_14_6_3_hd_code_data_bms +D g_14_6_3_hd_code_parity_bms +D g_14_6_4_hd_code_data_bms +D g_14_6_4_hd_code_parity_bms +D g_15_6_3_hd_code_data_bms +D g_15_6_3_hd_code_parity_bms +D g_15_6_4_hd_code_data_bms +D g_15_6_4_hd_code_parity_bms +D g_16_6_4_hd_code_data_bms +D g_16_6_4_hd_code_parity_bms +D g_17_6_4_hd_code_data_bms +D g_17_6_4_hd_code_parity_bms +D g_18_6_4_hd_code_data_bms +D g_18_6_4_hd_code_parity_bms +D g_19_6_4_hd_code_data_bms +D g_19_6_4_hd_code_parity_bms +D g_20_6_4_hd_code_data_bms +D g_20_6_4_hd_code_parity_bms +D g_3_3_3_hd_code_data_bms +D g_3_3_3_hd_code_parity_bms +D g_5_5_3_hd_code_data_bms +D g_5_5_3_hd_code_parity_bms +D g_5_5_4_hd_code_data_bms +D g_5_5_4_hd_code_parity_bms +D g_6_5_3_hd_code_data_bms +D g_6_5_3_hd_code_parity_bms +D g_6_5_4_hd_code_data_bms +D g_6_5_4_hd_code_parity_bms +D g_6_6_3_hd_code_data_bms +D g_6_6_3_hd_code_parity_bms +D g_6_6_4_hd_code_data_bms +D g_6_6_4_hd_code_parity_bms +D g_7_5_3_hd_code_data_bms +D g_7_5_3_hd_code_parity_bms +D g_7_5_4_hd_code_data_bms +D g_7_5_4_hd_code_parity_bms +D g_7_6_3_hd_code_data_bms +D g_7_6_3_hd_code_parity_bms +D g_7_6_4_hd_code_data_bms +D g_7_6_4_hd_code_parity_bms +D g_8_5_3_hd_code_data_bms +D g_8_5_3_hd_code_parity_bms +D g_8_5_4_hd_code_data_bms +D g_8_5_4_hd_code_parity_bms +D g_8_6_3_hd_code_data_bms +D g_8_6_3_hd_code_parity_bms +D g_8_6_4_hd_code_data_bms +D g_8_6_4_hd_code_parity_bms +D g_9_5_3_hd_code_data_bms +D g_9_5_3_hd_code_parity_bms +D g_9_5_4_hd_code_data_bms +D g_9_5_4_hd_code_parity_bms +D g_9_6_3_hd_code_data_bms +D g_9_6_3_hd_code_parity_bms +D g_9_6_4_hd_code_data_bms +D g_9_6_4_hd_code_parity_bms +D hd3_m3_data +D hd3_m3_parity +D hd3_m5_data +D hd3_m5_parity +D hd3_m6_data +D hd3_m6_parity +D hd4_m5_data +D hd4_m5_parity +D hd4_m6_data +D hd4_m6_parity +D parity_bm_hd3 +D parity_bm_hd4 +R g_bit_lookup +T data_bit_lookup +T does_parity_have_data +T fast_memcpy +T get_failure_pattern +T get_missing_data +T get_missing_parity +T index_of_connected_parity +T init_xor_hd_code +T is_data_in_parity +T missing_elements_bm +T num_missing_data_in_parity +T parity_bit_lookup +T remove_from_missing_list +T selective_encode +T xor_bufs_and_store +T xor_code_encode +T xor_hd_decode +T xor_hd_fragments_needed +T xor_reconstruct_one diff --git a/liberasurecode.sym b/liberasurecode.sym new file mode 100644 index 0000000..9ce608e --- /dev/null +++ b/liberasurecode.sym @@ -0,0 +1,130 @@ +B active_instances +B active_instances_rwlock +B ec_backends_supported_str +B flat_xor_hd +B flat_xor_hd_ops +B ilog_table +B ilog_table_begin +B isa_l_rs_cauchy +B isa_l_rs_cauchy_ops +B isa_l_rs_vand +B isa_l_rs_vand_ops +B jerasure_rs_cauchy +B jerasure_rs_cauchy_ops +B jerasure_rs_vand +B jerasure_rs_vand_ops +B liberasurecode_rs_vand +B liberasurecode_rs_vand_ops +B libphazr +B libphazr_ops +B log_table +B next_backend_desc +B null +B null_ops +B num_supported_backends +B shss +B shss_ops +D backend_flat_xor_hd +D backend_isa_l_rs_cauchy +D backend_isa_l_rs_vand +D backend_jerasure_rs_cauchy +D backend_jerasure_rs_vand +D backend_liberasurecode_rs_vand +D backend_libphazr +D backend_null +D backend_shss +D ec_backends_supported +D flat_xor_hd_op_stubs +D isa_l_rs_cauchy_op_stubs +D isa_l_rs_vand_op_stubs +D jerasure_rs_cauchy_op_stubs +D jerasure_rs_vand_op_stubs +D liberasurecode_rs_vand_op_stubs +D libphazr_op_stubs +D null_op_stubs +D shss_op_stubs +D valid_gf_w +D valid_pairs +T add_fragment_metadata +T alloc_and_set_buffer +T alloc_fragment_buffer +T alloc_zeroed_buffer +T check_and_free_buffer +T compute_alg_sig +T destroy_alg_sig +T finalize_fragments_after_encode +T fragments_to_string +T free_fragment_buffer +T get_aligned_buffer16 +T get_aligned_data_size +T get_backend_id +T get_backend_version +T get_data_ptr_array_from_fragments +T get_data_ptr_from_fragment +T get_fragment_backend_metadata_size +T get_fragment_buffer_size +T get_fragment_idx +T get_fragment_partition +T get_fragment_payload_size +T get_fragment_ptr_array_from_data +T get_fragment_ptr_from_data +T get_fragment_ptr_from_data_novalidate +T get_fragment_size +T get_galois_multi_func +T get_galois_uninit_func +T get_jerasure_sohandle +T get_libec_version +T get_orig_data_size +T init_alg_sig +T is_invalid_fragment +T is_invalid_fragment_header +T is_invalid_fragment_metadata +T isa_l_common_init +T isa_l_decode +T isa_l_element_size +T isa_l_encode +T isa_l_exit +T isa_l_min_fragments +T isa_l_reconstruct +T liberasurecode_backend_alloc_desc +T liberasurecode_backend_available +T liberasurecode_backend_close +T liberasurecode_backend_instance_get_by_desc +T liberasurecode_backend_instance_register +T liberasurecode_backend_instance_unregister +T liberasurecode_backend_open +T liberasurecode_crc32_alt +T liberasurecode_decode +T liberasurecode_decode_cleanup +T liberasurecode_encode +T liberasurecode_encode_cleanup +T liberasurecode_exit +T liberasurecode_fragments_needed +T liberasurecode_get_aligned_data_size +T liberasurecode_get_fragment_metadata +T liberasurecode_get_fragment_size +T liberasurecode_get_minimum_encode_size +T liberasurecode_get_version +T liberasurecode_init +T liberasurecode_instance_create +T liberasurecode_instance_destroy +T liberasurecode_reconstruct_fragment +T liberasurecode_verify_fragment_metadata +T liberasurecode_verify_stripe_metadata +T load_gf_functions +T prepare_fragments_for_decode +T prepare_fragments_for_encode +T rs_galois_deinit_tables +T rs_galois_div +T rs_galois_init_tables +T rs_galois_inverse +T rs_galois_mult +T set_backend_id +T set_backend_version +T set_checksum +T set_fragment_backend_metadata_size +T set_fragment_idx +T set_fragment_payload_size +T set_libec_version +T set_orig_data_size +T stub_galois_uninit_field diff --git a/liberasurecode_rs_vand.sym b/liberasurecode_rs_vand.sym new file mode 100644 index 0000000..60286fe --- /dev/null +++ b/liberasurecode_rs_vand.sym @@ -0,0 +1,34 @@ +B ilog_table +B ilog_table_begin +B log_table +T col_mult +T col_mult_and_add +T copy_row +T create_decoding_matrix +T create_non_systematic_vand_matrix +T deinit_liberasurecode_rs_vand +T free_systematic_matrix +T gaussj_inversion +T get_first_k_available +T get_matrix_row +T get_non_zero_diagonal +T init_liberasurecode_rs_vand +T is_identity_matrix +T is_missing +T liberasurecode_rs_vand_decode +T liberasurecode_rs_vand_encode +T liberasurecode_rs_vand_reconstruct +T make_systematic_matrix +T print_matrix +T region_dot_product +T region_multiply +T region_xor +T row_mult +T row_mult_and_add +T rs_galois_deinit_tables +T rs_galois_div +T rs_galois_init_tables +T rs_galois_inverse +T rs_galois_mult +T square_matrix_multiply +T swap_matrix_rows diff --git a/libnullcode.sym b/libnullcode.sym new file mode 100644 index 0000000..59e0a32 --- /dev/null +++ b/libnullcode.sym @@ -0,0 +1,5 @@ +T null_code_decode +T null_code_encode +T null_code_fragments_needed +T null_code_init +T null_reconstruct diff --git a/roles/test_liberasurecode/tasks/main.yaml b/roles/test_liberasurecode/tasks/main.yaml index 4df9215..505dd04 100644 --- a/roles/test_liberasurecode/tasks/main.yaml +++ b/roles/test_liberasurecode/tasks/main.yaml @@ -10,5 +10,6 @@ make make test make valgrind-test + ./check-symbols.sh check executable: /bin/bash chdir: '{{ zuul.project.src_dir }}'