From 126755f60bce63c3c7b0c8edc3de5eef26c37082 Mon Sep 17 00:00:00 2001 From: Rafael Rivera Date: Mon, 18 Sep 2023 13:55:33 -0700 Subject: [PATCH] Mask non-reproducible linker artifacts in libs (#2661) --- .../aarch64_msvc/lib/windows.0.52.0.lib | Bin 4991410 -> 4991410 bytes .../targets/i686_msvc/lib/windows.0.52.0.lib | Bin 5323364 -> 5323364 bytes .../x86_64_msvc/lib/windows.0.52.0.lib | Bin 4991410 -> 4991410 bytes crates/tools/msvc/src/main.rs | 302 +++++++++++++++--- 4 files changed, 263 insertions(+), 39 deletions(-) diff --git a/crates/targets/aarch64_msvc/lib/windows.0.52.0.lib b/crates/targets/aarch64_msvc/lib/windows.0.52.0.lib index ca9d3c1a67391df315b75b6c55dfbb1455290106..bbca44b6439262e0fc781a587d41d3001355e712 100644 GIT binary patch delta 35447 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 diff --git a/crates/targets/i686_msvc/lib/windows.0.52.0.lib b/crates/targets/i686_msvc/lib/windows.0.52.0.lib index 888a7f255cda2eac08bb2f2ef13b9503969bc847..d4f8321663b6300affe38ca9ebd362689505a956 100644 GIT binary patch delta 36943 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%0DEdQdnV;B4Olpa`bp_G+l{vAIr(8MfeNF zYYjxJES(4fPWNr&9D3Oay-B@&asocJ|hedlWlaoh4Dhpja!NUSs7(BmB z{*OeSfq?Jiv?CzzeJ{6fs$!6ptK`J-3>dRo9v?~M4WU1F1`_QFmhP2P-lc*&e+uNw z_LK4flAjDFPIU2rH}}g=No~pClNuh!#5|7a%0DikYi2n|7cLd-Ne!4(A&-z^3LTa~ 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

xYt?2^+UY3u=?I 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%0D>D2EgDI z)+A^>(%cfgvdp^H-a81t+~OtvwE{l{HmsDKCgB&lM0qM+YytdY3!e6P75;4Ji@!ks zg>^D(B|^TxI(xlUTz#n^Z*Q@Chzx2SaM{zdqb5)7J$(sI|TsD*Rp* za=41P!pcLeh=99?Rk@=-VxKz~j#%rO+XIkp(Buy*WqifmAO$+#w2Ez$FgN2?qilrJ z{UBpXAiJ46?n#wGL5>lE>#hF^x)7EKm|Z zJE%ZLJi^3}{?uMJA>v$B0gDJ-b%BzIcWMfx)>w_2FDsZQhM%M|9umT#$%+C>HWPk} zRu+g|jWF@)sshg#QT3Z*p&U%iJ17s|UOd4NV6Quto+OXLsx7yomzPf809 z3BOSVP4YV`kfHyz1A$rBeBDs|yM^vyf)vRYq9vbw!nEYy3X>`4oI|%2Qra?!qYK*$#qh*qcRqxC zCy+zh@{#WfffAlX?@iwqvf6T!-IB^gZ2LWeSbS^afO3CNVd{JKbYpE>!8m;pWfekH zJ``7^RM|11s4-~Buz4xo&jsyDDAF=YFnI$g)ll@S0IiCb3C1FEQX#r;ODU3#6#UCS z;I#$6@%(nJJ_LQ1T6BQ|M9RXp_C@w(0o7#|Nz*a`=wOx`fF7BP8d#i@$~|p0Jy+}Lrj_u9af<@9g(9Tyu>(9*@>I;dl9SDJinsKThlc`A}KX@ zt`)6%S@pf*P|V`Ity8g*^P$egcASTA#ov3lX~5rfC~zr0&G0V2u5*GR?!{LH$Ed2q z4;~T}+1zgMESAsdE6lFDqeQSD0m@HCe&`l-`ZHHD{lUOxmAGn delta 35436 zcma)lcX(9Q_Vx|wy+H~gp=8b^lSze{WD-I$A!R0oCL$tIBGIc-LRXpriGs9%ltoEM zXo9p*)GZ(a0+%8!0wPkCCefZaDlPxDVHQ9py zn^^8p-lW{I+^O8T+@;*L+^yWb+@svH+^gKX+^5{P+^^ifJfJ+VylHu}@}TnI@{sb- z^5*4XEI{_2Pht^jeuqzk>`X< zbKjFeDBCD9>NbKv6DJ$LKaNYxbKt)eoEC6*t{eg| zL@(s~zUGc7hH2A~K}?(K22-$tAiq@OD>G+zsm9bquv`UG70NY(u8*6vg0aJCUZ1ps zOF@T6Xk0`+F?BuoJA5H+l*ZczGi(#L8q80dIFk#=Wwhom@%Iv7)*?+DoEWWX2BjZr z{t*tNlixhP0h>VW2N(Kw4z2r9lU zK$fXl^_ul)*H@ZaioFuniSIPe7zpjZS0l7Sb_h^ECDaevS81XFi;6%yc55OW1%Z-r zgkT*0&A|7drZv2|Pjf-|k-{z`TD@PL2lx&jXn5Af8Nv_9t2n}maD;*-8JFnc=miIV zl$xf9g>W#nSJFp*-0HbHvoVd|qCUqpzlpz=tdfvw>KHVpAg_}eC-Gk5DEwn@`0$jF z6FdUk*vUmftNR*%=zp?J0GfVUGnbMg65zyN7=X#>_F1*x@Q=OW^>cDS)cU+;!2g@P zU01Njoh~z@u-k8HEJ9=HC5^MHbP*n>T+s}Bsag2$2>9?i6L0?w3ZA!re953e%1TM# zp5D|veJPyZsWuTX`Ysc0?>#l#?pvAwMd?Qvsi(IP%u;NSh?jca<>zfYq2Ltmc|k8| z?S?OIF!>3tE7x~$o93H2jUbYQ48GlO{&Ata3EjpSh*;8uMF4cxfwNMq<`qIioH%A{ zc4EZ9>&Kch8k;Uce)V4z3_;MvIb?|T%3DW{NaU54b<2(uE zT$PD=yeSt5{hM)()2K98;S0WSxLBiw%kyxfB>#8aqbB}nL=bm@fsgp%PL!|2hLfRO z0z}kun-;X-q7|O5XwIp-zNiQ463#J4*731i5G-xUJr=|%AdSemHK!OOOJyXVPvG+T zdp%KlBzIR-S{2QBu4o1sI_!mNj(fy_ag0(r^fk!TVOA$bb3QUaJX=^17ImLR9=66; z)I(*-<2acmzZtlmP;loR=Ra;-H$g zPcsw9zkLwLHD#E1vK=RlY8Zc*%rJg9;|2IacO9n(pI}FCA|Abw%!R*HlMU${Zj8xX zyiJKdDO><_XwOWX+%%;UZ^6Z6&INX~m)j3S9W2TReVopXdMSQfHrED@r*m;O{0kj0 z{?05W{(iF>-`J6pt$S?HSc(s7lFhxwf|e@e?rhEzI)~!)F3QH9sNBv?U0{{UpcDgS zq0+{}sg?)$em|(N+Sf=TI64S>Lxez!^0^qwTtsRlUeAWHLT}M4oMIWVI?13%s-&Zqr!7DhKYkP6d zFes4e0(euU4Al4Jf>nK&PXm6vE2-s)F7?GlhoKBkJiH_=!l6|9HutyiBZ+-dwd>xI zWgux#!W}M<@vb7%aRypNc`gVu@<=3C$pb1J$mzsu5+d>U)j^z}c#Ra6KsDM%KTVM{{maHk|W@(la>cw-4he3k?G3H$qLW?cR}GbD6)%N>~(% z`i|oIQ-&%MR-R)xqiBK3x=mxbAn}^5;g9At(lC#@jpus!3(io|26){P1wJ|)KC!bn z%94ecGqHm6P$G2w1b1d>Vb3p8(55+D6AE=ie+&~YN>J%PV?ITC0MvYr!$?|{k#!J; z2)6ZetN>oGV7*b~LT(EK7WjBvuoUN#cQtN2J(qBdZ7ft>sftN_m)uo+AQC}*Dd7JH z!V>SYauPRhKR6ca$U#Ik&dK^P?Nm5ciyPU_)ttC9sAA#B7fKDfLeW}$NBcEGLf}Te z9l3tV1=}yHf#(tX1I2GdgkM~s9gaY;16Y|aq>#_0WWh_!|sYue^l`+S4#0VhDe1$7dUZ;TH=X> z?U9RAnD{1<@*2Uzp!&<)>-I(fLFk-<1Nh)|j_v>I%;twV|?TBTJt1zqV$L;W5>D&JKtLEFL9|gNc&1J%cqoMGwX($m!qU4j1jFn!Z5!wsuf5OEx;8;8EytE6 zYu|#FNpj)*N+cUD&It`dev7Ijqlfxx(#w9O#jpry1&!q8l!5=*u8BQOEzc#3u; z!y1HPm}da~=}PHu1sciDmU3&0xI?fh0CmdHdNG;`yiuUlz^q*C_48TU-x&Pqv$fJ_ zh`rto%$>A>&?-mk3@r|5JY+#|xRbUg8l0=GVI>U)3>FDi1;M343XW{62VvR*ZIV5IXi`tDG@wY9kYk~k zURr4tC@|&r-X^mG-fc~3h-+_RH11s~os z_Ltz`IIZFsx!I_Z?~b+KnB~v#p`p8@8`?2J`!7Xvo*I0Re}f*a(BosRxS@v?&x5&> zwX*YdgwODc!-RV!#T%u%!T+kYmxRlbTL~wD%T%JfEtiYt9}j4c+*fF~Fm?_W@CWVQ z>u9bd@_VdTG6WSHwCaO)^G0nTgA}OQ#AM~+W`*jx&~~dfNOWfj+O$>c8!DKsWChG4 zvD*GewUmj9sNLt7B2;o=;c;zKNj97~sW(Bw5Jy+k{e;$wrTqGzw3I_<0^om2`$W(U zyEGSGJFSh70Ypr<5&#!iKg7`!aX)L9hkBJmD$bF-pwYZo71O@S#(b?ePzAm=RrtVx6Pjr95zhB}TvvpD0$?8~l`FgWn!L zvbbched-brO+eHk7DH*lQMVbo&kczZi6^?B42=qw`FQsRvk6Yj3-w0OJnCwxAVuZg z`d!g3aBNx>qm@DUj3}`<5R~3Cqh!Tl!QSXpsK*{aVY8y}D%$SZBvO`1K7@T0#ma~O zey!vSR(vD40pDL@%LlLdq3)<3iZZiyZ3xPhV|YTGg`)6bNs{g(`1D|un50tR65n?? ztO6bLqdln4aYt8JH6ywO>T)E?uQ}a5Ql%VkMTNrQ>rs1z->Bdo--r^6IU%y$%_w!L zx_UFJhJr!D?Tk}2E8H|L(aI?9?;0&d@lt4c)zJloxkW#iDCi~y0g+w&8B_MgX)4*b zrZ>t)ICz)0vzJIbj>C%8ZgTfTD82l7_>;4rkkwC=qU0|J$ zPUZygS(#}<7{rm$m|;^86Tm-&2GBdy9>A};E}d5SB6O^ReW#^P8S2rkbyBETq4TYE zTg2f`igLm^>13B9b*xU7&gqoIkJsu#Wd#*?G7}715bB3=qjXJJF-oe?q9h%w)?I6> zu)qRs3_58{Y^-&&7T{WU!JtccU+|PsY0fQ@m1e&0)>fD@s&#g* zu-|o_6rPHw>LXyxRh@n3LKsKd79*NBxgn%7c4Q@Bxz1?&4c%Bu#A4N3!?fGFUj!v3 zR~K~<#;m9|3|lpk_@C$^A0Y0&UEnH7b*uIZ4f~4?fkREsb81Hw59l$NcYk? zgQHK37$Xuhqb9iXxlG{NpAtDOEZWJ%b}-?4t*;my=MYQvyl>>JVQ1Mj_8;c1nX56bdQyx*en3^S|=Ce9T(H9pP-P+jBPV0W}v#6F{&i! zSRoT$i5^zO)Uf*5?j13h`Z+PIik&hyMy%L`o>B8+D2Fh-Y(E9t6fc@UaF*( zP=Vcm`V{G3P-IIiZS2fs>3J6wOYOVav$UQ^dD>0SoU)&E*Ea|(NG>ML=D$7kFN8~k zpr2mV2mAcTelH%S_0(@`A^cS3Y}|3K2$xgrgOyy9w=`w9A(T?f* zXjaq0RYwd46$vvd^vZ&Be70Uza1bsy*C>jT5Fy=sD(G3={NzFv!M=-SDmN0mcd@<$ zrKOPg?!J;1-+OzZUr7|}6!gG%`? zH_8AS8+k*tvkMwftG_{Ep0ul~EqeQQg|G#YV%`z$TYasUw~)H8_17pO2`TQ|D5Rj) z+x4p1;PV|aeJkPUVw{RyzSFz;3I^L}iVLj$k?GBcM^uC)9g_hNLekLnWBU1`Wi)_e zCzt@CKdAtEoRk9~Jp5TGq!5>u{4C|0D#CZ3(TfXp%(Vqx{Gyj_%>&u_yxi8=34ME3 zzwD*TuRq6B{-5&-is8=o2Qz3H+o;v=#sNctEdwBUqspq5`cDkyF_ny+!{mpg# z9|870CE?fpF(v$L^zv!R0=u5-{cKXn6jS<4{|}|`;T^zm_|_@b{>cJV=Nv1A zU{cfAe8_c;Z4`-}R0*x}oSk6yl28}a;2OJ-lJvYQ@zIkr-1LwAT`)=I&eXtIu{&cB z**cs*A2RVE?#S3ImUT{UJ8r26j%97RoC}E++d^GvtldIk9>p$ITV$*{j=tXPe)1$hfv$I3hN#ceakb`If+dlt=jZFC6|YkEI-s6Vch9 z#)?kmMZ@?hv9`K`uv3rI3L@Xgw#adyt$SP>UYF@P`>@OhjVh^mq>aBiGf;fd_E^WqxcRK>TJ*eZPZ1!vDGgXhPg z!SmyLQ?iz%R`W&il++>xxMXp>IB*b?>QDVk^H=i9P+b zTrBui;g(VHO?)LqWhrtdY>#I}&Y>Og%E)or883?*G;wGA3olAk@^#_F;duMHfPVWi zzO~pU2^F1=#@p&V!ozJa?QEErcKCOSG{Dl5VZe#_BuIRbwF0JJi4PXEA+jyk8f62P zU4{O=7C()Ws)XiK4`?(KfR+#A#llF$_I#wE**w6-1^NCHKV39TD!L?p?))21$sZ!S z{gZgHo)g)lp2`@;ORXv)e+r+)|4ISi{YdiXgBS6v{5jANugo7OhXi&0K*InRceK|b zp`xikp~{MtK?y7?9t0;St%wUvkm95g{T7C#-oYy8a zcBK2-gepq56N#5~Oo=gimBf3=jg+{zamE*MfA@`WK0RQMxHHz~Gd`GT>w9B&7l0yClgBK*L;< zvNiT<6HmItCb43pYh02tHm1cVHLimA*g)wCNn=?XQjVr1F`-rMpl@oD*bWF2OVg6< zjzp`MhWbFtx};DvzJ1amS^?yDdq1}(v6{~9d=-kmP=P|06{Q)j-ssQ5q&2|R_N>WQ!wi@BG`kE~igKK3>T~M5&62lhVcPHC`g@=_?MuJ8OB7} zKU{&52M!|*QVArxA13tGNJ9oAKOpl1gZ=p_!s#JBv`vPG+hYu}XYbIkv4$sz0!Vm{9W*hz|u=!hm zV;=Z@Zjfyq0{;XAI`p~Wdole~ockG#F7Ruufwh0gZI(DE0L5GEIEUl2++0!ER>M9P z@v{LRB@DRPCK8Ia8WQ0Tuug!1-x{=n>XK=sSV2*o8pju2b#&^wp*xEu>IchkV?)%$NrRuS0_ckFzDzPe+$-I1X; z2JnDK2}ahV2_2G*V&x$KW7-_))g4~%E*sV2d)^+Up?s>*!q=8ZDX7@JWJU~xdUgf+K}lu>8W>!uWVbX(GWSc=IKR6JmC zySDa^E#U~Qh8GQPu2b&bHKMzBlZR1!PQbP}rZB)3IH!m_@mSE_CB-&YAuK+dGQAIb z(}W)y*QZcopJ=}?C?yeQd*bTvJ{0Uqy%~kKaj$SXk4Do z(ilb>Q{o}sIb}8EcTfR%XErJiSox)}X}7xzI*^$%jZu04A3r+7ijFDbLslwRKg~`N z&mf5f8M!I){X2XHX@cX+Lw%8RUdlDfp#-rdqchW%8C_KLALuH#0FCRG@+IYvllb6+ zo=hLCd^IHjDm)`sf@e<^MNfOld{7O(D?*)ZOQ;{;NLj~n_o0bQsHPvMh^3BD)M;`f z0K!hbJ>1^Ec(3E3@UIfzBzCU~HF6h-fdEg>h=#Hb076J%=4F!$yr zWeOh+Gc~TdY#Fu!ZvubT!ZeREbBd;vYE3Ltc15X7c@b@I%Hb7wFJY(7^zO^}`XGS` zav)I!;?mX*1Z{6?ilhV-X$E9DkZ3fqdfT{UlQ%Pu-LTRm zxZzNd$_+C+%iVyox|mM0s?Ym9DF6tkn>6{5AbQYCE)qJd#Gb8v!!(mJr{MBqzhVS3 zLY(bm5=T+KIW`;lVF~4hAzT`&(7t}A_X31$mFhpCoUD4whEr6xttfsRAyK|(q=Itu zU#3*FW0Wa_kI?FN&2i_MbiHJa*_}xDbr6do#x!SCaIMALu?3lN)_{oP}9pf zRqX)e?UMS05}PD?2={NerLwsH(mhqIpvyc`ARZWp(perj@NK&2f&0fZ z^1yL>y4(X~?eg6!ypgwSdwMQq%bt+`+5x5oD-WswE+3KsRHC_u)Bk2|h7sk@o@Oe~ zol(gy{zWF+)}g?=!4vOQolWoXnLS11uw?C99atMMe-G#&hCN{?{_PHpOD%H#eCh2D zYhPN5&kgCoVm@kU2PN|ZhILRgkAjAG=(65kZ$5U&D1{<2So4Q#s|+!8i0-+qGvuK| z&ZeHU&UpG#_APN4ECc4oXDAIgo{*t70Q!G{LuYzo#wErE4?>0v>6k*wF!H!=Y;wj6 z!FXcA=#-2|=^-rSV9I!HzVHKOW)XJ2Jj!I}@i7HE@-oR219w+?xub_CGR9F#8wvRz zPG+!@*6*}}7z=dzIYZjduS5+$XLL`bsLdagu5`_$9F%tRG$+Gtw@h)Tir-ppI<)Oj z`|j7eb7mF#$s@Cl^$u=*i%eEU%Z-7h5%nKUfRGyfH=CZeaU$ZR1?9{k?WFK-J!kdlXJZ1OPMYmBhQ z(qK(Q?(s6qwH@VcK22#6q{>z{H``ZPv^mTyJ(NpCwhT8n<_f8>b>Zf{l+r;&UT;ki z30Pzbw2d^2OLrpnJ&jx}oL`OK`ywwywCBvU50gui`oJhNs{*2EvseKM%3nGeAB`)d zFJjC;Q;NvuI5TCTK|B|dU{(Z0(6CW&4VzQ2B=a81@PfrhKyZqgG0#DNlM(|K zr78%znCR^SpTA~kjs~Wgr;6t`Qk>WbDmJrf$^5s>%3AW%0JE%?pspq6a}>u)yia(S z$@`)ARJ=P4l=F@z4m7V|OiR+a7k zlZunsC*_;~c4I2CoHBoO_+=IZS7)(uXh2PtGKZEf%aUqJiOquU%d-wsf?Tp-=$b5+ z1-rh?QU>C)wOO)2Bo=`8m;Cd;>$3K?rkKI^<)4mbQTnniU5{reYfYCES;Ag0|Jq5z ziLA{5_F_q)jlAC`1e#yX5)UU;vD5XMik<1#W$aX<%o|z$ehk^m|H-m1;rF<^lX-2fV@K9Bd&Q}v z(u=KJI?BCBhPL!Syxq|ymyWF%u|hz)c`-qjd8@dpGO2L&xyxyO|W(2+LMA=KEO+xr3j3 zyP^#pJAObZ14QT1xfHp8<)*;@@;WNI5j0rjve8%8j^UKU89q13h!WXXx?dIDW&JuT zN0cA>ca)7NczqmGqH%&sV(CYX5&=tGiny}u>_rT*+e30#in=$?Q7W1pmLtXVQuH`1 z=c$jqSn^nCo<4`g?abI51-DH{3>siR0+FMWt~-64&OLK;>=BXOx7DLD%Ml;8&yW#@^g$7!imIRdQv2!`>*Gy>PPV#0s*8h{dox69^N}A znX<$Y7``I-Se4}W-%^nqTO!C7$wik-a{i_yAkkU-9z|yxucO{qu~0iukWKXNat!M| za1hmJBmk{Lm;qQ(stiEbKQu>{+-TIWobIlI&C*;KR zRZz1IKPNy|CS%6un<|urw*(YIx}P>T6?M9u6HKvy5cADn zG-8Ma&mQC`=AEV^-x@*BOmyX8PB`TloFKg7m`llhg0RpjSAhV>opa^Xm$~FNXGJ18 z_rC3wdrM$W6^_|Hx#GDuX~E^bxw4Pp0e|j|GW>FDD93)pw~5VjDW#C;{ZUx1vW{$P zk=t0av2SlNrV`tEgm+{v%bC42DzWqM=8tS8kDbZ<^E4z-igirc8)78c%Z}&e!A*Ux z-6me&^*AQ+XK+H$&e+`TNdmJ{(36K(XYy0jwdEXxRj~$}e zw{ne<4B5ntt)DQ>X!ulRM*FFDW=y#^H5c8Rn%6StWgz{I=CS;+?pU7aUTlTkS?J;u zd2K0^ki+#n%E3Jem_aub67yl*A9;;|jw!8#30r;L(14qHeJJY((sKfy)GMTSr+MzaWlPEJ5bcmgmfn;lJ2g z@u7v4o#)0VoM4xohsRm6DI*4$)fU;)vB+Fwp?%m7t4!IJB-)03q0}~TFl8XO?Mbe&tYrl^PxS)C zWV-NMiD|619nWE)BPYiFx}hjfZ&4Zdt2f=0?2e?y}!9 zl_HmCnd}%sA#LWFpwNL%wWYINYh!x z8jHnRAwX}Hl|Y0aZyv$W81R>TZVHH^ScJt!iP=R&UN>5$vRwlF2YjG3+|L88NVfjO z5>ArkV1|`dUjxkw#Vyb^%PJjz;T=6bV;nnLBWVX4{EGX-A}eJw#M-C8?oL**d|?YL z@K0x}{3*JKTD;<3*TtIUCzvl0j$?#Uz=_yd#a6Lb60wKg5>)0x1dShHl|E7{Nfc@a zYw45qk;FvZlmaW1m024j58v9zMAAg-529C;vXS{?tEYHPbR_A)Xxn6~^cPHs^y+!| zr3=4Ltn$Cj6+7Q*hO-l`0qE8zRwT+&;=sKrR@Ug&{WGgLx=AQC)2y;h6oluu_gDit zw!s??r}{;L)8|&kaRll#mtu^(GhjQIZ>i&#O`ZzwR+0pd7h0bQmn7}2i>>kvc>H!r zF>C8!bd^;s(JI-;ms-VreMxpuja8c98efC2uf?ZLEjQuEQ9l`A4Tbn6R#)(7?-vL| zR#+3E)hKfd^vW{pT6^yx{Bn!8_|FRbWZ1A$a+-u+;2Pxy&wJp z{TJ5Btd$7){_5=YR&n*Eg1o)KDn8#zAmeMTvZeyQ!TIfBXf6Kh!!0xXT+xGC>zknh z{i=||Rm2Te9%4lV+&!$y9sLpe+_`YXTG!kjfOG?gKdhAT6?cPV=yKC4woPKjj9ZPe z5l;7mj46TaX70ErRSE?;MhLFA{wwH0r1rUQmCaA+;(hB6t%V<`*dWCJ6`0Q=zEiV& zCGoR^@@2#$O#GNn?PU`p&Q;~Jh|pE%D~WigCSPie)u{Qh{CQ&dNh;$ZAp#s$$d>{va_{})l zoy$`~kpA!dcUsv)iGBS_(*jmsZx>V`twH$eJtDY3-Yv-kG}@4Y_ljO3fB3)n&&fV1 zDL5qjMin$k@2EhA{nrizW?l1hM{(~Kc!Ud5BwvV@eD(>`lCz&GK4eIaEP zLR3B!Tc}joDZa2VXvna6DbC*&?TRndGD$Q znE-S&%MCz}%!Lgs&dFqG%`Rk3 zhI4ZY#aJP-kLL=qCE_RN71I7dA<=nn5k+Sp#E-BRCPLXw>nfPqsZi_*1f{5pfWo`r zo34fKxdOY&Jc9bK3tgel{6f~A%IXCw1FnD|S}-6DEnHZ5fzd*20Ea4>0D((Y09~r> z0i0?IKVi%(WUX>;c_FK&=~ottHH~od-l{^`qQdqyui7p6gj4rL;aFcbO|0C?LMj6$ zd~0U_9K!*MQnwZU^%4MAC_BWY>Cj;nit`aU3c^c_^OT*qIlmXOO3m{ts=PH_6C{#S zbLU#&s+U#YD~?4h&f7T`DLEhJQe?+@#8&*hhnoicO^1BfqSFlT^6NTh80t}URd9@| zI{e@%L6Obv2CpLdoIb(3XbNSYf)q?5`?Ub3>@|TZ+1HxNWdoL-iYlAoe-o6Gl8bDd zJ2fw2ZJfUnRwNb%qW8=eMbZv;CEOY1?}qZji)h>2ME2rVOxb_5R>_WxRLJ)I0L#7< lS;YDquq370X_@Yw9HruAceH{R@?=8oR{X7vg}S2V{|96q$^rlY diff --git a/crates/tools/msvc/src/main.rs b/crates/tools/msvc/src/main.rs index f8189866cc..e5744b8444 100644 --- a/crates/tools/msvc/src/main.rs +++ b/crates/tools/msvc/src/main.rs @@ -41,6 +41,7 @@ changes can sneak in undetected. let mut cmd = std::process::Command::new("lib"); cmd.current_dir(&output); cmd.arg("/nologo"); + cmd.arg("/Brepro"); cmd.arg("/out:windows.lib"); for library in libraries.keys() { @@ -53,45 +54,7 @@ changes can sneak in undetected. std::fs::remove_file(output.join(format!("{library}.lib"))).unwrap(); } - // Clear out timestamps in the resulting library. - let mut archive = std::fs::File::options() - .read(true) - .write(true) - .open(output.join("windows.lib")) - .unwrap(); - let len = archive.metadata().unwrap().len(); - let mut header = [0u8; 8]; - archive.read_exact(&mut header).unwrap(); - assert_eq!(&header, b"!\n"); - for num in 1.. { - archive.seek(SeekFrom::Current(16)).unwrap(); // identifier - assert_eq!(archive.write(b"-1 ").unwrap(), 12); // replace archive timestamp - let mut buf = [0u8; 32]; - archive.read_exact(&mut buf).unwrap(); // remainder of the archive member header - let mut size = i64::from_str( - std::str::from_utf8( - buf[20..][..10] - .split(u8::is_ascii_whitespace) - .next() - .unwrap(), - ) - .unwrap(), - ) - .unwrap(); - // The first two members are indexes, skip them. - if num > 3 { - archive.read_exact(&mut buf[..4]).unwrap(); // member header - let timestamp_offset = if buf[..4] == [0, 0, 0xff, 0xff] { 4 } else { 0 }; - archive.seek(SeekFrom::Current(timestamp_offset)).unwrap(); - archive.write_all(&[0; 4]).unwrap(); // replace member timestamp - size -= timestamp_offset + 8; - } - if archive.seek(SeekFrom::Current((size + 1) & !1)).unwrap() >= len { - break; - } - } - archive.flush().unwrap(); - drop(archive); + make_reproducible(&output.join("windows.lib")); std::fs::remove_dir_all(format!("crates/targets/{platform}/lib")).unwrap(); std::fs::create_dir_all(format!("crates/targets/{platform}/lib")).unwrap(); @@ -191,3 +154,264 @@ EXPORTS path.push(format!("{library}.obj")); std::fs::remove_file(&path).unwrap(); } + +fn make_reproducible(lib: &std::path::Path) { + /* + The linker emits the following non-reproducible + elements during lib generation: + * archive member header timestamps (set to -1 via /Brepro) + * import header time/date stamps + * coff file header time/date stamps + * compiler version coff symbols + These must overwritten to ensure reproducibility + across linker versions and time. + */ + + let mut archive = std::fs::File::options() + .read(true) + .write(true) + .open(lib) + .unwrap(); + let len = archive.metadata().unwrap().len(); + let mut header = [0u8; 8]; + archive.read_exact(&mut header).unwrap(); + assert_eq!(&header, b"!\n"); + loop { + let mut buf = [0u8; 32]; + + // + // Archive member header + // + + // Name + archive.read_exact(&mut buf[..16]).unwrap(); + let skip_member = match &buf[..4] { + b"/ " => true, // Linker member + b"// " => true, // Long names table + _ => false, + }; + + // Timestamp, User ID, Group ID, and Mode + archive.seek(SeekFrom::Current(12 + 6 + 6 + 8)).unwrap(); + + // Size, sans header + archive.read_exact(&mut buf[..10]).unwrap(); + let size = i64::from_str( + std::str::from_utf8(buf.split(u8::is_ascii_whitespace).next().unwrap()).unwrap(), + ) + .unwrap(); + + // End of archive member header marker + archive.read_exact(&mut buf[..2]).unwrap(); + assert_eq!(&buf[..2], [0x60, 0x0A]); + + if !skip_member { + let start = archive.stream_position().unwrap(); + + // Machine type + archive.read_exact(&mut buf[..2]).unwrap(); + + if buf[..2] == [0x00, 0x00] { + // + // Import header + // + + // Signature 2 + archive.read_exact(&mut buf[..2]).unwrap(); + assert_eq!(&buf[..2], [0xFF, 0xFF]); + + // Version and Machine + archive.seek(SeekFrom::Current(4)).unwrap(); + + // Timestamp (zero out) + archive.write_all(&[0u8; 4]).unwrap(); + + // ... ignore rest + } else { + // + // COFF File Header + // + // Section count + archive.read_exact(&mut buf[..2]).unwrap(); + let sections = u16::from_le_bytes((&buf[..2]).try_into().unwrap()); + + // Timestamp (zero out) + archive.write_all(&[0u8; 4]).unwrap(); + + // Symbol table offset (relative to end of archive member header) + archive.read_exact(&mut buf[..4]).unwrap(); + let offset = u32::from_le_bytes((&buf[..4]).try_into().unwrap()) - 12; + + if offset != 0 { + // + // Symbol table + // + let last_position = archive.stream_position().unwrap(); + archive.seek(SeekFrom::Current(offset.into())).unwrap(); + + // Name + archive.read_exact(&mut buf[..8]).unwrap(); + let is_compiler_id = std::str::from_utf8(&buf[..8]).unwrap() == "@comp.id"; + + // Value + if is_compiler_id { + archive.write_all(&[0; 4]).unwrap(); + } + + archive.seek(SeekFrom::Start(last_position)).unwrap(); + } + + // ... and rest + archive.seek(SeekFrom::Current(8)).unwrap(); + + for _ in 1..sections { + // + // Section Header + // + + // Name + archive.read_exact(&mut buf[..8]).unwrap(); + let is_symbols = std::str::from_utf8(&buf[..8]).unwrap() == ".debug$S"; + + // Virtual size and address + archive.seek(SeekFrom::Current(8)).unwrap(); + + // Size of data + archive.seek(SeekFrom::Current(4)).unwrap(); + + // Pointer to raw data + archive.read_exact(&mut buf[..4]).unwrap(); + let start_of_data = u32::from_le_bytes((&buf[..4]).try_into().unwrap()) + + u32::try_from(start).unwrap(); + + // ... and rest + archive.seek(SeekFrom::Current(16)).unwrap(); + + if is_symbols { + // + // $$SYMBOLS + // + + let last_position = archive.stream_position().unwrap(); + archive.seek(SeekFrom::Start(start_of_data.into())).unwrap(); + + // Signature (CV_SIGNATURE_C11) + archive.read_exact(&mut buf[..4]).unwrap(); + assert_eq!(&buf[..4], [0x02, 0x00, 0x00, 0x00]); + + loop { + // Record length + archive.read_exact(&mut buf[..2]).unwrap(); + let length = u16::from_le_bytes((&buf[..2]).try_into().unwrap()); + + // Index + archive.read_exact(&mut buf[..2]).unwrap(); + let index = u16::from_le_bytes((&buf[..2]).try_into().unwrap()); + + // Skip non S_COMPILE2 records + if index != 0x1013 { + archive.seek(SeekFrom::Current(-2 + length as i64)).unwrap(); + continue; + } + + // Flags, Machine + archive.seek(SeekFrom::Current(4 + 2)).unwrap(); + + // Frontend major_minor_build and Backend major_minor_build (zero out version) + archive.write_all(&[0; 12]).unwrap(); + + archive.seek(SeekFrom::Start(last_position)).unwrap(); + break; + } + } + } + } + + archive.seek(SeekFrom::Start(start)).unwrap(); + } + + if archive.seek(SeekFrom::Current((size + 1) & !1)).unwrap() >= len { + break; + } + } + archive.flush().unwrap(); + drop(archive); +} + +#[test] +fn test_make_reproducible() { + for (machine, offset) in [("x86", 0), ("x64", 12), ("arm64", 12)] { + let mut def = std::fs::File::create("test.def").unwrap(); + def.write_all( + format!( + r#" +LIBRARY long-library-name-for-placement-in-long-names-table.dll +EXPORTS +A=A.#1 +B=B.#2 +C=C.#3 +"# + ) + .as_bytes(), + ) + .unwrap(); + drop(def); + + let mut cmd = std::process::Command::new("lib"); + cmd.arg("/nologo"); + cmd.arg("/Brepro"); + cmd.arg(format!("/machine:{machine}")); + cmd.arg(format!("/out:test.lib")); + cmd.arg(format!("/def:test.def")); + cmd.output().unwrap(); + + let mut archive = std::fs::File::options() + .read(true) + .write(true) + .open("test.lib") + .unwrap(); + + let mut buf = [0; 24]; + + make_reproducible(&std::path::Path::new("test.lib")); + + // Archive member header timestamp + archive.seek(SeekFrom::Start(0x18)).unwrap(); + archive.read_exact(&mut buf[..12]).unwrap(); + assert_eq!(&buf[..12], b"-1 "); + + // COFF file header time/date stamp + archive.seek(SeekFrom::Start(0x322 - offset)).unwrap(); + archive.read_exact(&mut buf[..4]).unwrap(); + assert_eq!(&buf[..4], [0x00, 0x00, 0x00, 0x00]); + + // Compiler version symbol + archive.seek(SeekFrom::Start(0x481 - offset)).unwrap(); + archive.read_exact(&mut buf[..12]).unwrap(); + assert_eq!(&buf[..12], b"@comp.id\0\0\0\0"); + + // Import header time/date stamp + archive.seek(SeekFrom::Start(0x493 - offset)).unwrap(); + archive.read_exact(&mut buf[..4]).unwrap(); + assert_eq!(&buf[..4], [0x00, 0x00, 0x00, 0x00]); + + // Sampling to ensure lib is consistent + archive.seek(SeekFrom::Start(0xB4)).unwrap(); + archive.read_exact(&mut buf[..24]).unwrap(); + assert_eq!(&buf[..24], b"__NULL_IMPORT_DESCRIPTOR"); + + archive.seek(SeekFrom::Start(0x26E - offset)).unwrap(); + archive.read_exact(&mut buf[..4]).unwrap(); + assert_eq!(&buf[..4], b"// "); + + archive.seek(SeekFrom::Start(0x405 - offset)).unwrap(); + archive.read_exact(&mut buf[..18]).unwrap(); + assert_eq!(&buf[..18], b"Microsoft (R) LINK"); + + drop(archive); + + std::fs::remove_file("test.lib").unwrap(); + std::fs::remove_file("test.exp").unwrap(); + std::fs::remove_file("test.def").unwrap(); + } +}