FTBFS against glibc 2.37
Bug #2004264 reported by
Simon Chopin
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
GLibC |
Fix Released
|
Medium
|
|||
libunistring (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Hi,
During a mass rebuild of Lunar, the package libunistring failed to build against a snapshot of the upcoming glibc 2.37, while building fine using 2.36 as present in the archive.
https:/
https:/
I was able to reproduce this when building against my latest snapshot (done this morning), published in this PPA:
https:/
The failing tests appear to be test-strncat and test-u8-strncat.
Changed in glibc: | |
importance: | Unknown → Medium |
status: | Unknown → Fix Released |
To post a comment you must log in.
I did some tests on master (2f39e44a84) for the upcoming 2.37 release, and I found a regression in libunistring test suite on amd64 with AVX-2 instructions, more specifically on gnulib's test-strncat. It can be reproduced using these instructions:
https:/ /sourceware. org/glibc/ wiki/Testing/ Gnulib
I bisected the issue to 2d873231b1a9bb0 3291f2b989
commit 642933158e7cf07
Author: Noah Goldstein <email address hidden>
Date: Tue Nov 8 17:38:39 2022 -0800
x86: Optimize and shrink st{r|p} {n}{cat| cpy}-avx2 functions
Optimizations are:
code- size save, its a negative for some sizes in terms of
1. Use more overlapping stores to avoid branches.
2. Reduce how unrolled the aligning copies are (this is more of a
perf).
3. For st{r|p}n{cat|cpy} re-order the branches to minimize the
number that are taken.
I get the following backtrace:
#0 __strncat_avx2 () at ../sysdeps/ x86_64/ multiarch/ strncat- avx2.S: 76 e4000 "", __dest= 0x55555555c2a1 "") at /tmp/glibc- dev/include/ bits/string_ fortified. h:138 input@entry= 0x7ffff7de4000 "", n=n@entry=0, length=90) at unistr/ test-strncat. h:41 0x555555559100 <input> "Grüß Gott. Здравствуйте! x=(-b±sqrt( b²-4ac) )/(2a) 日本語,中文,한글", input_length=91) test-strncat. h:86
#1 0x00005555555555d7 in strncat (__len=0, __src=0x7ffff7d
#2 check_single (input=
#3 0x0000555555555352 in check (input=
at unistr/
#4 main () at test-strncat.c:58
I'm out of my depth in the assembler code.