Skip to content

Commit

Permalink
- Added Graphviz integration to Explorer (#1094)
Browse files Browse the repository at this point in the history
- Updated IDT
  • Loading branch information
tgiphil committed Jul 28, 2023
1 parent 6458e23 commit 88dc77a
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 31 deletions.
6 changes: 4 additions & 2 deletions Source/Mosa.Kernel.BareMetal.x86/IDT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2236,8 +2236,6 @@ private static unsafe void ProcessInterrupt(Pointer stackStatePointer)

if (cr2 >= 0xF0000000u)
{
Debug.WriteLine("CR2: ", new Hex8(cr2));

Error(stack, "Invalid Access Above 0xF0000000");
break;
}
Expand Down Expand Up @@ -2291,6 +2289,10 @@ private static unsafe void Error(IDTStackEntry stack, string message)
Debug.WriteLine("EDX: ", new Hex8(stack.EDX));
Debug.WriteLine("EDI: ", new Hex8(stack.EDI));
Debug.WriteLine("ESI: ", new Hex8(stack.ESI));
Debug.WriteLine("IRQ: ", new Hex8(stack.Interrupt));
Debug.WriteLine("CR2: ", new Hex8(Native.GetCR2()));
Debug.WriteLine("EFLAGS: ", new Hex8(stack.EFLAGS));
Debug.WriteLine("Error Code: ", new Hex8(stack.ErrorCode));

var frame = new Pointer(stack.EBP);
var depth = 0u;
Expand Down
2 changes: 2 additions & 0 deletions Source/Mosa.Kernel.BareMetal/BootPageAllocator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public static Pointer AllocatePages(uint pages = 1)

UsedPages += pages;

Page.ClearPage(result);

Debug.WriteLine(" * Boot Page Allocated @ ", new Hex(result));

// TODO: Release lock
Expand Down
37 changes: 32 additions & 5 deletions Source/Mosa.Tool.Explorer/MainForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

80 changes: 79 additions & 1 deletion Source/Mosa.Tool.Explorer/MainForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Mosa.Compiler.Common;
using Mosa.Compiler.Common.Configuration;
using Mosa.Compiler.Framework;
using Mosa.Compiler.Framework.CompilerStages;
using Mosa.Compiler.Framework.Trace;
Expand All @@ -24,6 +24,8 @@ namespace Mosa.Tool.Explorer;

public partial class MainForm : Form
{
private const string graphviz = "C:\\Program Files\\Graphviz\\bin\\dot.exe";

#region Classes

protected class CounterEntry
Expand Down Expand Up @@ -64,6 +66,8 @@ public CounterEntry(string name, int counter)

private Stopwatch Stopwatch = new Stopwatch();

private bool GraphwizFound = false;

public MainForm()
{
InitializeComponent();
Expand All @@ -84,6 +88,11 @@ public MainForm()

RegisterPlatforms();

GraphwizFound = File.Exists(graphviz);

cbGraphviz.Checked = GraphwizFound;
cbGraphviz.Enabled = GraphwizFound;

Stopwatch.Restart();
}

Expand Down Expand Up @@ -1010,6 +1019,8 @@ private void UpdateDebugResults()
return;

tbDebugResult.Text = CreateText(lines);

UpdateGraphviz();
}

private void UpdateDebugStages()
Expand Down Expand Up @@ -1265,4 +1276,71 @@ private void tsbRefresh_Click(object sender, EventArgs e)
OpenFile();
}
}

private bool DisplayGraphviz()
{
panel1.Controls.Clear();

if (!GraphwizFound)
return false;

if (!cbGraphviz.Checked)
return false;

if (!tbDebugResult.Text.Contains("digraph blocks"))
return false;

var dot = Path.GetTempFileName();
var bmp = Path.GetTempFileName();

try
{
File.WriteAllText(dot, tbDebugResult.Text);

var process = new Process();

process.StartInfo.FileName = graphviz;
process.StartInfo.Arguments = $"dot -Tbmp -o \"{bmp}\" \"{dot}\"";
process.StartInfo.CreateNoWindow = true;

process.Start();
process.WaitForExit();

var file = File.ReadAllBytes(bmp);

using var stream = new MemoryStream(file);
var bitmap = new Bitmap(stream);

var picture = new PictureBox();
panel1.Controls.Add(picture);

picture.Size = bitmap.Size;
picture.SizeMode = PictureBoxSizeMode.AutoSize;
picture.Image = bitmap;
picture.BorderStyle = BorderStyle.None;
picture.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top;

panel1.AutoScrollMinSize = bitmap.Size;
}
finally
{
File.Delete(dot);
File.Delete(bmp);
}

return true;
}

private void UpdateGraphviz()
{
var graphviz = DisplayGraphviz();

panel1.Visible = graphviz;
tbDebugResult.Visible = !graphviz;
}

private void cbGraphviz_CheckedChanged(object sender, EventArgs e)
{
UpdateGraphviz();
}
}
46 changes: 23 additions & 23 deletions Source/Mosa.Tool.Explorer/MainForm.resx
Original file line number Diff line number Diff line change
Expand Up @@ -147,33 +147,33 @@
<data name="tsbRefresh.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="tsbCompile.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
Expand Down

0 comments on commit 88dc77a

Please sign in to comment.