posix main add SIGSEGV handler

This commit is contained in:
Daniel Agar
2018-05-17 20:08:03 -04:00
committed by Lorenz Meier
parent 5234ba49ad
commit 3e843ba2d2
2 changed files with 27 additions and 7 deletions
Vendored
+6
View File
@@ -300,6 +300,12 @@ pipeline {
}
sh 'make distclean'
}
post {
failure {
sh('find . -name core')
sh('gdb --batch --quiet -ex "thread apply all bt full" -ex "quit" build/posix_sitl_default/px4 core')
}
}
}
stage('check stack') {
+21 -7
View File
@@ -83,6 +83,7 @@ extern "C" {
cout.flush();
_ExitFlag = true;
}
void _SigFpeHandler(int sig_num);
void _SigFpeHandler(int sig_num)
{
@@ -91,6 +92,15 @@ extern "C" {
PX4_BACKTRACE();
cout.flush();
}
void _SigSegvHandler(int sig_num);
void _SigSegvHandler(int sig_num)
{
cout.flush();
cout << endl << "segmentation fault" << endl;
PX4_BACKTRACE();
cout.flush();
}
}
static inline bool fileExists(const string &name)
@@ -299,20 +309,24 @@ int main(int argc, char **argv)
tcgetattr(0, &orig_term);
atexit(restore_term);
struct sigaction sig_int;
memset(&sig_int, 0, sizeof(struct sigaction));
// SIGINT
struct sigaction sig_int {};
sig_int.sa_handler = _SigIntHandler;
sig_int.sa_flags = 0;// not SA_RESTART!;
sigaction(SIGINT, &sig_int, nullptr);
struct sigaction sig_fpe;
memset(&sig_fpe, 0, sizeof(struct sigaction));
// SIGFPE
struct sigaction sig_fpe {};
sig_fpe.sa_handler = _SigFpeHandler;
sig_fpe.sa_flags = 0;// not SA_RESTART!;
sigaction(SIGINT, &sig_int, nullptr);
//sigaction(SIGTERM, &sig_int, NULL);
sigaction(SIGFPE, &sig_fpe, nullptr);
// SIGSEGV
struct sigaction sig_segv {};
sig_segv.sa_handler = _SigSegvHandler;
sig_segv.sa_flags = SA_RESTART | SA_SIGINFO;
sigaction(SIGSEGV, &sig_segv, nullptr);
set_cpu_scaling();
int index = 1;