[LLVMdev] Remaining Compiler-RT failures in ARM

Renato Golin renato.golin at linaro.org
Fri Oct 10 04:48:36 PDT 2014


So, problem 3 was fixed by avoiding the check for main as well as the
noreturn failure, and problem 2 will hopefully be fixed by adding the
RT_COMPILER_FLAGS to CMake, which has gone in but needs a server
restart to be sure. That leaves us with problem 1.

On 9 October 2014 17:29, Renato Golin <renato.golin at linaro.org> wrote:
> 1. AddressSanitizer.BuiltinLongJmpTest Unit Test
>
> Two configurations fail:
>  * Asan-arm-inline-Test
>  * Asan-arm-with-calls-Test
>
> I wonder what's the best way to run it individually and reduce the

What I get here is quite odd: "Illegal Instruction", which made me
believe it was the NEON problem like 2, but it's not. It seems to be
related to setjump/longjump routines.

Asan-arm-with-calls-Test:
   0x0014b4a4 in BuiltinLongJmpFunc1(__jmp_buf_tag*) () at
/work/llvm/src/compiler-rt/lib/asan/tests/asan_test.cc:580
   580   __builtin_longjmp((void**)buf, 1);

   0x0014b494 <+192>: andeq r1, r0, r4, asr #23
   0x0014b498 <+196>: andseq  r8, r2, r12, lsl #24
   0x0014b49c <+200>: andeq r1, r0, r12, ror r7
   0x0014b4a0 <+204>:     ; <UNDEFINED> instruction: 0x00128bd0
=> 0x0014b4a4 <+208>:     ; <UNDEFINED> instruction: 0xfff99bda

Asan-arm-inline-Test:

   0x001d8e7c in BuiltinLongJmpFunc1(__jmp_buf_tag*) () at
/work/llvm/src/compiler-rt/lib/asan/tests/asan_test.cc:580
   580   __builtin_longjmp((void**)buf, 1);

   0x001d8e6c <+248>: andeq r1, r0, r4, asr #23
   0x001d8e70 <+252>: andseq  r0, r10, r12, ror #4
   0x001d8e74 <+256>: andeq r1, r0, r12, ror r7
   0x001d8e78 <+260>: andseq  r0, r10, r0, lsr r2
=> 0x001d8e7c <+264>:     ; <UNDEFINED> instruction: 0xfffa45ba

Trying to decode those hex numbers as instructions, the only one that
had any sense (in ARM, Thumb, x86 or x86_64) was 0x00128bd0 (as
little-endian), but I may be getting this wrong. However, not even GDB
recognised those instructions, so I'm guessing it's a bug in the jump
library itself.

Looking for the implementation in Compiler-RT or LLVM, I haven't found
much aside from sanitizer interceptors. Where is this done?

Any ideas?

cheers,
--renato



More information about the llvm-dev mailing list