/* README COPYRIGHT FUJITSU LIMITED 2019 */ SVEレジスタ拡張テストセットREADME (1) テストの実行方法 以下の手順でテストを実行する 1. $HOME/.mck_test_configを用意する 当該ファイルは、McKernelをビルドした際に生成されるmck_test_config.sample ファイルを$HOMEにコピーし、適宜編集する 2. 必要に応じて、run.shのSVEGDB環境変数に利用するGDBのパスを記載する GDBの置き換えが必要な理由は「(4) 備考」を参照 3. make testを実行する (2) テスト項目詳細 TEST001 プロセス起動時のSVEレジスタを読み出す TEST002 forkによる子プロセスへの引き継ぎ確認 TEST003 pthread_createによる子スレッドへの引き継ぎ確認 TEST004 execveを挟んだ場合のレジスタクリア確認 TEST005 シグナルハンドラ前後のレジスタ維持確認 TEST006 他コアへのマイグレート前後のレジスタ維持確認 TEST007 子プロセスで書き込んだ内容が親プロセスからptraceでGETREGSET出来るか TEST008 親プロセスからptraceでSETREGSETした内容が子プロセスに反映されるか TEST009 GETREGSETへのパラメタチェック(子項目7つ) TEST010 SETREGSETへのパラメタチェック(子項目9つ) TEST011 sigaltstackを使用した場合のシグナルハンドラ前後のレジスタ維持確認 TEST012 プロセスがSVE使用時、NT_PRFPREG(既存の浮動小数点レジスタ)の GETREGSETを実行して値が取得出来るか TEST013 プロセスがSVE使用時、NT_PRFPREG(既存の浮動小数点レジスタ)の SETREGSETを実行して値が設定出来るか TEST014 テスト番号8の子プロセス停止をbrk命令に変更したもの TEST015 コンテキストスイッチおよび外部シグナルによる停止/再開時のレジスタ維持確認 TEST016 prctl(PR_SVE_GET_VL)でVLを取得し、期待通りか確認する TEST017 prctl(PR_SVE_SET_VL)でVLを設定し、期待通りか確認する TEST018 廃止(過去に存在したフラグのテスト) TEST019 prctl(PR_SVE_SET_VL)へのパラメタチェック TEST020 prctlでVLと同時に継承フラグを付与時、fork()によってVLが子プロセスに継承されることを確認する TEST021 prctlでVLと同時に継承フラグを付与時、pthread_create()によってVLが子スレッドに継承されることを確認する TEST022 prctlでVLと同時に継承フラグを付与時、execve()によってVLが実行先のa.outに継承されることを確認する TEST023 シグナルハンドラ前後のVL設定維持確認 TEST024 他コアへのマイグレート前後のVL設定維持確認 TEST025 ptrace(GETREGSET + NT_ARM_SVE)を用いてVLを取得し、期待通りか確認する TEST026 ptrace(SETREGSET + NT_ARM_SVE)を用いてVLを設定し、期待通りか確認する TEST027 prctlでVLと同時に継承フラグを付与しない場合でも、fork()によってVLが子プロセスに継承されることを確認する TEST028 prctlでVLと同時に継承フラグを付与しない場合でも、pthread_create()によってVLが子スレッドに継承されることを確認する TEST029 prctlでVLと同時に継承フラグを付与しない場合、execve()によってVLが実行先のa.outに継承されず、 デフォルトVLが使われることを確認する TEST030 SVE使用時、ptrace(SETREGSET + NT_ARM_SVE + SVE_PT_REGS_FPSIMD)で FPSIMD(以前のバージョンのレジスタを表現する)構造体を用いてレジスタを設定し、期待通りか確認する TEST031 SVE使用時、ptrace(SETREGSET + NT_ARM_SVE + SVE_PT_REGS_FPSIMD)で SVEレジスタ構造体を用いてレジスタを設定し、期待通りか確認する TEST032 prctlでVLと同時にONEXECフラグを付与時、ただちには反映されず、 fork()を行ってもVLが子プロセスに継承されない事を確認する TEST033 prctlでVLと同時にONEXECフラグを付与時、ただちには反映されず、 pthread_create()を行ってもVLが子スレッドに継承されない事を確認する TEST034 prctlでVLと同時にONEXECフラグを付与時、ただちには反映されず、最初のexecve()を行ったときにVLが反映される事を確認する TEST035 SVE使用時、ptrace(SETREGSET + NT_ARM_SVE + SVE_PT_REGS_FPSIMD)で 既存のSVEレジスタ退避領域を上書きしたとき、下位128bitにのみ設定が反映されることを確認する TEST036 シグナルハンドラ内でVL変更及び変更後のSVEレジスタを使用した場合、SIGSEGVとなる事を確認する TEST037 prctlでINHERITフラグ、ONEXECフラグの順に設定したとき、下記の動作になることを確認する 現在のVL:INHERIT指定VL、継承するVL:ONEXEC指定VL、execve継承回数:初回のみ TEST038 prctlでONEXECフラグ、INHERITフラグの順に設定したとき、下記の動作になることを確認する 現在のVL:INHERIT指定VL、継承するVL:INHERIT指定VL、execve継承回数:設定変更まで有効 TEST039 prctlでONEXECフラグとINHERITフラグを同時に設定したとき、下記の動作になることを確認する 現在のVL:変更しない、継承するVL:指定VL、execve継承回数:設定変更まで有効 TEST040 SVEレジスタ使用時にSIGSEGVを発生させ、corefileを生成する 生成されたcorefileがGDBで解析が可能で、SVEレジスタの情報が閲覧出来る事を確認する TEST041 SVEレジスタ対応版のGDBをMcKernel上で動作させ、SVEレジスタの情報がinfo registerで読み出せる事を確認する (3) 実行結果ログ result.logファイル内に実行時のログを記載する。 実行に利用したIHK/McKernelは、IA版における下記の版数相当のものである。 IHK commit d6fcbee8cb91f9ec4b49f97c918e696ac0335aaf Author: Shiratori, Takehiro Date: Tue Oct 16 16:25:33 2018 +0900 McKernel commit 6f9fef2b13447c74c36d15cf5ebd186f8395ccca Author: Ken Sato Date: Tue Sep 25 10:05:41 2018 +0900 (4) 備考 TEST040について、RHEL8-betaに含まれるGDBパッケージではSVEのcorefileを解析することは出来ない。 これは、libbfd側にSVEのcorefile解析の制御が含まれていないことが原因となっている。 下記URLのパッチファイルを適用することで解析が可能となる。 TEST040はパッチを適用したlibbfdを利用してテストを行った結果をログに記載している。 https://sourceware.org/ml/binutils/2018-06/msg00314.html 以上。