<div dir="ltr"><div>This is a proposal to clarify the description of line table compression, all in non-normative text.</div><div><br></div><div>Added as Issue <a href="https://dwarfstd.org/issues/240320.2.html">240320.2</a>.</div><div><br></div><div>-cary </div><div><br></div>## Background<br><br>Technically, the DWARF spec doesn't really describe the compression<br>technique used for line table rows correctly. The non-normative text at<br>the beginning of Section 6.2 says:<br><br>> We shrink it with two techniques. First, we delete from the matrix each<br>> row whose file, line, source column and discriminator is identical with<br>> that of its predecessors. Any deleted row would never be the beginning<br>> of a source statement. Second, ….<br><br>This isn't quite right — the `is_stmt` flag doesn't mark the beginning of<br>a source statement; it marks a suggested breakpoint location, which may<br>not be the first instruction of the statement. So it's quite possible<br>that a row with `is_stmt = false` could be followed by a row with `is_stmt<br>= true`, whose file, line, source column, and discriminator are identical<br>with the first. So really, we should say that no row where `is_stmt =<br>true` can be deleted. Likewise, `prologue_end` and `epilogue_begin` have the<br>same effect — they apply to a single instruction, but not to the<br>instructions in any following rows that were elided.<br><br>## Proposed Changes<br><br>In Section 6.2, replace the sentences quoted above with the following:<br><br>> We shrink it with two techniques. First, we delete from the matrix each<br>> row whose file, line, source column and discriminator is identical with<br>> that of its predecessors, except where the instruction is marked as<br>> a suggested breakpoint location, the end of a prologue region, or the<br>> beginning of an epilogue region. Second, …..<br><div><br></div></div>