From 38ccd6fa1a6d74bf92acec53a1b8255564aae460 Mon Sep 17 00:00:00 2001 From: Till Straumann Date: Thu, 28 Jul 2011 01:13:20 +0000 Subject: 2011-07-27 Till Straumann * shared/start/start.S, shared/start/preload.S: Make sure stack is 16-byte aligned and the TOS is tagged with a NULL pointer (used as a terminator when printing stack traces). --- c/src/lib/libbsp/powerpc/ChangeLog | 7 +++++++ c/src/lib/libbsp/powerpc/shared/start/preload.S | 5 ++++- c/src/lib/libbsp/powerpc/shared/start/start.S | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/c/src/lib/libbsp/powerpc/ChangeLog b/c/src/lib/libbsp/powerpc/ChangeLog index 732c772b26..82944ccbec 100644 --- a/c/src/lib/libbsp/powerpc/ChangeLog +++ b/c/src/lib/libbsp/powerpc/ChangeLog @@ -1,3 +1,10 @@ +2011-07-27 Till Straumann + + * shared/start/start.S, shared/start/preload.S: + Make sure stack is 16-byte aligned and the TOS + is tagged with a NULL pointer (used as a terminator + when printing stack traces). + 2011-07-26 Till Straumann * shared/irq/openpic_i8259_irq.c: silenced compiler warnings. diff --git a/c/src/lib/libbsp/powerpc/shared/start/preload.S b/c/src/lib/libbsp/powerpc/shared/start/preload.S index eda0ac0618..b0a6bc9edd 100644 --- a/c/src/lib/libbsp/powerpc/shared/start/preload.S +++ b/c/src/lib/libbsp/powerpc/shared/start/preload.S @@ -84,7 +84,7 @@ * if DESTINATION_ADDR is not 0 */ #define KERNELBASE 0x0 -#define INITIAL_STACK 0x78 /* 8-byte aligned */ +#define INITIAL_STACK 0x70 /* 16-byte aligned */ #define CACHE_LINE_SIZE PPC_CACHE_ALIGNMENT /* autodetect doesn't work, see below */ #define ASSUME_RTEMS_INSTALLS_VECTORS /* assume we need not load vectors */ #define DONT_USE_R5_ENTRY /* always dynamically determine the address we're running from */ @@ -211,6 +211,9 @@ return_here: /* setup initial stack for rtems early boot */ li r1,INITIAL_STACK + /* tag TOS with a NULL pointer (for stack trace) */ + li r0, 0 + stw r0, 0(r1) /* disable the MMU and fire up rtems */ mfmsr r0 ori r0,r0,MSR_IR|MSR_DR|MSR_IP|MSR_ME diff --git a/c/src/lib/libbsp/powerpc/shared/start/start.S b/c/src/lib/libbsp/powerpc/shared/start/start.S index a2f233c138..5f0f4e5f9a 100644 --- a/c/src/lib/libbsp/powerpc/shared/start/start.S +++ b/c/src/lib/libbsp/powerpc/shared/start/start.S @@ -129,6 +129,12 @@ enter_C_code: */ li r0, (CPU_STACK_ALIGNMENT-1) andc r1, r9, r0 + /* + * Tag TOS with a NULL (terminator for stack dump) + */ + li r0, 0 + stw r0, 0(r1) + /* * We are now in a environment that is totally independent from * bootloader setup. -- cgit v1.2.3