Added null trap code for debugging. (Must be included by adding
authorMichael Brown <mcb30@etherboot.org>
Sun, 11 Jun 2006 01:48:29 +0000 (01:48 +0000)
committerMichael Brown <mcb30@etherboot.org>
Sun, 11 Jun 2006 01:48:29 +0000 (01:48 +0000)
--nulltrap to the make target at the moment.)

src/arch/i386/core/nulltrap.c [new file with mode: 0644]
src/arch/i386/scripts/i386.lds

diff --git a/src/arch/i386/core/nulltrap.c b/src/arch/i386/core/nulltrap.c
new file mode 100644 (file)
index 0000000..bd4b757
--- /dev/null
@@ -0,0 +1,48 @@
+#include <stdint.h>
+#include <vsprintf.h>
+
+__attribute__ (( noreturn, section ( ".text.null_trap" ) ))
+void null_function_trap ( void ) {
+
+       /* 128 bytes of NOPs; the idea of this is that if something
+        * dereferences a NULL pointer and overwrites us, we at least
+        * have some chance of still getting to execute the printf()
+        * statement.
+        */
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+       __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
+
+       printf ( "NULL method called from %p\n", 
+                __builtin_return_address ( 0 ) );
+       while ( 1 ) {}
+}
index 4a984a9..48dd777 100644 (file)
@@ -117,6 +117,7 @@ SECTIONS {
 
     .text : AT ( _textdata_load_offset + __text ) {
        __text = .;
 
     .text : AT ( _textdata_load_offset + __text ) {
        __text = .;
+       *(.text.null_trap)
        *(.text)
        *(.text.*)
     } = 0x9090
        *(.text)
        *(.text.*)
     } = 0x9090