That looks sane to me. If I switch to -O0:
That looks to me like it clobbers %esi.
In any case, it's _not_ reproducing with this simple test case at -O1 and above. So I switched my Android build back to release mode and indeed, it gets past the sys_prctl call. But then it crashes immediately after on the memset(). Here's the dissassembly:
(lldb) dis
libcrashmanager.so`google_breakpad::ExceptionHandler::HandleSignal:
0xa6648780 <+0>: pushl %ebp
0xa6648781 <+1>: movl %esp, %ebp
0xa6648783 <+3>: pushl %ebx
0xa6648784 <+4>: pushl %edi
0xa6648785 <+5>: pushl %esi
0xa6648786 <+6>: andl $-0x10, %esp
0xa6648789 <+9>: subl $0x10, %esp
0xa664878c <+12>: movl %esp, %esi
0xa664878e <+14>: calll 0xa6648793 ; <+19> at exception_handler.cc:445
0xa6648793 <+19>: popl %ebx
0xa6648794 <+20>: addl $0x344c1, %ebx ; imm = 0x344C1
0xa664879a <+26>: movl 0x8(%ebp), %ecx
0xa664879d <+29>: movl (%ecx), %eax
0xa664879f <+31>: testl %eax, %eax
0xa66487a1 <+33>: je 0xa66487b2 ; <+50> at exception_handler.cc
0xa66487a3 <+35>: subl $0xc, %esp
0xa66487a6 <+38>: pushl 0x8(%ecx)
0xa66487a9 <+41>: calll *%eax
0xa66487ab <+43>: addl $0x10, %esp
0xa66487ae <+46>: testb %al, %al
0xa66487b0 <+48>: je 0xa66487ea ; <+106> at linux_syscall_support.h
0xa66487b2 <+50>: movl 0x10(%ebp), %eax
0xa66487b5 <+53>: movl 0x8(%eax), %eax
0xa66487b8 <+56>: testl %eax, %eax
0xa66487ba <+58>: jle 0xa66487f1 ; <+113> at exception_handler.cc:453
0xa66487bc <+60>: movl $0x1, %ecx
0xa66487c1 <+65>: xorl %edx, %edx
0xa66487c3 <+67>: xorl %esi, %esi
0xa66487c5 <+69>: xorl %edi, %edi
0xa66487c7 <+71>: pushl %ebx
0xa66487c8 <+72>: movl $0x4, %ebx
0xa66487cd <+77>: movl $0xac, %eax
0xa66487d2 <+82>: int $0x80
0xa66487d4 <+84>: popl %ebx
0xa66487d5 <+85>: movl %eax, %edi
0xa66487d7 <+87>: cmpl $0xfffff001, %edi ; imm = 0xFFFFF001
0xa66487dd <+93>: jb 0xa6648807 ; <+135> at exception_handler.cc:459
0xa66487df <+95>: negl %edi
0xa66487e1 <+97>: calll 0xa66452b0 ; symbol stub for: __errno
0xa66487e6 <+102>: movl %edi, (%eax)
0xa66487e8 <+104>: jmp 0xa6648807 ; <+135> at exception_handler.cc:459
0xa66487ea <+106>: xorl %eax, %eax
0xa66487ec <+108>: jmp 0xa66488b0 ; <+304> at exception_handler.cc:487
0xa66487f1 <+113>: je 0xa66487f8 ; <+120> at exception_handler.cc:453
0xa66487f3 <+115>: cmpl $-0x6, %eax
0xa66487f6 <+118>: jne 0xa6648807 ; <+135> at exception_handler.cc:459
0xa66487f8 <+120>: movl 0x10(%ebp), %eax
0xa66487fb <+123>: movl 0xc(%eax), %edi
0xa66487fe <+126>: calll 0xa6645460 ; symbol stub for: getpid
0xa6648803 <+131>: cmpl %eax, %edi
0xa6648805 <+133>: je 0xa66487bc ; <+60> [inlined] sys_prctl(int, unsigned long, unsigned long, unsigned long, unsigned long) at exception_handler.cc:454
0xa6648807 <+135>: subl $0x4, %esp
0xa664880a <+138>: leal 0x4b4(%ebx), %eax
0xa6648810 <+144>: pushl $0x158 ; imm = 0x158
0xa6648815 <+149>: pushl $0x0
0xa6648817 <+151>: pushl %eax
0xa6648818 <+152>: calll 0xa66453e0 ; symbol stub for: memset
0xa664881d <+157>: addl $0x10, %esp
0xa6648820 <+160>: leal 0x434(%ebx), %eax
0xa6648826 <+166>: subl $0x4, %esp
0xa6648829 <+169>: pushl $0x80
0xa664882e <+174>: pushl 0x10(%ebp)
-> 0xa6648831 <+177>: movl %eax, 0x8(%esi)
0xa6648834 <+180>: pushl %eax
0xa6648835 <+181>: calll 0xa6645260 ; symbol stub for: memcpy
0xa664883a <+186>: addl $0xc, %esp
0xa664883d <+189>: leal 0x4b8(%ebx), %eax
0xa6648843 <+195>: pushl $0xe4
0xa6648848 <+200>: movl 0x14(%ebp), %ecx
0xa664884b <+203>: movl %ecx, %edi
0xa664884d <+205>: pushl %edi
0xa664884e <+206>: pushl %eax
0xa664884f <+207>: calll 0xa6645260 ; symbol stub for: memcpy
0xa6648854 <+212>: addl $0x10, %esp
0xa6648857 <+215>: movl 0x60(%edi), %eax
0xa664885a <+218>: testl %eax, %eax
0xa664885c <+220>: je 0xa6648873 ; <+243> at exception_handler.cc:479
0xa664885e <+222>: subl $0x4, %esp
0xa6648861 <+225>: leal 0x59c(%ebx), %ecx
0xa6648867 <+231>: pushl $0x70
0xa6648869 <+233>: pushl %eax
0xa664886a <+234>: pushl %ecx
0xa664886b <+235>: calll 0xa6645260 ; symbol stub for: memcpy
0xa6648870 <+240>: addl $0x10, %esp
0xa6648873 <+243>: subl $0xc, %esp
0xa6648876 <+246>: pushl $0xe0
0xa664887b <+251>: calll 0xa6645470 ; symbol stub for: syscall
0xa6648880 <+256>: addl $0x10, %esp
0xa6648883 <+259>: movl %eax, 0x4b4(%ebx)
0xa6648889 <+265>: movl 0x8(%ebp), %edi
0xa664888c <+268>: cmpl $0x0, 0x68(%edi)
0xa6648890 <+272>: je 0xa66488b2 ; <+306> at exception_handler.cc:486
0xa6648892 <+274>: movl 0x68(%edi), %eax
0xa6648895 <+277>: subl $0x4, %esp
0xa6648898 <+280>: pushl 0x8(%edi)
0xa664889b <+283>: pushl $0x1d8 ; imm = 0x1D8
0xa66488a0 <+288>: pushl 0x8(%esi)
0xa66488a3 <+291>: calll *%eax
0xa66488a5 <+293>: addl $0x10, %esp
0xa66488a8 <+296>: movl %eax, %ecx
0xa66488aa <+298>: movb $0x1, %al
0xa66488ac <+300>: testb %cl, %cl
0xa66488ae <+302>: je 0xa66488b2 ; <+306> at exception_handler.cc:486
0xa66488b0 <+304>: jmp 0xa66488be ; <+318> at exception_handler.cc:487
0xa66488b2 <+306>: subl $0x8, %esp
0xa66488b5 <+309>: pushl 0x8(%esi)
0xa66488b8 <+312>: pushl %edi
0xa66488b9 <+313>: calll 0xa6645490 ; symbol stub for: google_breakpad::ExceptionHandler::GenerateDump(google_breakpad::ExceptionHandler::CrashContext*)
0xa66488be <+318>: leal -0xc(%ebp), %esp
0xa66488c1 <+321>: popl %esi
0xa66488c2 <+322>: popl %edi
0xa66488c3 <+323>: popl %ebx
0xa66488c4 <+324>: popl %ebp
0xa66488c5 <+325>: retl
(lldb) reg r
General Purpose Registers:
eax = 0xa667d088 libcrashmanager.so`google_breakpad::(anonymous namespace)::g_crash_context_
ebx = 0xa667cc54 libcrashmanager.so`_GLOBAL_OFFSET_TABLE_
ecx = 0x00000050
edx = 0xa667d260 libcrashmanager.so`google_breakpad::(anonymous namespace)::g_handler_stack_