summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/i386/getenv.S
blob: dafbf37ee5fea26b9d5243dbfe899376b02c12f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "PIC.h"

.text
.global getenv
.type getenv,@function
getenv:
	pushl %esi
	pushl %edi
	movl 0xc(%esp), %edi
	cld
	movl %edi, %edx
	xorl %eax, %eax
	leal -1(%eax), %ecx
	repnz scasb
	not %ecx
	dec %ecx
	pushl %ecx
	movl (%edx), %ecx

	GET_1VAR environ, %esi		# non-PIC: movl environ, %esi
	jmp .Lloop

.Lprepare:
	movl (%edx), %ecx
	movl %eax, %esi
.Lloop:
	lodsl
	or %eax, %eax
	jz .Lout
	cmpb %cl, (%eax)
	jnz .Lloop

	movl %edx, %edi
	xchg %esi, %eax
	movl (%esp), %ecx
	repz cmpsb
	jne .Lprepare
	or %ecx, %ecx
	jnz .Lprepare
	cmpb $'=', (%esi)
	jne .Lprepare
	leal 0x1(%esi), %eax
.Lout:
	popl %ecx
	popl %edi
	popl %esi
	ret
.size	getenv, . - getenv