Skip to content

Support unaligned C13 debug subsection lengths - #170

Open
hannah-computer wants to merge 1 commit into
getsentry:masterfrom
hannah-computer:skip-c13-subsection-padding
Open

hannah-computer wants to merge 1 commit into
getsentry:masterfrom
hannah-computer:skip-c13-subsection-padding

Conversation

@hannah-computer

@hannah-computer hannah-computer commented Nov 4, 2026 •

Copy link
Copy Markdown

The length does not include the padding that follows it up to the next multiple of four bytes.

PDBs from link.exe never hit this because their subsection lengths already are multiples of four. But the .NET Native toolchain (ILC) writes unpadded lengths for its FuncMDTokenMap and TypeMDTokenMap subsections and, unlike .NET NativeAOT, doesn't go through link.exe.

Looking at the reference implementation, it does treat padding as separate from the length:

  • cvdump: its .debug$S walker aligns its offset to 4 before each subsection header, then advances by the raw cb (cvdump.cpp#L1683-L1719, #L1893-L1900).
  • dumpsym7.cpp: it does the same for a PDB module's C13 buffer (#L6240-L6299).
  • Writer: AppendSubSectionToBuffer appends the raw subsection bytes, then pads the buffer to a multiple of 4 (mod.cpp#L469-L484).

The length does not include the padding that follows it up to the next
multiple of four bytes. PDBs from link.exe never hit this because their
subsection lengths already are multiples of four. But the .NET Native
toolchain (ILC) writes unpadded lengths for its FuncMDTokenMap and
TypeMDTokenMap subsections.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant