4.54 __user_setup_stackheap()

__user_setup_stackheap() は、初期スタックおよびヒープの位置を設定し、返します。

この関数を定義した場合、プログラムの起動時に C ライブラリによって呼び出されます。
__user_setup_stackheap() が呼び出されると、sp はアプリケーションへのエントリ時と同じ値になります。有効な値が設定されてから C ライブラリ初期化コードが呼び出されると、この値が保持されます。sp が有効な値でない場合は、スタックの使用前および呼び出し元に戻る前に、__user_setup_stackheap() によってこの値を変更する必要があります。
__user_setup_stackheap() の戻り値は以下のとおりです。
  • r0 のヒープベース(プログラムでヒープを使用する場合)。
  • sp のスタックベース。
  • r2 のヒープリミット(プログラムでヒープが使用されていて 2 領域メモリが使用されている場合)。
この関数を再実装する場合には、以下のガイドラインに従う必要があります。
  • r0r3ip、および sp 以外のレジスタは更新しない。
  • ヒープベースが 8 バイトの倍数になるようにして、ヒープ内は常に 8 バイト境界の整列を守る。
sp を実行環境から引き継ぎ、ヒープを持たない __user_setup_stackheap() を作成するには、r0r2ゼロを設定して戻ります。
スタックのサイズに制限はありません。ただし、ヒープ領域がスタックにオーバーラップする場合は、malloc() がオーバーラップしているメモリの検出を試み、新しいメモリ割り当て要求を失敗させます。

__user_setup_stackheap() の再実装はアセンブラで行う必要があります。
関連する概念
1.66 スタックポインタの初期化とヒープの上下限
1.69 __user_initial_stackheap() の従来のサポート
関連する参考文書
4.27 __rt_heap_extend()
4.31 __rt_stackheap_init()
4.52 __user_heap_extend()
4.53 __user_heap_extent()
1.29 C ライブラリ関数の直接セミホスティング依存関数
4.61 古い関数 __user_initial_stackheap()
非機密扱いPDF file icon PDF 版ARM DUI0475KJ
Copyright © 2010-2014 ARM.All rights reserved.