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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [sysdeps/] [linux/] [powerpc/] [crt0.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
/*
2
 * uC-libc/sysdeps/linux/powerpc/crt0.c
3
 * process init code for powerpc
4
 *
5
 * Copyright (C) 2001 by Lineo, Inc.
6
 * Author: David A. Schleef <ds@schleef.org>
7
 *
8
 * This program is free software; you can redistribute it and/or modify it
9
 * under the terms of the GNU Library General Public License as published by
10
 * the Free Software Foundation; either version 2 of the License, or (at your
11
 * option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful, but WITHOUT
14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
16
 * for more details.
17
 *
18
 * You should have received a copy of the GNU Library General Public License
19
 * along with this program; if not, write to the Free Software Foundation,
20
 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
 *
22
 */
23
 
24
#include <errno.h>
25
 
26
asm(
27
        "\t.global _start\n"
28
        "\t_start:\n"
29
        //"\tmr 9,1\n"
30
        //"\trlwinm 1,1,0,0,27\n"
31
        "\tli 0,0\n"
32
        "\tstwu 1,-32(1)\n"
33
        "\tmtlr 0\n"
34
        //"\tstw 0,0(1)\n"
35
/* XXX fixme.  We want this to be an internally resolved jump */
36
//      "\tb _start2@xxx\n"
37
        );
38
 
39
 
40
/* Stick in a dummy reference to main(), so that if an application
41
 * is linking when the main() function is in a static library (.a)
42
 * we can be sure that main() actually gets linked in */
43
extern void main(int argc,void *argv,void *envp);
44
void (*mainp)(int argc,void *argv,void *envp) = main;
45
 
46
void __uClibc_main(int argc,void *argv,void *envp);
47
 
48
void _start2(void)
49
{
50
        void **p;
51
        int argc;
52
 
53
        p=__builtin_frame_address(0)+0x30;
54
 
55
        argc=*(int *)p;
56
 
57
        /* gross hack for dynamic linker */
58
        if(argc==0){
59
                p=((void *)p)+0x10;
60
                argc=*(int *)p;
61
        }
62
 
63
        __uClibc_main(argc,p+1,p+2+argc);
64
}

powered by: WebSVN 2.1.0

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