Subversion Repositories Kolibri OS

Rev

Rev 3799 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1906 serge 1
 
2
#include 
3
#include 
4
#include 
5
#include 
6
#include 
7
#include 
8
#include 
9
#include 
10
11
 
12
{
13
    char  banner[8];
14
    int   version;
15
    int   start;
16
    int   iend;
17
    int   memsize;
18
    int   stacktop;
19
    char  *cmdline;
20
    char  *path;
21
    int    reserved;
3805 Serge 22
    void  *__idata_start;
23
    void  *__idata_end;
24
    void  (*main)(int argc, char **argv, char **envp);
25
};
1906 serge 26
27
 
28
char **_argv;
29
30
 
31
 
32
int (*entry)(int, char **, char **);
33
34
 
3805 Serge 35
1906 serge 36
 
3805 Serge 37
 
1906 serge 38
39
 
40
41
 
42
__thread_startup (int (*entry)(void*), void *param,
43
                  void *stacklow, void *stackhigh)
44
{
45
    int retval;
46
47
 
48
49
 
50
    "movl %0, %%fs:8    \n\t"           // use TLS
3805 Serge 51
    "movl %1, %%fs:12    \n\t"
52
    ::"r"(stacklow), "r"(stackhigh));
1906 serge 53
54
 
55
56
 
57
58
 
59
};
60
61
 
62
{
63
    return NULL;
64
}
65
66
 
3805 Serge 67
int link_app();
68
69
 
1906 serge 70
int   __appcwdlen;
71
char* __appenv;
72
int   __appenv_size;
73
74
 
3805 Serge 75
76
 
77
78
 
1906 serge 79
libc_crt_startup (void *libc_base)
3805 Serge 80
{
1906 serge 81
    struct   app_hdr *header = NULL;
3805 Serge 82
1906 serge 83
 
84
    char *p;
85
86
 
87
    int retval = 0;
88
89
 
3805 Serge 90
1906 serge 91
 
3805 Serge 92
    _tls_map[0] = 0xE0;
93
    init_reent();
1906 serge 94
    __initPOSIXHandles();
95
3805 Serge 96
 
3799 Serge 97
1906 serge 98
 
99
100
 
3805 Serge 101
        goto done;
1906 serge 102
103
 
104
    __appcwdlen = __appcwdlen > 1022 ? 1022 : __appcwdlen;
105
    memcpy(__appcwd, header->path, __appcwdlen);
106
    set_cwd(__appcwd);
107
108
 
109
110
 
3805 Serge 111
    {
1906 serge 112
        _argc = 2;
113
        arg[1] = header->cmdline;
114
    }
3805 Serge 115
    else _argc = 1;
116
1906 serge 117
 
118
119
 
3805 Serge 120
done:
1906 serge 121
    _exit (retval);
3805 Serge 122
}
1906 serge 123