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 <<a href=3D"mailto:bug-libtool= @gnu.org" target=3D"_blank">[email protected]</a>> 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"/home/jakub/src/gcc/obj38/./gcc/crtendS.o /lib/../l= ib64/crtn.o"<br> postdeps=3D" -lgcc_s -latomic -lc -lgcc_s "<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'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't provided by inlined = code<br> and need to fallback to libatomic.so.1.<br> <br> So, I'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'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't studied in detail in what exactly the postdeps va= r is<br> used.<br> <br></blockquote><div><br></div><div>I've attached a standalone reprodu= ction script that I tested in a fedora-rawhide environment with GCC16.</div= ><div>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.</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--