bug#80153: libtool: 2.5.4 - gcc 16 --push-state --as-needed -latomic --pop-state vs. libtool

Frederic Berat via bug-libtool via Bug reports for the GNU libtool shared library maintenance tool <[email protected]> Thu, 8 Jan 2026 18:10:59 +0100
Newsgroups gmane.comp.gnu.libtool.bugs
Message-ID <CAObJKZph5-UB6BGYAJanh+-hCkrJ186rm6ejeREKa8xHYdhjzQ@mail.gmail.com>
--000000000000d176d10647e37e97
Content-Type: multipart/alternative; boundary="000000000000d176d10647e37e95"

--000000000000d176d10647e37e95
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Jan 8, 2026 at 4:14=E2=80=AFPM Jakub Jelinek via bug-libtool via Bu=
g
reports for the GNU libtool shared library maintenance tool <
[email protected]> wrote:

> Hi!
>
> gcc 16 in https://gcc.gnu.org/r16-4315 https://gcc.gnu.org/PR81358 change
> added --push-state --as-needed -latomic --pop-state to the collect2/ld
> invocation from the gcc/g++ etc. drivers.
>
> Unfortunately libtool.m4 in the loop starting with
>   # Parse the compiler output and extract the necessary
>   # objects, libraries and library flags.
> grabs object files and libraries and -L/-R options from the compiler
> driver invocation of the linker and grabs them without these
> --push-state --as-needed / --pop-state wrapping options, which are needed
> to only link the library in if it is actually needed.
> I think on Solaris the pair is -z ignore / -z record instead, but
> unfortunately in that case it is less clear if those options are meant to
> affect just the single library and so are a property of that library, or
> if they have been randomly added e.g. by the user or whatever and affect
> instead what comes after it or multiple libraries etc.
>
> Anyway, what we see in gcc, as mentioned in https://gcc.gnu.org/PR123396
> is that several shared libraries linked with libtool are then uselessly
> linked to libatomic.so:
> for i in libstdc++-v3/src/.libs/libstdc++.so.6.*.*
> libsanitizer/*/.libs/lib*.so.*.* libgcobol/.libs/lib*.so.*.*; do echo $i;
> ldd -u $i; done
> libstdc++-v3/src/.libs/libstdc++.so.6.0.35
> Unused direct dependencies:
>         /lib64/libatomic.so.1
> libsanitizer/asan/.libs/libasan.so.8.0.0
> Unused direct dependencies:
>         /lib64/libatomic.so.1
> libsanitizer/hwasan/.libs/libhwasan.so.0.0.0
> Unused direct dependencies:
>         /lib64/libm.so.6
>         /lib64/libatomic.so.1
> libsanitizer/lsan/.libs/liblsan.so.0.0.0
> Unused direct dependencies:
>         /lib64/libm.so.6
>         /lib64/libatomic.so.1
> libsanitizer/tsan/.libs/libtsan.so.2.0.0
> Unused direct dependencies:
>         /lib64/libatomic.so.1
> libsanitizer/ubsan/.libs/libubsan.so.1.0.0
> Unused direct dependencies:
>         /lib64/libm.so.6
>         /lib64/libatomic.so.1
> libgcobol/.libs/libgcobol.so.2.0.0
> Unused direct dependencies:
>         /lib64/libatomic.so.1
> E.g. for libstdc++-v3, libtool created by configure has
> postdep_objects=3D"/home/jakub/src/gcc/obj38/./gcc/crtendS.o
> /lib/../lib64/crtn.o"
> postdeps=3D" -lgcc_s -latomic -lc -lgcc_s "
>
> I see -latomic in postdeps or postdeps_CXX in other packags, e.g. when
> gettext is built with gcc 16, but in that case I actually don't see any
> shared library or binary linked uselessly against libatomic.so.1; not
> really
> sure why though.
>
> In https://gcc.gnu.org/pipermail/gcc-patches/2025-December/704644.html
> the PR81358 patch author suggested to work around this by filtering
> out -latomic from postdeps_CXX, though I think that just means the
> libraries
> will never be linked against libatomic.so.1 rather than only linking
> against
> it on architectures where e.g. some atomics aren't provided by inlined co=
de
> and need to fallback to libatomic.so.1.
>
> So, I've been wondering if the libtool.m4
>   # Parse the compiler output and extract the necessary
>   # objects, libraries and library flags.
> couldn't special case at least the --push-state --as-needed options befor=
e
> -lXXX option and --pop-state after it and in that case put into postdeps_=
*
> var instead of just -lXXX
> $_LT_TAGVAR(lt_prog_compiler_wl, $1)--push-state
> $_LT_TAGVAR(lt_prog_compiler_wl, $1)--as-needed -lXXX
> $_LT_TAGVAR(lt_prog_compiler_wl, $1)
> But I admit I haven't studied in detail in what exactly the postdeps var =
is
> used.
>
>
I've attached a standalone reproduction script that I tested in a
fedora-rawhide environment with GCC16.
And a patch that I'm planning to apply on fedora's libtool 2.5.4 (I don't
have the master equivalent yet), although I'm not sure that I do what I
should there, so I'd be pleased to get feedback.

Without the patch, libtool generates the following command:

libtool: link: g++ -std=3Dgnu++11  -fPIC -DPIC -shared -nostdlib
/usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64/crti.o
/usr/lib/gcc/x86_64-redhat-linux/16/crtbeginS.o  .libs/repro.o
-L/usr/lib/gcc/x86_64-redhat-linux/16
-L/usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64 -L/lib/../lib64
-L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/16/../../.. -L/lib
-L/usr/lib -lstdc++ -lm -lgcc_s -latomic -lc -lgcc_s
/usr/lib/gcc/x86_64-redhat-linux/16/crtendS.o
/usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64/crtn.o    -Wl,-soname
-Wl,librepro.so.0 -o .libs/librepro.so.0.0.0

The push-state/as-needed/pop-state gets stripped.

With the patch we get that one:

libtool: link: g++ -std=3Dgnu++11  -fPIC -DPIC -shared -nostdlib
/usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64/crti.o
/usr/lib/gcc/x86_64-redhat-linux/16/crtbeginS.o  .libs/repro.o
-L/usr/lib/gcc/x86_64-redhat-linux/16
-L/usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64 -L/lib/../lib64
-L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/16/../../.. -L/lib
-L/usr/lib -lstdc++ -lm -lgcc_s -Wl,--push-state -Wl,--as-needed -latomic
-Wl,--pop-state -lc -lgcc_s /usr/lib/gcc/x86_64-redhat-linux/16/crtendS.o
/usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64/crtn.o    -Wl,-soname
-Wl,librepro.so.0 -o .libs/librepro.so.0.0.0

Fred.


>         Jakub
>
>
>
>
>

--000000000000d176d10647e37e95
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, Jan 8, 2026 =
at 4:14=E2=80=AFPM Jakub Jelinek via bug-libtool via Bug reports for the GN=
U libtool shared library maintenance tool &lt;<a href=3D"mailto:bug-libtool=
@gnu.org" target=3D"_blank">[email protected]</a>&gt; wrote:<br></div><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex">Hi!<br>
<br>
gcc 16 in <a href=3D"https://gcc.gnu.org/r16-4315" rel=3D"noreferrer" targe=
t=3D"_blank">https://gcc.gnu.org/r16-4315</a> <a href=3D"https://gcc.gnu.or=
g/PR81358" rel=3D"noreferrer" target=3D"_blank">https://gcc.gnu.org/PR81358=
</a> change<br>
added --push-state --as-needed -latomic --pop-state to the collect2/ld<br>
invocation from the gcc/g++ etc. drivers.<br>
<br>
Unfortunately libtool.m4 in the loop starting with<br>
=C2=A0 # Parse the compiler output and extract the necessary<br>
=C2=A0 # objects, libraries and library flags.<br>
grabs object files and libraries and -L/-R options from the compiler<br>
driver invocation of the linker and grabs them without these<br>
--push-state --as-needed / --pop-state wrapping options, which are needed<b=
r>
to only link the library in if it is actually needed.<br>
I think on Solaris the pair is -z ignore / -z record instead, but<br>
unfortunately in that case it is less clear if those options are meant to<b=
r>
affect just the single library and so are a property of that library, or<br=
>
if they have been randomly added e.g. by the user or whatever and affect<br=
>
instead what comes after it or multiple libraries etc.<br>
<br>
Anyway, what we see in gcc, as mentioned in <a href=3D"https://gcc.gnu.org/=
PR123396" rel=3D"noreferrer" target=3D"_blank">https://gcc.gnu.org/PR123396=
</a><br>
is that several shared libraries linked with libtool are then uselessly<br>
linked to libatomic.so:<br>
for i in libstdc++-v3/src/.libs/libstdc++.so.6.*.* libsanitizer/*/.libs/lib=
*.so.*.* libgcobol/.libs/lib*.so.*.*; do echo $i; ldd -u $i; done<br>
libstdc++-v3/src/.libs/libstdc++.so.6.0.35<br>
Unused direct dependencies:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libatomic.so.1<br>
libsanitizer/asan/.libs/libasan.so.8.0.0<br>
Unused direct dependencies:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libatomic.so.1<br>
libsanitizer/hwasan/.libs/libhwasan.so.0.0.0<br>
Unused direct dependencies:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libm.so.6<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libatomic.so.1<br>
libsanitizer/lsan/.libs/liblsan.so.0.0.0<br>
Unused direct dependencies:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libm.so.6<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libatomic.so.1<br>
libsanitizer/tsan/.libs/libtsan.so.2.0.0<br>
Unused direct dependencies:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libatomic.so.1<br>
libsanitizer/ubsan/.libs/libubsan.so.1.0.0<br>
Unused direct dependencies:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libm.so.6<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libatomic.so.1<br>
libgcobol/.libs/libgcobol.so.2.0.0<br>
Unused direct dependencies:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /lib64/libatomic.so.1<br>
E.g. for libstdc++-v3, libtool created by configure has<br>
postdep_objects=3D&quot;/home/jakub/src/gcc/obj38/./gcc/crtendS.o /lib/../l=
ib64/crtn.o&quot;<br>
postdeps=3D&quot; -lgcc_s -latomic -lc -lgcc_s &quot;<br>
<br>
I see -latomic in postdeps or postdeps_CXX in other packags, e.g. when<br>
gettext is built with gcc 16, but in that case I actually don&#39;t see any=
<br>
shared library or binary linked uselessly against libatomic.so.1; not reall=
y<br>
sure why though.<br>
<br>
In <a href=3D"https://gcc.gnu.org/pipermail/gcc-patches/2025-December/70464=
4.html" rel=3D"noreferrer" target=3D"_blank">https://gcc.gnu.org/pipermail/=
gcc-patches/2025-December/704644.html</a><br>
the PR81358 patch author suggested to work around this by filtering<br>
out -latomic from postdeps_CXX, though I think that just means the librarie=
s<br>
will never be linked against libatomic.so.1 rather than only linking agains=
t<br>
it on architectures where e.g. some atomics aren&#39;t provided by inlined =
code<br>
and need to fallback to libatomic.so.1.<br>
<br>
So, I&#39;ve been wondering if the libtool.m4<br>
=C2=A0 # Parse the compiler output and extract the necessary<br>
=C2=A0 # objects, libraries and library flags.<br>
couldn&#39;t special case at least the --push-state --as-needed options bef=
ore<br>
-lXXX option and --pop-state after it and in that case put into postdeps_*<=
br>
var instead of just -lXXX<br>
$_LT_TAGVAR(lt_prog_compiler_wl, $1)--push-state $_LT_TAGVAR(lt_prog_compil=
er_wl, $1)--as-needed -lXXX $_LT_TAGVAR(lt_prog_compiler_wl, $1)<br>
But I admit I haven&#39;t studied in detail in what exactly the postdeps va=
r is<br>
used.<br>
<br></blockquote><div><br></div><div>I&#39;ve attached a standalone reprodu=
ction script that I tested in a fedora-rawhide environment with GCC16.</div=
><div>And a patch that I&#39;m planning to apply on fedora&#39;s libtool 2.=
5.4 (I don&#39;t have the master equivalent yet), although I&#39;m not sure=
 that I do what I should there, so I&#39;d be pleased to get feedback.</div=
><div><br></div><div>Without the patch, libtool generates the following com=
mand:<br><div style=3D"margin-left:40px"><br><span style=3D"font-family:mon=
ospace">libtool: link: g++ -std=3Dgnu++11 =C2=A0-fPIC -DPIC -shared -nostdl=
ib /usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64/crti.o /usr/lib/gc=
c/x86_64-redhat-linux/16/crtbeginS.o =C2=A0.libs/repro.o =C2=A0 -L/usr/lib/=
gcc/x86_64-redhat-linux/16 -L/usr/lib/gcc/x86_64-redhat-linux/16/../../../.=
./lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-li=
nux/16/../../.. -L/lib -L/usr/lib -lstdc++ -lm -lgcc_s -latomic -lc -lgcc_s=
 /usr/lib/gcc/x86_64-redhat-linux/16/crtendS.o /usr/lib/gcc/x86_64-redhat-l=
inux/16/../../../../lib64/crtn.o =C2=A0 =C2=A0-Wl,-soname -Wl,librepro.so.0=
 -o .libs/librepro.so.0.0.0</span><br><span style=3D"font-family:monospace"=
></span></div><br></div><div>The push-state/as-needed/pop-state gets stripp=
ed.</div><div><br></div><div>With the patch we get that one:<br><br><div st=
yle=3D"margin-left:40px"><span style=3D"font-family:monospace">libtool: lin=
k: g++ -std=3Dgnu++11 =C2=A0-fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_=
64-redhat-linux/16/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linu=
x/16/crtbeginS.o =C2=A0.libs/repro.o =C2=A0 -L/usr/lib/gcc/x86_64-redhat-li=
nux/16 -L/usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64 -L/lib/../li=
b64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/16/../../.. -L/l=
ib -L/usr/lib -lstdc++ -lm -lgcc_s -Wl,--push-state -Wl,--as-needed -latomi=
c -Wl,--pop-state -lc -lgcc_s /usr/lib/gcc/x86_64-redhat-linux/16/crtendS.o=
 /usr/lib/gcc/x86_64-redhat-linux/16/../../../../lib64/crtn.o =C2=A0 =C2=A0=
-Wl,-soname -Wl,librepro.so.0 -o .libs/librepro.so.0.0.0</span></div><span =
style=3D"font-family:monospace"><br></span></div><div><font face=3D"arial,s=
ans-serif">Fred.</font></div><div>=C2=A0</div><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex">
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Jakub<br>
<br>
<br>
<br>
<br>
</blockquote></div></div>
</div>

--000000000000d176d10647e37e95--

--000000000000d176d10647e37e97
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001-Preserve-positional-linker-state-flags.patch"
Content-Disposition: attachment; 
	filename="0001-Preserve-positional-linker-state-flags.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mk5pcz0d0>
X-Attachment-Id: f_mk5pcz0d0

RnJvbSBkYTczZTk4ZDRmNWY3ZTRhZTYyNTZlN2Y0NDQyOWUwMzczODkxMWY1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBycG0tYnVpbGQgPHJwbS1idWlsZD4KRGF0ZTogVGh1LCA4IEph
biAyMDI2IDE2OjQ0OjE1ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gUHJlc2VydmUgcG9zaXRpb25h
bCBsaW5rZXIgc3RhdGUgZmxhZ3MuCgpMaW5rZXIgc3RhdGUgZmxhZ3MgbGlrZSAtLXB1c2gtc3Rh
dGUsIC0tcG9wLXN0YXRlLCBhbmQgLS1hcy1uZWVkZWQgbXVzdAptYWludGFpbiB0aGVpciByZWxh
dGl2ZSBwb3NpdGlvbiB0byB0aGUgbGlicmFyaWVzIHRoZXkgd3JhcC4gUHJldmlvdXNseSwKbGli
dG9vbCByZW9yZGVyZWQgdGhlc2UgZmxhZ3MgYmVjYXVzZSBpdCB0cmVhdGVkIHRoZW0gYXMgZ2Vu
ZXJpYyBsaW5rZXIKZmxhZ3Mgd2hpbGUgbW92aW5nIGxpYnJhcmllcyB0byB0aGUgZW5kIG9mIHRo
ZSBjb21tYW5kIGxpbmUsIG9yIHN0cmlwcGVkCnRoZW0gZHVyaW5nIGRlZHVwbGljYXRpb24gYW5k
IGhpZGRlbiBkZXBlbmRlbmN5IGRldGVjdGlvbi4KCiogbTQvbGlidG9vbC5tNCAoX0xUX1NZU19I
SURERU5fTElCREVQUyk6IEFkZCAtLWFzLW5lZWRlZCwKICAtLW5vLWFzLW5lZWRlZCwgLS1wdXNo
LXN0YXRlLCBhbmQgLS1wb3Atc3RhdGUgdG8gdGhlIHdoaXRlbGlzdCBvZgogIGZsYWdzIHByZXNl
cnZlZCBkdXJpbmcgY29tcGlsZXIgZGVwZW5kZW5jeSBkZXRlY3Rpb24uCiogYnVpbGQtYXV4L2x0
bWFpbi5pbiAoZnVuY19tb2RlX2xpbmspOgotIEhhbmRsZSAtV2wsLS1hcy1uZWVkZWQsIC1XbCwt
LW5vLWFzLW5lZWRlZCwgLVdsLC0tcHVzaC1zdGF0ZSwgYW5kCiAgLVdsLC0tcG9wLXN0YXRlIGJ5
IGFkZGluZyB0aGVtIHRvIGRlcGxpYnMgZHVyaW5nIHBhcnNpbmcuCi0gUHJlc2VydmUgdGhlc2Ug
ZmxhZ3MgaW4gdGhlIGxpYnJhcnkgcHJvY2Vzc2luZyBsb29wIHRvIG1haW50YWluCiAgY29ycmVj
dCBwb3NpdGlvbmluZyBpbiBjb21waWxlX2RlcGxpYnMgYW5kIGZpbmFsaXplX2RlcGxpYnMuCi0g
UHJvdGVjdCB0aGVzZSBmbGFncyBmcm9tIGR1cGxpY2F0ZSByZW1vdmFsIHRvIGVuc3VyZSBzdGF0
ZSBzdGFjawogIGJhbGFuY2UgaXMgbWFpbnRhaW5lZC4KLS0tCiBidWlsZC1hdXgvbHRtYWluLmlu
IHwgMjggKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogYnVpbGQtYXV4L2x0bWFpbi5zaCB8
IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIG00L2xpYnRvb2wubTQgICAgICAgfCAg
MiArLQogMyBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCmlu
ZGV4IGI0ZTI4MWQ1MDhjNGJlOGIuLmE5NjYyYTM4ZTkyOGE1NmYgMTAwNjQ0Ci0tLSBhL2J1aWxk
LWF1eC9sdG1haW4uaW4KKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgpAQCAtNTQ5OCw2ICs1NDk4
LDE0IEBAIGZ1bmNfbW9kZV9saW5rICgpCiAJc2F2ZV9pZnM9JElGUzsgSUZTPSwKIAlmb3IgZmxh
ZyBpbiAkYXJnczsgZG8KIAkgIElGUz0kc2F2ZV9pZnMKKwkgIGNhc2UgJGZsYWcgaW4KKwkgICAg
LS1hcy1uZWVkZWR8LS1uby1hcy1uZWVkZWR8LS1wdXNoLXN0YXRlfC0tcG9wLXN0YXRlKQorCSAg
ICAgIGlmIHRlc3QgbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCisJCWRlcGxpYnM9IiRkZXBsaWJz
ICRmbGFnIgorCQljb250aW51ZQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgIGVzYWMKICAgICAg
ICAgICBmdW5jX3F1b3RlX2FyZyBwcmV0dHkgIiRmbGFnIgogCSAgZnVuY19hcHBlbmQgYXJnICIg
JHdsJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdz
ICIgJHdsJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKQEAgLTU5MTMsNiArNTkyMSwyMCBAQCBmdW5j
X21vZGVfbGluayAoKQogCWxpYj0KIAlmb3VuZD1mYWxzZQogCWNhc2UgJGRlcGxpYiBpbgorCS1X
bCwtLWFzLW5lZWRlZHwtLWFzLW5lZWRlZHwtV2wsLS1uby1hcy1uZWVkZWR8LS1uby1hcy1uZWVk
ZWR8LVdsLC0tcHVzaC1zdGF0ZXwtLXB1c2gtc3RhdGV8LVdsLC0tcG9wLXN0YXRlfC0tcG9wLXN0
YXRlKQorCSAgIyBFbnN1cmUgdGhlIGZsYWcgaXMgcHJlZml4ZWQgZm9yIHRoZSBjb21waWxlciBk
cml2ZXIKKwkgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtV2wsKikgOzsKKwkgICAgKikgZGVwbGli
PSIkd2wkZGVwbGliIiA7OworCSAgZXNhYworCSAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmtt
b2RlLCRwYXNzIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVf
ZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGli
cyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGZpCisJICBj
b250aW51ZQorCSAgOzsKIAktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFk
fC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKICAgICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1m
b3Blbm1wPSp8LW9wZW5tcHwtbXB8LXhvcGVubXB8LW9tcHwtcXNtcD0qKQogCSAgaWYgdGVzdCBw
cm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgpAQCAtNjkwMiw3ICs2OTI0LDggQEAg
ZnVuY19tb2RlX2xpbmsgKCkKIAkgICAgICAjIFByYWdtYXRpY2FsbHksIHRoaXMgc2VlbXMgdG8g
Y2F1c2UgdmVyeSBmZXcgcHJvYmxlbXMgaW4KIAkgICAgICAjIHByYWN0aWNlOgogCSAgICAgIGNh
c2UgJGRlcGxpYiBpbgotCSAgICAgIC1MKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7
OworCSAgICAgIC1MKiB8IC1XbCwtLWFzLW5lZWRlZCB8IC0tYXMtbmVlZGVkIHwgLVdsLC0tbm8t
YXMtbmVlZGVkIHwgLS1uby1hcy1uZWVkZWQgfCAtV2wsLS1wdXNoLXN0YXRlIHwgLS1wdXNoLXN0
YXRlIHwgLVdsLC0tcG9wLXN0YXRlIHwgLS1wb3Atc3RhdGUpCisJCW5ld19saWJzPSIkZGVwbGli
ICRuZXdfbGlicyIgOzsKIAkgICAgICAtUiopIDs7CiAJICAgICAgKikKIAkgICAgICAgICMgQW5k
IGhlcmUgaXMgdGhlIHJlYXNvbjogd2hlbiBhIGxpYnJhcnkgYXBwZWFycyBtb3JlCkBAIC02OTM2
LDYgKzY5NTksOSBAQCBmdW5jX21vZGVfbGluayAoKQogCSAgdG1wX2xpYnM9CiAJICBmb3IgZGVw
bGliIGluICRuZXdfbGliczsgZG8KIAkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1XbCwtLWFz
LW5lZWRlZCB8IC0tYXMtbmVlZGVkIHwgLVdsLC0tbm8tYXMtbmVlZGVkIHwgLS1uby1hcy1uZWVk
ZWQgfCAtV2wsLS1wdXNoLXN0YXRlIHwgLS1wdXNoLXN0YXRlIHwgLVdsLC0tcG9wLXN0YXRlIHwg
LS1wb3Atc3RhdGUpCisJICAgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAg
ICAgIDs7CiAJICAgIC1MKikKIAkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KIAkgICAgICAq
IiAkZGVwbGliICIqKSA7OwpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5zaCBiL2J1aWxk
LWF1eC9sdG1haW4uc2gKaW5kZXggZmYyZDczYTY1ODgwNmVhZC4uYWE1ZGRiYjRlYmZmYTAyZiAx
MDA2NDQKLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5zaAorKysgYi9idWlsZC1hdXgvbHRtYWluLnNo
CkBAIC03NjQ4LDYgKzc2NDgsMTQgQEAgZnVuY19tb2RlX2xpbmsgKCkKIAlzYXZlX2lmcz0kSUZT
OyBJRlM9LAogCWZvciBmbGFnIGluICRhcmdzOyBkbwogCSAgSUZTPSRzYXZlX2lmcworCSAgY2Fz
ZSAkZmxhZyBpbgorCSAgICAtLWFzLW5lZWRlZHwtLW5vLWFzLW5lZWRlZHwtLXB1c2gtc3RhdGV8
LS1wb3Atc3RhdGUpCisJICAgICAgaWYgdGVzdCBsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKwkJ
ZGVwbGlicz0iJGRlcGxpYnMgJGZsYWciCisJCWNvbnRpbnVlCisJICAgICAgZmkKKwkgICAgICA7
OworCSAgZXNhYwogICAgICAgICAgIGZ1bmNfcXVvdGVfYXJnIHByZXR0eSAiJGZsYWciCiAJICBm
dW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9hcmdfcmVzdWx0IgogCSAgZnVuY19hcHBl
bmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9hcmdfcmVzdWx0IgpAQCAtODA2Myw2
ICs4MDcxLDIwIEBAIGZ1bmNfbW9kZV9saW5rICgpCiAJbGliPQogCWZvdW5kPWZhbHNlCiAJY2Fz
ZSAkZGVwbGliIGluCisJLVdsLC0tYXMtbmVlZGVkfC0tYXMtbmVlZGVkfC1XbCwtLW5vLWFzLW5l
ZWRlZHwtLW5vLWFzLW5lZWRlZHwtV2wsLS1wdXNoLXN0YXRlfC0tcHVzaC1zdGF0ZXwtV2wsLS1w
b3Atc3RhdGV8LS1wb3Atc3RhdGUpCisJICAjIEVuc3VyZSB0aGUgZmxhZyBpcyBwcmVmaXhlZCBm
b3IgdGhlIGNvbXBpbGVyIGRyaXZlcgorCSAgY2FzZSAkZGVwbGliIGluCisJICAgIC1XbCwqKSA7
OworCSAgICAqKSBkZXBsaWI9IiR3bCRkZXBsaWIiIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IHBy
b2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0i
JGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGli
ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBs
aWJzIgorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OwogCS1tdHwtbXRocmVhZHN8LWt0aHJlYWR8
LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAogICAgICAgICB8LXRo
cmVhZHN8LWZvcGVubXB8LWZvcGVubXA9Knwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21w
PSopCiAJICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCkBAIC05
MDUyLDcgKzkwNzQsOCBAQCBmdW5jX21vZGVfbGluayAoKQogCSAgICAgICMgUHJhZ21hdGljYWxs
eSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgogCSAgICAgICMgcHJh
Y3RpY2U6CiAJICAgICAgY2FzZSAkZGVwbGliIGluCi0JICAgICAgLUwqKSBuZXdfbGlicz0iJGRl
cGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgLUwqIHwgLVdsLC0tYXMtbmVlZGVkIHwgLS1hcy1u
ZWVkZWQgfCAtV2wsLS1uby1hcy1uZWVkZWQgfCAtLW5vLWFzLW5lZWRlZCB8IC1XbCwtLXB1c2gt
c3RhdGUgfCAtLXB1c2gtc3RhdGUgfCAtV2wsLS1wb3Atc3RhdGUgfCAtLXBvcC1zdGF0ZSkKKwkJ
bmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OwogCSAgICAgIC1SKikgOzsKIAkgICAgICAq
KQogCSAgICAgICAgIyBBbmQgaGVyZSBpcyB0aGUgcmVhc29uOiB3aGVuIGEgbGlicmFyeSBhcHBl
YXJzIG1vcmUKQEAgLTkwODYsNiArOTEwOSw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCiAJICB0bXBf
bGlicz0KIAkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbwogCSAgICBjYXNlICRkZXBsaWIg
aW4KKwkgICAgLVdsLC0tYXMtbmVlZGVkIHwgLS1hcy1uZWVkZWQgfCAtV2wsLS1uby1hcy1uZWVk
ZWQgfCAtLW5vLWFzLW5lZWRlZCB8IC1XbCwtLXB1c2gtc3RhdGUgfCAtLXB1c2gtc3RhdGUgfCAt
V2wsLS1wb3Atc3RhdGUgfCAtLXBvcC1zdGF0ZSkKKwkgICAgICBmdW5jX2FwcGVuZCB0bXBfbGli
cyAiICRkZXBsaWIiCisJICAgICAgOzsKIAkgICAgLUwqKQogCSAgICAgIGNhc2UgIiAkdG1wX2xp
YnMgIiBpbgogCSAgICAgICoiICRkZXBsaWIgIiopIDs7CmRpZmYgLS1naXQgYS9tNC9saWJ0b29s
Lm00IGIvbTQvbGlidG9vbC5tNAppbmRleCAwYTJlYTI1ZTc2YjlmODdlLi4zODFiYjZhNWFjNWNl
ZWNhIDEwMDY0NAotLS0gYS9tNC9saWJ0b29sLm00CisrKyBiL200L2xpYnRvb2wubTQKQEAgLTc3
MTEsNyArNzcxMSw3IEBAIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCiAgIGZvciBw
IGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KICAgICBjYXNlICRwcmV2
JHAgaW4KIAotICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAtTCogfCAtUiogfCAtbCogfCAtLWFz
LW5lZWRlZCB8IC0tbm8tYXMtbmVlZGVkIHwgLS1wdXNoLXN0YXRlIHwgLS1wb3Atc3RhdGUpCiAg
ICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUixsfSIgYW5k
IHRoZSBwYXRoLgogICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KICAgICAgICBpZiB0ZXN0IHgt
TCA9IHgiJHAiIHx8Ci0tIAoyLjUyLjAKCg==
--000000000000d176d10647e37e97
Content-Type: application/x-shellscript; name="repro.sh"
Content-Disposition: attachment; filename="repro.sh"
Content-Transfer-Encoding: base64
Content-ID: <f_mk5pdr9c1>
X-Attachment-Id: f_mk5pdr9c1

IyEvYmluL3NoCiMgU3RhbmRhbG9uZSByZXByb2R1Y3Rpb24gZm9yIGxpYnRvb2wgZmxhZyByZW9y
ZGVyaW5nIGJ1ZwojIFRoaXMgc2NyaXB0IGNyZWF0ZXMgYSBtaW5pbWFsIHByb2plY3QgYW5kIGNo
ZWNrcyBpZiBsaWJ0b29sIHJlb3JkZXJzCiMgLS1wdXNoLXN0YXRlLy0tcG9wLXN0YXRlIHJlbGF0
aXZlIHRvIHRoZSBsaWJyYXJpZXMgdGhleSB3cmFwLgoKc2V0IC1lCgpSRVBST19ESVI9ImxpYnRv
b2wtcmVwcm8td29yayIKcm0gLXJmICIkUkVQUk9fRElSIgpta2RpciAiJFJFUFJPX0RJUiIKY2Qg
IiRSRVBST19ESVIiCgplY2hvICI9PT0gMS4gU2V0dGluZyB1cCBtaW5pbWFsIHByb2plY3QgPT09
IgpjYXQgPiBjb25maWd1cmUuYWMgPDxFT0YKQUNfSU5JVChbcmVwcm9dLCBbMS4wXSkKQU1fSU5J
VF9BVVRPTUFLRShbZm9yZWlnbl0pCkFDX1BST0dfQ1hYCkxUX0lOSVQKQUNfQ09ORklHX0ZJTEVT
KFtNYWtlZmlsZV0pCkFDX09VVFBVVApFT0YKCmNhdCA+IE1ha2VmaWxlLmFtIDw8RU9GCmxpYl9M
VExJQlJBUklFUyA9IGxpYnJlcHJvLmxhCmxpYnJlcHJvX2xhX1NPVVJDRVMgPSByZXByby5jcHAK
bGlicmVwcm9fbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gMTowOjAgLXJwYXRoIC91c3IvbG9j
YWwvbGliCkVPRgoKY2F0ID4gcmVwcm8uY3BwIDw8RU9GCmludCByZXByb19mdW5jKCkgeyByZXR1
cm4gMDsgfQpFT0YKCmVjaG8gIj09PSAyLiBHZW5lcmF0aW5nIGxpYnRvb2wgc2NyaXB0ID09PSIK
IyBUaGVzZSB0b29scyBtdXN0IGJlIGF2YWlsYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQKbGlidG9v
bGl6ZSAtLWZvcmNlIC0tY29weQphY2xvY2FsCmF1dG9jb25mCmF1dG9tYWtlIC0tYWRkLW1pc3Np
bmcgLS1jb3B5IC0tZm9yZWlnbgouL2NvbmZpZ3VyZQoKZWNobyAiPT09IDMuIFJlcHJvZHVjaW5n
IHRoZSBpc3N1ZSA9PT0iCiMgRmlyc3QsIHdlIG11c3QgY29tcGlsZSB0aGUgb2JqZWN0Ci4vbGli
dG9vbCAtLXRhZz1DWFggLS1tb2RlPWNvbXBpbGUgZysrIC1jIHJlcHJvLmNwcCAtbyByZXByby5s
bwoKIyBOb3cgd2UgYXR0ZW1wdCB0byBsaW5rIHdpdGggdGhlIGZsYWdzIHRoYXQgY2F1c2UgdGhl
IGlzc3VlLgojIFdlIHBhc3MgLVdsLCB0byBlbnN1cmUgdGhleSByZWFjaCB0aGUgbGlua2VyIHRo
cm91Z2ggdGhlIGNvbXBpbGVyIGRyaXZlci4KLi9saWJ0b29sIC0tdGFnPUNYWCAtLW1vZGU9bGlu
ayBnKysgLXNoYXJlZCAtbyBsaWJyZXByby5sYSByZXByby5sbyAtcnBhdGggL3Vzci9sb2NhbC9s
aWIgPiByZXByby5sb2cgMj4mMQoKZWNobyAiPT09IDQuIEFuYWx5c2lzID09PSIKIyBFeHRyYWN0
IHRoZSBhY3R1YWwgbGluayBjb21tYW5kIGV4ZWN1dGVkIGJ5IGxpYnRvb2wKTElOS19DTUQ9JChn
cmVwICJsaWJ0b29sOiBsaW5rOiAiIHJlcHJvLmxvZyB8IGhlYWQgLW4gMSkKCmlmIFsgLXogIiRM
SU5LX0NNRCIgXTsgdGhlbgogICAgZWNobyAiRVJST1I6IENvdWxkIG5vdCBmaW5kICdsaWJ0b29s
OiBsaW5rOicgY29tbWFuZCBpbiByZXByby5sb2ciCiAgICBlY2hvICJGdWxsIGxpYnRvb2wgb3V0
cHV0OiIKICAgIGNhdCByZXByby5sb2cKICAgIGV4aXQgMQpmaQoKZWNobyAiQWN0dWFsIGxpbmsg
Y29tbWFuZCBleGVjdXRlZCBieSBsaWJ0b29sOiIKZWNobyAiJExJTktfQ01EIgoKIyBNb3JlIHJv
YnVzdCBjaGVjazogCiMgMS4gQ291bnQgb2NjdXJyZW5jZXMgb2YgLWxhdG9taWMKIyAyLiBDb3Vu
dCBvY2N1cnJlbmNlcyBvZiBjb3JyZWN0IHdyYXAgc2VxdWVuY2UKTEFUT01JQ19DT1VOVD0kKGVj
aG8gIiRMSU5LX0NNRCIgfCBncmVwIC1vIC0tICItbGF0b21pYyIgfCB3YyAtbCkKV1JBUFBFRF9D
T1VOVD0kKGVjaG8gIiRMSU5LX0NNRCIgfCBncmVwIC1vIC0tICItLWFzLW5lZWRlZCAtbGF0b21p
YyIgfCB3YyAtbCkKCmVjaG8gIkZvdW5kICRMQVRPTUlDX0NPVU5UIGluc3RhbmNlcyBvZiAtbGF0
b21pYy4iCmVjaG8gIkZvdW5kICRXUkFQUEVEX0NPVU5UIGNvcnJlY3RseSB3cmFwcGVkIGluc3Rh
bmNlcy4iCgppZiBbICIkV1JBUFBFRF9DT1VOVCIgLWd0IDAgXSAmJiBbICIkV1JBUFBFRF9DT1VO
VCIgLWVxICIkTEFUT01JQ19DT1VOVCIgXTsgdGhlbgogICAgZWNobyAiQlVHIE5PVCBSRVBST0RV
Q0VEOiBBbGwgaW5zdGFuY2VzIG9mIC1sYXRvbWljIGFyZSBjb3JyZWN0bHkgd3JhcHBlZC4iCmVs
aWYgWyAiJFdSQVBQRURfQ09VTlQiIC1ndCAwIF07IHRoZW4KICAgIGVjaG8gIlBBUlRJQUwgU1VD
Q0VTUzogU29tZSBpbnN0YW5jZXMgYXJlIHdyYXBwZWQsIGJ1dCBzb21lIGFyZSBub3QuIgogICAg
IyBDaGVjayBpZiBhbnkgcG9wLXN0YXRlIGFwcGVhcnMgYmVmb3JlIGEgbGF0b21pYyBpbiBhIHdh
eSB0aGF0IGJyZWFrcyBhIHdyYXAKICAgIGlmIGVjaG8gIiRMSU5LX0NNRCIgfCBncmVwIC1xIC0t
ICItLXBvcC1zdGF0ZS4qLWxhdG9taWMiOyB0aGVuCiAgICAgICAgZWNobyAiQlVHIFJFUFJPRFVD
RUQ6IFJlb3JkZXJpbmcgZGV0ZWN0ZWQgKHBvcC1zdGF0ZSBiZWZvcmUgbGF0b21pYykuIgogICAg
ZWxzZQogICAgICAgIGVjaG8gIlNVQ0NFU1M6IFNlcXVlbmNlIHByZXNlcnZlZCAodGhvdWdoIGNv
dW50cyBkaWZmZXIpLiIKICAgIGZpCmVsc2UKICAgIGVjaG8gIkJVRyBSRVBST0RVQ0VEOiBObyBj
b3JyZWN0bHkgd3JhcHBlZCAtbGF0b21pYyBmb3VuZC4iCmZpCg==
--000000000000d176d10647e37e97--