summaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-04-04 16:44:55 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-04-04 16:44:55 +0000
commitc13ddac0b20117d4cc6502c797d9ffe7dcbd9b78 (patch)
tree6c206d15de1f5e34aafaf2514ca425d3bd53fb25 /c
parent619f97eae252bebc0c1f3b533f774e18e9c6aec6 (diff)
2011-04-04 Joel Sherrill <joel.sherrilL@OARcorp.com>
PR 1768/bsps * shared/irq/irq_asm.S: The nbench benchmark highlighted the fact that we do not perform a cld before calling C code in the ISR. This was historically not a problem but gcc 4.3 changed the behavior. From http://gcc.gnu.org/gcc-4.3/changes.html
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/i386/ChangeLog8
-rw-r--r--c/src/lib/libbsp/i386/shared/irq/irq_asm.S7
2 files changed, 15 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/i386/ChangeLog b/c/src/lib/libbsp/i386/ChangeLog
index 7b4ffa5a72..74e13d96cb 100644
--- a/c/src/lib/libbsp/i386/ChangeLog
+++ b/c/src/lib/libbsp/i386/ChangeLog
@@ -1,3 +1,11 @@
+2011-04-04 Joel Sherrill <joel.sherrilL@OARcorp.com>
+
+ PR 1768/bsps
+ * shared/irq/irq_asm.S: The nbench benchmark highlighted the fact that
+ we do not perform a cld before calling C code in the ISR. This was
+ historically not a problem but gcc 4.3 changed the behavior. From
+ http://gcc.gnu.org/gcc-4.3/changes.html
+
2011-02-02 Ralf Corsépius <ralf.corsepius@rtems.org>
* configure.ac: Require autoconf-2.68, automake-1.11.1.
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 8d4535ddc5..7f5bcce734 100644
--- a/c/src/lib/libbsp/i386/shared/irq/irq_asm.S
+++ b/c/src/lib/libbsp/i386/shared/irq/irq_asm.S
@@ -145,6 +145,13 @@ nested:
incl SYM (_ISR_Nest_level) /* one nest level deeper */
incl SYM (_Thread_Dispatch_disable_level) /* disable multitasking */
+ /*
+ * GCC versions starting with 4.3 no longer place the cld
+ * instruction before string operations. We need to ensure
+ * it is set correctly for ISR handlers.
+ */
+ cld
+
/*
* re-enable interrupts at processor level as the current
* interrupt source is now masked via i8259