http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47471
--- Comment #3 from Jan Kratochvil <jan.kratochvil at redhat dot com> 2011-03-29 17:35:43 UTC --- (In reply to comment #2) The patch has regressions, even against: GNU C 4.6.1 20110329 (prerelease) One of many: -PASS: gdb.base/break.exp: run until quoted breakpoint +FAIL: gdb.base/break.exp: run until quoted breakpoint 0000000000400783 <marker2>: int marker2 (a) int a; { return (1); } /* set breakpoint 9 here */ 400783: 55 push %rbp 400784: 48 89 e5 mov %rsp,%rbp 400787: 89 7d fc mov %edi,-0x4(%rbp) 40078a: b8 01 00 00 00 mov $0x1,%eax 40078f: 5d pop %rbp 400790: c3 retq FSF GCC correctly sets the prologue line boundary: - Special opcode 104: advance Address by 7 to 0x400783 and Line by 1 to 47 - Special opcode 103: advance Address by 7 to 0x40078a and Line by 0 to 47 - Special opcode 104: advance Address by 7 to 0x400791 and Line by 1 to 48 but the patched FSF GCC does not: + Special opcode 160: advance Address by 11 to 0x400783 and Line by 1 to 47 + Special opcode 202: advance Address by 14 to 0x400791 and Line by 1 to 48 GCC could also start emitting DW_LNS_set_prologue_end (GDB cannot parse it yet, though) instead of these line number magics. Unfortunately the prologue end is still needed for GDB as during -O0 -g the VTA is not in effect and <50a> DW_AT_location : 2 byte block: 91 6c (DW_OP_fbreg: -20) is in such case invalid at the entry PC (0x400783).