1 | # -*- coding: utf-8 -*-
|
---|
2 | #
|
---|
3 | # パス3の生成スクリプトのコア依存部(ARM用)
|
---|
4 | #
|
---|
5 | # $Id$
|
---|
6 | #
|
---|
7 |
|
---|
8 | #
|
---|
9 | # ターゲット非依存部のインクルード
|
---|
10 | #
|
---|
11 | IncludeTrb("kernel/kernel_check.trb")
|
---|
12 |
|
---|
13 | #
|
---|
14 | # 割込みハンドラテーブルに関するチェック
|
---|
15 | #
|
---|
16 | # DEF_INHで登録した割込みハンドラのみチェックする.逆に言うと,コンフィ
|
---|
17 | # ギュレータで生成した割込みハンドラや,default_int_handlerのチェックは
|
---|
18 | # 行わない.
|
---|
19 | #
|
---|
20 | inhTable = SYMBOL("_kernel_inh_table")
|
---|
21 | offset = SYMBOL("__etext") - SYMBOL("__data_start__")
|
---|
22 | $cfgData[:DEF_INH].each do |_, params|
|
---|
23 | inthdr = PEEK(inhTable + offset + params[:inhno] * $sizeof_FP, $sizeof_FP)
|
---|
24 |
|
---|
25 | # 割込みハンドラの先頭番地のチェック[NGKI3056]
|
---|
26 | if (inthdr & ($CHECK_FUNC_ALIGN - 1)) != 0
|
---|
27 | error_wrong_id("E_PAR", params, :inthdr, :inhno, "not aligned")
|
---|
28 | end
|
---|
29 | if $CHECK_FUNC_NONNULL && inthdr == 0
|
---|
30 | error_wrong_id("E_PAR", params, :inthdr, :inhno, "null")
|
---|
31 | end
|
---|
32 | end
|
---|
33 |
|
---|
34 | #
|
---|
35 | # CPU例外ハンドラテーブルに関するチェック
|
---|
36 | #
|
---|
37 | # DEF_EXCで登録したCPU例外ハンドラのみチェックする.逆に言うと,
|
---|
38 | # default_exc_handlerのチェックは行わない.
|
---|
39 | #
|
---|
40 | excTable = SYMBOL("_kernel_exc_table")
|
---|
41 | $cfgData[:DEF_EXC].each do |_, params|
|
---|
42 | exchdr = PEEK(excTable + params[:excno] * $sizeof_FP, $sizeof_FP)
|
---|
43 |
|
---|
44 | # CPU例外ハンドラの先頭番地のチェック[NGKI3135]
|
---|
45 | if (exchdr & ($CHECK_FUNC_ALIGN - 1)) != 0
|
---|
46 | error_wrong_id("E_PAR", params, :exchdr, :excno, "not aligned")
|
---|
47 | end
|
---|
48 | if $CHECK_FUNC_NONNULL && exchdr == 0
|
---|
49 | error_wrong_id("E_PAR", params, :exchdr, :excno, "null")
|
---|
50 | end
|
---|
51 | end
|
---|