about summary refs log tree commit diff stats
path: root/shell/trace.mu
diff options
context:
space:
mode:
Diffstat (limited to 'shell/trace.mu')
-rw-r--r--shell/trace.mu12
1 files changed, 12 insertions, 0 deletions
diff --git a/shell/trace.mu b/shell/trace.mu
index 410429e6..267b3ebe 100644
--- a/shell/trace.mu
+++ b/shell/trace.mu
@@ -89,11 +89,23 @@ fn trace _self: (addr trace), label: (addr array byte), message: (addr stream by
   var data-ah/eax: (addr handle array trace-line) <- get self, data
   var data/eax: (addr array trace-line) <- lookup *data-ah
   var index-addr/edi: (addr int) <- get self, first-free
+  {
+    compare *index-addr, 0x8000/lines
+    break-if-<
+    return
+  }
   var index/ecx: int <- copy *index-addr
   var offset/ecx: (offset trace-line) <- compute-offset data, index
   var dest/eax: (addr trace-line) <- index data, offset
   var depth/ecx: (addr int) <- get self, curr-depth
   rewind-stream message
+  {
+    compare *index-addr, 0x7ffe/lines
+    break-if-<
+    initialize-trace-line 0/depth, "error", message, dest
+    increment *index-addr
+    return
+  }
   initialize-trace-line *depth, label, message, dest
   increment *index-addr
 }