Hi Konstantin, On 26 March 2015 at 03:01, Konstantin Serebryany <[email protected]> wrote: > On Wed, Mar 25, 2015 at 10:23 AM, Venkataramanan Kumar > <[email protected]> wrote: >> Hi Konstantin/Renato, >> >>>> The values that define the location of the shadow are initialized at >>>> startup, >>>> so it should not be a problem. >>> >>> Excellent! >>> >> >> The Shadow offset, I need to set "1<<39" for Aarch64 (42 bit VA) and >> 1<<36 for Aarch64 (39 bit VA). >> >> In asan_mapping.h, it is defined as static const u64 >> kAArch64_ShadowOffset64 = 1ULL << 36. > > > Why 1ULL << 36 or some other smaller value will not work for both? >
On 42 bit VA, I was trying to use 64 bit allocator. I have to fix the allocator start and size to 0x10000000000. Other wise I got the below an assert failures. COMPILER_CHECK(kSpaceBeg % kSpaceSize == 0) COMPILER_CHECK((kRegionSize) >= (1ULL << (SANITIZER_WORDSIZE / 2))) Putting shadow offset at 2^39 I got HighMemBeg starting at 0x10000000000 which also will not interfere with application, libraries and the stack. >> >> If I understand correctly, I need to initialize this at startup in >> both places, compiler-rt/lib/asan and LLVM 's instrumentation place >> lib/Transforms/Instrumentation/AddressSanitizer.cpp ? >> >>>> The values for Allocator64 have to be compile-time constants for >>>> better performance, >>>> but Allocator64 is not going to work on 39 (and probably on 42) bits >>>> anyway. >>>> We'll need to use Allocator32. >> >> For Aarch64 with 42 VA bit I need to turn on Allocator64 > Why? ASAN tests passed with 64 bit allocator and with changes I mentioned above. So I was assuming we can switch 64 bit allocators when we detect 42 bit VA. But I agree, as we discussed it is not a good thing to do. It should be uniform across all VA and hence 32 bit allocators should be default. > >> and for 39 >> bit VA I need to turn on Allocator32. >> ASAN/TSAN does not work when allocator32 is on for 42bit VA. > > Let's not mix asan and tsan. > What's wrong with asan when "allocator32 is on for 42bit VA"? On 42 bit VA, running a simple stack resuse test case. I got this assert failure. ==24573==AddressSanitizer CHECK failed: /home/venkataramanan.kumar/LLVM/TSAN_port/Source/projects/compiler-rt/lib/sanitizer_common/sanitizer_allocator.h:841 "((res)) < ((kNumPossibleRegions))" (0x3ffb56, 0x80000) I am looking it into now, >> >> So I also need to detect and switch allocator types based on VA. >> >> >> On 25 March 2015 at 22:21, Renato Golin <[email protected]> wrote: >>> On 25 March 2015 at 16:41, Konstantin Serebryany >>> <[email protected]> wrote: >>>> Is it only 39 and 42, or is there a 3-rd option? >>> >>> As far as I know, only these two. >>> >>> >>>> The values that define the location of the shadow are initialized at >>>> startup, >>>> so it should not be a problem. >>> >>> Excellent! >>> >>> >>>> The values for Allocator64 have to be compile-time constants for >>>> better performance, >>>> but Allocator64 is not going to work on 39 (and probably on 42) bits >>>> anyway. >>>> We'll need to use Allocator32. >>> >>> That's our conclusion, too. >>> >>> I think the next step is to implement the run-time check for AArch64. >>> >>> Thanks for the help! >>> >>> cheers, >>> --renato regards, Venkat, -- You received this message because you are subscribed to the Google Groups "address-sanitizer" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
