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

Reply via email to