* cris/crt0.S: Use jump, not ba, to skip the interrupt table. Use
"setf", not "nop", for common_v10_v32 compatibility. Move out interrupt table to irqtable.S. Include here for non-ELF. * cris/irqtable.S: Extracted from cris/crt0.S. Provide per-entry weak default stub definitions. * cris/crtn.c: Use "setf", not "nop", for common_v10_v32 compatibility. * cris/setup.S [__arch_common_v10_v32]: Return. * cris/Makefile.in (BSP_OBJS): Add irqtable.o.
This commit is contained in:
82
libgloss/cris/irqtable.S
Normal file
82
libgloss/cris/irqtable.S
Normal file
@@ -0,0 +1,82 @@
|
||||
/* Default interrupt table for CRIS/CRISv32.
|
||||
Copyright (C) 2007 Axis Communications.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Neither the name of Axis Communications nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS
|
||||
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS
|
||||
COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE. */
|
||||
|
||||
#ifdef __ELF__
|
||||
.section .startup,"ax"
|
||||
#else
|
||||
.text
|
||||
#endif
|
||||
|
||||
#if defined (__ELF__) || defined (IN_CRT0)
|
||||
; This is included from crt0.S for a.out, as we can't have it as
|
||||
; a separate object file in a library due to the lack of named
|
||||
; section support and the required placement at address 3*4.
|
||||
|
||||
; We define an interrupt table with references to the symbols
|
||||
; _.irq_XX where XX are hex numbers 3..ff (lower-case). They
|
||||
; are satisfied by weak aliases to the _.irq stub function in
|
||||
; this file. When overridden, the overriding function must be
|
||||
; in code explicitly linked in, i.e. *not* in a library.
|
||||
|
||||
.global __irqtable_at_irq3
|
||||
__irqtable_at_irq3:
|
||||
|
||||
.irpc irqno,3456789abcdef
|
||||
.weak _.irq_0\irqno
|
||||
.set _.irq_0\irqno,_.irq
|
||||
.dword _.irq_0\irqno
|
||||
.endr
|
||||
|
||||
.irpc irqhd,123456789abcdef
|
||||
.irpc irqld,0123456789abcdef
|
||||
.weak _.irq_\irqhd\irqld
|
||||
.set _.irq_\irqhd\irqld,_.irq
|
||||
.dword _.irq_\irqhd\irqld
|
||||
.endr
|
||||
.endr
|
||||
|
||||
; No use having a separate file with default _.irq_[0-f][0-f]
|
||||
; definitions; just provide a single stub with a weak definition
|
||||
; and make it up to the user to provide a strong definition that
|
||||
; they force to be linked in (i.e. not in a library or at least
|
||||
; together with another symbol they know is linked in).
|
||||
.text
|
||||
|
||||
_.irq:
|
||||
#ifdef __arch_common_v10_v32
|
||||
; This is just to allow the multilib to compile without
|
||||
; hackery: the "common" subset doesn't recognize
|
||||
; interrupt-return insns.
|
||||
#elif __CRIS_arch_version >= 32
|
||||
rete
|
||||
rfe
|
||||
#else
|
||||
reti
|
||||
nop
|
||||
#endif
|
||||
#endif /* __ELF__ || IN_CRT0 */
|
Reference in New Issue
Block a user