Source: gf-complete Version: 1.0.2+2017.04.10.git.ea75cdf-3 Severity: wishlist Tags: upstream patch
Dear Maintainer, libgf-complete1 exports a number of internal symbols that are not part of API. They vary depending on platform and optimization options, clutter public namespace, worsen performance. Attached debdiff fixes that (on the top of https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=921874 https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=921874;filename=gf-complete-runtime-cpudetect.debdiff;msg=5 ); passes (limited) testing; I've built jerasure (locally backported 2.0.0+2017.04.10.git.de1739cc84-1) against resulting library without problems, but have not checked any other (potential) users. Known problems: hiding symbols (and removing them from .symbols) is obviously risky operation; I consider risk to be low in this case, but still. -- System Information: Debian Release: 9.7 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable-debug'), (500, 'proposed-updates-debug'), (500, 'proposed-updates'), (500, 'stable') Architecture: i386 (x86_64) Foreign Architectures: amd64 Kernel: Linux 4.9.0-6-amd64 (SMP w/2 CPU cores) Locale: LANG=ru_RU.KOI8-R, LC_CTYPE=ru_RU.KOI8-R (charmap=KOI8-R), LANGUAGE=ru_RU.KOI8-R (charmap=KOI8-R) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)
diff -Nru gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/changelog gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/changelog --- gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/changelog 2019-02-09 13:29:51.000000000 +0300 +++ gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/changelog 2019-02-09 13:29:51.000000000 +0300 @@ -1,10 +1,11 @@ -gf-complete (1.0.2+2017.04.10.git.ea75cdf-3~bpo9+1~local2) stretch-backports; urgency=medium +gf-complete (1.0.2+2017.04.10.git.ea75cdf-3~bpo9+1~local3) stretch-backports; urgency=medium * Rebuild for stretch-backports. * Fix i386 simd compilation. * Fix runtime cpudetection. * Fix neon for armhf. * Run complete test suite under qemu. + * Hide internal symbols. -- Yuriy M. Kaminskiy <yumkam+deb...@gmail.com> Sat, 09 Feb 2019 13:29:51 +0300 diff -Nru gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/libgf-complete1.symbols gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/libgf-complete1.symbols --- gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/libgf-complete1.symbols 2018-05-22 16:43:40.000000000 +0300 +++ gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/libgf-complete1.symbols 2019-02-09 13:29:51.000000000 +0300 @@ -6,26 +6,8 @@ MOA_Random_W@Base 1.0.2 MOA_Seed@Base 1.0.2 _gf_errno@Base 1.0.2 - bits@Base 1.0.2 - bits_56@Base 1.0.2 - (arch=amd64)cpuid@Base 1.0.2+2017.04.10.git.ea75cdf create_gf_from_argv@Base 1.0.2 - (arch=arm64 armhf armel)get_hwcap@Base 1.0.2+2017.04.10.git.ea75cdf - gf_alignment_error@Base 1.0.2 - gf_bitmatrix_inverse@Base 1.0.2 - gf_composite_get_default_poly@Base 1.0.2 - gf_cpu_identified@Base 1.0.2+2017.04.10.git.ea75cdf - gf_cpu_identify@Base 1.0.2+2017.04.10.git.ea75cdf - gf_cpu_supports_arm_neon@Base 1.0.2+2017.04.10.git.ea75cdf - gf_cpu_supports_intel_pclmul@Base 1.0.2+2017.04.10.git.ea75cdf - gf_cpu_supports_intel_sse2@Base 1.0.2+2017.04.10.git.ea75cdf - gf_cpu_supports_intel_sse3@Base 1.0.2+2017.04.10.git.ea75cdf - gf_cpu_supports_intel_sse4@Base 1.0.2+2017.04.10.git.ea75cdf - gf_cpu_supports_intel_ssse3@Base 1.0.2+2017.04.10.git.ea75cdf - gf_do_final_region_alignment@Base 1.0.2 - gf_do_initial_region_alignment@Base 1.0.2 gf_error@Base 1.0.2 - gf_error_check@Base 1.0.2 gf_free@Base 1.0.2 gf_general_add@Base 1.0.2 gf_general_are_equal@Base 1.0.2 @@ -46,57 +28,12 @@ gf_general_val_to_s@Base 1.0.2 gf_init_easy@Base 1.0.2 gf_init_hard@Base 1.0.2 - gf_multby_one@Base 1.0.2 - gf_multby_zero@Base 1.0.2 gf_scratch_size@Base 1.0.2 - gf_set_region_data@Base 1.0.2 gf_size@Base 1.0.2 - gf_two_byte_region_table_multiply@Base 1.0.2 - gf_w128_bytwo_b_multiply@Base 1.0.2 - gf_w128_bytwo_b_multiply_region@Base 1.0.2 - gf_w128_bytwo_p_multiply@Base 1.0.2 - (arch=amd64)gf_w128_clm_multiply@Base 1.0.2+2017.04.10.git.ea75cdf - gf_w128_divide_from_inverse@Base 1.0.2 - gf_w128_euclid@Base 1.0.2 - gf_w128_extract_word@Base 1.0.2 - gf_w128_group_multiply@Base 1.0.2 - gf_w128_init@Base 1.0.2 - gf_w128_inverse_from_divide@Base 1.0.2 - gf_w128_scratch_size@Base 1.0.2 - gf_w128_shift_multiply@Base 1.0.2 - (arch=amd64)gf_w128_sse_bytwo_b_multiply@Base 1.0.2+2017.04.10.git.ea75cdf - (arch=amd64)gf_w128_sse_bytwo_p_multiply@Base 1.0.2+2017.04.10.git.ea75cdf gf_w16_get_div_alog_table@Base 1.0.2 gf_w16_get_log_table@Base 1.0.2 gf_w16_get_mult_alog_table@Base 1.0.2 - gf_w16_init@Base 1.0.2 - (arch=arm64)gf_w16_neon_split_init@Base 1.0.2+2017.04.10.git.ea75cdf - gf_w16_scratch_size@Base 1.0.2 - gf_w16_split_8_8_multiply@Base 1.0.2 - gf_w32_init@Base 1.0.2 - (arch=arm64)gf_w32_neon_split_init@Base 1.0.2+2017.04.10.git.ea75cdf - gf_w32_scratch_size@Base 1.0.2 gf_w4_get_div_table@Base 1.0.2 gf_w4_get_mult_table@Base 1.0.2 - gf_w4_init@Base 1.0.2 - (arch=arm64)gf_w4_neon_cfm_init@Base 1.0.2+2017.04.10.git.ea75cdf - (arch=arm64)gf_w4_neon_single_table_init@Base 1.0.2+2017.04.10.git.ea75cdf - gf_w4_scratch_size@Base 1.0.2 - (arch=amd64)gf_w64_bytwo_p_sse_multiply_region@Base 1.0.2+2017.04.10.git.ea75cdf - (arch=amd64)gf_w64_clm_multiply_region@Base 1.0.2+2017.04.10.git.ea75cdf - gf_w64_init@Base 1.0.2 - (arch=arm64)gf_w64_neon_split_init@Base 1.0.2+2017.04.10.git.ea75cdf - gf_w64_scratch_size@Base 1.0.2 - gf_w64_split_16_64_lazy_multiply_region@Base 1.0.2 - gf_w64_split_4_64_lazy_multiply_region@Base 1.0.2 - gf_w64_split_8_64_lazy_multiply_region@Base 1.0.2 gf_w8_get_div_table@Base 1.0.2 gf_w8_get_mult_table@Base 1.0.2 - gf_w8_init@Base 1.0.2 - (arch=arm64)gf_w8_neon_cfm_init@Base 1.0.2+2017.04.10.git.ea75cdf - (arch=arm64)gf_w8_neon_split_init@Base 1.0.2+2017.04.10.git.ea75cdf - gf_w8_scratch_size@Base 1.0.2 - gf_wgen_cauchy_region@Base 1.0.2 - gf_wgen_extract_word@Base 1.0.2 - gf_wgen_init@Base 1.0.2 - gf_wgen_scratch_size@Base 1.0.2 diff -Nru gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/0004-Move-SIMD-includes-from-gf_complete.h-to-gf_int.h.patch gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/0004-Move-SIMD-includes-from-gf_complete.h-to-gf_int.h.patch --- gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/0004-Move-SIMD-includes-from-gf_complete.h-to-gf_int.h.patch 1970-01-01 03:00:00.000000000 +0300 +++ gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/0004-Move-SIMD-includes-from-gf_complete.h-to-gf_int.h.patch 2019-02-09 13:29:51.000000000 +0300 @@ -0,0 +1,95 @@ +From 46bc4f02e316df4d6f0c9342b4e31649f397b07b Mon Sep 17 00:00:00 2001 +From: "Yuriy M. Kaminskiy" <yum...@gmail.com> +Date: Sun, 10 Feb 2019 01:28:14 +0300 +Subject: [PATCH 4/5] Move SIMD includes from gf_complete.h to gf_int.h + +This is clearly implementation detail that does not belong to public API +header; and INTEL_SSE* or ARM_* defines are not user-visible anyway. +--- + include/gf_complete.h | 29 ----------------------------- + include/gf_int.h | 29 +++++++++++++++++++++++++++++ + 2 files changed, 29 insertions(+), 29 deletions(-) + +diff --git a/include/gf_complete.h b/include/gf_complete.h +index 3ec59ed..98fd8e6 100644 +--- a/include/gf_complete.h ++++ b/include/gf_complete.h +@@ -12,35 +12,6 @@ + #define _GF_COMPLETE_H_ + #include <stdint.h> + +-#ifdef INTEL_SSE4 +- #ifdef __SSE4_2__ +- #include <nmmintrin.h> +- #else /* def __SSE4_1__ */ +- #include <smmintrin.h> +- #endif +- #ifdef __i386 +- #define _mm_insert_epi64(A,B,C) _mm_insert_epi32(_mm_insert_epi32((A),(uint32_t)(B),(C)*2),(uint32_t)((uint64_t)(B)>>32),(C)*2+1) +- #define _mm_extract_epi64(A,C) ((((uint64_t)_mm_extract_epi32((A),(C)*2+1))<<32)|_mm_extract_epi32((A),(C)*2)) +- #endif +-#endif +- +-#ifdef INTEL_SSSE3 +- #include <tmmintrin.h> +-#endif +- +-#ifdef INTEL_SSE2 +- #include <emmintrin.h> +-#endif +- +-#ifdef INTEL_SSE4_PCLMUL +- #include <wmmintrin.h> +-#endif +- +-#if defined(ARM_NEON) +- #include <arm_neon.h> +-#endif +- +- + /* These are the different ways to perform multiplication. + Not all are implemented for all values of w. + See the paper for an explanation of how they work. */ +diff --git a/include/gf_int.h b/include/gf_int.h +index 0356920..007d679 100644 +--- a/include/gf_int.h ++++ b/include/gf_int.h +@@ -15,6 +15,35 @@ + + #include <string.h> + ++#ifdef INTEL_SSE4 ++ #ifdef __SSE4_2__ ++ #include <nmmintrin.h> ++ #else /* def __SSE4_1__ */ ++ #include <smmintrin.h> ++ #endif ++ #ifdef __i386 ++ #define _mm_insert_epi64(A,B,C) _mm_insert_epi32(_mm_insert_epi32((A),(uint32_t)(B),(C)*2),(uint32_t)((uint64_t)(B)>>32),(C)*2+1) ++ #define _mm_extract_epi64(A,C) ((((uint64_t)_mm_extract_epi32((A),(C)*2+1))<<32)|_mm_extract_epi32((A),(C)*2)) ++ #endif ++#endif ++ ++#ifdef INTEL_SSSE3 ++ #include <tmmintrin.h> ++#endif ++ ++#ifdef INTEL_SSE2 ++ #include <emmintrin.h> ++#endif ++ ++#ifdef INTEL_SSE4_PCLMUL ++ #include <wmmintrin.h> ++#endif ++ ++#if defined(ARM_NEON) ++ #include <arm_neon.h> ++#endif ++ ++ + extern void timer_start (double *t); + extern double timer_split (const double *t); + extern void galois_fill_random (void *buf, int len, unsigned int seed); +-- +2.11.0 + diff -Nru gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/0005-Hide-non-public-symbols.patch gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/0005-Hide-non-public-symbols.patch --- gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/0005-Hide-non-public-symbols.patch 1970-01-01 03:00:00.000000000 +0300 +++ gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/0005-Hide-non-public-symbols.patch 2019-02-09 13:29:51.000000000 +0300 @@ -0,0 +1,69 @@ +From ec9c8dc05016df9fd179385d05e1e899a9772881 Mon Sep 17 00:00:00 2001 +From: "Yuriy M. Kaminskiy" <yum...@gmail.com> +Date: Sun, 10 Feb 2019 01:38:35 +0300 +Subject: [PATCH 5/5] Hide non-public symbols + +--- + src/Makefile.am | 2 +- + src/libgf_complete.sym | 38 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 39 insertions(+), 1 deletion(-) + create mode 100644 src/libgf_complete.sym + +diff --git a/src/Makefile.am b/src/Makefile.am +index 5e7dafc..08b4fee 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -23,5 +23,5 @@ libgf_neon_la_SOURCES = neon/gf_w4_neon.c \ + neon/gf_w64_neon.c + endif + +-libgf_complete_la_LDFLAGS = -version-info 1:0:0 ++libgf_complete_la_LDFLAGS = -version-info 1:0:0 -export-symbols libgf_complete.sym + +diff --git a/src/libgf_complete.sym b/src/libgf_complete.sym +new file mode 100644 +index 0000000..5b51663 +--- /dev/null ++++ b/src/libgf_complete.sym +@@ -0,0 +1,38 @@ ++_gf_errno ++gf_error ++gf_init_easy ++gf_init_hard ++gf_scratch_size ++gf_size ++gf_free ++gf_w4_get_mult_table ++gf_w4_get_div_table ++gf_w8_get_mult_table ++gf_w8_get_div_table ++gf_w16_get_log_table ++gf_w16_get_mult_alog_table ++gf_w16_get_div_alog_table ++create_gf_from_argv ++gf_general_set_zero ++gf_general_set_one ++gf_general_set_two ++gf_general_is_zero ++gf_general_is_one ++gf_general_are_equal ++gf_general_val_to_s ++gf_general_s_to_val ++gf_general_set_random ++gf_general_add ++gf_general_multiply ++gf_general_divide ++gf_general_inverse ++gf_general_do_region_multiply ++gf_general_do_region_check ++gf_general_set_up_single_timing_test ++gf_general_do_single_timing_test ++MOA_Random_32 ++MOA_Random_64 ++MOA_Random_128 ++MOA_Random_W ++MOA_Fill_Random_Region ++MOA_Seed +-- +2.11.0 + diff -Nru gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/series gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/series --- gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/series 2019-02-09 13:29:51.000000000 +0300 +++ gf-complete-1.0.2+2017.04.10.git.ea75cdf/debian/patches/series 2019-02-09 13:29:51.000000000 +0300 @@ -1,3 +1,5 @@ 0001-Fix-compilation-on-i386.patch 0002-Fix-runtime-cpudetection.patch 0003-Merge-back-unneeded-libgf_util.la.patch +0004-Move-SIMD-includes-from-gf_complete.h-to-gf_int.h.patch +0005-Hide-non-public-symbols.patch