Add support for better backtraces
At the cost of performance.
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/Kconfig b/Kconfig
index 215e6db..0813fed 100644
--- a/Kconfig
+++ b/Kconfig
@@ -252,6 +252,14 @@
implementation. Say y. If you have networking bugs, try turning this
off, and if that helps, tell someone.
+config BETTER_BACKTRACE
+ bool "Better backtraces, less optimizations"
+ default n
+ help
+ The kernel uses the frame pointer and call stacks for backtraces.
+ Tail-call optimizations remove some of this information. Say 'Y' here
+ to have better backtraces, at the expense of performance.
+
endmenu
menu "Misc/Old Options"
diff --git a/Makefile b/Makefile
index 5a95b57..12fe6c3 100644
--- a/Makefile
+++ b/Makefile
@@ -369,6 +369,9 @@
else
CFLAGS_KERNEL += -m32 -gstabs
endif
+ifeq ($(CONFIG_BETTER_BACKTRACE),y)
+CFLAGS_KERNEL += -fno-optimize-sibling-calls
+endif
# TODO: do we need this, or can we rely on the compiler's defines?
CFLAGS_KERNEL += -D$(ARCH)
diff --git a/Makelocal.template b/Makelocal.template
index 54816b0..23ef9c6 100644
--- a/Makelocal.template
+++ b/Makelocal.template
@@ -2,7 +2,10 @@
#CFLAGS_USER += -DCONFIG_APPSERVER
#CFLAGS_USER += -DCONFIG_SYSCALL_TRAP
#CFLAGS_USER += -g
+# Turn this on for better backtraces, but worse performance
+#CFLAGS_USER += -fno-optimize-sibling-calls
#CFLAGS_TESTS += -static
+#CFLAGS_TESTS += -fno-optimize-sibling-calls
export CFLAGS_USER CFLAGS_TESTS
# brho's custom targets. Customize to your system.