* test via proc.c in userinit (once everything is initialized)
gen/vectors.S
# C Files
+ src/backtrace.c
src/bio.c
src/console.c
src/exec.c
--- /dev/null
+#pragma once
+
+#ifndef __XV6__BACKTRACE__
+#define __XV6__BACKTRACE__
+void backtrace(void);
+#endif
--- /dev/null
+#include "backtrace.h"
+#include "stdio.h"
+#include "asm/x86.h"
+
+// get next stack pointer - just does some math
+#define get_ra(cur_sp) (*((int *) (cur_sp) - 1))
+
+#define MAGIC_RETURN_ADDR 0xF00
+
+
+void backtrace() {
+ int ebp;
+ read_ebp(ebp);
+ cprintf("Backtrace: %d\n", sizeof(int));
+ while (ebp != MAGIC_RETURN_ADDR) {
+ cprintf(" <0x%x> func1+offs1\n", get_ra(ebp));
+ ebp = *((int *) ebp);
+ }
+}
#include "string.h"
#include "stdio.h"
+// FIXME amenon301
+#include "backtrace.h"
+
struct {
struct spinlock lock;
struct proc proc[NPROC];
{
struct proc *p;
extern char _binary_initcode_start[], _binary_initcode_size[];
+ // FIXME amenon301
+ backtrace();
p = allocproc();