Commit e2795e99 authored by Timothy B. Terriberry's avatar Timothy B. Terriberry

Fix valgrind errors in vp8_sixtap_predict8x4_armv6().

This function was accessing values below the stack pointer, which
 can be corrupted by signal delivery at any time.

Change-Id: I92945b30817562eb0340f289e74c108da72aeaca
parent dbd57c26
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
;and the result is stored in transpose. ;and the result is stored in transpose.
|vp8_sixtap_predict8x4_armv6| PROC |vp8_sixtap_predict8x4_armv6| PROC
stmdb sp!, {r4 - r11, lr} stmdb sp!, {r4 - r11, lr}
sub sp, sp, #184 ;reserve space on stack for temporary storage: 20x(8+1) +4 str r3, [sp, #-184]! ;reserve space on stack for temporary storage, store yoffset
cmp r2, #0 ;skip first_pass filter if xoffset=0 cmp r2, #0 ;skip first_pass filter if xoffset=0
str r3, [sp], #4 ;store yoffset add lr, sp, #4 ;point to temporary buffer
beq skip_firstpass_filter beq skip_firstpass_filter
;first-pass filter ;first-pass filter
...@@ -45,7 +45,6 @@ ...@@ -45,7 +45,6 @@
mov r2, #0x90000 ; height=9 is top part of counter mov r2, #0x90000 ; height=9 is top part of counter
sub r1, r1, #8 sub r1, r1, #8
mov lr, #20
|first_pass_hloop_v6| |first_pass_hloop_v6|
ldrb r6, [r0, #-5] ; load source data ldrb r6, [r0, #-5] ; load source data
...@@ -83,10 +82,10 @@ ...@@ -83,10 +82,10 @@
tst r2, #0xff ; test loop counter tst r2, #0xff ; test loop counter
usat r11, #8, r11, asr #7 usat r11, #8, r11, asr #7
add r12, r12, #0x40 add r12, r12, #0x40
strh r11, [sp], lr ; result is transposed and stored, which strh r11, [lr], #20 ; result is transposed and stored, which
usat r12, #8, r12, asr #7 usat r12, #8, r12, asr #7
strh r12, [sp], lr strh r12, [lr], #20
movne r11, r6 movne r11, r6
movne r12, r7 movne r12, r7
...@@ -107,8 +106,7 @@ ...@@ -107,8 +106,7 @@
subs r2, r2, #0x10000 subs r2, r2, #0x10000
mov r6, #158 sub lr, lr, #158
sub sp, sp, r6
add r0, r0, r1 ; move to next input line add r0, r0, r1 ; move to next input line
...@@ -116,10 +114,7 @@ ...@@ -116,10 +114,7 @@
;second pass filter ;second pass filter
secondpass_filter secondpass_filter
mov r1, #18 ldr r3, [sp], #4 ; load back yoffset
sub sp, sp, r1 ; 18+4
ldr r3, [sp, #-4] ; load back yoffset
ldr r0, [sp, #216] ; load dst address from stack 180+36 ldr r0, [sp, #216] ; load dst address from stack 180+36
ldr r1, [sp, #220] ; load dst stride from stack 180+40 ldr r1, [sp, #220] ; load dst stride from stack 180+40
...@@ -192,30 +187,28 @@ skip_firstpass_filter ...@@ -192,30 +187,28 @@ skip_firstpass_filter
sub r0, r0, r1, lsl #1 sub r0, r0, r1, lsl #1
sub r1, r1, #8 sub r1, r1, #8
mov r2, #9 mov r2, #9
mov r3, #20
skip_firstpass_hloop skip_firstpass_hloop
ldrb r4, [r0], #1 ; load data ldrb r4, [r0], #1 ; load data
subs r2, r2, #1 subs r2, r2, #1
ldrb r5, [r0], #1 ldrb r5, [r0], #1
strh r4, [sp], r3 ; store it to immediate buffer strh r4, [lr], #20 ; store it to immediate buffer
ldrb r6, [r0], #1 ; load data ldrb r6, [r0], #1 ; load data
strh r5, [sp], r3 strh r5, [lr], #20
ldrb r7, [r0], #1 ldrb r7, [r0], #1
strh r6, [sp], r3 strh r6, [lr], #20
ldrb r8, [r0], #1 ldrb r8, [r0], #1
strh r7, [sp], r3 strh r7, [lr], #20
ldrb r9, [r0], #1 ldrb r9, [r0], #1
strh r8, [sp], r3 strh r8, [lr], #20
ldrb r10, [r0], #1 ldrb r10, [r0], #1
strh r9, [sp], r3 strh r9, [lr], #20
ldrb r11, [r0], #1 ldrb r11, [r0], #1
strh r10, [sp], r3 strh r10, [lr], #20
add r0, r0, r1 ; move to next input line add r0, r0, r1 ; move to next input line
strh r11, [sp], r3 strh r11, [lr], #20
mov r4, #158 sub lr, lr, #158 ; move over to next column
sub sp, sp, r4 ; move over to next column
bne skip_firstpass_hloop bne skip_firstpass_hloop
b secondpass_filter b secondpass_filter
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment