Skip to content

Commit 7bbb2c6

Browse files
tekknolagiclaude
andcommitted
ZJIT: Fix jitdump record sizes (prefix is 16 bytes, not 12)
The jitdump jr_prefix struct is id(4) + total_size(4) + timestamp(8) = 16 bytes. The code_load body is 40 bytes (not 32). Fix total_size calculations so samply can parse records correctly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 5da8fa6 commit 7bbb2c6

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

zjit/src/jitdump.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ impl JitdumpWriter {
146146
let mut inner = self.inner.lock().unwrap();
147147
let timestamp = Self::timestamp(&inner.epoch);
148148
let name_len = name.len() + 1; // null terminator
149-
let total_size = 12 + 32 + name_len + code.len();
149+
// prefix(16) + code_load_body(40) + name + code
150+
let total_size = 16 + 40 + name_len + code.len();
150151
let pid = std::process::id();
151152
let code_index = inner.code_index;
152153

@@ -184,7 +185,8 @@ impl JitdumpWriter {
184185
let entries_size: usize = entries.iter()
185186
.map(|e| 8 + 4 + 4 + e.filename.len() + 1)
186187
.sum();
187-
let total_size = 12 + 8 + 8 + entries_size;
188+
// prefix(16) + code_addr(8) + nr_entry(8) + entries
189+
let total_size = 16 + 8 + 8 + entries_size;
188190

189191
let f = &mut inner.file;
190192
// jr_prefix
@@ -211,7 +213,7 @@ impl JitdumpWriter {
211213
let timestamp = Self::timestamp(&inner.epoch);
212214
let f = &mut inner.file;
213215
f.write_all(&JIT_CODE_CLOSE.to_le_bytes())?;
214-
f.write_all(&12u32.to_le_bytes())?;
216+
f.write_all(&16u32.to_le_bytes())?; // prefix only
215217
f.write_all(&timestamp.to_le_bytes())?;
216218
f.flush()
217219
}

0 commit comments

Comments
 (0)