mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-18 12:29:32 +08:00
* 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:
parent
547c5c6104
commit
0bb4152b76
@ -1,3 +1,15 @@
|
|||||||
|
2007-02-21 Hans-Peter Nilsson <hp@axis.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2007-02-15 Nick Clifton <nickc@redhat.com>
|
2007-02-15 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* sparc/cygmon.ld.src: Link .rodata.* input sections into .text
|
* sparc/cygmon.ld.src: Link .rodata.* input sections into .text
|
||||||
|
@ -86,7 +86,7 @@ BSP_PREFIX =
|
|||||||
BSP_LDFLAGS =
|
BSP_LDFLAGS =
|
||||||
BSP_BSP = libbsp.a
|
BSP_BSP = libbsp.a
|
||||||
BSP_CRT0 = crt0.o
|
BSP_CRT0 = crt0.o
|
||||||
BSP_OBJS = ${OBJS} setup.o
|
BSP_OBJS = ${OBJS} setup.o irqtable.o
|
||||||
BSP_SCRIPTS =
|
BSP_SCRIPTS =
|
||||||
BSP_TEST =
|
BSP_TEST =
|
||||||
BSP_INSTALL = install-bsp
|
BSP_INSTALL = install-bsp
|
||||||
@ -273,5 +273,6 @@ wait.o: wait.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/
|
|||||||
write.o: write.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
write.o: write.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||||
lcrt0.o: lcrt0.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
lcrt0.o: lcrt0.c linunistd.h $(objdir)/../libnosys/config.h $(srcdir)/../libnosys/warning.h
|
||||||
setup.o: setup.S
|
setup.o: setup.S
|
||||||
|
irqtable.o: irqtable.S
|
||||||
crti.o: crti.c
|
crti.o: crti.c
|
||||||
crtn.o: crtn.c
|
crtn.o: crtn.c
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Generic simplistic start-up-stub for CRIS/CRISv32.
|
/* Generic simplistic start-up-stub for CRIS/CRISv32.
|
||||||
Copyright (C) 1993-2005 Axis Communications.
|
Copyright (C) 1993-2005, 2007 Axis Communications.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
@ -42,25 +42,27 @@
|
|||||||
.global __start
|
.global __start
|
||||||
nop
|
nop
|
||||||
__start:
|
__start:
|
||||||
ba 0f
|
move.d 0f,$r9
|
||||||
nop
|
jump $r9
|
||||||
|
setf
|
||||||
|
|
||||||
.rept 256 - 2
|
#ifndef __ELF__
|
||||||
.dword _.int
|
|
||||||
.endr
|
; For a.out, everything read-only and code-wise goes into a
|
||||||
|
; single section, so we can't separate the interrupt table from
|
||||||
|
; the startup code if we want to have files in-between.
|
||||||
|
#define IN_CRT0
|
||||||
|
#include "irqtable.S"
|
||||||
|
|
||||||
_.int:
|
|
||||||
#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
|
#else
|
||||||
reti
|
|
||||||
nop
|
; The interrupt table (at offset 12, irq #3) is expected here.
|
||||||
#endif
|
; The simplest way to make sure we link it in, is to sacrifice
|
||||||
|
; some memory and refer to it with a relocation.
|
||||||
|
.text
|
||||||
|
.dword __irqtable_at_irq3
|
||||||
|
|
||||||
|
#endif /* __ELF__ */
|
||||||
|
|
||||||
0:
|
0:
|
||||||
move.d __setup,$r9
|
move.d __setup,$r9
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Executable and DSO init/fini end for cris*-axis-linux-gnu and simulators
|
/* Executable and DSO init/fini end for cris*-axis-linux-gnu and simulators
|
||||||
Copyright (C) 2000, 2001, 2004, 2005 Axis Communications.
|
Copyright (C) 2000, 2001, 2004, 2005, 2007 Axis Communications.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
@ -36,7 +36,7 @@ __asm__ (".section .init\n"
|
|||||||
#endif
|
#endif
|
||||||
"\tmove.d [sp+],r9\n"
|
"\tmove.d [sp+],r9\n"
|
||||||
"\tjump r9\n"
|
"\tjump r9\n"
|
||||||
"\tnop\n"
|
"\tsetf\n"
|
||||||
|
|
||||||
"\t.section .fini\n"
|
"\t.section .fini\n"
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
@ -44,7 +44,7 @@ __asm__ (".section .init\n"
|
|||||||
#endif
|
#endif
|
||||||
"\tmove.d [sp+],r9\n"
|
"\tmove.d [sp+],r9\n"
|
||||||
"\tjump r9\n"
|
"\tjump r9\n"
|
||||||
"\tnop\n");
|
"\tsetf\n");
|
||||||
|
|
||||||
#else
|
#else
|
||||||
extern int Dummy;
|
extern int Dummy;
|
||||||
|
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 */
|
@ -1,5 +1,5 @@
|
|||||||
/* Support for standalone CRIS/CRISv32 code.
|
/* Support for standalone CRIS/CRISv32 code.
|
||||||
Copyright (C) 2005 Axis Communications.
|
Copyright (C) 2005, 2007 Axis Communications.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
@ -32,8 +32,11 @@ __setup:
|
|||||||
/* Make sure to save SRP. */
|
/* Make sure to save SRP. */
|
||||||
#ifdef __arch_common_v10_v32
|
#ifdef __arch_common_v10_v32
|
||||||
/* Can't do anything if we don't know for which arch. This file is
|
/* Can't do anything if we don't know for which arch. This file is
|
||||||
then only a placeholder. Oh, and we can't use the "ret" insn in
|
then only a placeholder. Oh, and we can't use the "ret" and "nop"
|
||||||
"common" code. */
|
insns in "common" code. */
|
||||||
|
move $srp,$r9
|
||||||
|
jump $r9
|
||||||
|
setf
|
||||||
#else
|
#else
|
||||||
/* Code missing:
|
/* Code missing:
|
||||||
- Initialize RAM circuits.
|
- Initialize RAM circuits.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user