OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [newlib-1.18.0/] [newlib-1.18.0-or32-1.0rc1/] [libgloss/] [m32c/] [crt0.S] - Diff between revs 207 and 345

Only display areas with differences | Details | Blame | View Log

Rev 207 Rev 345
/*
/*
Copyright (c) 2005,2008 Red Hat Incorporated.
Copyright (c) 2005,2008 Red Hat Incorporated.
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
modification, are permitted provided that the following conditions are met:
modification, are permitted provided that the following conditions are met:
    Redistributions of source code must retain the above copyright
    Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
    notice, this list of conditions and the following disclaimer.
    Redistributions in binary form must reproduce the above copyright
    Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
    documentation and/or other materials provided with the distribution.
    The name of Red Hat Incorporated may not be used to endorse
    The name of Red Hat Incorporated may not be used to endorse
    or promote products derived from this software without specific
    or promote products derived from this software without specific
    prior written permission.
    prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED.  IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY
DISCLAIMED.  IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
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
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
*/
#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
#define A16
#define A16
#define A(n,w) n
#define A(n,w) n
#define W w
#define W w
#define ALIGN 1
#define ALIGN 1
#else
#else
#define A24
#define A24
#define A(n,w) w
#define A(n,w) w
#define W l
#define W l
#define ALIGN 2
#define ALIGN 2
#endif
#endif
        .section ".resetvec","ax",@progbits
        .section ".resetvec","ax",@progbits
        .long   _start
        .long   _start
        .text
        .text
        .global _start
        .global _start
_start:
_start:
.LFB2:
.LFB2:
        fclr    U       /* One stack for user and interrupts */
        fclr    U       /* One stack for user and interrupts */
        ldc     #__stack,sp
        ldc     #__stack,sp
#ifdef A16
#ifdef A16
        mov.b   #%hi8(__romdatastart),r1h
        mov.b   #%hi8(__romdatastart),r1h
        mov.w   #%lo16(__romdatastart),a0
        mov.w   #%lo16(__romdatastart),a0
        mov.w   #__datastart,a1
        mov.w   #__datastart,a1
#else
#else
        mov.l   #__romdatastart,a0
        mov.l   #__romdatastart,a0
        mov.l   #__datastart,a1
        mov.l   #__datastart,a1
#endif
#endif
        mov.w   #__romdatacopysize,r3
        mov.w   #__romdatacopysize,r3
        shl.w   #-1,r3
        shl.w   #-1,r3
        smovf.w
        smovf.w
#ifdef A16
#ifdef A16
        mov.w   #__bssstart,a1
        mov.w   #__bssstart,a1
#else
#else
        mov.l   #__bssstart,a1
        mov.l   #__bssstart,a1
#endif
#endif
        mov.w   #__bsssize,r3
        mov.w   #__bsssize,r3
        shl.w   #-1,r3
        shl.w   #-1,r3
        mov.w   #0,r0
        mov.w   #0,r0
        sstr.w
        sstr.w
#ifdef A16
#ifdef A16
        ldc     #%lo16(__var_vects),intbl
        ldc     #%lo16(__var_vects),intbl
        ldc     #%hi16(__var_vects),intbh
        ldc     #%hi16(__var_vects),intbh
#else
#else
        ldc     #__var_vects,intb
        ldc     #__var_vects,intb
#endif
#endif
        fset    I
        fset    I
        jsr.a   __m32c_init
        jsr.a   __m32c_init
        jsr.a   _main
        jsr.a   _main
.LFE2:
.LFE2:
#ifdef A24
#ifdef A24
        /* rv in r0, ok for arg0 */
        /* rv in r0, ok for arg0 */
#else
#else
        mov.w   r0,r1
        mov.w   r0,r1
#endif
#endif
        jsr.a   _exit
        jsr.a   _exit
        .text
        .text
        .global _m32c_run_preinit_array
        .global _m32c_run_preinit_array
        .type   _m32c_run_preinit_array,@function
        .type   _m32c_run_preinit_array,@function
_m32c_run_preinit_array:
_m32c_run_preinit_array:
        mov.W   #__preinit_array_start,a0
        mov.W   #__preinit_array_start,a0
        mov.W   #__preinit_array_end,a1
        mov.W   #__preinit_array_end,a1
        jmp.w   _m32c_run_inilist
        jmp.w   _m32c_run_inilist
        .global _m32c_run_init_array
        .global _m32c_run_init_array
        .type   _m32c_run_init_array,@function
        .type   _m32c_run_init_array,@function
_m32c_run_init_array:
_m32c_run_init_array:
        mov.W   #__init_array_start,a0
        mov.W   #__init_array_start,a0
        mov.W   #__init_array_end,a1
        mov.W   #__init_array_end,a1
        jmp.w   _m32c_run_inilist
        jmp.w   _m32c_run_inilist
        .global _m32c_run_fini_array
        .global _m32c_run_fini_array
        .type   _m32c_run_fini_array,@function
        .type   _m32c_run_fini_array,@function
_m32c_run_fini_array:
_m32c_run_fini_array:
        mov.W   #__fini_array_start,a0
        mov.W   #__fini_array_start,a0
        mov.W   #__fini_array_end,a1
        mov.W   #__fini_array_end,a1
        /* fall through */
        /* fall through */
_m32c_run_inilist:
_m32c_run_inilist:
next_inilist:
next_inilist:
        cmp.W   a0,a1
        cmp.W   a0,a1
        jeq     done_inilist
        jeq     done_inilist
        pushm   a0,a1
        pushm   a0,a1
        mov.W   [a0],a0
        mov.W   [a0],a0
#ifdef A16
#ifdef A16
        mov.b:s #0,a1   /* zero extends */
        mov.b:s #0,a1   /* zero extends */
        jsri.a  a1a0
        jsri.a  a1a0
#else
#else
        jsri.a  a0
        jsri.a  a0
#endif
#endif
        popm    a0,a1
        popm    a0,a1
        add.W   A(#2,#4),a0
        add.W   A(#2,#4),a0
        jmp.b   next_inilist
        jmp.b   next_inilist
done_inilist:
done_inilist:
        rts
        rts
        .section        .init,"ax",@progbits
        .section        .init,"ax",@progbits
        .global __m32c_init
        .global __m32c_init
__m32c_init:
__m32c_init:
        enter   #0
        enter   #0
        .section        .fini,"ax",@progbits
        .section        .fini,"ax",@progbits
        .global __m32c_fini
        .global __m32c_fini
__m32c_fini:
__m32c_fini:
        enter   #0
        enter   #0
        jsr.a   _m32c_run_fini_array
        jsr.a   _m32c_run_fini_array
;;; Provide Dwarf unwinding information that will help GDB stop
;;; Provide Dwarf unwinding information that will help GDB stop
;;; backtraces at the right place.  This is stolen from assembly
;;; backtraces at the right place.  This is stolen from assembly
;;; code generated by GCC with -dA.
;;; code generated by GCC with -dA.
        .section        .debug_frame,"",@progbits
        .section        .debug_frame,"",@progbits
.Lframe0:
.Lframe0:
        .4byte  .LECIE0-.LSCIE0 ; Length of Common Information Entry
        .4byte  .LECIE0-.LSCIE0 ; Length of Common Information Entry
.LSCIE0:
.LSCIE0:
        .4byte  0xffffffff      ; CIE Identifier Tag
        .4byte  0xffffffff      ; CIE Identifier Tag
        .byte   0x1     ; CIE Version
        .byte   0x1     ; CIE Version
        .ascii "\0"     ; CIE Augmentation
        .ascii "\0"     ; CIE Augmentation
        .uleb128 0x1    ; CIE Code Alignment Factor
        .uleb128 0x1    ; CIE Code Alignment Factor
        .sleb128 -1     ; CIE Data Alignment Factor
        .sleb128 -1     ; CIE Data Alignment Factor
        .byte   0xd     ; CIE RA Column
        .byte   0xd     ; CIE RA Column
        .byte   0xc     ; DW_CFA_def_cfa
        .byte   0xc     ; DW_CFA_def_cfa
        .uleb128 0xc
        .uleb128 0xc
        .uleb128 0x3
        .uleb128 0x3
        .byte   0x8d    ; DW_CFA_offset, column 0xd
        .byte   0x8d    ; DW_CFA_offset, column 0xd
        .uleb128 0x3
        .uleb128 0x3
        .p2align ALIGN
        .p2align ALIGN
.LECIE0:
.LECIE0:
.LSFDE0:
.LSFDE0:
        .4byte  .LEFDE0-.LASFDE0        ; FDE Length
        .4byte  .LEFDE0-.LASFDE0        ; FDE Length
.LASFDE0:
.LASFDE0:
        .4byte  .Lframe0        ; FDE CIE offset
        .4byte  .Lframe0        ; FDE CIE offset
        .4byte  .LFB2           ; FDE initial location
        .4byte  .LFB2           ; FDE initial location
        .4byte  .LFE2-.LFB2     ; FDE address range
        .4byte  .LFE2-.LFB2     ; FDE address range
        .byte   0xf             ; DW_CFA_def_cfa_expression
        .byte   0xf             ; DW_CFA_def_cfa_expression
        .uleb128 1              ; length of expression
        .uleb128 1              ; length of expression
        .byte   0x30            ; DW_OP_lit0
        .byte   0x30            ; DW_OP_lit0
        .p2align ALIGN
        .p2align ALIGN
.LEFDE0:
.LEFDE0:
        .text
        .text
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.