feat: capability list to enable greater flexibility of devices
[lunaix-os.git] / lunaix-os / kernel / debug / trace.c
index 1cf9ae34d37295a7251058d80813c978c7e84e12..1c909197bc8f0a594ba34ed4f91c73dabdc6e917 100644 (file)
@@ -77,6 +77,10 @@ ksym_getstr(struct ksym_entry* sym)
                    trace_ctx.ksym_table->ksym_label_off + sym->label_off);
 }
 
+static inline bool valid_fp(ptr_t ptr) {
+    return KERNEL_STACK < ptr && ptr < KERNEL_EXEC_END;
+}
+
 int
 trace_walkback(struct trace_record* tb_buffer,
                ptr_t fp,
@@ -87,7 +91,7 @@ trace_walkback(struct trace_record* tb_buffer,
     struct ksym_entry* current = NULL;
     int i = 0;
 
-    while (frame && i < limit) {
+    while (valid_fp((ptr_t)frame) && i < limit) {
         ptr_t pc = *(frame + 1);
 
         current = trace_sym_lookup(pc);
@@ -100,6 +104,10 @@ trace_walkback(struct trace_record* tb_buffer,
         i++;
     }
 
+    if (!valid_fp((ptr_t)frame)) {
+        frame = NULL;
+    }
+
     if (last_fp) {
         *last_fp = (ptr_t)frame;
     }