From f1d64f318bd3171b79a67784a3ac5212ad344915 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Fri, 21 Feb 2025 16:54:26 +0100 Subject: [PATCH] kern: Remove support for (broken) stacktrace --- kernel/GNUmakefile | 6 --- kernel/gensyms.sh | 54 --------------------- kernel/main.v | 2 + kernel/modules/klock/klock.v | 10 +--- kernel/modules/lib/panic.v | 7 --- kernel/modules/trace/trace.v | 71 ---------------------------- kernel/modules/x86/cpu/local/local.v | 5 +- 7 files changed, 4 insertions(+), 151 deletions(-) delete mode 100755 kernel/gensyms.sh delete mode 100644 kernel/modules/trace/trace.v diff --git a/kernel/GNUmakefile b/kernel/GNUmakefile index fe5704897..3ca4570fc 100644 --- a/kernel/GNUmakefile +++ b/kernel/GNUmakefile @@ -19,9 +19,6 @@ CC := cc # User controllable archiver command. AR := ar -# User controllable objdump command. -OBJDUMP := objdump - # User controllable V command. V := v @@ -151,9 +148,6 @@ cc-runtime-x86_64/cc-runtime.a: GNUmakefile cc-runtime/* bin/$(OUTPUT): GNUmakefile linker.ld obj/blob.c.o $(OBJ) cc-runtime-x86_64/cc-runtime.a mkdir -p "$$(dirname $@)" $(CC) $(CFLAGS) $(LDFLAGS) obj/blob.c.o $(OBJ) cc-runtime-x86_64/cc-runtime.a -o $@ - ./gensyms.sh $(OBJDUMP) $@ > obj/symbol_table.c - $(CC) $(CFLAGS) $(CPPFLAGS) -c obj/symbol_table.c -o obj/symbol_table.c.o - $(CC) $(CFLAGS) $(LDFLAGS) obj/blob.c.o $(OBJ) cc-runtime-x86_64/cc-runtime.a -o $@ obj/blob.c.o: GNUmakefile $(VFILES) mkdir -p "$$(dirname $@)" diff --git a/kernel/gensyms.sh b/kernel/gensyms.sh deleted file mode 100755 index d69a65ff1..000000000 --- a/kernel/gensyms.sh +++ /dev/null @@ -1,54 +0,0 @@ -#! /bin/sh - -set -e - -LC_ALL=C -export LC_ALL - -TMP0=$(mktemp) - -cat >"$TMP0" </dev/null -EOF - -chmod +x "$TMP0" - -"$TMP0" && set -o pipefail - -rm "$TMP0" - -TMP1=$(mktemp) -TMP2=$(mktemp) -TMP3=$(mktemp) - -$1 -t "$2" | sed '/\bd\b/d' | sort > "$TMP1" -grep "\.text" < "$TMP1" | cut -d' ' -f1 > "$TMP2" -grep "\.text" < "$TMP1" | awk 'NF{ print $NF }' > "$TMP3" - -cat < - -struct symbol { - uint64_t address; - char *string; -}; - -const struct symbol symbol_table[] = { -EOF - -paste -d'$' "$TMP2" "$TMP3" | sed "s/^/ {0x/g;s/\\\$/, \"/g;s/\$/\"},/g" - -cat < + @[_linker_section: '.requests'] @[cinit] __global ( diff --git a/kernel/modules/klock/klock.v b/kernel/modules/klock/klock.v index d74b23746..0a460378e 100644 --- a/kernel/modules/klock/klock.v +++ b/kernel/modules/klock/klock.v @@ -5,7 +5,6 @@ module klock import katomic -import trace pub struct Lock { pub mut: @@ -18,7 +17,7 @@ fn C.__builtin_return_address(int) voidptr pub fn (mut l Lock) acquire() { caller := u64(C.__builtin_return_address(0)) - for i := u64(0); i < u64(50000000); i++ { + for { if l.test_and_acquire() == true { l.caller = caller return @@ -28,13 +27,6 @@ pub fn (mut l Lock) acquire() { ; ; ; memory } } - - C.printf_panic(c'Lock address: 0x%llx\n', voidptr(l)) - mut offset, mut symbol := trace.address(caller) or { return } - C.printf_panic(c'Current caller: 0x%llx <%s+0x%llx>\n', caller, symbol.name, offset) - offset, symbol = trace.address(l.caller) or { return } - C.printf_panic(c'Last caller: 0x%llx <%s+0x%llx>\n', l.caller, symbol.name, offset) - panic('Deadlock detected') } pub fn (mut l Lock) release() { diff --git a/kernel/modules/lib/panic.v b/kernel/modules/lib/panic.v index 4019beef6..e2b108d57 100644 --- a/kernel/modules/lib/panic.v +++ b/kernel/modules/lib/panic.v @@ -4,7 +4,6 @@ module lib -import trace import x86.apic import x86.cpu.local as cpulocal import x86.cpu @@ -46,12 +45,6 @@ pub fn kpanic(gpr_state &cpulocal.GPRState, message charptr) { gpr_state.r13, gpr_state.r14, gpr_state.r15) } - C.printf_panic(c'Stacktrace:\n') - trace.stacktrace(0) - if gpr_state != unsafe { nil } && gpr_state.cs == 0x28 { - trace.stacktrace(gpr_state.rbp) - } - for { asm volatile amd64 { hlt diff --git a/kernel/modules/trace/trace.v b/kernel/modules/trace/trace.v deleted file mode 100644 index e9c30057b..000000000 --- a/kernel/modules/trace/trace.v +++ /dev/null @@ -1,71 +0,0 @@ -// trace.v: Stack tracing for debug prints. -// Code is governed by the GPL-2.0 license. -// Copyright (C) 2021-2022 The Vinix authors. - -module trace - -#include - -pub struct Symbol { -pub mut: - address u64 - name charptr -} - -fn C.get_symbol_table() voidptr - -fn C.printf_panic(charptr, ...voidptr) - -pub fn address(addr u64) ?(u64, &Symbol) { - mut prev_sym := &Symbol(unsafe { nil }) - - symbol_table := unsafe { &Symbol(C.get_symbol_table()) } - - for i := u64(0); true; i++ { - if unsafe { symbol_table[i].address } == 0xffffffffffffffff { - return none - } - - if unsafe { symbol_table[i].address } >= addr { - offset := addr - prev_sym.address - return offset, prev_sym - } - - prev_sym = unsafe { &symbol_table[i] } - } - - return none -} - -pub fn address_print(addr u64) ? { - off, sym := address(addr) or { return none } - C.printf_panic(c' [0x%llx] <%s+0x%llx>\n', addr, sym.name, off) -} - -pub fn stacktrace(_base_ptr u64) { - mut base_ptr := _base_ptr - - if base_ptr == 0 { - asm volatile amd64 { - mov base_ptr, rbp - ; =g (base_ptr) - ; ; memory - } - } - - if base_ptr == 0 { - return - } - - for { - unsafe { - old_bp := (&u64(base_ptr))[0] - ret_addr := (&u64(base_ptr))[1] - if ret_addr == 0 || old_bp == 0 { - break - } - address_print(ret_addr) or { break } - base_ptr = old_bp - } - } -} diff --git a/kernel/modules/x86/cpu/local/local.v b/kernel/modules/x86/cpu/local/local.v index 6b1b5f6e5..41f92381f 100644 --- a/kernel/modules/x86/cpu/local/local.v +++ b/kernel/modules/x86/cpu/local/local.v @@ -5,7 +5,6 @@ module local import x86.cpu -import trace @[packed] pub struct TSS { @@ -76,9 +75,7 @@ __global ( pub fn current() &Local { ints := cpu.interrupt_state() if ints != false { - print('Attempted to get current CPU struct without disabling ints\n') - trace.stacktrace(0) - panic('') + panic('Attempted to get current CPU struct without disabling ints') } mut cpu_number := u64(0)