linux-2.6.33/early_trap_init()(arm)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#t353b33b]
#backlinks
*説明 [#wf05c71b]
-パス: [[linux-2.6.33/arch/arm/kernel/traps.c]]
-FIXME: これは何?
--割り込みベクタの初期化を行う。
-基本的には、例外発生 -> 例外ベクタ -> スタブ関数 -> 例外...
--詳細は vector_stub マクロにて説明しています。
--[[linux-2.6.33/vector_stub()]]
-例外ベクタとスタブ関数、補助ルーチンについて。
割り込みベクタ、スタブ関数、補助ルーチンの配置
----------------------------------------
(*1) vectors = CONFIG_VECTORS_BASE
(*2) kuser_sz = __kuser_helper_start 〜 __kuser_helper_e...
vectors --> +--------+
| |
| | <-- __vectors_start 〜 __vectors...
| | br 命令や ldr pc, address な...
| | 1エントリの長さ = 1命令分(3...
vectors --> +--------+
+ 0x200 | |
| | <-- __stubs_start 〜 __stubs_end...
| | ベクタのジャンプ命令でこの領...
| | スタブ関数にジャンプする。
vectors --> +--------+
+ stubs の | |
サイズ | |
| 空 |
| |
| |
vectors --> +--------+
+ 0x1000 | |
- kuser_sz | |
| | <-- __kuser_helper_start 〜 __ku...
| |
vectors --> +--------+
+ 0x1000
--[[linux-2.6.33/CONFIG_VECTORS_BASE]]
--[[linux-2.6.33/vector_stub()]]
**引数 [#uf337ba7]
-なし
**返り値 [#qf61c5c2]
-なし
**参考 [#cdd45586]
*実装 [#i41ec67f]
void __init early_trap_init(void)
{
unsigned long vectors = CONFIG_VECTORS_BASE;
-
--[[linux-2.6.33/]]
extern char __stubs_start[], __stubs_end[];
extern char __vectors_start[], __vectors_end[];
extern char __kuser_helper_start[], __kuser_helper_end[];
int kuser_sz = __kuser_helper_end - __kuser_helper_start;
-
--[[linux-2.6.33/__stubs_start(global)]]
-
--[[linux-2.6.33/__stubs_end(global)]]
-
--[[linux-2.6.33/__vectors_start(global)]]
-
--[[linux-2.6.33/__vectors_end(global)]]
-
--[[linux-2.6.33/__kuser_helper_start(global)]]
-
--[[linux-2.6.33/__kuser_helper_end(global)]]
/*
* Copy the vectors, stubs and kuser helpers (in entry-...
* into the vector page, mapped at 0xffff0000, and ensu...
* are visible to the instruction stream.
*/
memcpy((void *)vectors, __vectors_start, __vectors_end ...
-
--[[linux-2.6.33/memcpy()]]
memcpy((void *)vectors + 0x200, __stubs_start, __stubs_...
memcpy((void *)vectors + 0x1000 - kuser_sz, __kuser_hel...
/*
* Copy signal return handlers into the vector page, and
* set sigreturn to be a pointer to these.
*/
memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes,
sizeof(sigreturn_codes));
-
--[[linux-2.6.33/KERN_SIGRETURN_CODE]]
-
--[[linux-2.6.33/sigreturn_codes()]]
memcpy((void *)KERN_RESTART_CODE, syscall_restart_code,
sizeof(syscall_restart_code));
-
--[[linux-2.6.33/KERN_RESTART_CODE]]
-
--[[linux-2.6.33/syscall_restart_code()]]
flush_icache_range(vectors, vectors + PAGE_SIZE);
-
--[[linux-2.6.33/flush_icache_range()]]
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
-
--[[linux-2.6.33/modify_domain()]]
-
--[[linux-2.6.33/DOMAIN_USER]]
-
--[[linux-2.6.33/DOMAIN_CLIENT]]
}
*コメント [#qe67de77]
終了行:
*参照元 [#t353b33b]
#backlinks
*説明 [#wf05c71b]
-パス: [[linux-2.6.33/arch/arm/kernel/traps.c]]
-FIXME: これは何?
--割り込みベクタの初期化を行う。
-基本的には、例外発生 -> 例外ベクタ -> スタブ関数 -> 例外...
--詳細は vector_stub マクロにて説明しています。
--[[linux-2.6.33/vector_stub()]]
-例外ベクタとスタブ関数、補助ルーチンについて。
割り込みベクタ、スタブ関数、補助ルーチンの配置
----------------------------------------
(*1) vectors = CONFIG_VECTORS_BASE
(*2) kuser_sz = __kuser_helper_start 〜 __kuser_helper_e...
vectors --> +--------+
| |
| | <-- __vectors_start 〜 __vectors...
| | br 命令や ldr pc, address な...
| | 1エントリの長さ = 1命令分(3...
vectors --> +--------+
+ 0x200 | |
| | <-- __stubs_start 〜 __stubs_end...
| | ベクタのジャンプ命令でこの領...
| | スタブ関数にジャンプする。
vectors --> +--------+
+ stubs の | |
サイズ | |
| 空 |
| |
| |
vectors --> +--------+
+ 0x1000 | |
- kuser_sz | |
| | <-- __kuser_helper_start 〜 __ku...
| |
vectors --> +--------+
+ 0x1000
--[[linux-2.6.33/CONFIG_VECTORS_BASE]]
--[[linux-2.6.33/vector_stub()]]
**引数 [#uf337ba7]
-なし
**返り値 [#qf61c5c2]
-なし
**参考 [#cdd45586]
*実装 [#i41ec67f]
void __init early_trap_init(void)
{
unsigned long vectors = CONFIG_VECTORS_BASE;
-
--[[linux-2.6.33/]]
extern char __stubs_start[], __stubs_end[];
extern char __vectors_start[], __vectors_end[];
extern char __kuser_helper_start[], __kuser_helper_end[];
int kuser_sz = __kuser_helper_end - __kuser_helper_start;
-
--[[linux-2.6.33/__stubs_start(global)]]
-
--[[linux-2.6.33/__stubs_end(global)]]
-
--[[linux-2.6.33/__vectors_start(global)]]
-
--[[linux-2.6.33/__vectors_end(global)]]
-
--[[linux-2.6.33/__kuser_helper_start(global)]]
-
--[[linux-2.6.33/__kuser_helper_end(global)]]
/*
* Copy the vectors, stubs and kuser helpers (in entry-...
* into the vector page, mapped at 0xffff0000, and ensu...
* are visible to the instruction stream.
*/
memcpy((void *)vectors, __vectors_start, __vectors_end ...
-
--[[linux-2.6.33/memcpy()]]
memcpy((void *)vectors + 0x200, __stubs_start, __stubs_...
memcpy((void *)vectors + 0x1000 - kuser_sz, __kuser_hel...
/*
* Copy signal return handlers into the vector page, and
* set sigreturn to be a pointer to these.
*/
memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes,
sizeof(sigreturn_codes));
-
--[[linux-2.6.33/KERN_SIGRETURN_CODE]]
-
--[[linux-2.6.33/sigreturn_codes()]]
memcpy((void *)KERN_RESTART_CODE, syscall_restart_code,
sizeof(syscall_restart_code));
-
--[[linux-2.6.33/KERN_RESTART_CODE]]
-
--[[linux-2.6.33/syscall_restart_code()]]
flush_icache_range(vectors, vectors + PAGE_SIZE);
-
--[[linux-2.6.33/flush_icache_range()]]
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
-
--[[linux-2.6.33/modify_domain()]]
-
--[[linux-2.6.33/DOMAIN_USER]]
-
--[[linux-2.6.33/DOMAIN_CLIENT]]
}
*コメント [#qe67de77]
ページ名: