OSDN Git Service

libc: ARM64: kryo: use generic memmove routine
authorScott Mertz <scott@cyngn.com>
Mon, 21 Dec 2015 23:08:33 +0000 (15:08 -0800)
committerScott Mertz <scott@cyngn.com>
Mon, 21 Dec 2015 23:38:38 +0000 (15:38 -0800)
commit51ad57b30d5cb808bca20e0a6d25139435069283
tree27e5072cf2333a4a93d97721eed584a73eb47f3f
parent6d79500f5342edd505f0139db71527b1a0a72f1f
libc: ARM64: kryo: use generic memmove routine

The optimized memmove on commit 95cc2b990baffb4f1149c16647d4e2e2069054e5
causes odd runtime crashes on kryo.  For example, surfaceflinger crashes in
prebuilt adreno libraries when trying to generate the shader cache:

x0   0000007f827256c0  x1   000000000000000b  x2   0000007fcd7dfa30  x3   0000000000000000
x4   0000000000000000  x5   0000000000000003  x6   00000000000000ff  x7   0000000000000003
x8   0000007f825efa18  x9   0000007f825efa18  x10  0000000000000100  x11  0000000000001000

x16  000000000000006f  x17  0000000000000003  x18  0000000000000001  x19  0000007f825f1040
x20  0000007fcd7dfa30  x21  0000007fcd7df990  x22  0000007f88424c10  x23  0000000000000000
x24  0000007fcd7df970  x25  0000007fcd7dfa50  x26  0000000000000004  x27  0000000000000010
x28  0000007fcd7dfa30  x29  0000007fcd7df780  x30  0000007f86ef92b4
sp   0000007fcd7df780  pc   0000007f86ee8d78  pstate 0000000020000000

trace:
pc 00000000009ffd78  /system/vendor/lib64/libllvm-glnext.so
pc 0000000000a102b0  /system/vendor/lib64/libllvm-glnext.so (llvm::BitcodeReader::ParseFunctionBody(llvm::Function*)+904)
pc 0000000000a14020  /system/vendor/lib64/libllvm-glnext.so (llvm::BitcodeReader::Materialize(llvm::GlobalValue*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)+340)
pc 0000000000a0fe14  /system/vendor/lib64/libllvm-glnext.so (llvm::BitcodeReader::MaterializeModule(llvm::Module*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)+96)
pc 00000000003b503c  /system/vendor/lib64/libllvm-glnext.so (llvm::Module::MaterializeAll(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)+36)
pc 00000000003b5068  /system/vendor/lib64/libllvm-glnext.so (llvm::Module::MaterializeAllPermanently(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)+16)
pc 0000000000a0faa0  /system/vendor/lib64/libllvm-glnext.so (llvm::ParseBitcodeFile(llvm::StringRef, llvm::LLVMContext&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)+32)
pc 0000000000cf3db4  /system/vendor/lib64/libllvm-glnext.so (ShaderObjects::constructLLVMModule(void*, CompilerContext*, llvm::OwningPtr<llvm::Module>*, E_QGLC_SHADERTYPE)+520)
pc 0000000000c76c4c  /system/vendor/lib64/libllvm-glnext.so (ESXLinker::bcConstruct()+440)
pc 0000000000c843cc  /system/vendor/lib64/libllvm-glnext.so (SOLinker::linkShaders(QGLC_LINKPROGRAM_DATA*, QGLC_LINKPROGRAM_RESULT*)+92)
pc 0000000000c74cbc  /system/vendor/lib64/libllvm-glnext.so (CompilerContext::LinkProgram(unsigned int, QGLC_SRCSHADER_IRSHADER**, QGLC_LINKPROGRAM_DATA*, QGLC_LINKPROGRAM_RESULT*)+496)
pc 0000000000d057a0  /system/vendor/lib64/libllvm-glnext.so (QGLCLinkProgram(void*, unsigned int, QGLC_SRCSHADER_IRSHADER**, QGLC_LINKPROGRAM_DATA*, QGLC_LINKPROGRAM_RESULT*)+76)
pc 00000000001a49c4  /system/vendor/lib64/egl/libGLESv2_adreno.so (EsxShaderCompiler::CompileProgram(EsxContext*, EsxProgram const*, EsxLinkedList const*, EsxInfoLog*)+1380)
pc 000000000018d5b8  /system/vendor/lib64/egl/libGLESv2_adreno.so (EsxProgram::Link(EsxContext*)+408)
pc 000000000012e6bc  /system/vendor/lib64/egl/libGLESv2_adreno.so (EsxContext::LinkProgram(EsxProgram*)+60)
pc 000000000010be44  /system/vendor/lib64/egl/libGLESv2_adreno.so (glLinkProgram+36)
pc 0000007f88bddad0  <unknown>
pc 0000007f88bddf60  <unknown>
pc 0000007f88be18b8  <unknown>
pc 0000007f88bdfbb0  <unknown>
pc 0000007f88bca594  <unknown>
pc 0000007f88bcb350  <unknown>
pc 0000007f88bc9fec  <unknown>
pc 0000007f88bc8f28  <unknown>
pc 0000007f88bc8c90  <unknown>
pc 0000007f88af8ed4  <unknown> (android::Looper::pollInner(int)+312)
pc 0000007f88af920c  <unknown> (android::Looper::pollOnce(int, int*, int*, void**)+80)
pc 0000007f88bc5034  <unknown>
pc 0000007f88bc8784  <unknown> (android::SurfaceFlinger::run()+20)
pc 0000007f88c8c190  <unknown>
pc 000000000001bcd8  /system/lib64/libc.so (__libc_init+100)
pc 0000007f88c8bfcc  <unknown>

Change-Id: I9621f98b6683a3662b654f84c31ed0247ee81900
libc/arch-arm64/kryo/bionic/memmove.S [new file with mode: 0644]
libc/arch-arm64/kryo/kryo.mk