Files
mckernel/test/issues/771+1179+1143
Tomoki Shirasawa ed1edb152b ptrace supports threads
Fujitsu: POSTK_DEBUG_TEMP_FIX_53, POSTK_DEBUG_ARCH_DEP_44
Refs: #771, #1179, #1143
Change-Id: Ie17ece6864f0eeb0c0e550f4e369abb77980a0d0
2018-10-01 03:57:16 +00:00
..
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00
2018-10-01 03:57:16 +00:00

【Issue#771 Issue#1179 Issue#1143 動作確認】
□ テスト内容
各 Issue は以下の理由により、一括して対応した。
・ Issue#771 は ptrace のスレッドサポートである。
・ Issue#1179 は PTRACE_ATTACH の不具合対応であるが、スレッドの PTRACE_ATTACH
   対応が Issue#771 に含まれるため、一括して対応することにした。
・ Issue#1143 は wait4 の __WALL フラグサポートであるが、スレッドの wait4 対応
   (__WCLONEフラグサポート) が Issue#771 に含まれるため、一括して対応すること
   にした。

テスト内容は以下の通りである。

1. gdb を用いてスレッドを使用するプログラムのデバッグが行えることを確認する。
C771T001 mcexec gdb C771T001 を実行すると、McKernelでgdbの実行を開始し、
         (gdb) のプロンプトが表示されること
C771T002 b thr を実行し、スレッドにブレークポイントを設定できること
C771T003 r コマンド実行後、スレッドに設定したブレークポイントで停止できること
C771T004 info threads コマンドで、スレッド一覧が表示できること
C771T005 bt コマンドでスレッドのバックトレースが表示できること
C771T006 n コマンドでスレッドのステップ実行ができること
C771T007 thread 1 コマンドでメインスレッドに切り替えできること
C771T008 bt コマンドでメインスレッドのバックトレースが表示できること
C771T009 thread 2 コマンドで再びスレッドに切り替えできること
C771T010 c コマンドでスレッドとメインスレッドの実行が再開されること
C771T011 q コマンドで gdb を正しく終了できること
C771T012 McKernel にスレッドとプロセスの残留が無いこと

2. gdb のテストケースを実行し、gdb が使用する ptrace の機能が動作することを
   確認する。thread を使用するテストを中心に、以下のテストケースを選定した。
C771T013 a2-run が PASS すること
C771T014 foll-fork が PASS すること
C771T015 fork-detach が PASS すること
C771T016 atomic-seq-threaded が PASS すること
C771T017 bp_in_thread が PASS すること
C771T018 bt-clone-stop が PASS すること
C771T019 corethreads が PASS すること
C771T020 dlopen-libpthread が PASS すること
C771T021 fork-child-threads が PASS すること
C771T022 killed が PASS すること
C771T023 pthread_cond_wait が PASS すること
C771T024 switch-threads が PASS すること
C771T025 thread-specific が PASS すること
C771T026 thread_check が PASS すること
C771T027 thread_events が PASS すること
C771T028 threaded-exec が PASS すること
C771T029 threxit-hop-specific が PASS すること
C771T030 tls-nodebug が PASS すること
C771T031 tls-sepdebug が PASS すること
C771T032 tls-var が PASS すること

3. ptrace のスレッドサポートの基本機能を確認する。
C771T033 スレッドに PTRACE_ATTACH できること
C771T034 PTRACE_SYSCALL により、スレッドのシステムコールを補足できること
C771T035 PTRACE_DETACH により、スレッドのトレースを中止できること

4. Issue#1179 の指摘プログラムが正常動作することを確認する。
CT771T036 test_mck -s ptrace -n 19 が PASS すること

5. wait4 で __WALL フラグ、__WCLONE フラグが正しく機能することを確認する。
CT771T037 wait4 のフラグに __WALL, __WCLONE 共に指定しないとき、pid に
          子プロセスを指定してエラーにならないこと
CT771T038 wait4 のフラグに __WALL, __WCLONE 共に指定しないとき、pid に
          スレッドをを指定してエラー(ECHILD)になること
CT771T039 wait4 のフラグに __WCLONE を指定し、pid に子プロセスを指定して
          エラー(ECHILD)になること
CT771T040 wait4 のフラグに __WCLONE を指定し、pid にスレッドをを指定して
          エラーにならないこと
CT771T041 wait4 のフラグに __WALL を指定し、pid に子プロセスを指定して
          エラーにならないこと
CT771T042 wait4 のフラグに __WALL を指定し、pid にスレッドをを指定して
          エラーにならないこと

6. LTP を用いて変更が既存処理に影響しないことを確認する。
   プロセス関連のシステムコール(clone, exit, fork, kill, ptrace, waitなど)
   を中心に以下のテストプログラムを選定した。
CT771T043 clone01 が PASS すること
CT771T044 clone03 が PASS すること
CT771T045 clone04 が PASS すること
CT771T046 clone06 が PASS すること
CT771T047 clone07 が PASS すること
CT771T048 exit01 が PASS すること
CT771T049 exit02 が PASS すること
CT771T050 exit_group01 が PASS すること
CT771T051 fork01 が PASS すること
CT771T052 fork02 が PASS すること
CT771T053 fork03 が PASS すること
CT771T054 fork04 が PASS すること
CT771T055 fork07 が PASS すること
CT771T056 fork08 が PASS すること
CT771T057 fork09 が PASS すること
CT771T058 fork10 が PASS すること
CT771T059 fork11 が PASS すること
CT771T060 kill01 が PASS すること
CT771T061 kill02 が PASS すること
CT771T062 kill03 が PASS すること
CT771T063 kill04 が PASS すること
CT771T064 kill05 が PASS すること
CT771T065 kill06 が PASS すること
CT771T066 kill07 が PASS すること
CT771T067 kill08 が PASS すること
CT771T068 kill09 が PASS すること
CT771T069 kill11 が PASS すること
CT771T070 kill12 が PASS すること
CT771T071 ptrace01 が PASS すること
CT771T072 ptrace02 が PASS すること
CT771T073 ptrace03 が PASS すること
CT771T074 ptrace04 が PASS すること
CT771T075 ptrace05 が PASS すること
CT771T076 wait02 が PASS すること
CT771T077 wait401 が PASS すること
CT771T078 wait402 が PASS すること
CT771T079 waitid01 が PASS すること
CT771T080 waitid02 が PASS すること
CT771T081 waitpid01 が PASS すること
CT771T082 waitpid02 が PASS すること
CT771T083 waitpid03 が PASS すること
CT771T084 waitpid04 が PASS すること
CT771T085 waitpid05 が PASS すること
CT771T086 waitpid06 が PASS すること
CT771T087 waitpid07 が PASS すること
CT771T088 waitpid08 が PASS すること
CT771T089 waitpid09 が PASS すること
CT771T090 waitpid10 が PASS すること
CT771T091 waitpid11 が PASS すること
CT771T092 waitpid12 が PASS すること
CT771T093 waitpid13 が PASS すること

□ 実行手順
$ make test

McKernelのインストール先や、OSTEST, LTPの配置場所は、 $HOME/.mck_test_config
を参照する。.mck_test_config は、McKernel をビルドした際に生成される
mck_test_config.sample ファイルを $HOME にコピーし、適宜編集すること。

また、C771.sh の以下の指定を適宜変更すること。
GDBBUILDDIR=  GDB 構築したパス ($HOME にて gdb を src.rpm から構築している
              場合は変更不要)

gdb のテストケースでは、dejagnu パッケージに含まれる runtest コマンドを使用
する。システムにインストールされていない場合は、予めインストールすること。

□ 実行結果
C771.txt 参照。
すべての項目をPASSしていることを確認。