lib/thread: Add asserts around stack size and alignment

`cpu_info()` requires that stacks be STACK_SIZE aligned and a power of 2.

BUG=b:179699789
TEST=Boot guybrush to the OS

Signed-off-by: Raul E Rangel <rrangel@chromium.org>
Change-Id: I615623f05bfbe2861dcefe5cae66899aec306ba2
Reviewed-on: https://review.coreboot.org/c/coreboot/+/56530
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
diff --git a/src/lib/thread.c b/src/lib/thread.c
index 3be2e92..262cfa5 100644
--- a/src/lib/thread.c
+++ b/src/lib/thread.c
@@ -11,6 +11,10 @@
 #include <thread.h>
 #include <timer.h>
 
+/* Can't use the IS_POWER_OF_2 in _Static_assert */
+_Static_assert((CONFIG_STACK_SIZE & (CONFIG_STACK_SIZE - 1)) == 0,
+	       "`cpu_info()` requires the stack size to be a power of 2");
+
 static bool initialized;
 
 static void idle_thread_init(void);
@@ -257,6 +261,9 @@
 
 	thread_stacks = arch_get_thread_stackbase();
 
+	/* `cpu_info()` requires the stacks to be STACK_SIZE aligned */
+	assert(IS_ALIGNED((uintptr_t)thread_stacks, CONFIG_STACK_SIZE));
+
 	/* Initialize the BSP thread first. The cpu_info structure is assumed
 	 * to be just under the top of the stack. */
 	t = &all_threads[0];