Organizata Trifecta Tech Foundation, e cila zhvillon projekte si ntpd-rs, sudo-rs, zlib-rs dhe bzip2-rs, njoftoi për kalimin e Firefox në përdorimin e bibliotekës zlib-rs për kompresim dhe dekompresim duke përdorur metodën gzip. Përveç mbrojtjes nga problemet të shkaktuara nga gabimet gjatë punës me kujtesën, kalimi nga zlib në zlib-rs ka çuar në një rritje të dukshme të performancës - në testet e kryera, përshpejtimi ka qenë nga 3.3 deri në 32.5 herë për operacionet e vetme të dekompresimit dhe nga 2.7 deri në 10.86 herë për dekompresimin e një fluksi të vazhdueshëm.
Biblioteka zlib-rs u pĂ«rdor nĂ« lĂ«shimin e Firefox 151, por pas integrimit tĂ« saj disa pĂ«rdorues u pĂ«rballĂ«n me njĂ« problem qĂ« shkaktonte dĂ«shtim pĂ«r shkak tĂ« daljes jashtĂ« kufijve tĂ« lejuar. ĂshtĂ« vĂ«rejtur se nĂ« kodin e shkruar nĂ« Rust problemi çonte nĂ« ndalimin e papritur, ndĂ«rsa nĂ« C njĂ« situatĂ« e tillĂ« do tĂ« kishte sjellĂ« dĂ«mtime tĂ« dukshme tĂ« tĂ« dhĂ«nave pa ndaluar punĂ«n. Si zgjidhje nĂ« lĂ«shimin 151.0.1 u rikthye pĂ«rdorimi i bibliotekĂ«s sĂ« vjetĂ«r zlib.
Shfaqja e parë e problemit u vërejt gjatë testimit të ndërtimeve fillestare më shumë se një vit më parë, por në sistemet e zhvilluesve nuk arritëm ta riprodhojmë. Në fund, pas një viti testimi ndaj përdoruesve të lëshimeve beta u vendos të aktivizohej zlib-rs në lëshimin e Firefox 151. Pas një serie të re raportesh për probleme dhe shqyrtimit të rregullave u përcaktua se dështimi ishte shkaktuar nga një gabim në mikro-kodet e CPU-së Intel të bazuar në mikroarkitekturën Raptor Lake, të gjeneratës 13 dhe 14, e lidhur me përdorimin e regjit të gabuar.
Problemi ndodhte sepse gjeneratori i kodit LLVM përdorte instrukcionin "mov byte ptr [rsi + rdi + 1], ch" gjatë shkrimit në memorie të rezultateve të kodimit Huffman. Gjatë ekzekutimit të këtij instrukcioni në CPU-në Raptor Lake, në vend të 8-15 bitëve nga regjistri RCX, të cilët i përkasin regjistrit CH, në memorie shkruhen bitët 0-7, që iu përkasin regjistrit CL. Gjatë përgatitjes së lëshimit të Firefox 152, gabimi u eliminua me një anashkalim dhe patch'i u transferua në përbërjen kryesore të zlib-rs. Gjenerimi i instrukcionit problematik u vërejt në LLVM 22 (në degën e zhvillimitLLVM 23 nuk gjenerohet).
Burimi: opennet.ru
