diff options
Diffstat (limited to 'libgloss/m68k/cf-crt0.S')
-rw-r--r-- | libgloss/m68k/cf-crt0.S | 86 |
1 files changed, 24 insertions, 62 deletions
diff --git a/libgloss/m68k/cf-crt0.S b/libgloss/m68k/cf-crt0.S index a61919a4f..9a73ce19c 100644 --- a/libgloss/m68k/cf-crt0.S +++ b/libgloss/m68k/cf-crt0.S @@ -1,4 +1,4 @@ -/* The interrupt table. +/* Initial boot * * Copyright (c) 2006 CodeSourcery Inc * @@ -16,70 +16,32 @@ #include "asm.h" .text - .globl __interrupt_vector -__interrupt_vector: - .long __stack /* 0 */ - .long __reset /* 1 */ - .long __access_error /* 2 */ - .long __address_error /* 3 */ - .long __illegal_instruction /* 4 */ - .long __divide_by_zero /* 5 */ - .long __other_interrupt /* 6 */ - .long __other_interrupt /* 7 */ - .long __privilege_violation /* 8 */ - .long __trace /* 9 */ - .long __unimplemented_line_a_opcode /* 10 */ - .long __unimplemented_line_f_opcode /* 11 */ - .long __non_pc_breakpoint_debug_interrupt /* 12 */ - .long __pc_breakpoint_debug_interrupt /* 13 */ - .long __format_error /* 14 */ - .rept 24 - 15 - .long __other_interrupt /* [15,24) */ - .endr - .long __spurious_interrupt /* 24 */ - .rept 32 - 25 - .long __other_interrupt /* [25,32) */ - .endr - .long __trap0 /* 32 */ - .long __trap1 /* 33 */ - .long __trap2 /* 34 */ - .long __trap3 /* 35 */ - .long __trap4 /* 36 */ - .long __trap5 /* 37 */ - .long __trap6 /* 38 */ - .long __trap7 /* 39 */ - .long __trap8 /* 40 */ - .long __trap9 /* 41 */ - .long __trap10 /* 42 */ - .long __trap11 /* 43 */ - .long __trap12 /* 44 */ - .long __trap13 /* 45 */ - .long __trap14 /* 46 */ - .long __trap15 /* 47 */ - .long __fp_branch_unordered /* 48 */ - .long __fp_inexact_result /* 49 */ - .long __fp_divide_by_zero /* 50 */ - .long __fp_underflow /* 51 */ - .long __fp_operand_error /* 52 */ - .long __fp_overflow /* 53 */ - .long __fp_input_not_a_number /* 54 */ - .long __fp_input_denormalized_number /* 55 */ - .rept 61 - 56 - .long __other_interrupt /* [56,61) */ - .endr - .long __unsupported_instruction /* 61 */ - .rept 64 - 62 - .long __other_interrupt /* [62,64) */ - .endr - .rept 256-64 - .long __other_interrupt /* [64,256) */ - .endr - .extern __stack + .extern __heap_end + .weak __heap_end .extern __start1 .globl __start __start: /* Initialize stack */ - movel IMM(__stack), sp - movel IMM(0), fp + move.l IMM(__stack), sp + move.l IMM(0), fp + move.l IMM(__heap_end), d1 +#if HOSTED + /* INIT_SIM syscall. Allows changing sp & d1. */ + move.l IMM(1),d0 + .align 4 + + /* The halt sequence must be 'nop; halt' and aligned to a 4 byte + boundary. */ + nop + halt + + /* This sentinel instruction value must be immediately after + the halt instruction. The debugger will adjust the pc, so + that it is never executed. This instruction is + 'movec %sp,0'. */ + .long 0x4e7bf000 +#endif + move.l d1,sp@- + move.l fp,sp@- /* Dummy return address */ jmp __start1 |