Commit a3ecf71
fix(native): pad minidump_context_arm_t to match on-disk minidump spec
minidump_context_arm_t was 72 bytes (integers + cpsr), but the
on-disk minidump spec for ARM contexts — as implemented by breakpad
(MDRawContextARM) and rust-minidump (CONTEXT_ARM, the reader Sentry's
ingest uses to deserialize these streams) — is 368 bytes, with a
trailing float-save area (fpscr u64, 32x u64 VFP regs, 8x u32 extra).
rust-minidump's struct is explicitly called out as a "Breakpad
extension":
https://github.com/rust-minidump/rust-minidump/blob/d4fefc765aad35b3bef569d53c1680eadab5a268/minidump-common/src/format.rs#L1034-L1055
Since get_context_size() returns sizeof(minidump_context_arm_t), the
stream size recorded in the minidump was too small and downstream
parsers couldn't deserialize the thread context.
Add the missing float-save trailing fields. They're left zero-
initialized (we don't capture VFP state yet — same punt the i386
branch makes for FPU) but the layout now matches what readers expect.
The other arches in this file (i386, aarch64) already carry their
full structs this way.
Note: crashpad's in-memory MinidumpContextARM is 364 bytes (u32
fpscr), a 4-byte divergence from breakpad despite crashpad's comment
saying it's "included for compatibility with breakpad." That's a
crashpad-internal quirk; on-disk minidumps follow the breakpad layout
that rust-minidump reads.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent aeb2d94 commit a3ecf71
1 file changed
Lines changed: 10 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
307 | | - | |
308 | | - | |
309 | | - | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
310 | 310 | | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
311 | 318 | | |
312 | 319 | | |
313 | 320 | | |
| |||
0 commit comments