Package: libgprofng0
Version: 2.38.50.20220707-1
Severity: minor
File: /usr/lib/x86_64-linux-gnu/libgprofng.so.0.0.0
User: debian...@lists.debian.org
Usertags: undefined-symbol adequate

libgprofng.so needs to link with -pthread, see the output of adequate,
symtree and objdump below. I detected this on amd64 but the Debian
build log scanner also detected dpkg-buildpackage complaining about it
on several architectures, see the w3m/getbuildlog output below.

I filed this bug at severity minor since I'm not sure if there are any
programs using the libgprofng.so lib and if they already use the 
pthread symbols and link with the -pthread flag or not.

Please note that -pthread has to be used at both compile and link time.

This bug report brought to you by adequate:

https://bonedaddy.net/pabs3/log/2013/02/23/inadequate-software/

$ lib=/usr/lib/x86_64-linux-gnu/libgprofng.so.0.0.0
$ link=/lib/x86_64-linux-gnu/libpthread-2.33.so
$ pkg="$(dpkg-query --search "$lib" | sed s/:.*//)"
$ src="$(grep-aptavail --no-field-names --show-field Source:Package --field 
Package --exact-match --pattern "$pkg" | sed 's/ .*//')"
$ first="$(printf '%s' "$src" | head --bytes 1)"

$ adequate "$pkg"
libgprofng0:amd64: undefined-symbol 
/usr/lib/x86_64-linux-gnu/libgprofng.so.0.0.0 => pthread_create
libgprofng0:amd64: undefined-symbol 
/usr/lib/x86_64-linux-gnu/libgprofng.so.0.0.0 => pthread_join

$ man adequate | grep -A4 undefined-symbol
       undefined-symbol
           The symbol has not been found in the libraries linked with the 
binary.  Either the binary either needs to be linked with an additional shared 
library, or the dependency
           on the shared library package that provides this symbol is too weak.

           References: Debian Policy §3.5, §8.6, §10.2.

$ lddtree "$lib"
libgprofng.so.0.0.0 => /usr/lib/x86_64-linux-gnu/libgprofng.so.0.0.0 
(interpreter => none)
    libopcodes-2.38.50-system.20220707.so => 
/usr/lib/x86_64-linux-gnu/libopcodes-2.38.50-system.20220707.so
    libbfd-2.38.50-system.20220707.so => 
/usr/lib/x86_64-linux-gnu/libbfd-2.38.50-system.20220707.so
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
        ld-linux-x86-64.so.2 => /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1

$ symtree "$lib"
/usr/lib/x86_64-linux-gnu/libgprofng.so.0.0.0
    libopcodes-2.38.50-system.20220707.so => 
disassemble_init_for_target,disassembler
    libbfd-2.38.50-system.20220707.so => 
bfd_check_format,bfd_close,cplus_demangle,bfd_openr,bfd_init
    libz.so.1 => inflateEnd,inflateInit2_,inflate
    libdl.so.2 => dlsym
    libstdc++.so.6 => 
_ZTVN10__cxxabiv121__vmi_class_type_infoE,_ZNSt6localeD1Ev,_ZSt20__throw_length_errorPKc,_ZSt9terminatev,_ZNSt13runtime_errorD2Ev,_ZNSt8ios_baseD2Ev,_ZNSdD2Ev,_ZTIm,_ZdlPvm,_ZNSt13runtime_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE,__cxa_guard_acquire,_ZNSi7putbackEc,_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_,_ZNKSt13runtime_error4whatEv,_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm,_ZTVSt15basic_streambufIcSt11char_traitsIcEE,_ZNSt8ios_base4InitD1Ev,_ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE,_ZTTNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE,_Znam,_ZNSt6localeC1Ev,__cxa_throw,_ZTVN10__cxxabiv117__class_type_infoE,_ZTVN10__cxxabiv119__pointer_type_infoE,_ZTVN10__cxxabiv120__si_class_type_infoE,__cxa_begin_catch,_ZTISt13runtime_error,_ZTVNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE,__cxa_pure_virtual,_ZTVSi,__cxa_guard_release,_ZNSt8ios_baseC2Ev,__cxa_allocate_exception,__gxx_personality_v0,_ZdaPv,_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_,_Znwm,_ZNSi3getEv,_ZTVSt9basic_iosIcSt11char_traitsIcEE,_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E,_ZNSt8ios_base4InitC1Ev,_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm,__cxa_rethrow,_ZTISt9bad_alloc,_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base,__cxa_throw_bad_array_new_length,_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev,_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv,_ZSt15set_new_handlerPFvvE,__cxa_end_catch,_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base,_ZSt19__throw_logic_errorPKc,__cxa_free_exception
    libc.so.6 => 
pthread_cond_signal,pthread_cond_signal,fflush,strcpy,exit,readdir,pathconf,sprintf,fopen,strsignal,strncmp,optind,strrchr,stat64,regexec,regexec,perror,stat,__isoc99_sscanf,dcgettext,closedir,signal,strncpy,puts,regfree,gettext,unlink,pthread_mutex_lock,mkdir,abort,stdin,strtoll,popen,getpid,kill,strspn,strdup,chmod,__assert_fail,printf,strtod,strtok,strtol,mmap,feof,symlink,fgets,strlen,tmpfile,__cxa_atexit,setitimer,sigemptyset,memset,dirname,strstr,strcspn,rmdir,__errno_location,fseek,open64,read,pthread_attr_init,getopt,fstat,vsnprintf,ctime,pthread_mutex_unlock,pthread_cond_broadcast,pthread_cond_broadcast,stdout,fputc,fseeko64,fputs,strtok_r,pthread_cond_wait,pthread_cond_wait,lseek,memcpy,memcpy,fclose,pthread_setcanceltype,strtoul,strcasecmp,ftello64,realpath,realpath,opendir,__ctype_b_loc,getenv,regcomp,fstat64,stderr,ioctl,system,munmap,pthread_exit,getuid,readlink,strncasecmp,strncat,strtoull,pclose,gethostname,pthread_mutex_init,usleep,getcwd,__getdelim,fwrite,fread,rename,sigaction,clock_gettime,clock_gettime,textdomain,close,catgets,pthread_setcancelstate,open,strchr,fprintf,utime,fdopen,__cxa_finalize,syscall,pthread_attr_destroy,fcntl,pthread_cond_init,pthread_cond_init,memmove,fopen64,bindtextdomain,access,opterr,strcmp,strerror,ferror,write,strcoll,basename,snprintf,sysconf
    libgcc_s.so.1 => _Unwind_Resume,__gcc_personality_v0
    WEAK => _ITM_deregisterTMCloneTable,__gmon_start__,_ITM_registerTMCloneTable
    UNRESOLVED => pthread_create,pthread_join

$ objdump -T "$link" | grep -E " ($(symtree "$lib" | sed -n 's/    UNRESOLVED 
=> //p' | tr , '|'))$"
0000000000008030 g    DF .text  0000000000000fe4  GLIBC_2.2.5 pthread_create
00000000000090b0  w   DF .text  000000000000000f  GLIBC_2.2.5 pthread_join

$ w3m -dump https://qa.debian.org/bls/packages/"$first"/"$src".html | grep -A2 
symbol
  • W shlibs-symbol-not-found (amd64, arm64, i386, x32)

Found 19 issues.

$ w3m -dump https://qa.debian.org/bls/bytag/W-shlibs-symbol-not-found.html | 
grep -A12 description
description

The build logs contains a line like

dpkg-shlibdeps: warning: symbol NAME used by BINARY found in none of the 
libraries.

Possible reasons:

  • A library not linked with a library needed.
    While this can sometimes make sense in order to allow the using binary to
    decide which of multiple available implementations to use, it means that
    dependency information might be incorrect, optimisations like prelinking
    might fail and stuff like that.

$ chronic getbuildlog "$src" last
$ grep 'dpkg-shlibdeps: warning: symbol .* used by .* found in none of the 
libraries' ./*.log
./binutils_2.38.50.20220707-1_amd64.log:dpkg-shlibdeps: warning: symbol 
pthread_join used by 
debian/libgprofng0/usr/lib/x86_64-linux-gnu/libgprofng.so.0.0.0 found in none 
of the libraries
./binutils_2.38.50.20220707-1_amd64.log:dpkg-shlibdeps: warning: symbol 
pthread_create used by 
debian/libgprofng0/usr/lib/x86_64-linux-gnu/libgprofng.so.0.0.0 found in none 
of the libraries
./binutils_2.38.50.20220707-1_arm64.log:dpkg-shlibdeps: warning: symbol 
pthread_create used by 
debian/libgprofng0/usr/lib/aarch64-linux-gnu/libgprofng.so.0.0.0 found in none 
of the libraries
./binutils_2.38.50.20220707-1_arm64.log:dpkg-shlibdeps: warning: symbol 
pthread_join used by 
debian/libgprofng0/usr/lib/aarch64-linux-gnu/libgprofng.so.0.0.0 found in none 
of the libraries
./binutils_2.38.50.20220707-1_i386.log:dpkg-shlibdeps: warning: symbol 
pthread_create used by 
debian/libgprofng0/usr/lib/i386-linux-gnu/libgprofng.so.0.0.0 found in none of 
the libraries
./binutils_2.38.50.20220707-1_i386.log:dpkg-shlibdeps: warning: symbol 
pthread_join used by 
debian/libgprofng0/usr/lib/i386-linux-gnu/libgprofng.so.0.0.0 found in none of 
the libraries
./binutils_2.38.50.20220707-1_x32.log:dpkg-shlibdeps: warning: symbol 
pthread_join used by 
debian/libgprofng0/usr/lib/x86_64-linux-gnux32/libgprofng.so.0.0.0 found in 
none of the libraries
./binutils_2.38.50.20220707-1_x32.log:dpkg-shlibdeps: warning: symbol 
pthread_create used by 
debian/libgprofng0/usr/lib/x86_64-linux-gnux32/libgprofng.so.0.0.0 found in 
none of the libraries

-- System Information:
Debian Release: bookworm/sid
  APT prefers testing-debug
  APT policy: (900, 'testing-debug'), (900, 'testing'), (860, 
'testing-proposed-updates-debug'), (860, 'testing-proposed-updates'), (800, 
'unstable-debug'), (800, 'unstable'), (790, 'buildd-unstable'), (700, 
'experimental-debug'), (700, 'experimental'), (690, 'buildd-experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 5.18.0-2-amd64 (SMP w/8 CPU threads; PREEMPT)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_AU.utf8, LC_CTYPE=en_AU.utf8 (charmap=UTF-8), LANGUAGE=en_AU:en
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages libgprofng0:amd64 depends on:
ii  libbinutils  2.38.50.20220707-1
ii  libc6        2.33-7
ii  libgcc-s1    12.1.0-2
ii  libstdc++6   12.1.0-2
ii  zlib1g       1:1.2.11.dfsg-4

libgprofng0:amd64 recommends no packages.

libgprofng0:amd64 suggests no packages.

-- no debconf information

-- 
bye,
pabs

https://wiki.debian.org/PaulWise

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to