README 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. KSelfTest arm64/signal/
  2. =======================
  3. Signals Tests
  4. +++++++++++++
  5. - Tests are built around a common main compilation unit: such shared main
  6. enforces a standard sequence of operations needed to perform a single
  7. signal-test (setup/trigger/run/result/cleanup)
  8. - The above mentioned ops are configurable on a test-by-test basis: each test
  9. is described (and configured) using the descriptor signals.h::struct tdescr
  10. - Each signal testcase is compiled into its own executable: a separate
  11. executable is used for each test since many tests complete successfully
  12. by receiving some kind of fatal signal from the Kernel, so it's safer
  13. to run each test unit in its own standalone process, so as to start each
  14. test from a clean slate.
  15. - New tests can be simply defined in testcases/ dir providing a proper struct
  16. tdescr overriding all the defaults we wish to change (as of now providing a
  17. custom run method is mandatory though)
  18. - Signals' test-cases hereafter defined belong currently to two
  19. principal families:
  20. - 'mangle_' tests: a real signal (SIGUSR1) is raised and used as a trigger
  21. and then the test case code modifies the signal frame from inside the
  22. signal handler itself.
  23. - 'fake_sigreturn_' tests: a brand new custom artificial sigframe structure
  24. is placed on the stack and a sigreturn syscall is called to simulate a
  25. real signal return. This kind of tests does not use a trigger usually and
  26. they are just fired using some simple included assembly trampoline code.
  27. - Most of these tests are successfully passing if the process gets killed by
  28. some fatal signal: usually SIGSEGV or SIGBUS. Since while writing this
  29. kind of tests it is extremely easy in fact to end-up injecting other
  30. unrelated SEGV bugs in the testcases, it becomes extremely tricky to
  31. be really sure that the tests are really addressing what they are meant
  32. to address and they are not instead falling apart due to unplanned bugs
  33. in the test code.
  34. In order to alleviate the misery of the life of such test-developer, a few
  35. helpers are provided:
  36. - a couple of ASSERT_BAD/GOOD_CONTEXT() macros to easily parse a ucontext_t
  37. and verify if it is indeed GOOD or BAD (depending on what we were
  38. expecting), using the same logic/perspective as in the arm64 Kernel signals
  39. routines.
  40. - a sanity mechanism to be used in 'fake_sigreturn_'-alike tests: enabled by
  41. default it takes care to verify that the test-execution had at least
  42. successfully progressed up to the stage of triggering the fake sigreturn
  43. call.
  44. In both cases test results are expected in terms of:
  45. - some fatal signal sent by the Kernel to the test process
  46. or
  47. - analyzing some final regs state