25 Ноя 2016 г. 20:23 пользователь "Park Kit" <keiteep...@gmail.com> написал:
>
> Hi Maxim,

Hi

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

Try to do "make -j12" instead of "make all-gcc". If that doesn't work,
rebuild GCC from the scratch:

1) rm -rf *
2) configure ...
3) make -j12

Make sure you added 'mips-linux' entry in configure.tgt.

>
> 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 <chefm...@gmail.com>:
>>
>> 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, sagar....@imgtec.com 님의 말:
>>>>
>>>> Hi Park,
>>>>
>>>> Following are the steps for building LLVM and compiler-rt for target
MIPS (Host=x86, Target=MIPS):
>>>> 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"
>>>> Checkout llvm.
>>>> Checkout clang in /llvm/tools/
>>>> Build LLVM cross compiler which targets MIPS.
>>>> 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.
>>>> Run "ninja; ninja install"
>>>> Checkout compiler-rt
>>>> Build compiler-rt in a separate build directory using the just built
llvm cross compiler.
>>>> 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-where-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.
>>>> 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):
>>>> 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"
>>>> Checkout llvm
>>>> Checkout clang in /llvm/tools/
>>>> Checkout compiler-rt in /llvm/projects/
>>>> 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.
>>>> 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, sagar....@imgtec.com 님의 말:
>>>>>>
>>>>>> 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 <keite...@gmail.com>
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 address-saniti...@googlegroups.com.
>>>>>>>>> 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
address-sanitizer+unsubscr...@googlegroups.com.
>>
>> 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 address-sanitizer+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to