Package: libjpeg62-turbo
Version: 1:1.5.2-2+b1
Severity: normal
Tags: patch upstream

Hi,

When profiling any program that uses libjpeg-turbo, there's a proliferation
of “symbols” that are really internal labels, confusing the profiler:

  14,50%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_fdct_islow_sse2
   8,80%  MJPEG_Encode     nageru                         [.] 
memcpy_interleaved_fastpath
   8,69%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
..@25..CHECKBUF47_END
   4,51%  MJPEG_Encode     libc-2.28.so                   [.] 
__memmove_avx_unaligned_erms
   3,81%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_quantize_sse2.quantloop
   3,24%  MJPEG_Encode     libjpeg.so.62.2.0              [.] encode_mcu_huff
   2,81%  Mixer_Audio      libzita-resampler.so.1.6.0     [.] Resampler::process
   2,54%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_convsamp_sse2.convloop
   2,44%  nageru           [unknown]                      [k] 0xffffffffa280015f
   2,31%  MHD-connection   [unknown]                      [k] 0xffffffffa280015f
   2,09%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
..@44..CHECKBUF31_END
   2,02%  QS_Encode        [unknown]                      [k] 0xffffffffa280015f
   1,98%  Mixer_Audio      libzita-resampler.so.1.6.0     [.] 
VResampler::process
   1,89%  MJPEG_Encode     libjpeg.so.62.2.0              [.] compress_data
   1,57%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_huff_encode_one_block_sse2.BLOOP
   1,39%  MJPEG_Encode     libjpeg.so.62.2.0              [.] forward_DCT
   1,21%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_huff_encode_one_block_sse2

Note in particular ..@25..CHECKBUF47_END, which is really part of
jsimd_huff_encode_one_block_sse2, and the same with .BLOOP. This is a known
shortcoming of nasm, but can be stripped out fairly easily, e.g., with
something like

--- libjpeg-turbo-1.5.2.orig/simd/nasm_lt.sh
+++ libjpeg-turbo-1.5.2/simd/nasm_lt.sh
@@ -39,6 +39,7 @@ while [ $# -gt 0 ]; do
         -o*)
             o_opt=yes
             command="$command $1"
+            outfile="$2"
             ;;
         *.asm)
             infile=$1
@@ -53,8 +54,11 @@ done
 if [ "$o_opt" != yes ] ; then
     # By default, NASM creates an output file
     # in the same directory as the input file.
-    outfile="-o `echo $infile | sed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.o"
-    command="$command $outfile"
+    outfile="`echo $infile | sed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.o"
+    command="$command -o $outfile"
 fi
+set -e
 echo $command
-exec $command
+$command
+echo strip --discard-locals --wildcard --strip-symbol='?*.*' $outfile
+strip --discard-locals --wildcard --strip-symbol='?*.*' $outfile

After applying said patch and rebuilding, the profile is a lot more readable
and less cluttered:

  16,05%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_huff_encode_one_block_sse2                    
  14,38%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_fdct_islow_sse2                               
   8,50%  MJPEG_Encode     nageru                         [.] 
memcpy_interleaved_fastpath                         
   4,75%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_quantize_sse2                                 
   3,71%  MJPEG_Encode     libc-2.28.so                   [.] 
__memmove_avx_unaligned_erms                        
   3,11%  MJPEG_Encode     libjpeg.so.62.2.0              [.] 
jsimd_convsamp_sse2                                 
   2,86%  MJPEG_Encode     libjpeg.so.62.2.0              [.] encode_mcu_huff

Backtracing and disassembling in gdb is also affected by this issue.

-- System Information:
Debian Release: buster/sid
  APT prefers testing-debug
  APT policy: (500, 'testing-debug'), (500, 'testing'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.19.11 (SMP w/40 CPU cores)
Locale: LANG=en_DK.UTF-8, LC_CTYPE=en_DK.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_NO:en_US:en_GB:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages libjpeg62-turbo depends on:
ii  libc6  2.28-2

libjpeg62-turbo recommends no packages.

libjpeg62-turbo suggests no packages.

-- debconf-show failed

Reply via email to