[CRT] Add CFI annotatiions to memmove function

This commit is contained in:
Jérôme Gardou 2021-03-09 19:41:15 +01:00
parent 6a31fe6ca7
commit 0c34c067c4

View file

@ -14,15 +14,20 @@ _memcpy:
FUNC _memmove FUNC _memmove
FPO 0, 3, 5, 2, 1, FRAME_NONFPO FPO 0, 3, 5, 2, 1, FRAME_NONFPO
push ebp push ebp
CFI_ADJUST_CFA_OFFSET 4
CFI_REL_OFFSET ebp, 0
mov ebp, esp mov ebp, esp
CFI_DEF_CFA_REGISTER ebp
push esi push esi
CFI_REL_OFFSET esi, -4
push edi push edi
CFI_REL_OFFSET edi, -8
mov edi, [ebp + 8] mov edi, [ebp + 8]
mov esi, [ebp + 12] mov esi, [ebp + 12]
mov ecx, [ebp + 16] mov ecx, [ebp + 16]
cmp edi, esi cmp edi, esi
jbe .CopyUp jbe .CopyUp
mov eax, ecx mov eax, ecx
@ -30,9 +35,9 @@ FUNC _memmove
cmp edi, eax cmp edi, eax
jb .CopyDown jb .CopyDown
.CopyUp: .CopyUp:
cld cld
cmp ecx, 16 cmp ecx, 16
jb .L1 jb .L1
mov edx, ecx mov edx, ecx
@ -53,29 +58,34 @@ FUNC _memmove
rep movsd rep movsd
mov ecx, edx mov ecx, edx
and ecx, 3 and ecx, 3
.L1: .L1:
test ecx, ecx test ecx, ecx
je .L3 je .L3
rep movsb rep movsb
.L3: .L3:
mov eax, [ebp + 8] mov eax, [ebp + 8]
pop edi pop edi
CFI_SAME_VALUE edi
pop esi pop esi
CFI_SAME_VALUE esi
leave leave
CFI_ADJUST_CFA_OFFSET -4
CFI_SAME_VALUE ebp
CFI_DEF_CFA_REGISTER esp
ret ret
.CopyDown: .CopyDown:
std std
add edi, ecx add edi, ecx
add esi, ecx add esi, ecx
cmp ecx, 16 cmp ecx, 16
jb .L4 jb .L4
mov edx, ecx mov edx, ecx
test edi, 3 test edi, 3
je .L5 je .L5
/* /*
* Make the destination dword aligned * Make the destination dword aligned
*/ */
@ -86,10 +96,10 @@ FUNC _memmove
dec edi dec edi
rep movsb rep movsb
mov ecx, edx mov ecx, edx
sub esi, 3 sub esi, 3
sub edi, 3 sub edi, 3
.L6: .L6:
shr ecx, 2 shr ecx, 2
rep movsd rep movsd
mov ecx, edx mov ecx, edx
@ -97,14 +107,19 @@ FUNC _memmove
je .L7 je .L7
add esi, 3 add esi, 3
add edi, 3 add edi, 3
.L8: .L8:
rep movsb rep movsb
.L7: .L7:
cld cld
mov eax, [ebp + 8] mov eax, [ebp + 8]
pop edi pop edi
CFI_SAME_VALUE edi
pop esi pop esi
CFI_SAME_VALUE esi
leave leave
CFI_ADJUST_CFA_OFFSET -4
CFI_SAME_VALUE ebp
CFI_DEF_CFA_REGISTER esp
ret ret
.L5: .L5:
sub edi, 4 sub edi, 4
@ -113,7 +128,7 @@ FUNC _memmove
.L4: .L4:
test ecx, ecx test ecx, ecx
je .L7 je .L7
dec esi dec esi
dec edi dec edi
jmp .L8 jmp .L8