From cf211711c377c286d34038f549606ead31ec9780 Mon Sep 17 00:00:00 2001 From: Rafael Rivera Date: Sun, 17 Sep 2023 16:01:22 -0700 Subject: [PATCH 1/4] Mask non-reproducible linker artifacts in libs --- crates/tools/msvc/src/main.rs | 301 +++++++++++++++++++++++++++++----- 1 file changed, 262 insertions(+), 39 deletions(-) diff --git a/crates/tools/msvc/src/main.rs b/crates/tools/msvc/src/main.rs index f8189866cc..48f02385e0 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,263 @@ 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() { + 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!("/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)).unwrap(); + archive.read_exact(&mut buf[..4]).unwrap(); + assert_eq!(&buf[..4], [0x00, 0x00, 0x00, 0x00]); + + // Compiler version symbol + archive.seek(SeekFrom::Start(0x481)).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)).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)).unwrap(); + archive.read_exact(&mut buf[..4]).unwrap(); + assert_eq!(&buf[..4], b"// "); + + archive.seek(SeekFrom::Start(0x405)).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(); +} From 80863ed4f42da753b227faaecd8c06d354d5c162 Mon Sep 17 00:00:00 2001 From: Rafael Rivera Date: Mon, 18 Sep 2023 02:19:46 -0700 Subject: [PATCH 2/4] libs --- .../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 3 files changed, 0 insertions(+), 0 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 53b5bd82b13a9ad92debf84c7e58bf3c5c8e1e68..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 b14ef739eac2f0a2ecac4ac881c3f8c18ef21b1e..d4f8321663b6300affe38ca9ebd362689505a956 100644 GIT binary patch delta 36943 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 diff --git a/crates/targets/x86_64_msvc/lib/windows.0.52.0.lib b/crates/targets/x86_64_msvc/lib/windows.0.52.0.lib index a783bbf77167badcdaec8875c8b0e98c86ef4e96..59ae31e38d03eaf0e366c37ea6c204baff787b64 100644 GIT binary patch delta 35436 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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*4XA)xl2Pht^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;FvZlmaW1m04v^>e`q{nrQt&^omk8GJkCK6t9VnBs~~yn{1W-f(emcJrBQh z;rEGE{oeh!q`h^qRlWg_-!3U; zZ5@oRvWg{ICHweNtGKT($quTqN)ue;Yw-28__V3zCj2<+Cj+dZ5WmFg3LfqK0%6Ds zYa+B7Wp069S!P{p?;V6+Zt)iXS%IGn8&*nAlkf{%BfS(awg7&y1y6gt3V*iu!(X8P z!aA9?5+UDToxR>FuD(=|w>MbD=UWM6e63a1RKPblzda1C#eaRcWrm+CdQfY9GgP2o z6>_+WxWURptcZZShgG?wKVqLd7mir#n%e`AZs72Tl`_8KZjcOJZd%2*Nz9mWt5G(> z>3)zgC6L|B9rvV4p&-Wy!S&XE1zm{LKKHG%`3YUTZ~dXQ@B4g zes)m4jCh2JAM>fbY(m7js(cm^y6Su-5%1LGORcdQHD8uLPYgdvWjrKAfWwM>N;VUI z3s>fgU5zmD>8gC$T!V~Xz!xY+^ z8*EurK=C!1GoLOl5XY4JOA6Ej8`SWwAp2RKRRu|ubIxJg3Mg%v#L6K_mM~slNLhst zl@G-hDphuhFKi4NGHhOo^LItN;tREm5=`CzN--4vDnP5^rOa3;PAWwAZOMhQk%E8u z2fVl7H=f_F)rX+ZQVK6nfJj-`)}he8ETFoKLTOqi03FS81JEOLVFQbEG8tO43t5xl z+?+x&R*3B5xq@to_{n*Nv_DWtblzJ;(HRKwBdmpqPdV$J-Dp-Lt|;8GPpmuhN7R6@TyHrU8G`A>Xy=G{d|6y3QGfdK6t19HXiZ zKX^(|WOKX0t4KblPw+09LfNMv1(V2rEr2O|O`uBlwWe~}fMutm%4YcA1m&dUA{*yU z&5KwY=dXkniG_jaJ+noTw8LEqcSiZUq5SY7+BP?ly|@)q_8+ZPvLhoEvVA|mvM)sz kvHk`uNvU>Prh6wxsd(8Pt>A?`nNYhGe`{l*uBiF{0RUvdfB*mh From 7970f7b972a856c730355d002c75102df3a9cf64 Mon Sep 17 00:00:00 2001 From: Rafael Rivera Date: Mon, 18 Sep 2023 02:20:18 -0700 Subject: [PATCH 3/4] fmt --- crates/tools/msvc/src/main.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/crates/tools/msvc/src/main.rs b/crates/tools/msvc/src/main.rs index 48f02385e0..8d4a088866 100644 --- a/crates/tools/msvc/src/main.rs +++ b/crates/tools/msvc/src/main.rs @@ -188,13 +188,11 @@ fn make_reproducible(lib: &std::path::Path) { let skip_member = match &buf[..4] { b"/ " => true, // Linker member b"// " => true, // Long names table - _ => false + _ => false, }; // Timestamp, User ID, Group ID, and Mode - archive - .seek(SeekFrom::Current(12 + 6 + 6 + 8)) - .unwrap(); + archive.seek(SeekFrom::Current(12 + 6 + 6 + 8)).unwrap(); // Size, sans header archive.read_exact(&mut buf[..10]).unwrap(); From a1cc775ebd380011fc8a0b0d303fc94e204c0222 Mon Sep 17 00:00:00 2001 From: Rafael Rivera Date: Mon, 18 Sep 2023 13:04:33 -0700 Subject: [PATCH 4/4] test --- crates/tools/msvc/src/main.rs | 129 +++++++++++++++++----------------- 1 file changed, 66 insertions(+), 63 deletions(-) diff --git a/crates/tools/msvc/src/main.rs b/crates/tools/msvc/src/main.rs index 8d4a088866..e5744b8444 100644 --- a/crates/tools/msvc/src/main.rs +++ b/crates/tools/msvc/src/main.rs @@ -340,75 +340,78 @@ fn make_reproducible(lib: &std::path::Path) { #[test] fn test_make_reproducible() { - let mut def = std::fs::File::create("test.def").unwrap(); - def.write_all( - format!( - r#" + 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(), ) - .as_bytes(), - ) - .unwrap(); - drop(def); - - let mut cmd = std::process::Command::new("lib"); - cmd.arg("/nologo"); - cmd.arg("/Brepro"); - 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)).unwrap(); - archive.read_exact(&mut buf[..4]).unwrap(); - assert_eq!(&buf[..4], [0x00, 0x00, 0x00, 0x00]); - - // Compiler version symbol - archive.seek(SeekFrom::Start(0x481)).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)).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)).unwrap(); - archive.read_exact(&mut buf[..4]).unwrap(); - assert_eq!(&buf[..4], b"// "); - - archive.seek(SeekFrom::Start(0x405)).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(); + 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(); + } }