summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/shared
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-08-21 16:39:52 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-08-21 16:39:52 +0000
commiteb562f2c860061868e4ea1a821a84147b694dd07 (patch)
tree4273d9ac092dab0e00e065a365595a2b30fcc95f /c/src/lib/libbsp/i386/shared
parentSpacing changes (diff)
downloadrtems-eb562f2c860061868e4ea1a821a84147b694dd07.tar.bz2
Patch from Eric Valette <valette@crf.canon.fr>:
Here is a patch that enables to catch exception and get message before crashing RTEMS :) It should be generic to any Intel port although enabled only for pc386 BSP... [Joel] I fixed the bug I introduced in irq_asm.s...
Diffstat (limited to 'c/src/lib/libbsp/i386/shared')
-rw-r--r--c/src/lib/libbsp/i386/shared/irq/irq.c23
-rw-r--r--c/src/lib/libbsp/i386/shared/irq/irq_asm.s5
2 files changed, 21 insertions, 7 deletions
diff --git a/c/src/lib/libbsp/i386/shared/irq/irq.c b/c/src/lib/libbsp/i386/shared/irq/irq.c
index 356112076f..9dea372e0f 100644
--- a/c/src/lib/libbsp/i386/shared/irq/irq.c
+++ b/c/src/lib/libbsp/i386/shared/irq/irq.c
@@ -14,7 +14,9 @@
#include <bsp.h>
#include <irq.h>
-
+#include <rtems/score/thread.h>
+#include <rtems/score/apiext.h>
+
/*
* pointer to the mask representing the additionnal irq vectors
* that must be disabled when a particular entry is activated.
@@ -360,11 +362,18 @@ int pc386_rtems_irq_mngt_get(rtems_irq_global_settings** config)
void _ThreadProcessSignalsFromIrq (CPU_Exception_frame* ctx)
{
/*
- * If I understand the _Thread_Dispatch routine correctly
- * I do not see how this routine can be called given the
- * actual code. I plan to use this so far unused feature
- * to implement remote debugger ptrace("attach", ...)
- * command.
+ * Process pending signals that have not already been
+ * processed by _Thread_Displatch. This happens quite
+ * unfrequently : the ISR must have posted an action
+ * to the current running thread.
+ */
+ if ( _Thread_Do_post_task_switch_extension ||
+ _Thread_Executing->do_post_task_switch_extension ) {
+ _Thread_Executing->do_post_task_switch_extension = FALSE;
+ _API_extensions_Run_postswitch();
+ }
+ /*
+ * I plan to process other thread related events here.
+ * This will include DEBUG session requsted from keyboard...
*/
- printk(" _ThreadProcessSignalsFromIrq called! mail valette@crf.canon.fr\n");
}
diff --git a/c/src/lib/libbsp/i386/shared/irq/irq_asm.s b/c/src/lib/libbsp/i386/shared/irq/irq_asm.s
index a3954d0961..4be08ed992 100644
--- a/c/src/lib/libbsp/i386/shared/irq/irq_asm.s
+++ b/c/src/lib/libbsp/i386/shared/irq/irq_asm.s
@@ -14,6 +14,8 @@
#include "asm.h"
#include <irq_asm.h>
+ BEGIN_CODE
+
SYM (_ISR_Handler):
/*
* Before this was point is reached the vectors unique
@@ -243,3 +245,6 @@ SYM (default_raw_idt_handler):
popa
iret
+END_CODE
+
+END