// // File: src/root/ia32-crt0.S // // Description: Simple startupcode // .text .global _start _start: /* load the stack pointer for our small stack (see below) */ leal __stack, %esp /* clearing .bss segment, since we can not assume it is zero */ leal __section_bss_start,%esi mov %esi,%edi inc %edi leal __section_bss_end,%ecx subl %edi,%ecx movb $0,(%esi) rep movsb /* Start the constructors of global objects (supporting C++) */ leal __section_ctors_start, %ebx 2: cmp $__section_ctors_end, %ebx je 3f call *(%ebx) add $4,%ebx jmp 2b 3: /* push a return address to catch main ending (should never happen) */ pushl $___return_from_main jmp main /* call main() */ ___return_from_main: /* run the destructors of global objects (supporting C++) */ leal __section_dtors_start, %ebx 5: cmp $__section_dtors_end, %ebx je 6f call *(%ebx) add $4,%ebx jmp 5b 6: /* Enter kdebug (this is what never should happen) WARNING: only L4Ka::Pistachio KDebug enter */ int $3 jmp 8f mov $7f, %eax .section .rodata 7: .asciz "***System stopped***" .previous 8: jmp 6b /* Loop forever on the enter_kdebug */ /* allocate 4*1024 bytes for the stack */ .bss .space 8*1024 __stack: /* this marks the top of the stack */ .data .global __heap_start_ptr __heap_start_ptr: .long 0xffffffff /* No heap for the roottask */