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; |