OSDN Git Service

2007-01-04 Kazu Hirata <kazu@codesourcery.com>
authorjjohnstn <jjohnstn>
Thu, 4 Jan 2007 18:05:56 +0000 (18:05 +0000)
committerjjohnstn <jjohnstn>
Thu, 4 Jan 2007 18:05:56 +0000 (18:05 +0000)
        Merge from newlib-csl-20060320-branch:
        2006-12-22  Nathan Sidwell  <nathan@codesourcery.com>

        libgloss/
        * m68k/Makefile.in (CF_ISRS): Remove now shared routines.
        * m68k/cf-crt0.S (__reset): Define here.
        * m68k/cf-isrs.c: Share some ISRS.  Add aliases for each IRQ slot.
        * m68k/cf-isv.S: Move to .interrupt_vector section.  Make each
        slot a unique routine.
        * m68k/cf.sc: Adjust for .interrupt_vector section.

        libgloss/
        * m68k/Makefile.in (m5273c3): Rename to ...
        (m5272c3): ... here to fix typo.
        (m5249c3): New.
        (CF_BOARDS): Add it.

libgloss/ChangeLog
libgloss/m68k/Makefile.in
libgloss/m68k/cf-crt0.S
libgloss/m68k/cf-isrs.c
libgloss/m68k/cf-isv.S
libgloss/m68k/cf.sc

index 0424504..60af1ed 100644 (file)
@@ -1,3 +1,22 @@
+2007-01-04  Kazu Hirata  <kazu@codesourcery.com>
+
+       Merge from newlib-csl-20060320-branch:
+       2006-12-22  Nathan Sidwell  <nathan@codesourcery.com>
+
+       libgloss/
+       * m68k/Makefile.in (CF_ISRS): Remove now shared routines.
+       * m68k/cf-crt0.S (__reset): Define here.
+       * m68k/cf-isrs.c: Share some ISRS.  Add aliases for each IRQ slot.
+       * m68k/cf-isv.S: Move to .interrupt_vector section.  Make each
+       slot a unique routine.
+       * m68k/cf.sc: Adjust for .interrupt_vector section.
+
+       libgloss/
+       * m68k/Makefile.in (m5273c3): Rename to ...
+       (m5272c3): ... here to fix typo.
+       (m5249c3): New.
+       (CF_BOARDS): Add it.
+
 2006-01-03  Kazu Hirata  <kazu@codesourcery.com>
 
        * arm/Makefile (RDPMON_OBJS): Add _exit.o and _kill.o.
index 175a671..f1ca1c4 100644 (file)
@@ -123,28 +123,25 @@ CF_CRT0S= cf-hosted-crt0.o cf-unhosted-crt0.o
 CF_BSP=                libcf.a
 CF_OBJS=       cf-isv.o cf-crt1.o cf-hosted.o getpid.o kill.o cf-sbrk.o \
                cf-exit.o $(patsubst %,cf-%.o,${CF_ISRS})
-CF_ISRS=       other_interrupt reset access_error address_error \
+CF_ISRS=       other_interrupt access_error address_error \
        illegal_instruction divide_by_zero privilege_violation \
-       trace unimplemented_line_a_opcode unimplemented_line_f_opcode \
-       non_pc_breakpoint_debug_interrupt pc_breakpoint_debug_interrupt \
-       format_error spurious_interrupt  fp_branch_unordered \
-       fp_inexact_result fp_divide_by_zero fp_underflow fp_operand_error \
-       fp_overflow fp_input_not_a_number fp_input_denormalized_number \
-       unsupported_instruction \
-       $(addprefix trap,0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)
+       trace unimplemented_opcode breakpoint_debug_interrupt \
+       format_error spurious_interrupt fp_interrupt \
+       unsupported_instruction trap_interrupt
 
 #              RAM       ROM
 m5208evb  := 1024M 16M          0M   2M
 m5213evb  :=  512M 32K          0M 256K
 m52235evb :=  512M 32K          0M 256K
 m5235evb  :=    0M 16M  0xFFE00000   2M
-m5273c3   :=    0M  4M  0xFFE00000   2M
+m5249c3          :=    0M  4M  0xFFE00000   2M
+m5272c3   :=    0M  4M  0xFFE00000   2M
 m5275evb  :=    0M 16M  0xFFE00000   2M
 m5282evb  :=    0M 16M  0xFFE00000   2M
 m5329evb  := 1024M 32M          0M   2M
 m5485evb  :=    0M 64M       1024M  16M
 
-CF_BOARDS :=  m5208evb m5213evb m52235evb m5235evb m5272c3 m5275evb \
+CF_BOARDS :=  m5208evb m5213evb m52235evb m5235evb m5249c3 m5272c3 m5275evb \
        m5282evb m5329evb m5485evb
 CF_RAM_SCRIPTS := $(patsubst %,%-ram.ld,$(CF_BOARDS))
 CF_ROM_SCRIPTS := $(patsubst %,%-rom.ld,$(CF_BOARDS))
index 51a6aa7..f86b789 100644 (file)
        .extern __heap_end
        .weak __heap_end
        .extern __start1
+
+       /* __reset should cause a HALT in a hosted executable and
+          fall into __start for an unhosted executable.  The user is
+          free to override this with their own declaration.  */
+       .globl __reset
+       .weak __reset
+__reset:       
+#if HOSTED
+       HALT
+#endif
+       
        .globl __start
 __start:
        /* Initialize stack */
@@ -42,3 +53,4 @@ __start:
        move.l d1,sp@-
        move.l fp,sp@-  /* Dummy return address */
        jmp __start1
+
index e9846e2..34dcf2c 100644 (file)
@@ -33,157 +33,131 @@ void __attribute__((interrupt_handler)) NAME (void)               \
 struct eat_trailing_semicolon
 
 #if defined (L_other_interrupt)
-ISR_DEFINE (__other_interrupt);
-#endif
-
-#if defined (L_reset)
-ISR_DEFINE (__reset);
+static ISR_DEFINE (__other_interrupt);
+#define ALIAS __other_interrupt
+#define PREFIX interrupt
+#define ALIASES A(6) A(7) \
+       A(15) A(16) A(17) A(18) A(19) A(20) A(21) A(22) A(23) \
+       A(25) A(26) A(27) A(28) A(29) A(30) A(31) \
+       A(56) A(57) A(58) A(59) A(60) A(62) A(63) \
+       A(64) A(65) A(66) A(67) A(68) A(69) A(70) A(71) \
+       A(72) A(73) A(74) A(75) A(76) A(77) A(78) A(79) \
+       A(80) A(81) A(82) A(83) A(84) A(85) A(86) A(87) \
+       A(88) A(89) A(90) A(91) A(92) A(93) A(94) A(95) \
+       A(96) A(97) A(98) A(99) A(100) A(101) A(102) A(103) \
+       A(104) A(105) A(106) A(107) A(108) A(109) A(110) A(111) \
+       A(112) A(113) A(114) A(115) A(116) A(117) A(118) A(119) \
+       A(120) A(121) A(122) A(123) A(124) A(125) A(126) A(127) \
+       A(128) A(129) A(130) A(131) A(132) A(133) A(134) A(135) \
+       A(136) A(137) A(138) A(139) A(140) A(141) A(142) A(143) \
+       A(144) A(145) A(146) A(147) A(148) A(149) A(150) A(151) \
+       A(152) A(153) A(154) A(155) A(156) A(157) A(158) A(159) \
+       A(160) A(161) A(162) A(163) A(164) A(165) A(166) A(167) \
+       A(168) A(169) A(170) A(171) A(172) A(173) A(174) A(175) \
+       A(176) A(177) A(178) A(179) A(180) A(181) A(182) A(183) \
+       A(184) A(185) A(186) A(187) A(188) A(189) A(190) A(191) \
+       A(192) A(193) A(194) A(195) A(196) A(197) A(198) A(199) \
+       A(200) A(201) A(202) A(203) A(204) A(205) A(206) A(207) \
+       A(208) A(209) A(210) A(211) A(212) A(213) A(214) A(215) \
+       A(216) A(217) A(218) A(219) A(220) A(221) A(222) A(223) \
+       A(224) A(225) A(226) A(227) A(228) A(229) A(230) A(231) \
+       A(232) A(233) A(234) A(235) A(236) A(237) A(238) A(239) \
+       A(240) A(241) A(242) A(243) A(244) A(245) A(246) A(247) \
+       A(248) A(249) A(250) A(251) A(252) A(253) A(254) A(255)
 #endif
 
 #if defined (L_access_error)
 ISR_DEFINE (__access_error);
+#define DEFINED __access_error
 #endif
 
 #if defined (L_address_error)
 ISR_DEFINE (__address_error);
+#define DEFINED __address_error
 #endif
 
 #if defined (L_illegal_instruction)
 ISR_DEFINE (__illegal_instruction);
+#define DEFINED __illegal_instruction
 #endif
 
 #if defined (L_divide_by_zero)
 ISR_DEFINE (__divide_by_zero);
+#define DEFINED __divide_by_zero
 #endif
 
 #if defined (L_privilege_violation)
 ISR_DEFINE (__privilege_violation);
+#define DEFINED __privilege_violation
 #endif
 
 #if defined (L_trace)
 ISR_DEFINE (__trace);
+#define DEFINED __trace
 #endif
 
-#if defined (L_unimplemented_line_a_opcode)
-ISR_DEFINE (__unimplemented_line_a_opcode);
-#endif
-
-#if defined (L_unimplemented_line_f_opcode)
-ISR_DEFINE (__unimplemented_line_f_opcode);
+#if defined (L_unimplemented_opcode)
+static ISR_DEFINE (__unimplemented_opcode);
+#define ALIAS __unimplemented_opcode
+#define PREFIX unimplemented_
+#define SUFFIX _opcode
+#define ALIASES A(line_a) A(line_f)
 #endif
 
-#if defined (L_non_pc_breakpoint_debug_interrupt)
-ISR_DEFINE (__non_pc_breakpoint_debug_interrupt);
-#endif
-
-#if defined (L_pc_breakpoint_debug_interrupt)
-ISR_DEFINE (__pc_breakpoint_debug_interrupt);
+#if defined (L_breakpoint_debug_interrupt)
+static ISR_DEFINE (__breakpoint_debug_interrupt);
+#define ALIAS __breakpoint_debug_interrupt
+#define SUFFIX _breakpoint_debug_interrupt
+#define ALIASES A(non_pc) A(pc)
 #endif
 
 #if defined (L_format_error)
 ISR_DEFINE (__format_error);
+#define DEFINED __format_error
 #endif
 
 #if defined (L_spurious_interrupt)
 ISR_DEFINE (__spurious_interrupt);
+#define DEFINED __spurious_interrupt
 #endif
 
-#if defined (L_trap0)
-ISR_DEFINE (__trap0);
+#if defined (L_trap_interrupt)
+static ISR_DEFINE (__trap_interrupt);
+#define ALIAS __trap_interrupt
+#define PREFIX trap
+#define ALIASES A(0) A(1) A(2) A(3) A(4) A(5) A(6) A(7) \
+       A(8) A(9) A(10) A(11) A(12) A(13) A(14) A(15)
 #endif
 
-#if defined (L_trap1)
-ISR_DEFINE (__trap1);
+#if defined (L_fp_interrupt)
+static ISR_DEFINE (__fp_interrupt);
+#define ALIAS __fp_interrupt
+#define PREFIX fp_
+#define ALIASES A(branch_unordered) A(inexact_result) A(divide_by_zero) \
+       A(underflow) A(operand_error) A(overflow) A(input_not_a_number) \
+       A(input_denormalized_number)
 #endif
 
-#if defined (L_trap2)
-ISR_DEFINE (__trap2);
-#endif
-
-#if defined (L_trap3)
-ISR_DEFINE (__trap3);
-#endif
-
-#if defined (L_trap4)
-ISR_DEFINE (__trap4);
-#endif
-
-#if defined (L_trap5)
-ISR_DEFINE (__trap5);
-#endif
-
-#if defined (L_trap6)
-ISR_DEFINE (__trap6);
-#endif
-
-#if defined (L_trap7)
-ISR_DEFINE (__trap7);
-#endif
-
-#if defined (L_trap8)
-ISR_DEFINE (__trap8);
-#endif
-
-#if defined (L_trap9)
-ISR_DEFINE (__trap9);
-#endif
-
-#if defined (L_trap10)
-ISR_DEFINE (__trap10);
-#endif
-
-#if defined (L_trap11)
-ISR_DEFINE (__trap11);
-#endif
-
-#if defined (L_trap12)
-ISR_DEFINE (__trap12);
-#endif
-
-#if defined (L_trap13)
-ISR_DEFINE (__trap13);
-#endif
-
-#if defined (L_trap14)
-ISR_DEFINE (__trap14);
-#endif
-
-#if defined (L_trap15)
-ISR_DEFINE (__trap15);
-#endif
-
-#if defined (L_fp_branch_unordered)
-ISR_DEFINE (__fp_branch_unordered);
-#endif
-
-#if defined (L_fp_inexact_result)
-ISR_DEFINE (__fp_inexact_result);
-#endif
-
-#if defined (L_fp_divide_by_zero)
-ISR_DEFINE (__fp_divide_by_zero);
-#endif
-
-#if defined (L_fp_underflow)
-ISR_DEFINE (__fp_underflow);
-#endif
-
-#if defined (L_fp_operand_error)
-ISR_DEFINE (__fp_operand_error);
+#if defined (L_unsupported_instruction)
+ISR_DEFINE (__unsupported_instruction);
+#define DEFINED __unsupported_instruction
 #endif
 
-#if defined (L_fp_overflow)
-ISR_DEFINE (__fp_overflow);
+#if defined(ALIAS)
+#ifndef PREFIX
+#define PREFIX
 #endif
-
-#if defined (L_fp_input_not_a_number)
-ISR_DEFINE (__fp_input_not_a_number);
+#ifndef SUFFIX
+#define SUFFIX
 #endif
-
-#if defined (L_fp_input_denormalized_number)
-ISR_DEFINE (__fp_input_denormalized_number);
+#define STRING_(a) #a
+#define STRING(a) STRING_(a)
+#define PASTE4_(a,b,c,d) a##b##c##d
+#define PASTE4(a,b,c,d) PASTE4_(a,b,c,d)
+#define A(N) \
+  void __attribute__((weak, alias(STRING(ALIAS)))) PASTE4(__,PREFIX,N,SUFFIX) (void);
+ALIASES
+#elif !defined(DEFINED)
+#error "No interrupt routine requested"
 #endif
 
-#if defined (L_unsupported_instruction)
-ISR_DEFINE (__unsupported_instruction);
-#endif
index 392f8da..e8b912a 100644 (file)
  * they apply.
  */
 
-       .text
+       .macro SLOT,n,prefix=,suffix=
+       .long __\prefix\n\suffix
+       .endm
+
+       .macro ISR n
+       SLOT \n,interrupt,
+       .endm
+
+       .macro TRAP n
+       SLOT \n,trap,
+       .endm
+
+       .macro FP n
+       SLOT \n,fp_,
+       .endm
+
+       .macro UNIMP_OPCODE n
+       SLOT \n,unimplemented_,_opcode
+       .endm
+
+       .macro BREAKPOINT_DEBUG n
+       SLOT \n,,_breakpoint_debug_interrupt
+       .endm
+
+       .section .interrupt_vector,"a"
 
        .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 */
+       ISR 6
+       ISR 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 */
+       UNIMP_OPCODE line_a                     /* 10 */
+       UNIMP_OPCODE line_f                     /* 11 */
+       BREAKPOINT_DEBUG non_pc                 /* 12 */
+       BREAKPOINT_DEBUG pc                     /* 13 */
        .long __format_error                    /* 14 */
-       .rept 24 - 15
-       .long __other_interrupt                 /* [15,24) */
+       .irp N,15,16,17,18,19,20,21,22,23
+       ISR \N                                  /* [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) */
+       .irp N,25,26,27,28,29,30,31
+       ISR \N                                  /* [25,32) */
+       .endr
+       .irp N,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
+       TRAP \N                                 /* [32,48) */
+       .endr
+       FP branch_unordered                     /* 48 */
+       FP inexact_result                       /* 49 */
+       FP divide_by_zero                       /* 50 */
+       FP underflow                            /* 51 */
+       FP operand_error                        /* 52 */
+       FP overflow                             /* 53 */
+       FP input_not_a_number                   /* 54 */
+       FP input_denormalized_number            /* 55 */
+       .irp N,56,57,58,59,60
+       ISR \N                                  /* [56,61) */
        .endr
        .long __unsupported_instruction         /* 61 */
-       .rept 64 - 62
-       .long __other_interrupt                 /* [62,64) */
+       .irp N,62,63
+       ISR \N                                  /* [62,64) */
+       .endr
+       .irp N,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
+       ISR \N                  /* [64,80) */
+       .endr
+       .irp N,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95
+       ISR \N                  /* [80,96) */
+       .endr
+       .irp N,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111
+       ISR \N                  /* [96,112) */
+       .endr
+       .irp N,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
+       ISR \N                  /* [112,128) */
+       .endr
+       .irp N,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143
+       ISR \N                  /* [128,144) */
+       .endr
+       .irp N,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159
+       ISR \N                  /* [144,160) */
+       .endr
+       .irp N,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175
+       ISR \N                  /* [160,176) */
+       .endr
+       .irp N,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191
+       ISR \N                  /* [176,192) */
+       .endr
+       .irp N,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207
+       ISR \N                  /* [192,208) */
+       .endr
+       .irp N,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223
+       ISR \N                  /* [208,224) */
+       .endr
+       .irp N,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239
+       ISR \N                  /* [224,240) */
        .endr
-       .rept 256-64
-       .long __other_interrupt                 /* [64,256) */
+       .irp N,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
+       ISR \N                  /* [240,256) */
        .endr
index 097dc1f..5a3563a 100644 (file)
@@ -29,7 +29,8 @@ SECTIONS
   .text :
   {
     CREATE_OBJECT_SYMBOLS
-    KEEP (*cf-isv.o(.text))
+    *(.interrupt_vector)
+    
     cf-${IO}-crt0.o(.text)
     *(.text .text.*)
     *(.gnu.linkonce.t.*)