OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgcc/] [config/] [sparc/] [sol2-c1.S] - Blame information for rev 749

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 734 jeremybenn
! crt1.s for sparc & sparcv9 (SunOS 5)
2
 
3
!   Copyright (C) 1992, 2009 Free Software Foundation, Inc.
4
!   Written By David Vinayak Henkel-Wallace, June 1992
5
!
6
! This file is free software; you can redistribute it and/or modify it
7
! under the terms of the GNU General Public License as published by the
8
! Free Software Foundation; either version 3, or (at your option) any
9
! later version.
10
!
11
! This file is distributed in the hope that it will be useful, but
12
! WITHOUT ANY WARRANTY; without even the implied warranty of
13
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
! General Public License for more details.
15
!
16
! Under Section 7 of GPL version 3, you are granted additional
17
! permissions described in the GCC Runtime Library Exception, version
18
! 3.1, as published by the Free Software Foundation.
19
!
20
! You should have received a copy of the GNU General Public License and
21
! a copy of the GCC Runtime Library Exception along with this program;
22
! see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23
! .
24
 
25
! This file takes control of the process from the kernel, as specified
26
! in section 3 of the SVr4 ABI.
27
! This file is the first thing linked into any executable.
28
 
29
#ifdef __sparcv9
30
#define CPTRSIZE        8
31
#define CPTRSHIFT       3
32
#define STACK_BIAS      2047
33
#define ldn             ldx
34
#define stn             stx
35
#define setn(s, scratch, dst)   setx s, scratch, dst
36
#else
37
#define CPTRSIZE        4
38
#define CPTRSHIFT       2
39
#define STACK_BIAS      0
40
#define ldn             ld
41
#define stn             st
42
#define setn(s, scratch, dst)   set s, dst
43
#endif
44
 
45
        .section        ".text"
46
        .proc   022
47
        .global _start
48
 
49
_start:
50
        mov     0, %fp          ! Mark bottom frame pointer
51
        ldn     [%sp + (16 * CPTRSIZE) + STACK_BIAS], %l0       ! argc
52
        add     %sp, (17 * CPTRSIZE) + STACK_BIAS, %l1          ! argv
53
 
54
        ! Leave some room for a call.  Sun leaves 32 octets (to sit on
55
        ! a cache line?) so we do too.
56
#ifdef __sparcv9
57
        sub     %sp, 48, %sp
58
#else
59
        sub     %sp, 32, %sp
60
#endif
61
 
62
        ! %g1 may contain a function to be registered w/atexit
63
        orcc    %g0, %g1, %g0
64
#ifdef __sparcv9
65
        be      %xcc, .nope
66
#else
67
        be      .nope
68
#endif
69
        mov     %g1, %o0
70
        call    atexit
71
        nop
72
.nope:
73
        ! Now make sure constructors and destructors are handled.
74
        setn(_fini, %o1, %o0)
75
        call    atexit, 1
76
        nop
77
        call    _init, 0
78
        nop
79
 
80
        ! We ignore the auxiliary vector; there is no defined way to
81
        ! access those data anyway.  Instead, go straight to main:
82
        mov     %l0, %o0        ! argc
83
        mov     %l1, %o1        ! argv
84
#ifdef GCRT1
85
        setn(___Argv, %o4, %o3)
86
        stn     %o1, [%o3]      ! *___Argv
87
#endif
88
        ! Skip argc words past argv, to env:
89
        sll     %l0, CPTRSHIFT, %o2
90
        add     %o2, CPTRSIZE, %o2
91
        add     %l1, %o2, %o2   ! env
92
        setn(_environ, %o4, %o3)
93
        stn     %o2, [%o3]      ! *_environ
94
        call    main, 4
95
        nop
96
        call    exit, 0
97
        nop
98
        call    _exit, 0
99
        nop
100
        ! We should never get here.
101
 
102
        .type   _start,#function
103
        .size   _start,.-_start

powered by: WebSVN 2.1.0

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