Subversion Repositories Kolibri OS

Rev

Rev 3038 | Rev 6823 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3038 Rev 5940
1
;-----------------------------------------------------------------------------
1
;-----------------------------------------------------------------------------
2
proc dll.Load, import_table:dword
2
proc dll.Load, import_table:dword
3
	mov	esi, [import_table]
3
	mov	esi, [import_table]
4
  .next_lib:
4
  .next_lib:
5
	mov	edx, [esi]
5
	mov	edx, [esi]
6
	or	edx, edx
6
	or	edx, edx
7
	jz	.exit
7
	jz	.exit
8
	push	esi
8
	push	esi
9
	mov	esi, [esi + 4]
9
	mov	esi, [esi + 4]
10
	mov	edi, s_libdir.fname
10
	mov	edi, s_libdir.fname
11
    @@:
11
    @@:
12
	lodsb
12
	lodsb
13
	stosb
13
	stosb
14
	or	al, al
14
	or	al, al
15
	jnz	@b
15
	jnz	@b
16
	mcall	68, 19, s_libdir
16
	mcall	68, 19, s_libdir
17
	or	eax, eax
17
	or	eax, eax
18
	jz	.fail
18
	jz	.fail
19
	stdcall	dll.Link, eax, edx
19
	stdcall	dll.Link, eax, edx
20
	push	eax
20
	push	eax
21
	mov	eax, [eax]
21
	mov	eax, [eax]
22
	cmp	dword[eax], 'lib_'
22
	cmp	dword[eax], 'lib_'
23
	pop	eax
23
	pop	eax
24
	jnz	@f
24
	jnz	@f
25
	stdcall	dll.Init, [eax + 4]
25
	stdcall	dll.Init, [eax + 4]
26
    @@:
26
    @@:
27
	pop	esi
27
	pop	esi
28
	add	esi, 8
28
	add	esi, 8
29
	jmp	.next_lib
29
	jmp	.next_lib
30
  .exit:
30
  .exit:
31
	xor	eax, eax
31
	xor	eax, eax
32
	ret
32
	ret
33
  .fail:
33
  .fail:
34
	add	esp, 4
34
	add	esp, 4
35
	xor	eax, eax
35
	xor	eax, eax
36
	inc	eax
36
	inc	eax
37
	ret
37
	ret
38
endp
38
endp
39
;-----------------------------------------------------------------------------
39
;-----------------------------------------------------------------------------
40
proc dll.Link, exp:dword, imp:dword
40
proc dll.Link, exp:dword, imp:dword
41
	push	eax
41
	push	eax
42
	mov	esi, [imp]
42
	mov	esi, [imp]
43
	test	esi, esi
43
	test	esi, esi
44
	jz	.done
44
	jz	.done
45
  .next:
45
  .next:
46
	lodsd
46
	lodsd
47
	test	eax, eax
47
	test	eax, eax
48
	jz	.done
48
	jz	.done
49
	stdcall	dll.GetProcAddress, [exp], eax
49
	stdcall	dll.GetProcAddress, [exp], eax
50
	or	eax, eax
50
	or	eax, eax
51
	jz	@f
51
	jz	@f
52
	mov	[esi - 4], eax
52
	mov	[esi - 4], eax
53
	jmp	.next
53
	jmp	.next
54
    @@:
54
    @@:
55
	mov	dword[esp], 0
55
	mov	dword[esp], 0
56
  .done:
56
  .done:
57
	pop	eax
57
	pop	eax
58
	ret
58
	ret
59
endp
59
endp
60
;-----------------------------------------------------------------------------
60
;-----------------------------------------------------------------------------
61
proc dll.Init, dllentry:dword
61
proc dll.Init, dllentry:dword
62
	pushad
62
	pushad
63
	mov	eax, mem.Alloc
63
	mov	eax, mem.Alloc
64
	mov	ebx, mem.Free
64
	mov	ebx, mem.Free
65
	mov	ecx, mem.ReAlloc
65
	mov	ecx, mem.ReAlloc
66
	mov	edx, dll.Load
66
	mov	edx, dll.Load
67
	stdcall	[dllentry]
67
	stdcall	[dllentry]
68
	popad
68
	popad
69
	ret
69
	ret
70
endp
70
endp
71
;-----------------------------------------------------------------------------
71
;-----------------------------------------------------------------------------
72
proc dll.GetProcAddress, exp:dword, sz_name:dword
72
proc dll.GetProcAddress, exp:dword, sz_name:dword
73
	mov	edx, [exp]
73
	mov	edx, [exp]
74
	xor	eax, eax
74
	xor	eax, eax
75
  .next:
75
  .next:
76
	or	edx, edx
76
	or	edx, edx
77
	jz	.end
77
	jz	.end
78
	cmp	dword[edx], 0
78
	cmp	dword[edx], 0
79
	jz	.end
79
	jz	.end
80
	stdcall	strcmp, [edx], [sz_name]
80
	stdcall	strcmp, [edx], [sz_name]
81
	test	eax, eax
81
	test	eax, eax
82
	jz	.ok
82
	jz	.ok
83
	add	edx, 8
83
	add	edx, 8
84
	jmp	.next
84
	jmp	.next
85
  .ok:
85
  .ok:
86
	mov	eax, [edx + 4]
86
	mov	eax, [edx + 4]
87
  .end:
87
  .end:
88
	ret
88
	ret
89
endp
89
endp
90
;-----------------------------------------------------------------------------
90
;-----------------------------------------------------------------------------
91
proc strcmp, str1:dword, str2:dword
91
proc strcmp, str1:dword, str2:dword
92
	push	esi edi
92
	push	esi edi
93
	mov	esi, [str1]
93
	mov	esi, [str1]
94
	mov	edi, [str2]
94
	mov	edi, [str2]
95
	xor	eax, eax
95
	xor	eax, eax
96
    @@:
96
    @@:
97
	lodsb
97
	lodsb
98
	scasb
98
	scasb
99
	jne	.fail
99
	jne	.fail
100
	or	al, al
100
	or	al, al
101
	jnz	@b
101
	jnz	@b
102
	jmp	.ok
102
	jmp	.ok
103
  .fail:
103
  .fail:
104
	or	eax, -1
104
	or	eax, -1
105
  .ok:
105
  .ok:
106
	pop	edi esi
106
	pop	edi esi
107
	ret
107
	ret
108
endp
108
endp
109
;-----------------------------------------------------------------------------
109
;-----------------------------------------------------------------------------
110
s_libdir:
110
s_libdir:
111
  db '/sys/lib/'
111
  db '/sys/lib/'
112
  .fname rb 32
112
  .fname rb 32
113
;-----------------------------------------------------------------------------
113
;-----------------------------------------------------------------------------
114
proc mem.Alloc, size
114
proc mem.Alloc, size
115
	push	ebx ecx
115
	push	ebx ecx
116
	mov	ecx, [size]
116
	mov	ecx, [size]
117
	mcall	68, 12
117
	mcall	68, 12
118
	pop	ecx ebx
118
	pop	ecx ebx
119
	ret
119
	ret
120
endp
120
endp
121
;-----------------------------------------------------------------------------
121
;-----------------------------------------------------------------------------
122
proc mem.ReAlloc, mptr, size
122
proc mem.ReAlloc, mptr, size
123
	push	ebx ecx edx
123
	push	ebx ecx edx
124
	mov	ecx, [size]
124
	mov	ecx, [size]
125
	or	ecx, ecx
-
 
126
	jz	@f
-
 
127
    @@:
-
 
128
	mov	edx, [mptr]
125
	mov	edx, [mptr]
129
	or	edx, edx
-
 
130
	jz	@f
-
 
131
    @@:
-
 
132
	mcall	68, 20
126
	mcall	68, 20
133
	or	eax, eax
-
 
134
	jz	@f
-
 
135
    @@:
-
 
136
	pop	edx ecx ebx
127
	pop	edx ecx ebx
137
	ret
128
	ret
138
endp
129
endp
139
;-----------------------------------------------------------------------------
130
;-----------------------------------------------------------------------------
140
proc mem.Free, mptr
131
proc mem.Free, mptr
141
	push	ebx ecx
132
	push	ebx ecx
142
	mov	ecx,[mptr]
133
	mov	ecx,[mptr]
143
	or	ecx,ecx
-
 
144
	jz	@f
-
 
145
    @@:
-
 
146
	mcall	68, 13
134
	mcall	68, 13
147
	pop	ecx ebx
135
	pop	ecx ebx
148
	ret
136
	ret
149
endp
137
endp
150
;-----------------------------------------------------------------------------
138
;-----------------------------------------------------------------------------