aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.h.in3
-rwxr-xr-xconfigure15
-rw-r--r--configure.ac5
-rw-r--r--machine/mentry.S16
4 files changed, 38 insertions, 1 deletions
diff --git a/config.h.in b/config.h.in
index dbacd78..98763ac 100644
--- a/config.h.in
+++ b/config.h.in
@@ -56,3 +56,6 @@
/* Define if subproject MCPPBS_SPROJ_NORM is enabled */
#undef UTIL_ENABLED
+
+/* Define if BSS should be manually zeroed when booting */
+#undef ZERO_BSS
diff --git a/configure b/configure
index 587f1f6..9d2c146 100755
--- a/configure
+++ b/configure
@@ -675,6 +675,7 @@ with_arch
with_abi
enable_print_device_tree
with_mem_start
+enable_zero_bss
enable_optional_subprojects
enable_vm
enable_logo
@@ -1314,6 +1315,7 @@ Optional Features:
--enable-stow Enable stow-based install
--enable-print-device-tree
Print DTS when booting
+ --enable-zero-bss Manually zero out BSS when booting
--enable-optional-subprojects
Enable all optional subprojects
--disable-vm Disable virtual memory
@@ -4122,6 +4124,19 @@ else
fi
+# Check whether --enable-zero-bss was given.
+if test "${enable_zero_bss+set}" = set; then :
+ enableval=$enable_zero_bss;
+fi
+
+if test "x$enable_zero_bss" = "xyes"; then :
+
+
+$as_echo "#define ZERO_BSS /**/" >>confdefs.h
+
+
+fi
+
#-------------------------------------------------------------------------
# MCPPBS subproject list
#-------------------------------------------------------------------------
diff --git a/configure.ac b/configure.ac
index 1653f2b..81492de 100644
--- a/configure.ac
+++ b/configure.ac
@@ -107,6 +107,11 @@ AC_ARG_WITH([mem-start], AS_HELP_STRING([--with-mem-start], [Set physical memory
AC_SUBST([MEM_START], [0x80000000], [Physical memory start address])
])
+AC_ARG_ENABLE([zero-bss], AS_HELP_STRING([--enable-zero-bss], [Manually zero out BSS when booting]))
+AS_IF([test "x$enable_zero_bss" = "xyes"], [
+ AC_DEFINE([ZERO_BSS],,[Define if BSS should be manually zeroed when booting])
+])
+
#-------------------------------------------------------------------------
# MCPPBS subproject list
#-------------------------------------------------------------------------
diff --git a/machine/mentry.S b/machine/mentry.S
index 84bd3c1..9ec9916 100644
--- a/machine/mentry.S
+++ b/machine/mentry.S
@@ -267,9 +267,23 @@ do_reset:
slli a2, a3, RISCV_PGSHIFT
add sp, sp, a2
+ bnez a3, .LmultiHartInit
+
+#ifdef ZERO_BSS
+ # Zero out BSS; linker script provides alignment and padding
+ la t0, _fbss
+ la t1, _end
+ beq t0, t1, 2f
+1:STORE zero, 0(t0)
+ addi t0, t0, REGBYTES
+ bne t0, t1, 1b
+2:
+#endif
+
# Boot on the first hart
- beqz a3, init_first_hart
+ j init_first_hart
+.LmultiHartInit:
# set MSIE bit to receive IPI
li a2, MIP_MSIP
csrw mie, a2