authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-03-02 16:26:22-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-03-02 16:26:22-05:00
log56645c1701b321e9da807dcbf7b8d61e0fc53117
treeeb75174ccdb31ce09d488756cf746ec3cd18380e
parenta217c764db0a1dae539c3b243ebc329350485eb5

std.debug.dwarf supports line number version 4

fixes stack traces for llvm6 generated zig programs

1 files changed, 9 insertions(+), 2 deletions(-)

std/debug/index.zig+9-2
...@@ -791,14 +791,21 @@ fn getLineNumberInfo(st: &ElfStackTrace, compile_unit: &const CompileUnit, targe...@@ -791,14 +791,21 @@ fn getLineNumberInfo(st: &ElfStackTrace, compile_unit: &const CompileUnit, targe
791 }791 }
792792
793 const version = try in_stream.readInt(st.elf.endian, u16);793 const version = try in_stream.readInt(st.elf.endian, u16);
794 if (version != 2) return error.InvalidDebugInfo;794 // TODO support 3 and 5
795 if (version != 2 and version != 4) return error.InvalidDebugInfo;
795796
796 const prologue_length = try in_stream.readInt(st.elf.endian, u32);797 const prologue_length = if (is_64) try in_stream.readInt(st.elf.endian, u64)
798 else try in_stream.readInt(st.elf.endian, u32);
797 const prog_start_offset = (try in_file.getPos()) + prologue_length;799 const prog_start_offset = (try in_file.getPos()) + prologue_length;
798800
799 const minimum_instruction_length = try in_stream.readByte();801 const minimum_instruction_length = try in_stream.readByte();
800 if (minimum_instruction_length == 0) return error.InvalidDebugInfo;802 if (minimum_instruction_length == 0) return error.InvalidDebugInfo;
801803
804 if (version >= 4) {
805 // maximum_operations_per_instruction
806 _ = try in_stream.readByte();
807 }
808
802 const default_is_stmt = (try in_stream.readByte()) != 0;809 const default_is_stmt = (try in_stream.readByte()) != 0;
803 const line_base = try in_stream.readByteSigned();810 const line_base = try in_stream.readByteSigned();
804811