Bug 27132 - memusagestat is linked to system librt, leading to undefined symbols on major version upgrade
Summary: memusagestat is linked to system librt, leading to undefined symbols on major...
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: malloc (show other bugs)
Version: 2.32
: P2 normal
Target Milestone: 2.34
Assignee: Paul Zimmermann
URL: https://bugs.gentoo.org/762682
Keywords:
Depends on:
Blocks:
 
Reported: 2020-12-30 22:46 UTC by Andreas K. Huettel
Modified: 2021-02-23 10:19 UTC (History)
4 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed: 2021-02-23 00:00:00
fw: security-


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andreas K. Huettel 2020-12-30 22:46:28 UTC
This is a clone of https://bugs.gentoo.org/762682 - see more details there.

From a build log of one of our users, who is building glibc-2.32 on a system with glibc-2.27 installed:

i686-pc-linux-gnu-gcc  -march=athlon -pipe -O2 -Wl,-O1 -Wl,--as-needed -Wl,-O1 -Wl,--as-needed  -shared -s
tatic-libgcc -Wl,-O1  -Wl,-z,defs -Wl,-dynamic-linker=/lib/ld-linux.so.2  -B/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/csu/   -Wl,-soname=libmemusage.so -Wl,-z,combreloc -Wl,-z,relro -Wl,-z,now  -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl -L/var/t
mp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/math -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/elf -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/dlfcn -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-
gnu-nptl/nss -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/nis -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/rt -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/resolv -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/buil
d-x86-i686-pc-linux-gnu-nptl/mathvec -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/support -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/crypt -L/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/nptl -Wl,-rpath-link=/var/t
mp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/math:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/elf:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/dlf
cn:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/nss:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/nis:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/rt:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-g
nu-nptl/resolv:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/mathvec:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/support:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/crypt:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/bu
ild-x86-i686-pc-linux-gnu-nptl/nptl -o /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/malloc/libmemusage.so -T /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/shlib.lds /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/csu/abi-no
te.o -Wl,--whole-archive /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/malloc/libmemusage_pic.a -Wl,--no-whole-archive /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/dlfcn/libdl.so.2   -Wl,--start-group /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x
86-i686-pc-linux-gnu-nptl/libc.so /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/libc_nonshared.a -Wl,--as-needed /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/elf/ld.so -Wl,--no-as-needed -Wl,--end-group
/usr/lib/gcc/i686-pc-linux-gnu/8.2.0/../../../../i686-pc-linux-gnu/bin/ld: /lib/librt.so.1: undefined reference to `__clock_settime@GLIBC_PRIVATE'                                                                 
/usr/lib/gcc/i686-pc-linux-gnu/8.2.0/../../../../i686-pc-linux-gnu/bin/ld: /lib/librt.so.1: undefined reference to `__clock_getcpuclockid@GLIBC_PRIVATE'                                                           
/usr/lib/gcc/i686-pc-linux-gnu/8.2.0/../../../../i686-pc-linux-gnu/bin/ld: /lib/librt.so.1: undefined reference to `__clock_nanosleep@GLIBC_PRIVATE'
/usr/lib/gcc/i686-pc-linux-gnu/8.2.0/../../../../i686-pc-linux-gnu/bin/ld: /lib/librt.so.1: undefined reference to `__clock_getres@GLIBC_PRIVATE'                                                                  
collect2: error: ld returned 1 exit status          
make[2]: *** [../Rules:215: /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/
malloc/memusagestat] Error 1


It looks like the build tries to link libmemusage.so using the *installed* librt.so, not the just built one.
Comment 1 Andreas Schwab 2020-12-30 23:05:06 UTC
libmemusage is not linked against librt at all.
Comment 2 Andreas K. Huettel 2020-12-30 23:14:41 UTC
(In reply to Andreas Schwab from comment #1)
> libmemusage is not linked against librt at all.

Sorry, my bad for not doublechecking (the fun of parallel build).

The error is from linking memusagestat (that's two lines up in the build log):

i686-pc-linux-gnu-gcc  -march=athlon -pipe -O2 -Wl,-O1 -Wl,--as-needed -Wl,-rpath-link=/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl:/var/tmp/portage/sys-libs/gl
ibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/math:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/elf:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i
686-pc-linux-gnu-nptl/dlfcn:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/nss:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/nis:/
var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/rt:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/resolv:/var/tmp/portage/sys-libs/gl
ibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/mathvec:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/support:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/buil
d-x86-i686-pc-linux-gnu-nptl/crypt:/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/nptl -pie -Wl,-O1 -nostdlib -nostartfiles -o /var/tmp/portage/sys-libs/glibc-2.3
2-r3/work/build-x86-i686-pc-linux-gnu-nptl/malloc/memusagestat  -Wl,-O1 -Wl,--as-needed  -Wl,-z,combreloc -Wl,-z,relro  /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-
nptl/csu/Scrt1.o /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/csu/crti.o `i686-pc-linux-gnu-gcc  -march=athlon -pipe -O2 -Wl,-O1 -Wl,--as-needed  --print-file-n
ame=crtbeginS.o` /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/malloc/memusagestat.o  -lgd -lpng -lz -lm -Wl,-dynamic-linker=/lib/ld-linux.so.2 -Wl,-z,now /var/t
mp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/libc.so.6 /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/libc_nonshared.a -Wl,--as-needed 
/var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/elf/ld.so -Wl,--no-as-needed -lgcc  `i686-pc-linux-gnu-gcc  -march=athlon -pipe -O2 -Wl,-O1 -Wl,--as-needed  --prin
t-file-name=crtendS.o` /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/csu/crtn.o
cd /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/malloc && /usr/lib/gcc/i686-pc-linux-gnu/8.2.0/../../../../i686-pc-linux-gnu/bin/ar cruv libmemusage_pic.a memus
age.os
Comment 3 Andreas Schwab 2020-12-31 09:44:50 UTC
memusagestat isn't linked against librt either.
Comment 4 Andreas K. Huettel 2020-12-31 10:47:37 UTC
make[2]: *** [../Rules:215: /var/tmp/portage/sys-libs/glibc-2.32-r3/work/build-x86-i686-pc-linux-gnu-nptl/malloc/memusagestat] Error 1

So why does the memusagestat target fail then?
Comment 5 jsm-csl@polyomino.org.uk 2020-12-31 21:18:25 UTC
memusagestat is linked with -lgd -lpng -lz, which are non-glibc libraries; 
maybe the way ld looks for libraries mentioned in DT_NEEDED in shared 
libraries it links with (a questionable feature of ld) is resulting in 
some other system shared library being found.  Really it would be better 
for memusagestat to be a separate package rather than included in the main 
glibc distribution at all (it could still be released along with glibc if 
desired), to avoid build complications related to such dependencies.
Comment 6 Florian Weimer 2020-12-31 23:01:24 UTC
Does adding the line

rt

to malloc/Depend fix this issue?
Comment 7 Paul Zimmermann 2021-02-23 07:55:49 UTC
(In reply to Florian Weimer from comment #6)
> Does adding the line
> 
> rt
> 
> to malloc/Depend fix this issue?

yes it does (I had the same issue on my laptop, under Ubuntu 18.04, with glibc-2.27 as system library, while trying to compile glibc-2.33 or the current git version).
Comment 8 Florian Weimer 2021-02-23 08:55:02 UTC
Thanks. Patch posted: https://sourceware.org/pipermail/libc-alpha/2021-February/122934.html
Comment 9 Paul Zimmermann 2021-02-23 09:09:35 UTC
patch applied (commit 9019737).
Comment 10 Paul Zimmermann 2021-02-23 10:08:12 UTC
fixed in commit 9019737.