summaryrefslogtreecommitdiff
path: root/ecos/packages/hal
diff options
context:
space:
mode:
Diffstat (limited to 'ecos/packages/hal')
-rw-r--r--ecos/packages/hal/maximus/arch/current/src/maximus.ld1
-rw-r--r--ecos/packages/hal/maximus/arch/current/src/maximus_entry.c20
2 files changed, 21 insertions, 0 deletions
diff --git a/ecos/packages/hal/maximus/arch/current/src/maximus.ld b/ecos/packages/hal/maximus/arch/current/src/maximus.ld
index 70e95adf0d..2960e2b33a 100644
--- a/ecos/packages/hal/maximus/arch/current/src/maximus.ld
+++ b/ecos/packages/hal/maximus/arch/current/src/maximus.ld
@@ -73,6 +73,7 @@ GROUP(libtarget.a libgcc.a)
> _region_
#define SECTION_eh_frame(_region_, _vma_, _lma_) \
+ .eh_frame_hdr : { *(.eh_frame_hdr) } > _region_ \
.eh_frame _vma_ : _lma_ \
{ \
FORCE_OUTPUT; __EH_FRAME_BEGIN__ = .; \
diff --git a/ecos/packages/hal/maximus/arch/current/src/maximus_entry.c b/ecos/packages/hal/maximus/arch/current/src/maximus_entry.c
index fac8839f2b..d7ad7e7ecb 100644
--- a/ecos/packages/hal/maximus/arch/current/src/maximus_entry.c
+++ b/ecos/packages/hal/maximus/arch/current/src/maximus_entry.c
@@ -20,6 +20,7 @@
#include <pkgconf/hal.h>
#include <cyg/infra/cyg_type.h>
#include <cyg/infra/cyg_ass.h>
+#include <cyg/infra/diag.h>
#include <cyg/hal/hal_arch.h>
#include <cyg/hal/hal_intr.h>
#include <cyg/hal/hal_io.h>
@@ -177,5 +178,24 @@ dl_iterate_phdr(void* arg1, void* arg2)
}
#endif
+#if (__GNUC__ >= 4)
+// First noticed with gcc 4.1.1. There is now code to detect stack
+// smashing.
+void __attribute__ ((noreturn))
+__stack_chk_fail(void)
+{
+ CYG_FAIL("Stack smashing detected, aborting");
+ diag_printf("Application error: stack smashing detected.\n");
+ cyg_hal_sys_exit(1);
+ for (;;);
+}
+
+void __attribute__ ((noreturn))
+__stack_chk_fail_local(void)
+{
+ __stack_chk_fail();
+}
+#endif
+
//-----------------------------------------------------------------------------
// End of entry.c