diff options
author | Anna Zaks <ganna@apple.com> | 2015-06-25 23:35:45 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2015-06-25 23:35:45 +0000 |
commit | 4f652b69b110de48e07ea334f4d41f83bc4784b2 (patch) | |
tree | a81cca9d27e52355252e8f4a22aaa09e9324a3bf /llvm/lib/Object/SymbolicFile.cpp | |
parent | f799edef28f95d3cd20863fdf9825b421f6c6baf (diff) | |
download | llvm-4f652b69b110de48e07ea334f4d41f83bc4784b2.zip llvm-4f652b69b110de48e07ea334f4d41f83bc4784b2.tar.gz llvm-4f652b69b110de48e07ea334f4d41f83bc4784b2.tar.bz2 |
[asan] Don't run stack malloc on functions containing inline assembly.
It makes LLVM run out of registers even on 64-bit platforms. For example, the
following test case fails on darwin.
clang -cc1 -O0 -triple x86_64-apple-macosx10.10.0 -emit-obj -fsanitize=address -mstackrealign -o ~/tmp/ex.o -x c ex.c
error: inline assembly requires more registers than available
void TestInlineAssembly(const unsigned char *S, unsigned int pS, unsigned char *D, unsigned int pD, unsigned int h) {
unsigned int sr = 4, pDiffD = pD - 5;
unsigned int pDiffS = (pS << 1) - 5;
char flagSA = ((pS & 15) == 0),
flagDA = ((pD & 15) == 0);
asm volatile (
"mov %0, %%"PTR_REG("si")"\n"
"mov %2, %%"PTR_REG("cx")"\n"
"mov %1, %%"PTR_REG("di")"\n"
"mov %8, %%"PTR_REG("ax")"\n"
:
: "m" (S), "m" (D), "m" (pS), "m" (pDiffS), "m" (pDiffD), "m" (sr), "m" (flagSA), "m" (flagDA), "m" (h)
: "%"PTR_REG("si"), "%"PTR_REG("di"), "%"PTR_REG("ax"), "%"PTR_REG("cx"), "%"PTR_REG("dx"), "memory"
);
}
http://reviews.llvm.org/D10719
llvm-svn: 240722
Diffstat (limited to 'llvm/lib/Object/SymbolicFile.cpp')
0 files changed, 0 insertions, 0 deletions