Clear the return address register in __bionic_clone.

The unwinder will end up on the parent thread's stack if the return
address register is not cleared.

Bug: 14270816
Bug: 15195760
Change-Id: Iebcdf5cc881cad245643bb193760de35eb7f8b19
This commit is contained in:
Elliott Hughes 2014-05-27 15:47:32 -07:00
parent 1c4d83012f
commit e7dccdf683
2 changed files with 6 additions and 0 deletions

View File

@ -54,6 +54,9 @@ ENTRY(__bionic_clone)
j ra
.L__thread_start_bc:
# Clear return address in child so we don't unwind further.
li ra,0
lw a0,0(sp) # fn
lw a1,4(sp) # arg

View File

@ -75,6 +75,9 @@ LEAF(__bionic_clone, FRAMESZ)
j ra
.L__thread_start_bc:
# Clear return address in child so we don't unwind further.
li ra,0
# void __bionic_clone_entry(int (*func)(void*), void *arg)
PTR_L a0,FRAME_FN(sp) # fn
PTR_L a1,FRAME_ARG(sp) # arg