public override void Emit(DwarfWriteContext ctx) { var abbr = ctx.CreateAbbrev(DwarfTag.DW_TAG_compile_unit, new List <DwarfAbbrevAttribute>() { new DwarfAbbrevAttribute { Attribute = DwarfAttribute.DW_AT_producer, Form = DwarfForm.DW_FORM_string }, new DwarfAbbrevAttribute { Attribute = DwarfAttribute.DW_AT_low_pc, Form = DwarfForm.DW_FORM_addr }, new DwarfAbbrevAttribute { Attribute = DwarfAttribute.DW_AT_high_pc, Form = DwarfForm.DW_FORM_addr }, new DwarfAbbrevAttribute { Attribute = DwarfAttribute.DW_AT_stmt_list, Form = DwarfForm.DW_FORM_data4 }, }); ctx.Writer.WriteULEB128(0x01); //number of tag. ctx.Writer.WriteNullTerminatedString(Producer); ctx.Writer.Write(ProgramCounterLow); // TODO: Dynamic ctx.Writer.Write(ProgramCounterHigh); // TODO: Dynamic ctx.Writer.Write((uint)0); }
private Stream EmitDebugInfo() { var stream = new MemoryStream(); var writer = new BinaryWriter(stream); // note: Compilation Unit Header != Debugging Information Entry // Compilation Unit Header var compilationUnitSizePosition = writer.GetPosition(); writer.Write((uint)7); // length writer.Write((ushort)0x02); // version writer.Write((uint)0); // abbr tag offset. writer.WriteByte(4); //addr size of platform var context = new DwarfWriteContext { Writer = writer, AbbrevList = AbbrevList }; var textSection = Linker.Sections[(int)SectionKind.Text]; // Debugging Information Entry var cu = new DwarfCompilationUnit { Producer = "Mosa Compiler", ProgramCounterLow = (uint)textSection.VirtualAddress, ProgramCounterHigh = (uint)textSection.VirtualAddress + textSection.Size }; cu.Emit(context); uint compilationUnitSize = (uint)(writer.GetPosition() - compilationUnitSizePosition - sizeof(uint)); writer.SetPosition(compilationUnitSizePosition); writer.Write(compilationUnitSize); writer.SetPosition(writer.BaseStream.Length); return(stream); }
public virtual void Emit(DwarfWriteContext ctx) { }