Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libgloss/ChangeLog4
-rw-r--r--libgloss/or1k/boards/optimsoc.S29
2 files changed, 33 insertions, 0 deletions
diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog
index c05f12d06..7605f3692 100644
--- a/libgloss/ChangeLog
+++ b/libgloss/ChangeLog
@@ -1,5 +1,9 @@
2015-05-26 Stefan Wallentowitz <stefan.wallentowitz@tum.de>
+ * or1k/boards/optimsoc.S: Heap for gzll kernel
+
+2015-05-26 Stefan Wallentowitz <stefan.wallentowitz@tum.de>
+
* or1k/sbrk.c: Allow for different heap start
2015-05-26 Stefan Wallentowitz <stefan.wallentowitz@tum.de>
diff --git a/libgloss/or1k/boards/optimsoc.S b/libgloss/or1k/boards/optimsoc.S
index a8493729d..eb782644d 100644
--- a/libgloss/or1k/boards/optimsoc.S
+++ b/libgloss/or1k/boards/optimsoc.S
@@ -22,7 +22,10 @@
#define OPTIMSOC_NA_REGS OPTIMSOC_NA_BASE + 0x00000
#define OPTIMSOC_NA_LMEM_SIZE OPTIMSOC_NA_REGS + 0x24
+#define OPTIMSOC_NA_GMEM_SIZE OPTIMSOC_NA_REGS + 0x1c
+#define OPTIMSOC_GZLL_STRING 0x677a6c6c
+#define OPTIMSOC_GZLL_IMAGE_LAYOUT 0x2000
/*
* Define symbols to be used during startup - file is linked at compile time
*
@@ -49,6 +52,8 @@ _or1k_board_exit:
.Lexitloop:
OR1K_DELAYED_NOP(l.j .Lexitloop)
+.extern _or1k_heap_start
+
.global _or1k_board_init_early
_or1k_board_init_early:
#ifndef __OR1K_MULTICORE__
@@ -62,6 +67,30 @@ _or1k_board_init_early:
l.movhi r2,hi(_or1k_board_mem_size)
l.ori r2,r2,lo(_or1k_board_mem_size)
l.sw 0(r2),r1
+ // Set stack beyond apps if single image in local memory
+ // Is this a kernel running?
+ l.movhi r3,hi(OPTIMSOC_GZLL_STRING)
+ l.ori r3,r3,lo(OPTIMSOC_GZLL_STRING)
+ l.movhi r4,hi(OPTIMSOC_GZLL_IMAGE_LAYOUT)
+ l.ori r4,r4,lo(OPTIMSOC_GZLL_IMAGE_LAYOUT)
+ l.lwz r5,0(r4)
+ l.sfeq r3,r5
+ // If not, we are done
+ OR1K_DELAYED_NOP(l.bnf ._or1k_board_init_early_done)
+ // Else: are we running with global memory (loading)?
+ l.movhi r6,hi(OPTIMSOC_NA_GMEM_SIZE)
+ l.ori r6,r6,lo(OPTIMSOC_NA_GMEM_SIZE)
+ l.lwz r6,0(r6)
+ l.sfeqi r6,0
+ // If yes, we are done
+ OR1K_DELAYED_NOP(l.bnf ._or1k_board_init_early_done)
+ // Else: Read end of apps
+ l.lwz r7,12(r4)
+ l.movhi r8,hi(_or1k_heap_start)
+ l.ori r8,r8,lo(_or1k_heap_start)
+ l.sw 0(r8),r7
+._or1k_board_init_early_done:
+ OR1K_DELAYED_NOP(l.jr r9)
.weak _or1k_board_init
_or1k_board_init: