aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Package/Fetch.zig7
-rw-r--r--src/Package/Fetch/git.zig9
-rw-r--r--src/arch/x86_64/CodeGen.zig15
-rw-r--r--src/link/Elf/Object.zig4
-rw-r--r--src/objcopy.zig3
5 files changed, 25 insertions, 13 deletions
diff --git a/src/Package/Fetch.zig b/src/Package/Fetch.zig
index fb9d7c823c..ed3c6b099f 100644
--- a/src/Package/Fetch.zig
+++ b/src/Package/Fetch.zig
@@ -1099,7 +1099,12 @@ fn unpackResource(
switch (file_type) {
.tar => try unpackTarball(f, tmp_directory.handle, resource.reader()),
- .@"tar.gz" => try unpackTarballCompressed(f, tmp_directory.handle, resource, std.compress.gzip),
+ .@"tar.gz" => {
+ const reader = resource.reader();
+ var br = std.io.bufferedReaderSize(std.crypto.tls.max_ciphertext_record_len, reader);
+ var dcp = std.compress.gzip.decompressor(br.reader());
+ try unpackTarball(f, tmp_directory.handle, dcp.reader());
+ },
.@"tar.xz" => try unpackTarballCompressed(f, tmp_directory.handle, resource, std.compress.xz),
.@"tar.zst" => try unpackTarballCompressed(f, tmp_directory.handle, resource, ZstdWrapper),
.git_pack => unpackGitPack(f, tmp_directory.handle, resource) catch |err| switch (err) {
diff --git a/src/Package/Fetch/git.zig b/src/Package/Fetch/git.zig
index df5332d41d..abbb031948 100644
--- a/src/Package/Fetch/git.zig
+++ b/src/Package/Fetch/git.zig
@@ -1115,8 +1115,7 @@ fn indexPackFirstPass(
const entry_header = try EntryHeader.read(entry_crc32_reader.reader());
switch (entry_header) {
inline .commit, .tree, .blob, .tag => |object, tag| {
- var entry_decompress_stream = try std.compress.zlib.decompressStream(allocator, entry_crc32_reader.reader());
- defer entry_decompress_stream.deinit();
+ var entry_decompress_stream = std.compress.zlib.decompressor(entry_crc32_reader.reader());
var entry_counting_reader = std.io.countingReader(entry_decompress_stream.reader());
var entry_hashed_writer = hashedWriter(std.io.null_writer, Sha1.init(.{}));
const entry_writer = entry_hashed_writer.writer();
@@ -1135,8 +1134,7 @@ fn indexPackFirstPass(
});
},
inline .ofs_delta, .ref_delta => |delta| {
- var entry_decompress_stream = try std.compress.zlib.decompressStream(allocator, entry_crc32_reader.reader());
- defer entry_decompress_stream.deinit();
+ var entry_decompress_stream = std.compress.zlib.decompressor(entry_crc32_reader.reader());
var entry_counting_reader = std.io.countingReader(entry_decompress_stream.reader());
var fifo = std.fifo.LinearFifo(u8, .{ .Static = 4096 }).init();
try fifo.pump(entry_counting_reader.reader(), std.io.null_writer);
@@ -1257,8 +1255,7 @@ fn resolveDeltaChain(
fn readObjectRaw(allocator: Allocator, reader: anytype, size: u64) ![]u8 {
const alloc_size = std.math.cast(usize, size) orelse return error.ObjectTooLarge;
var buffered_reader = std.io.bufferedReader(reader);
- var decompress_stream = try std.compress.zlib.decompressStream(allocator, buffered_reader.reader());
- defer decompress_stream.deinit();
+ var decompress_stream = std.compress.zlib.decompressor(buffered_reader.reader());
const data = try allocator.alloc(u8, alloc_size);
errdefer allocator.free(data);
try decompress_stream.reader().readNoEof(data);
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index e547b797ac..33b8623183 100644
--- a/src/arch/x86_64/CodeGen.zig
+++ b/src/arch/x86_64/CodeGen.zig
@@ -7276,7 +7276,20 @@ fn packedLoad(self: *Self, dst_mcv: MCValue, ptr_ty: Type, ptr_mcv: MCValue) Inn
else => |vector_index| @intFromEnum(vector_index) * val_bit_size,
};
if (ptr_bit_off % 8 == 0) {
- try self.load(dst_mcv, ptr_ty, ptr_mcv.offset(@intCast(@divExact(ptr_bit_off, 8))));
+ {
+ const mat_ptr_mcv: MCValue = switch (ptr_mcv) {
+ .immediate, .register, .register_offset, .lea_frame => ptr_mcv,
+ else => .{ .register = try self.copyToTmpRegister(ptr_ty, ptr_mcv) },
+ };
+ const mat_ptr_lock = switch (mat_ptr_mcv) {
+ .register => |mat_ptr_reg| self.register_manager.lockReg(mat_ptr_reg),
+ else => null,
+ };
+ defer if (mat_ptr_lock) |lock| self.register_manager.unlockReg(lock);
+
+ try self.load(dst_mcv, ptr_ty, mat_ptr_mcv.offset(@intCast(@divExact(ptr_bit_off, 8))));
+ }
+
if (val_abi_size * 8 > val_bit_size) {
if (dst_mcv.isRegister()) {
try self.truncateRegister(val_ty, dst_mcv.getReg().?);
diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig
index 395e6680a1..b29de3fc59 100644
--- a/src/link/Elf/Object.zig
+++ b/src/link/Elf/Object.zig
@@ -902,9 +902,7 @@ pub fn codeDecompressAlloc(self: Object, elf_file: *Elf, atom_index: Atom.Index)
switch (chdr.ch_type) {
.ZLIB => {
var stream = std.io.fixedBufferStream(data[@sizeOf(elf.Elf64_Chdr)..]);
- var zlib_stream = std.compress.zlib.decompressStream(gpa, stream.reader()) catch
- return error.InputOutput;
- defer zlib_stream.deinit();
+ var zlib_stream = std.compress.zlib.decompressor(stream.reader());
const size = std.math.cast(usize, chdr.ch_size) orelse return error.Overflow;
const decomp = try gpa.alloc(u8, size);
const nread = zlib_stream.reader().readAll(decomp) catch return error.InputOutput;
diff --git a/src/objcopy.zig b/src/objcopy.zig
index 8ea0eaac59..81638d4af0 100644
--- a/src/objcopy.zig
+++ b/src/objcopy.zig
@@ -1298,8 +1298,7 @@ const ElfFileHelper = struct {
try compressed_stream.writer().writeAll(prefix);
{
- var compressor = try std.compress.zlib.compressStream(allocator, compressed_stream.writer(), .{});
- defer compressor.deinit();
+ var compressor = try std.compress.zlib.compressor(compressed_stream.writer(), .{});
var buf: [8000]u8 = undefined;
while (true) {