<div dir="ltr"><div>The mmap error is an issue with the qemu-aarch64 model I've been using. I am not sure how to get a dump of /proc/self/maps, as the model is configured as a non-interactive elf interpreter. I can successfully mmap a smaller address range, and I tried configuring the environment using setrlimit(), but I still get the error for the shadow memory range.  I may try to debug the qemu model further, but for now, I have switched to using a different interactive model, and the mmap now succeeds. However, I am getting a different error. When I try to run a simple<span style="color:rgb(0,0,0);font-family:Tahoma;font-size:13.333333969116211px"> "Hello World" program that prints using cout, I get this segfault error:</span></div>
<div><span style="color:rgb(0,0,0);font-family:Tahoma;font-size:13.333333969116211px"><br></span></div><div>==69==Parsed ASAN_OPTIONS: verbosity=2<br>==69==AddressSanitizer: failed to intercept '__isoc99_printf'<br>
==69==AddressSanitizer: failed to intercept '__isoc99_sprintf'<br>==69==AddressSanitizer: failed to intercept '__isoc99_snprintf'<br>==69==AddressSanitizer: failed to intercept '__isoc99_fprintf'<br>
==69==AddressSanitizer: failed to intercept '__isoc99_vprintf'<br>==69==AddressSanitizer: failed to intercept '__isoc99_vsprintf'<br>==69==AddressSanitizer: failed to intercept '__isoc99_vsnprintf'<br>
==69==AddressSanitizer: failed to intercept '__isoc99_vfprintf'<br>==69==AddressSanitizer: libc interceptors initialized<br>|| `[0x002000000000, 0x007fffffffff]` || HighMem    ||<br>|| `[0x001400000000, 0x001fffffffff]` || HighShadow ||<br>
|| `[0x001200000000, 0x0013ffffffff]` || ShadowGap  ||<br>|| `[0x001000000000, 0x0011ffffffff]` || LowShadow  ||<br>|| `[0x000000000000, 0x000fffffffff]` || LowMem     ||<br>MemToShadow(shadow): 0x001200000000 0x00123fffffff 0x001280000000 0x0013ffffffff<br>
redzone=16<br>max_redzone=2048<br>quarantine_size=256M<br>malloc_context_size=30<br>SHADOW_SCALE: 3<br>SHADOW_GRANULARITY: 8<br>SHADOW_OFFSET: 1000000000<br>==69==Installed the sigaction for signal 11<br>==69==SetCurrentThread: 0x007fb7ff1000 for thread 0x007fb7ff6000<br>
==69==T0: stack [0x007fff800000,0x008000000000) size 0x800000; local=0x007ffffffbd8<br>==69==AddressSanitizer Init done<br>ASAN:SIGSEGV<br>=================================================================<br>==69==ERROR: AddressSanitizer: SEGV on unknown address 0x100fffffff6e (pc 0x0000004a37b4 sp 0x007ffffffb70 bp 0x007ffffffbe0 T0)<br>
==69==AddressSanitizer CHECK failed: /local/mnt/workspace/gideonb/projects/toolchains/open-draco/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.cc:68 "((count)) < ((size))" (0x1, 0x1)<br>    <empty stack><span style="color:rgb(0,0,0);font-family:Tahoma;font-size:13.333333969116211px"><br>
</span></div><div><span style="color:rgb(0,0,0);font-family:Tahoma;font-size:13.333333969116211px"><br></span></div><div><font color="#000000" face="Tahoma">I switched to using printf, and the binary ran without any errors. I then tried making a use-after-delete error, and when I ran the binary, it reported a segfault error like above rather than the expected heap-use-after-free. When I tried making a heap-buffer-overflow error, there were no reported errors when I ran the binary. The message above appears to report two errors</font><font color="#000000" face="Tahoma">. </font><span style="color:rgb(0,0,0);font-family:Tahoma;font-size:13.333333969116211px">ASan seems to initialize ok, but then there is a segfault error at some point. The second error occurs when "SlowUnwindStackWithContext" is called from "GET_STACK_TRACE_SIGNAL" which is called when the segfault error is detected.</span><span style="color:rgb(0,0,0);font-family:Tahoma"> I am a bit mystified on where the problem might be.</span></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 30, 2014 at 8:58 PM, Alexey Samsonov <span dir="ltr"><<a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>+Greg in case he's seen similar problems.</div><div><br></div><div>Basically, ASan is unable to map the necessary shadow memory. You may want to dump the contents of /proc/self/maps and look if it conflicts</div>

<div>with the range ASan is trying to use. errno 12 is ENOMEM. Are you sure you don't have constraints on the virtual memory your process can use?</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
<div><div class="h5">On Fri, May 30, 2014 at 2:29 PM, Gideon Billings <span dir="ltr"><<a href="mailto:gideonhbillings@gmail.com" target="_blank">gideonhbillings@gmail.com</a>></span> wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><span lang="en-US"><font color="black" face="Tahoma"><span style="font-size:10pt" dir="ltr">Hello,<br>


<br>

I have been working on porting ASan to AArch64. I am building 
compiler-rt in "standalone mode" targeting aarch64. My build is 
successful, but I get the following runtime error when I run an ASan 
enabled executable through qemu-aarch64:<br>

<br>

</span></font></span><br><span lang="en-US"><font color="black" face="Tahoma"><span style="font-size:10pt" dir="ltr"><span lang="en-US"><font color="black" face="Tahoma"><span style="font-size:10pt" dir="ltr"><font color="#333399">==29184==Parsed ASAN_OPTIONS: verbosity=1</font><font color="#333399"><br>




==29184==AddressSanitizer: failed to intercept '__isoc99_printf'</font><font color="#333399"><br>

==29184==AddressSanitizer: failed to intercept '__isoc99_sprintf'</font><font color="#333399"><br>

==29184==AddressSanitizer: failed to intercept '__isoc99_snprintf'</font><font color="#333399"><br>

==29184==AddressSanitizer: failed to intercept '__isoc99_fprintf'</font><font color="#333399"><br>

==29184==AddressSanitizer: failed to intercept '__isoc99_vprintf'</font><font color="#333399"><br>

==29184==AddressSanitizer: failed to intercept '__isoc99_vsprintf'</font><font color="#333399"><br>

==29184==AddressSanitizer: failed to intercept '__isoc99_vsnprintf'</font><font color="#333399"><br>

==29184==AddressSanitizer: failed to intercept '__isoc99_vfprintf'</font><font color="#333399"><br>

==29184==AddressSanitizer: libc interceptors initialized</font><font color="#333399"><br>

|| `[0x002000000000, 0x007fffffffff]` || HighMem    ||</font><font color="#333399"><br>

|| `[0x001400000000, 0x001fffffffff]` || HighShadow ||</font><font color="#333399"><br>

|| `[0x001200000000, 0x0013ffffffff]` || ShadowGap  ||</font><font color="#333399"><br>

|| `[0x001000000000, 0x0011ffffffff]` || LowShadow  ||</font><font color="#333399"><br>

|| `[0x000000000000, 0x000fffffffff]` || LowMem     ||</font><font color="#333399"><br>

MemToShadow(shadow): 0x001200000000 0x00123fffffff 0x001280000000 0x0013ffffffff</font><font color="#333399"><br>

redzone=16</font><font color="#333399"><br>

max_redzone=2048</font><font color="#333399"><br>

quarantine_size=256M</font><font color="#333399"><br>

malloc_context_size=30</font><font color="#333399"><br>

SHADOW_SCALE: 3</font><font color="#333399"><br>

SHADOW_GRANULARITY: 8</font><font color="#333399"><br>

SHADOW_OFFSET: 1000000000</font><font color="#333399"><br>

==29184==ERROR: AddressSanitizer failed to allocate 0xc00000000 (51539607552) bytes at address 1400000000 (errno: 12)</font><font color="#333399"><br>

==29184==ReserveShadowMemoryRange failed while trying to map 0xc00000000 bytes. Perhaps you're using ulimit -v</font></span></font></span>

<br>

<br>This appears to be the same issue discussed in this thread:<br>

<a href="https://mymail.qualcomm.com/owa/redir.aspx?C=k7Wv_sbf90SWPFjF3_Wzyp-KmK3QT9EI87JrUWjRxE-4GcylWFTmUnPhLYMjO_xSknvKZiQAOf8.&URL=https%3a%2f%2fcode.google.com%2fp%2faddress-sanitizer%2fissues%2fdetail%3fid%3d246%23makechanges" target="_blank">https://code.google.com/p/address-sanitizer/issues/detail?id=246#makechanges</a><br>




<br>

I contacted Christophe Lyon, and he said he had successfully ported ASan
 to aarch64 and had committed a patch to enable this to LLVM:<br>

<a href="https://mymail.qualcomm.com/owa/redir.aspx?C=k7Wv_sbf90SWPFjF3_Wzyp-KmK3QT9EI87JrUWjRxE-4GcylWFTmUnPhLYMjO_xSknvKZiQAOf8.&URL=https%3a%2f%2fgithub.com%2fllvm-mirror%2fcompiler-rt%2fcommit%2f33465467e7f8243933100bab3cf8f34b79a8f54c" target="_blank">https://github.com/llvm-mirror/compiler-rt/commit/33465467e7f8243933100bab3cf8f34b79a8f54c</a><br>




<br>

His changes from this patch still appear to be configured correctly in 
my build, so I am not sure why I am getting this error. Is anyone able 
to shed some light on this?<br>

<br>

Thanks,<br>

-Gideon</span></font></span></div>
<br></div></div>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div>

</font></span></div>
</blockquote></div><br></div>