Subversion Repositories Kolibri OS

Rev

Rev 7597 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7597 Rev 7696
Line 1... Line 1...
1
(*
1
(*
2
    BSD 2-Clause License
2
    BSD 2-Clause License
Line 3... Line 3...
3
 
3
 
4
    Copyright (c) 2019, Anton Krotov
4
    Copyright (c) 2019, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 10... Line 10...
10
IMPORT SYSTEM;
10
IMPORT SYSTEM;
Line 11... Line 11...
11
 
11
 
Line 12... Line 12...
12
 
12
 
Line 13... Line 13...
13
CONST
13
CONST
Line 14... Line 14...
14
 
14
 
Line 15... Line 15...
15
    BASE_ADR = 08048000H;
15
    RTLD_LAZY* = 1;
Line 16... Line 16...
16
 
16
 
17
 
17
 
Line 18... Line 18...
18
TYPE
18
TYPE
Line 19... Line 19...
19
 
19
 
20
    TP* = ARRAY 2 OF INTEGER;
20
    TP* = ARRAY 2 OF INTEGER;
Line 91... Line 91...
91
 
91
 
92
 
92
 
93
PROCEDURE GetProcAdr (lib: INTEGER; name: ARRAY OF CHAR; VarAdr: INTEGER);
93
PROCEDURE GetProcAdr (lib: INTEGER; name: ARRAY OF CHAR; VarAdr: INTEGER);
-
 
94
VAR
94
VAR
95
    sym: INTEGER;
95
    sym: INTEGER;
96
 
96
BEGIN
97
BEGIN
97
    sym := dlsym(lib, SYSTEM.ADR(name[0]));
98
    sym := dlsym(lib, SYSTEM.ADR(name[0]));
98
    ASSERT(sym # 0);
99
    ASSERT(sym # 0);
Line 103... Line 104...
103
PROCEDURE init* (sp, code: INTEGER);
104
PROCEDURE init* (sp, code: INTEGER);
104
BEGIN
105
BEGIN
105
    SYSTEM.GET(code - 1000H - SYSTEM.SIZE(INTEGER) * 2, dlopen);
106
    SYSTEM.GET(code - 1000H - SYSTEM.SIZE(INTEGER) * 2, dlopen);
106
    SYSTEM.GET(code - 1000H - SYSTEM.SIZE(INTEGER),     dlsym);
107
    SYSTEM.GET(code - 1000H - SYSTEM.SIZE(INTEGER),     dlsym);
107
    MainParam := sp;
108
    MainParam := sp;
108
    base := BASE_ADR;
-
 
109
    eol := 0AX;
109
    eol := 0AX;
Line 110... Line 110...
110
 
110
 
111
    libc := dlopen(SYSTEM.SADR("libc.so.6"), 1);
111
    libc := dlopen(SYSTEM.SADR("libc.so.6"), RTLD_LAZY);
112
    GetProcAdr(libc, "malloc", SYSTEM.ADR(malloc));
112
    GetProcAdr(libc, "malloc", SYSTEM.ADR(malloc));
113
    GetProcAdr(libc, "free", SYSTEM.ADR(free));
113
    GetProcAdr(libc, "free", SYSTEM.ADR(free));
114
    GetProcAdr(libc, "exit", SYSTEM.ADR(_exit));
114
    GetProcAdr(libc, "exit", SYSTEM.ADR(_exit));
115
    GetProcAdr(libc, "stdout", SYSTEM.ADR(stdout));
115
    GetProcAdr(libc, "stdout", SYSTEM.ADR(stdout));
Line 123... Line 123...
123
    GetProcAdr(libc, "fread", SYSTEM.ADR(fread));
123
    GetProcAdr(libc, "fread", SYSTEM.ADR(fread));
124
    GetProcAdr(libc, "fopen", SYSTEM.ADR(fopen));
124
    GetProcAdr(libc, "fopen", SYSTEM.ADR(fopen));
125
    GetProcAdr(libc, "fclose", SYSTEM.ADR(fclose));
125
    GetProcAdr(libc, "fclose", SYSTEM.ADR(fclose));
126
    GetProcAdr(libc, "time", SYSTEM.ADR(time));
126
    GetProcAdr(libc, "time", SYSTEM.ADR(time));
Line 127... Line 127...
127
 
127
 
128
    librt := dlopen(SYSTEM.SADR("librt.so.1"), 1);
128
    librt := dlopen(SYSTEM.SADR("librt.so.1"), RTLD_LAZY);
129
    GetProcAdr(librt, "clock_gettime", SYSTEM.ADR(clock_gettime))
129
    GetProcAdr(librt, "clock_gettime", SYSTEM.ADR(clock_gettime))
Line 130... Line 130...
130
END init;
130
END init;