You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.0 KiB

; rt_memory.s: template for writing a memory model implementation
;
; Copyright 1999,2007 ARM Limited. All rights reserved.
;
; RCS $Revision: 172039 $
; Checkin $Date: 2011-11-02 12:58:12 +0000 (Wed, 02 Nov 2011) $
; Revising $Author: statham $
; This module gives a framework for writing custom memory models
; in. It actually implements a very simple memory model, in which:
;
; - the stack grows down from 0x80000000
; - the heap is 128Kb and grows up from 0x60000000
; - no extra memory is available for the heap
IMPORT __rt_stackheap_storage
AREA |.text|, CODE, READONLY
; --------------------------------------------------
; Initialisation function. This routine isn't required to
; preserve any registers, although obviously it shouldn't
; lose LR because it won't know where to return to. On
; exit, SP should point to the top of the desired stack,
; and [a1,a2) should be the initial block to use for the
; heap.
;
; Returning a1==a2 is allowed.
EXPORT __rt_stackheap_init
__rt_stackheap_init
; Set up some example values.
MOV sp, #0x80000000
MOV a1, #0x60000000
ADD a2, a1, #0x20000
MOV pc, lr
; --------------------------------------------------
; The heap extend function. This is called using the
; ordinary ATPCS calling convention.
;
; On input: a1 is the minimum size of memory required
; (guaranteed to be a multiple of 4)
; a2 is a pointer to a word of memory, W, in which
; to store the address of the block
;
; On exit: a1 is size of returned block
; W contains base address of returned block
; Or: a1 is zero
; W has undefined contents
EXPORT __rt_heap_extend
__rt_heap_extend
; Refuse all requests for extra heap space.
MOV a1, #0
LDMFD sp!, {pc}
END