Understanding What Causes SEGV in an Application |
|
If a user-space application terminates with SEGV, this means, as it is always the case in Linux, that the application did something that triggered an exception to the Cortex-M processor core. The most likely causes are:
- You built your application for a processor architecture other than Cortex-M, which causes an "Unsupported instruction" exception.
- Your application makes an attempt to access an address outside of the Cortex-M address space.
- Your application makes an attempt to access unaligned data.
To understand what is causing an exception, do the following:
- Enable CONFIG_DEBUG_USER in the kernel configuration. From your project directory, bring up the kernel configuration interface by running make kmenuconfig. Go to Kernel hacking and enable Verbose user fault messages.
- In U-boot, add user_debug=8 to bootargs.
- Having done the above, rebuild your Linux project, bring it up on the target and re-run your application. When the application fails with SEGV, there should be some informational messages on the system console indicating the cause of the fault.
|