Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2006-03-29 11:03:19 +0400
committerNathan Sidwell <nathan@codesourcery.com>2006-03-29 11:03:19 +0400
commit017a82abc68f3b2dcef27eba2aa67c00290d5e50 (patch)
tree01b707aec46e0da1f1f7534c3e035acec894d0fd /libgloss/m68k/bdm-isv.c
parent5ca8637aa72d6794bc6b5164b827333f6b97b593 (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.c148
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;
+}