[intelxl] Add driver for Intel 100 Gigabit Ethernet NICs
[ipxe.git] / src / arch / i386 / core / nulltrap.c
1 #include <stdint.h>
2 #include <stdio.h>
3
4 __attribute__ (( noreturn, section ( ".text.null_trap" ) ))
5 void null_function_trap ( void ) {
6 void *stack;
7
8 /* 128 bytes of NOPs; the idea of this is that if something
9 * dereferences a NULL pointer and overwrites us, we at least
10 * have some chance of still getting to execute the printf()
11 * statement.
12 */
13 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
14 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
15 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
16 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
17 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
18 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
19 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
20 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
21 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
22 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
23 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
24 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
25 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
26 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
27 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
28 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
29 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
30 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
31 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
32 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
33 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
34 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
35 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
36 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
37 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
38 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
39 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
40 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
41 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
42 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
43 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
44 __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
45
46 __asm__ __volatile__ ( "movl %%esp, %0" : "=r" ( stack ) );
47 printf ( "NULL method called from %p (stack %p)\n",
48 __builtin_return_address ( 0 ), stack );
49 DBG_HD ( stack, 256 );
50 while ( 1 ) {}
51 }