Hi Maxim,

Really appreciated for the link which works for me when follows exactly.
However, I am seeing two differences from you when trying to build ASAN:

1. Used the same glibc version but no error on a machine I use.
2. When either use a libsanitizer/configure.tgt tweak or
--enable-libsanitizer, "make all-gcc" doesn't build "libsanitizer".

May need to look into Makefile.in and need to figure out. Will updated on
that and many thanks again.

Kit


Many thanks,
Kit
https://kitpark.slack.com/
------
Sorry for a terse reply or typo as sent from a mobile.

2016-11-24 7:59 GMT+00:00 Maxim Ostapenko <[email protected]>:

> Hi,
>
> вторник, 22 ноября 2016 г., 17:48:21 UTC+3 пользователь Park Kit написал:
>>
>> Hi Sagar, Maxim,
>>
>> Appreciated for your try and comments.
>>
>> @Sagar, your steps are bit different from what I followed so will give it
>> a try to build. This confirms at least ASAN works for cross-compile on MIPS
>> and which is great.
>>
>> @Maxim, you're right on 2) and that's what I did. Have you used the
>> buildroot to build cross-compile GCC on MIPS or used GCC package only? What
>> version have you used? Would you mind showing command lines to configure
>> and to build it?
>>
>
> Yes, I've used cross buildroot. It can be quite simply built manually,
> I've used this pretty nice instruction: http://preshing.com/20141119/
> how-to-build-a-gcc-cross-compiler/.
> The components I used:
> * current trunk GCC
> * current trunk binutils
> * current trunk Linux headers
> * Glibc 2.20
>
> The only difference I've needed is a local patch for Glibc (I used 2.20)
> to fix build error (the patch is attached).
>
> I'm also attaching the patch I used to enable ASan in GCC for MIPS (you
> can apply it on step 7).
>
> Once you've built toolchain, you can simple test:
>
> $ mips-linux-gcc *-fsanitize=address * <gcc_tree_location>/gcc/
> testsuite/c-c++-common/asan/heap-overflow-1.c *-fstack-protector*
> $ qemu-mips -L $SYSROOT -R 0 ./a.out
>
> =================================================================
> ==9453==ERROR: AddressSanitizer: heap-buffer-overflow on address
> 0x42c007ba at pc 0x00400a94 bp 0x407ffca0 sp 0x407ffcc8
> READ of size 1 at 0x42c007ba thread T0
>     #0 0x400a8c  (/home/max/build/mips/gcc/a.out+0x400a8c)
>     #1 0x40e5a36c  (/opt/cross/mips//mips-linux/lib/libc.so.6+0x1936c)
>
> 0x42c007ba is located 0 bytes to the right of 10-byte region
> [0x42c007b0,0x42c007ba)
> allocated by thread T0 here:
>     #0 0x4093fe9c  (/opt/cross/mips//mips-linux/lib/libasan.so.4+0x107e9c)
>     #1 0x4009e4  (/home/max/build/mips/gcc/a.out+0x4009e4)
>     #2 0x40e5a36c  (/opt/cross/mips//mips-linux/lib/libc.so.6+0x1936c)
>
> SUMMARY: AddressSanitizer: heap-buffer-overflow
> (/home/max/build/mips/gcc/a.out+0x400a8c)
> Shadow bytes around the buggy address:
>   0x130200a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>   0x130200b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>   0x130200c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>   0x130200d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>   0x130200e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
> =>0x130200f0: fa fa fa fa fa fa 00[02]fa fa fa fa fa fa fa fa
>   0x13020100: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>   0x13020110: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>   0x13020120: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>   0x13020130: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>   0x13020140: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
> Shadow byte legend (one shadow byte represents 8 application bytes):
>   Addressable:           00
>   Partially addressable: 01 02 03 04 05 06 07
>   Heap left redzone:       fa
>   Freed heap region:       fd
>   Stack left redzone:      f1
>   Stack mid redzone:       f2
>   Stack right redzone:     f3
>   Stack after return:      f5
>   Stack use after scope:   f8
>   Global redzone:          f9
>   Global init order:       f6
>   Poisoned by user:        f7
>   Container overflow:      fc
>   Array cookie:            ac
>   Intra object redzone:    bb
>   ASan internal:           fe
>   Left alloca redzone:     ca
>   Right alloca redzone:    cb
> ==9453==ABORTING
>
> Note that I've added  *-fstack-protector *flag to avoid "*cc1: warning:
> -fsanitize=address and -fsanitize=kernel-address are not supported for this
> target" *error on compilation step. This is weird, but for some reason
> GCC folks use this flag to control *FRAME_GROWS_DOWNWARD *macro om MIPS.
> GCC's ASan doesn't support targets with *FRAME_GROWS_DOWNWARD == 0 *so I
> just added *-fstack-protector *as a workaround.
>
>
>
>>
>> Keep you posted on further tries. Many thanks
>> Kit
>>
>> 2016년 11월 19일 토요일 오전 11시 19분 34초 UTC, [email protected] 님의 말:
>>>
>>> Hi Park,
>>>
>>> *Following are the steps for building LLVM and compiler-rt for target
>>> MIPS (Host=x86, Target=MIPS):*
>>>
>>>    1. Install prerequisites with "sudo apt-get install cmake
>>>    ninja-build gcc-5-mipsel-linux-gnu g++-5-mipsel-linux-gnu
>>>    gcc-5-multilib-mipsel-linux-gnu g++-5-multilib-mipsel-linux-gnu
>>>    binutils-mipsel-linux-gnu libgcc1-mipsel-cross libstdc++6-mipsel-cross"
>>>    2. Checkout llvm.
>>>    3. Checkout clang in /llvm/tools/
>>>    4. Build LLVM cross compiler which targets MIPS.
>>>       1. Run "cmake -G Ninja ../llvm 
>>> -DCMAKE_INSTALL_PREFIX=<path-to-install-dir>
>>>       -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<install-dir>
>>>       -DLLVM_DEFAULT_TARGET_TRIPLE=mipsel-linux-gnu
>>>       -DLLVM_TARGET_ARCH=Mips -DLLVM_TARGETS_TO_BUILD=Mips" in a build 
>>> directory.
>>>       2. Run "ninja; ninja install"
>>>    5. Checkout compiler-rt
>>>    6. Build compiler-rt in a separate build directory using the just
>>>    built llvm cross compiler.
>>>       1. Run "cmake -G Ninja ../compiler-rt/
>>>       -DCMAKE_C_COMPILER=<path-to-where-llvm-was-installed>/bin/clang
>>>       -DCMAKE_CXX_COMPILER=<path-to-where-llvm-was-installed>/bin/clang++
>>>       -DCMAKE_BUILD_TYPE=Release -DLLVM_CONFIG_PATH=<path-to-wh
>>>       ere-llvm-was-installed>//bin/llvm-config
>>>       
>>> -DCOMPILER_RT_INSTALL_PATH=<path-to-where-llvm-was-installed>//lib/clang/4.0.0
>>>       -DCMAKE_C_FLAGS="-I/usr/mipsel-linux-gnu/include/
>>>       -Wl,-L/usr/mipsel-linux-gnu/lib/" 
>>> -DCMAKE_CXX_FLAGS="-I/usr/mipsel-linux-gnu/include/
>>>       -Wl,-L/usr/mipsel-linux-gnu/lib/"" in a separate build directory.
>>>       2. Run "ninja; ninja install"
>>>
>>> You can also use the GCC cross tool chain instead of the just built LLVM
>>> cross tool chain to build the compiler-rt sources.
>>>
>>> *Running a simple test from the ASAN test suite:*
>>>
>>> $ <path-to-where-llvm-was-installed>/bin/clang -fsanitize=address
>>> -Wl,--dynamic-linker=/usr/mipsel-linux-gnu/lib/ld.so.1 use-after-free.cc
>>>
>>> $ qemu-mipsel -cpu 74Kf -E LD_LIBRARY_PATH=/usr/mipsel-linux-gnu/lib/
>>> a.out
>>> =================================================================
>>> ==1487==ERROR: AddressSanitizer: heap-use-after-free on address
>>> 0x74d007b5 at pc 0x0052d518 bp 0x76fff5c0 sp 0x76fff5e4
>>> READ of size 1 at 0x74d007b5 thread T0
>>>     #0 0x52d510  (/home/slt/Tests/a.out+0x52d510)
>>>     #1 0x76535bd4  (/usr/mipsel-linux-gnu/lib/libc.so.6+0x19bd4)
>>>
>>> 0x74d007b5 is located 5 bytes inside of 10-byte region
>>> [0x74d007b0,0x74d007ba)
>>> freed by thread T0 here:
>>>     #0 0x4f4124  (/home/slt/Tests/a.out+0x4f4124)
>>>     #1 0x52d4a8  (/home/slt/Tests/a.out+0x52d4a8)
>>>     #2 0x76535bd4  (/usr/mipsel-linux-gnu/lib/libc.so.6+0x19bd4)
>>>
>>> previously allocated by thread T0 here:
>>>     #0 0x4f4580  (/home/slt/Tests/a.out+0x4f4580)
>>>     #1 0x52d498  (/home/slt/Tests/a.out+0x52d498)
>>>     #2 0x76535bd4  (/usr/mipsel-linux-gnu/lib/libc.so.6+0x19bd4)
>>>
>>> SUMMARY: AddressSanitizer: heap-use-after-free
>>> (/home/slt/Tests/a.out+0x52d510)
>>> Shadow bytes around the buggy address:
>>>   0x194400a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>>   0x194400b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>>   0x194400c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>>   0x194400d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>>   0x194400e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>> =>0x194400f0: fa fa fa fa fa fa[fd]fd fa fa fa fa fa fa fa fa
>>>   0x19440100: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>>   0x19440110: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>>   0x19440120: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>>   0x19440130: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>>   0x19440140: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
>>> Shadow byte legend (one shadow byte represents 8 application bytes):
>>>   Addressable:           00
>>>   Partially addressable: 01 02 03 04 05 06 07
>>>   Heap left redzone:       fa
>>>   Freed heap region:       fd
>>>   Stack left redzone:      f1
>>>   Stack mid redzone:       f2
>>>   Stack right redzone:     f3
>>>   Stack after return:      f5
>>>   Stack use after scope:   f8
>>>   Global redzone:          f9
>>>   Global init order:       f6
>>>   Poisoned by user:        f7
>>>   Container overflow:      fc
>>>   Array cookie:            ac
>>>   Intra object redzone:    bb
>>>   ASan internal:           fe
>>>   Left alloca redzone:     ca
>>>   Right alloca redzone:    cb
>>> ==1487==ABORTING
>>>
>>> *To cross build a complete LLVM toolchain which will run on MIPS and
>>> target to MIPS **(Host=MIPS, Target=MIPS):*
>>>
>>>    1. Install prerequisites with "sudo apt-get install cmake
>>>    ninja-build gcc-5-mipsel-linux-gnu g++-5-mipsel-linux-gnu
>>>    gcc-5-multilib-mipsel-linux-gnu g++-5-multilib-mipsel-linux-gnu
>>>    binutils-mipsel-linux-gnu libgcc1-mipsel-cross libstdc++6-mipsel-cross"
>>>    2. Checkout llvm
>>>    3. Checkout clang in /llvm/tools/
>>>    4. Checkout compiler-rt in /llvm/projects/
>>>    5. Run "cmake -G Ninja ../llvm 
>>> -DCMAKE_INSTALL_PREFIX=<path-to-install-dir>
>>>    -DCMAKE_BUILD_TYPE=Release -DCMAKE_CROSSCOMPILING=True
>>>    -DLLVM_TABLEGEN=<path-to-host-bin>/llvm-tblgen
>>>    -DCLANG_TABLEGEN=<path-to-host-bin>/clang-tblgen
>>>    -DLLVM_HOST_TRIPLE=mipsel-linux-gnu 
>>> -DLLVM_DEFAULT_TARGET_TRIPLE=mipsel-linux-gnu
>>>    -DLLVM_TARGET_ARCH=Mips -DLLVM_TARGETS_TO_BUILD=Mips
>>>    -DCMAKE_C_COMPILER="/usr/bin/mipsel-linux-gnu-gcc-5"
>>>    -DCMAKE_CXX_COMPILER="/usr/bin/mipsel-linux-gnu-g++-5"
>>>    -DCMAKE_ASM_COMPILER="/usr/bin/mipsel-linux-gnu-gcc-5"
>>>    -DCMAKE_C_FLAGS="-mips32 -mabi=32" -DCMAKE_CXX_FLAGS="-mips32 -mabi=32"" 
>>> in
>>>    a build directory.
>>>    6. Run "ninja; ninja install"
>>>
>>> But "ninja install" does not copy the sanitizer runtime libs in the
>>> install directory. So you will have to copy them to the install directory
>>> manually.
>>>
>>>
>>> Regarding GCC's ASAN support for MIPS, as Maxim said we will have to add
>>> support for it following the steps he mentioned.
>>>
>>>
>>> Regards,
>>>
>>> Sagar
>>>
>>>
>>>
>>> On Wednesday, November 16, 2016 at 1:13:06 PM UTC+5:30, Park Kit wrote:
>>>>
>>>> Hi Sagar,
>>>>
>>>> Many thanks for a reply. Although I am seeking to have GCC cross
>>>> compile working, it would be great to know that ASAN builds for mips on
>>>> clang.
>>>>
>>>> Looking forward to good news on that.
>>>>
>>>> Many thanks
>>>> Kit
>>>>
>>>> 2016년 11월 15일 화요일 오후 6시 56분 48초 UTC, [email protected] 님의 말:
>>>>>
>>>>> Hi Park,
>>>>>
>>>>> Sorry for the delay.
>>>>>
>>>>> In order to run ASAN on mips, we always did a native build of
>>>>> compiler-rt on a real mips hardware. We never tried the cross build of
>>>>> compiler-rt.
>>>>>
>>>>> However, since you need the cross build, I will give it a try and get
>>>>> back to you as soon as I get success.
>>>>>
>>>>> Regards,
>>>>> Sagar
>>>>>
>>>>> On Tuesday, November 15, 2016 at 1:59:15 PM UTC+5:30, Park Kit wrote:
>>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> Could anyone please give me some pointers to try?
>>>>>>
>>>>>> 2016년 10월 15일 토요일 오전 1시 21분 6초 UTC+1, kcc 님의 말:
>>>>>>>
>>>>>>> Sagar, Simon,
>>>>>>> Could you please consult on ASAN  for MIPS?
>>>>>>>
>>>>>>> On Fri, Oct 14, 2016 at 3:04 PM, Park Kit <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Correction. ASN means ASAN of course. :-)
>>>>>>>>
>>>>>>>> --
>>>>>>>> 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.
>>>>>>>>
>>>>>>>
>>>>>>> --
> You received this message because you are subscribed to a topic in the
> Google Groups "address-sanitizer" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/
> topic/address-sanitizer/A5iPCUDa7YM/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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.

Reply via email to