diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig index d17b0b7b17d4bd28db40bf57f561f02a19d4c988..291c9e996819d5c0816b14484c0158e28bdb4308 100644 --- a/src/link/Elf/Object.zig +++ b/src/link/Elf/Object.zig @@ -1246,6 +1246,16 @@ pub fn codeDecompressAlloc(self: *Object, elf_file: *Elf, atom_index: Atom.Index _ = try zlib_stream.reader.streamRemaining(&aw.writer); return aw.toOwnedSlice(); }, + .ZSTD => { + var input: std.Io.Reader = .fixed(data[@sizeOf(elf.Elf64_Chdr)..]); + var stream: std.compress.zstd.Decompress = .init(&input, &.{}, .{}); + const size = std.math.cast(usize, chdr.ch_size) orelse return error.Overflow; + var aw: std.Io.Writer.Allocating = try .initCapacity(gpa, size); + defer aw.deinit(); + _ = try stream.reader.streamRemaining(&aw.writer); + + return aw.toOwnedSlice(); + }, else => @panic("TODO unhandled compression scheme"), } }