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.
