summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/include/sys/task.h6
-rw-r--r--src/lib/assert.C16
2 files changed, 14 insertions, 8 deletions
diff --git a/src/include/sys/task.h b/src/include/sys/task.h
index 0627784f1..b86b6f4ec 100644
--- a/src/include/sys/task.h
+++ b/src/include/sys/task.h
@@ -77,6 +77,12 @@ void task_end() NO_RETURN;
*/
void task_end2(void* retval) NO_RETURN;
+/** @define task_crash
+ * @brief End the calling task as if it crashed.
+ *
+ */
+#define task_crash() ((*(char*)NULL) = 'F')
+
/** @fn task_gettid
* @brief Get task ID of calling task.
*
diff --git a/src/lib/assert.C b/src/lib/assert.C
index 591630f14..7b8318ae3 100644
--- a/src/lib/assert.C
+++ b/src/lib/assert.C
@@ -38,9 +38,9 @@ extern "C" void __assert(AssertBehavior i_assertb, int i_line)
switch (i_assertb)
{
case ASSERT_TRACE_DONE: // Custom trace was provided.
- task_end();
+ task_crash();
break;
-
+
case ASSERT_TRACE_NOTDONE: // Do a normal trace.
if (NULL != TRACE::traceCallback)
{
@@ -51,23 +51,23 @@ extern "C" void __assert(AssertBehavior i_assertb, int i_line)
printk("Assertion failed @%p on line %d.\n",
linkRegister(), i_line);
}
- task_end();
+ task_crash();
break;
case ASSERT_CRITICAL: // Critical task, trace not available.
- printk("Assertion failed @%p on line %d.\n",
+ printk("Assertion failed @%p on line %d.\n",
linkRegister(), i_line);
- task_end();
+ task_crash();
break;
-
+
case ASSERT_KERNEL: // Kernel assert called.
- printk("Assertion failed @%p on line %d.\n",
+ printk("Assertion failed @%p on line %d.\n",
linkRegister(), i_line);
break;
}
// Loop forever if we make it here. Should only happen in kernel code.
- while (true)
+ while (true)
{
setThreadPriorityLow();
}
OpenPOWER on IntegriCloud