On 15 October 2015 at 08:29, Yury Gribov <y.gri...@samsung.com> wrote: > Do you have any estimation for when full AArch64 support is ready in LLVM? > If it's still months away, I wonder if we may want to enable at least > current (partial) support for non-Thunder users.
Hi Yury, Unfortunately, no. Basic support is there, better support is a few weeks away (fingers crossed), but full support may take years (and we're not promising it :). However, I can give you an overview of what is done and what is left to do, so you can have your own judgement. Last year, Christophe added ASAN to AArch64, but because of multiple problems with the tests on environments we didn't have (the official buildbot was a Juno outside of Linaro), we couldn't enable it by default. So, support for ASAN and all other sanitizers on AArch64 was put on hold. Since January this year, we've been studying TSAN, and realised that there were many shared problems with ASAN, so we decided to fix the buildbot problem and implement the other sanitizers. Fast-forward to today, we have almost all sanitizers "working" on AArch64. Not all features work (Adhemerval knows more about this), and it doesn't work on every AArch64 hardware out there, namely those that we don't have access to. But there are some things that do work, and they are being tested on every commit since a few months ago. This means that you can try it out, see what works and what doesn't, and let us know by creating a bug in LLVM's bugzilla on Compiler-RT. It doesn't mean we'll fix everything, but it means we'll know what's broken, so we can plan better. One hint to understand the level of support is to look at the tests. We use two ways of marking tests: XFAIL, as usual, says the test *must* fail, and normally means (merits aside), that a sanitizer feature is not implemented, or the test is exclusive for a different architecture. The other way is by marking it as "REQUIRES: stable-runtime", which is for tests that fail on some platforms but not others. This normally means an underlying (internal) sanitizer feature is not present or too generic, and the test is not good enough to detect it. None of that is good, we know, but it is what it is, and as you can imagine, the priority is to get things working first. For the future, there are still a few things we have to do: 1. Finish adding all the sanitizers. Because they share a lot of code and execution, enabling one at a time and fixing all the bugs would make us ignore the problems in all the other SANs, and we'd have to re-implement a lot again on every new one. Like untangling hair, working from inside only makes things worse. This would also allow other people to test the sanitizers that they care about and report bugs, so we can have a wider view of what's missing and what's broken. Adhemerval is on the last ones now and we shall have them upstream, tested (modulo XFAIL), in the next few weeks. 2. The first critical issue for AArch64 is the VMA problem and is our current focus. Some ideas were put forward (including in this thread) and right now Adhemerval is investigating Jakub's proposal. It shouldn't take long for us to have a prototype, and we'll share our findings here as soon as we have it. We'll focus on that problem for now and only move to the next step once this is resolved and all SAN tests pass on both 39 and 42 VMA. We don't have 48 or 56, so we'll rely on you guys (Andrew?) to test the prototype and report back. Otherwise, we'll assume working on 39/42 is good enough. This should take another few weeks. 3. After the VMA issue is resolved, we'll look at clearing the "stable-runtime" and XFAIL flags from as many tests as possible. Either by implementing the features, or by improving the tests, or by moving them into an architecture specific place where they don't get tested in AArch64 if they don't have to (ex. x86 specific stuff). But I have to warn you, this will be at a much lower priority than the VMA issue, and it could take years to finish. Basically, we'll do on a case by case basis, what people use, what is important, etc. So, no promises there. But the "product" should be stable enough at this stage on *what's implemented* that you can use it on your own code. Hope that helps. cheers, --renato