diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2006-03-29 11:03:19 +0400 |
---|---|---|
committer | Nathan Sidwell <nathan@codesourcery.com> | 2006-03-29 11:03:19 +0400 |
commit | 017a82abc68f3b2dcef27eba2aa67c00290d5e50 (patch) | |
tree | 01b707aec46e0da1f1f7534c3e035acec894d0fd /libgloss/m68k/bdm-isv.c | |
parent | 5ca8637aa72d6794bc6b5164b827333f6b97b593 (diff) |
* libgloss/m68k/Makefile.in (BDM_BSP, BDM_OBJS, BDM_ISRS): New.
(CF_SCRIPTS): Rename dbug scripts. Add bdm scripts. Add m5485
scripts.
(all): Add new targets.
(BDM_BSP): New target.
(bdm-isv.o, bdm-exit.o, bdm-outbyte.o, bdm-semihost.o): New
targets.
(BDM_ISRS): New targets.
(m5208evb.ld, m5213evb.ld, m5235evb.ld, m5272c3.ld, m5282evb.ld):
Rename and adjust.
(m5485evb-dbug): New.
(m5208evb-bdm.ld, m5213evb-bdm.ld, m5235evb-bdm.ld,
m5272c3-bdm.ld, m5282evb-bdm.ld, m5485evb-bdm.ld): New.
(install): Add BDM_BSP.
* libgloss/m68k/bdm-exit.c: New
* libgloss/m68k/bdm-inbyte.c: New
* libgloss/m68k/bdm-outbyte.c: New
* libgloss/m68k/bdm-semihost.c: New
* libgloss/m68k/bdm-semihost.h: New
* libgloss/m68k/bdm-isrs.c: New.
* libgloss/m68k/bdm-isv.c: New.
* cf-dbug.sc: Renamed to ...
* cf.sc: ... here. Add bdm flexibility. Remove GROUP
Diffstat (limited to 'libgloss/m68k/bdm-isv.c')
-rw-r--r-- | libgloss/m68k/bdm-isv.c | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/libgloss/m68k/bdm-isv.c b/libgloss/m68k/bdm-isv.c new file mode 100644 index 000000000..a9fba3117 --- /dev/null +++ b/libgloss/m68k/bdm-isv.c @@ -0,0 +1,148 @@ +/* + * bdm-isv.c -- + * + * Copyright (c) 2006 CodeSourcery CSI + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* This file contains default interrupt handlers and initialization + code for the interrupt vector. All but one of the interrupts are + user replaceable. + + User trap BDM_TRAP (15) is used for semi hosting support. + If you replace this one, semihosting will cease to function. */ + +#include "bdm-semihost.h" + +#define NUM_VECTORS 256 + +#define ISR_DECLARE(NAME) void __attribute__((interrupt_handler)) NAME (void) + +ISR_DECLARE (__other_interrupt); +ISR_DECLARE (__reset); +ISR_DECLARE (__access_error); +ISR_DECLARE (__address_error); +ISR_DECLARE (__illegal_instruction); +ISR_DECLARE (__divide_by_zero); +ISR_DECLARE (__privilege_violation); +ISR_DECLARE (__trace); +ISR_DECLARE (__unimplemented_line_a_opcode); +ISR_DECLARE (__unimplemented_line_f_opcode); +ISR_DECLARE (__non_pc_breakpoint_debug_interrupt); +ISR_DECLARE (__pc_breakpoint_debug_interrupt); +ISR_DECLARE (__format_error); +ISR_DECLARE (__spurious_interrupt); +ISR_DECLARE (__trap0); +ISR_DECLARE (__trap1); +ISR_DECLARE (__trap2); +ISR_DECLARE (__trap3); +ISR_DECLARE (__trap4); +ISR_DECLARE (__trap5); +ISR_DECLARE (__trap6); +ISR_DECLARE (__trap7); +ISR_DECLARE (__trap8); +ISR_DECLARE (__trap9); +ISR_DECLARE (__trap10); +ISR_DECLARE (__trap11); +ISR_DECLARE (__trap12); +ISR_DECLARE (__trap13); +ISR_DECLARE (__trap14); +ISR_DECLARE (__trap15); +ISR_DECLARE (__fp_branch_unordered); +ISR_DECLARE (__fp_inexact_result); +ISR_DECLARE (__fp_divide_by_zero); +ISR_DECLARE (__fp_underflow); +ISR_DECLARE (__fp_operand_error); +ISR_DECLARE (__fp_overflow); +ISR_DECLARE (__fp_input_not_a_number); +ISR_DECLARE (__fp_input_denormalized_number); +ISR_DECLARE (__unsupported_instruction); + +/* The trap used for semihosting by the debugger. This must have a + particular assembly signature, so we don't generate it with the + compiler. */ +ISR_DECLARE (__bdm_semihosting); + +/* The interrupt vector itself must be provided by the linker script + as it requires 1MB alignment. */ +extern void (*__interrupt_vector[NUM_VECTORS])(void); + +/* The linker script sets the stack pointer too. */ +extern int __attribute__ ((weak)) __stack; + +/* This hook is called during crt startup and installs and initializes + the vector table. It is overridable by a user provided routine. + If the user routine fails to install the __bdm_semihosting routine, + semihosting will cease to function. */ + +void software_init_hook (void) +{ + unsigned ix; + + /* Don't set it if it's -1 (zero is a valid value) */ + if ((long)&__interrupt_vector == -1) + return; + + for (ix = 0; ix != NUM_VECTORS; ix++) + __interrupt_vector[ix] = &__other_interrupt; + + /* Set the VBR. */ + __asm__ __volatile__ ("movec.l %0,%/vbr" :: "r" (&__interrupt_vector)); + + /* Set an initial stack and reset vector, in case we unexpectedly get + reset. */ + __interrupt_vector[0] = (&__stack ? (void (*)(void))&__stack + : (void (*)(void))&__interrupt_vector[NUM_VECTORS]); + __interrupt_vector[1] = &__reset; + + /* Store the known interrupt vectors */ + __interrupt_vector[2] = &__access_error; + __interrupt_vector[3] = &__address_error; + __interrupt_vector[4] = &__illegal_instruction; + __interrupt_vector[5] = &__divide_by_zero; + __interrupt_vector[8] = &__privilege_violation; + __interrupt_vector[9] = &__trace; + __interrupt_vector[10] = &__unimplemented_line_a_opcode; + __interrupt_vector[11] = &__unimplemented_line_f_opcode; + __interrupt_vector[12] = &__non_pc_breakpoint_debug_interrupt; + __interrupt_vector[13] = &__pc_breakpoint_debug_interrupt; + __interrupt_vector[14] = &__format_error; + __interrupt_vector[24] = &__spurious_interrupt; + __interrupt_vector[32] = &__trap0; + __interrupt_vector[32] = &__trap1; + __interrupt_vector[32] = &__trap2; + __interrupt_vector[32] = &__trap3; + __interrupt_vector[32] = &__trap4; + __interrupt_vector[32] = &__trap5; + __interrupt_vector[32] = &__trap6; + __interrupt_vector[32] = &__trap7; + __interrupt_vector[32] = &__trap8; + __interrupt_vector[32] = &__trap9; + __interrupt_vector[32] = &__trap10; + __interrupt_vector[32] = &__trap11; + __interrupt_vector[32] = &__trap12; + __interrupt_vector[32] = &__trap13; + __interrupt_vector[32] = &__trap14; + __interrupt_vector[32] = &__trap15; + __interrupt_vector[48] = &__fp_branch_unordered; + __interrupt_vector[49] = &__fp_inexact_result; + __interrupt_vector[50] = &__fp_divide_by_zero; + __interrupt_vector[51] = &__fp_underflow; + __interrupt_vector[52] = &__fp_operand_error; + __interrupt_vector[53] = &__fp_overflow; + __interrupt_vector[54] = &__fp_input_not_a_number; + __interrupt_vector[55] = &__fp_input_denormalized_number; + __interrupt_vector[61] = &__unsupported_instruction; + + /* Install the special handler. */ + __interrupt_vector[0x20 + BDM_TRAP] = &__bdm_semihosting; +} |