hi,

in addition to add "-marm" to gcc, add "-R .note.gnu.build-id" to objcopy.

On Wed, Dec 30, 2015 at 6:33 AM, Piotr Król <[email protected]> wrote:
> On Tue, Dec 29, 2015 at 11:16:57AM +0200, Siarhei Siamashka wrote:
>> Hi Piotr,
>>
>> Thanks for providing the logs.
>>
>> On Tue, 29 Dec 2015 01:25:25 +0100
>> Piotr Król <[email protected]> wrote:
>>
>> > Using built-in specs.
>> > COLLECT_GCC=arm-linux-gnueabihf-gcc
>> > COLLECT_LTO_WRAPPER=/home/pietrushnic/bin/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.1/lto-wrapper
>> > Target: arm-linux-gnueabihf
>> > Configured with: 
>> > /cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/src/gcc-linaro-4.9-2014.07/configure
>> >  --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu 
>> > --target=arm-linux-gnueabihf 
>> > --prefix=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install
>> >  
>> > --with-sysroot=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc
>> >  --enable-languages=c,c++,fortran --disable-multilib --enable-multiarch 
>> > --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 
>> > --with-float=hard --with-pkgversion='crosstool-NG 
>> > linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.07' 
>> > --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit 
>> > --enable-libmudflap --enable-libgomp --enable-libssp 
>> > --with-gmp=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static
>> >  
>> > --with-mpfr=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static
>> >  
>> > --with-mpc=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static
>> >  
>> > --with-isl=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static
>> >  
>> > --with-cloog=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static
>> >  
>> > --with-libelf=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static
>> >  --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id 
>> > --enable-plugin --enable-gold 
>> > --with-local-prefix=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc
>> >  --enable-c99 --enable-long-long " --disable-multilib --with-float=hard
>> > Thread model: posix
>> > gcc version 4.9.1 20140710 (prerelease) (crosstool-NG 
>> > linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.07)
>>
>> This toolchain has been indeed configured using "--with-mode=thumb"
>>
>> > It looks like my version of radare2 doesn't decode instructions correctly.
>> > Maybe you are using different version (I'm on Debian):
>> >
>> > radare2 0.9.6 @ linux-little-x86-64 git.0.9.6
>> > commit: 1: build: 2015-06-26
>> >
>> > [0x00000000]> pd
>> >             0x00000000    060000ea     ands x6, x0, x0
>> >             0x00000004    65474f4e     .inst 0x4e4f4765
>> >             0x00000008    2e425430     adr x14, 0x000a884d
>> >             0x0000000c    e110498d     .inst 0x8d4910e1
>> >             0x00000010    00200000     .inst 0x00002000
>> >             0x00000014    53504c01     .inst 0x014c5053
>> >             0x00000018    00000000     .inst 0x00000000
>> >             0x0000001c    00000000     .inst 0x00000000
>> >             0x00000020    04000000     .inst 0x00000004
>> >             0x00000024    14000000     .inst 0x00000014
>> >             0x00000028    03000000     .inst 0x00000003
>> >             0x0000002c    474e5500     .inst 0x00554e47
>> >             0x00000030    8f2e3945     .inst 0x45392e8f
>> >             0x00000034    6753f158     ldr x7, 0xfffffffffffe2aa0
>> >             0x00000038    29a9f212     .inst 0x12f2a929
>> >             0x0000003c    fd4d5924     .inst 0x24594dfd
>> >             0x00000040    1e986ba7     .inst 0xa76b981e
>> >             0x00000044    004b1847     .inst 0x47184b00
>> >             0x00000048    2000ffff     .inst 0xffff0020
>>
>> Oh, looks like your radare2 is disassembling it as 64-bit ARM code
>> by default. One can use radare2 cmdline options "-a arm -b 16" to
>> disassemble it as thumb2 or "-a arm -b 32" to disassemble it as
>> normal 32-bit ARM code (that's what the Allwinner's BROM wants).
>>
>> Disassembling your file as thumb2 instead of 64-bit code results
>> in the following (we need to start disassembling at the address
>> 0x20):
>>
>> $ r2 -a arm -b 16 fel-sdboot.sunxi
>> [0x00000000]> s 0x20
>> [0x00000020]> pd
>>            0x00000020    0400         movs r4, r0
>>            0x00000022    0000         movs r0, r0
>>            0x00000024    1400         movs r4, r2
>>            0x00000026    0000         movs r0, r0
>>            0x00000028    0300         movs r3, r0
>>            0x0000002a    0000         movs r0, r0
>>            0x0000002c    474e         ldr r6, [pc, 0x11c] ; [:4]=0
>>            0x0000002e    5500         lsls r5, r2, 1
>>            0x00000030    8f2e         cmp r6, 0x8f
>>            0x00000032    3945         cmp r1, r7
>>            0x00000034    6753         strh r7, [r4, r5]
>>            0x00000036    f158         ldr r1, [r6, r3]
>>            0x00000038    29a9         add r1, sp, 0xa4
>>            0x0000003a    f212         asrs r2, r6, 0xb
>>            0x0000003c    fd4d         ldr r5, [pc, 0x3f4] ; [:4]=0xffffff00 
>> ; 1076
>>            0x0000003e    5924         movs r4, 0x59
>>            0x00000040    1e98         ldr r0, [sp, 0x78]
>>            0x00000042    6ba7         adr r7, 0x1ac
>>            0x00000044    004b         ldr r3, [pc, 0] ; [:4]=0xffff0020 ; 'H'
>>        `=< 0x00000046    1847         bx r3
>>            0x00000048    2000         movs r0, r4
>>            0x0000004a    ffff0000     invalid
>>
>> After doing some rather strange manipulations in the beginning, it
>> tries to jump to 0xffff0020 in the end (the FEL handler address
>> in the BROM).
>>
>
> Hi Siarhei,
> now I have something similar, but IIUC code jumps to different address. This 
> is
> Linaro 2014.07 toolchain.
>
> $ r2 -a arm -b 16 fel-sdboot.sunxi
> WARN: Use '-e bin.rawstr=true' or 'rabin2 -zz' to find strings on unknown 
> file types
> [0x00000000]> s 0x20
> [0x00000020]> pd
>             0x00000020    0400         movs r4, r0
>             0x00000022    0000         movs r0, r0
>             0x00000024    1400         movs r4, r2
>             0x00000026    0000         movs r0, r0
>             0x00000028    0300         movs r3, r0
>             0x0000002a    0000         movs r0, r0
>             0x0000002c    474e         ldr r6, [pc, 284] ; (0x0000014c)
>             0x0000002e    5500         lsls r5, r2, 1
>             0x00000030    8f2e         cmp r6, 143
>             0x00000032    3945         cmp r1, r7
>             0x00000034    6753         strh r7, [r4, r5]
>             0x00000036    f158         ldr r1, [r6, r3]
>             0x00000038    29a9         add r1, sp, 164
>             0x0000003a    f212         asrs r2, r6, 11
>             0x0000003c    fd4d         ldr r5, [pc, 1012] ; (0x00000434)
>             0x0000003e    5924         movs r4, 89
>             0x00000040    1e98         ldr r0, [sp, 120]
>             0x00000042    6ba7         add r7, pc, 428 ; (adr r7, 0x000001f0)
>             0x00000044    004b         ldr r3, [pc, 0] ; (0x00000048)
>             0x00000046    1847         bx r3
>                0x0000004d()
>             0x00000048    2000         movs r0, r4
>             0x0000004a    ffff0000     vaddl.u<illegal width 64> q8, d15, d0
>
> This was compiled with -marm.
>
>> > > My random guess is that your toolchain is probably generating thumb2
>> > > code by default. We might need to add '-marm' option to CFLAGS in the
>> > > makefile.
>> >
>> > Tried that, unfortunately doesn't help.
>>
>> Well, we do want to have 32-bit ARM code in "fel-sdboot.sunxi", so
>> using the -marm option in the makefile would be still the right thing
>> to do. Your toolchain may be still problematic though. Because even
>> after artificially adding -mthumb option when using my toolchain, I
>> get a much more reasonable short thumb2 code without any junk in the
>> beginning:
>>
>> $ r2 -a arm -b 16 fel-sdboot.sunxi
>> [0x00000000]> s 0x20
>> [0x00000020]> pd
>>            0x00000020    08b5         push {r3, lr}
>>            0x00000022    014b         ldr r3, [pc, 4] ; [:4]=0xffff0020 ; '('
>>            0x00000024    9847         blx r3
>>            0x00000026    08bd         pop {r3, pc}
>>            0x00000028    2000         movs r0, r4
>>            0x0000002a    ffff0000     invalid
>>
>> --
>> Best regards,
>> Siarhei Siamashka
>
> Also tried toolchain mentioned on sunxi wiki: 
> http://linux-sunxi.org/Toolchain#Debian
> Result is different, but still cannot boot to FEL mode.
>
> $ arm-linux-gnueabihf-gcc -v
> Using built-in specs.
> COLLECT_GCC=arm-linux-gnueabihf-gcc
> COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/5/lto-wrapper
> Target: arm-linux-gnueabihf
> Configured with: ../src/configure -v --with-pkgversion='Debian 5.3.1-4' 
> --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs 
> --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr 
> --program-suffix=-5 --enable-shared --enable-linker-build-id 
> --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix 
> --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu 
> --enable-libstdcxx-debug --enable-libstdcxx-time=yes 
> --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm 
> --disable-libquadmath --enable-plugin --with-system-zlib 
> --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo 
> --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-armhf-cross/jre 
> --enable-java-home 
> --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-armhf-cross 
> --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-armhf-cross 
> --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar 
> --disable-libgcj --enable-objc-gc --enable-multiarch 
> --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 
> --with-float=hard --with-mode=thumb --enable-checking=release 
> --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabihf 
> --program-prefix=arm-linux-gnueabihf- 
> --includedir=/usr/arm-linux-gnueabihf/include
> Thread model: posix
> gcc version 5.3.1 20151219 (Debian 5.3.1-4)
>
>
> $ r2 -a arm -b 16  fel-sdboot.sunxi
> WARN: Use '-e bin.rawstr=true' or 'rabin2 -zz' to find strings on unknown 
> file types
> [0x00000000]> s 0x20
> [0x00000020]> pd
>             0x00000020    0400         movs r4, r0
>             0x00000022    0000         movs r0, r0
>             0x00000024    1400         movs r4, r2
>             0x00000026    0000         movs r0, r0
>             0x00000028    0300         movs r3, r0
>             0x0000002a    0000         movs r0, r0
>             0x0000002c    474e         ldr r6, [pc, 284] ; (0x0000014c)
>             0x0000002e    5500         lsls r5, r2, 1
>             0x00000030    82f7db2d     ; <UNDEFINED> 0xf7822ddb
>                0xfffffffff8782bea()
>             0x00000034    5039         subs r1, 80
>             0x00000036    7935         adds r5, 121
>             0x00000038    9aba         hlt 0x001a
>             0x0000003a    610c         lsrs r1, r4, 17
>             0x0000003c    9734         adds r4, 151
>             0x0000003e    3c8c         ldrh r4, [r7, 32]
>             0x00000040    5391         str r1, [sp, 332]
>             0x00000042    f58a         ldrh r5, [r6, 22]
>             0x00000044    004b         ldr r3, [pc, 0] ; (0x00000048)
>             0x00000046    1847         bx r3
>                0x0000004d()
>             0x00000048    2000         movs r0, r4
>             0x0000004a    ffff0000     vaddl.u<illegal width 64> q8, d15, d0
>
> I started to think that maybe this is my setup and checked Ubuntu 14.04.3 LTS
> live CD. GCC version:
>
> Using built-in specs.
> COLLECT_GCC=arm-linux-gnueabihf-gcc
> COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/lto-wrapper
> Target: arm-linux-gnueabihf
> Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 
> 4.8.2-16ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs 
> --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr 
> --program-suffix=-4.8 --enable-shared --enable-linker-build-id 
> --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix 
> --with-gxx-include-dir=/usr/arm-linux-gnueabihf/include/c++/4.8.2 
> --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu 
> --enable-libstdcxx-debug --enable-libstdcxx-time=yes 
> --enable-gnu-unique-object --disable-libmudflap --disable-libitm 
> --disable-libquadmath --enable-plugin --with-system-zlib 
> --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo 
> --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-armhf-cross/jre 
> --enable-java-home 
> --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-armhf-cross 
> --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-armhf-cross 
> --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar 
> --disable-libgcj --enable-objc-gc --enable-multiarch --enable-multilib 
> --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 
> --with-float=hard --with-mode=thumb --disable-werror 
> --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu 
> --target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- 
> --includedir=/usr/arm-linux-gnueabihf/include
> Thread model: posix
> gcc version 4.8.2 (Ubuntu/Linaro 4.8.2-16ubuntu4)
>
> Radare output:
>
> $ r2 -a arm -b 16  fel-sdboot.sunxi
> WARN: Use '-e bin.rawstr=true' or 'rabin2 -zz' to find strings on unknown 
> file types
> [0x00000000]> s 0x20
> [0x00000020]> pd
>             0x00000020    0000         movs r0, r0
>             0x00000022    0000         movs r0, r0
>             0x00000024    0000         movs r0, r0
>             0x00000026    0000         movs r0, r0
>             0x00000028    0000         movs r0, r0
>             0x0000002a    0000         movs r0, r0
>             0x0000002c    0000         movs r0, r0
>             0x0000002e    0000         movs r0, r0
>             0x00000030    0400         movs r4, r0
>             0x00000032    0000         movs r0, r0
>             0x00000034    1400         movs r4, r2
>             0x00000036    0000         movs r0, r0
>             0x00000038    0300         movs r3, r0
>             0x0000003a    0000         movs r0, r0
>             0x0000003c    474e         ldr r6, [pc, 284] ; (0x0000015c)
>             0x0000003e    5500         lsls r5, r2, 1
>             0x00000040    bd06         lsls r5, r7, 26
>             0x00000042    3b02         lsls r3, r7, 8
>             0x00000044    881d         adds r0, r1, 6
>             0x00000046    7e92         str r2, [sp, 504]
>             0x00000048    e318         adds r3, r4, r3
>             0x0000004a    bb56         ldrsb r3, [r7, r2]
>             0x0000004c    f4a7         add r7, pc, 976 ; (adr r7, 0x00000420)
>             0x0000004e    9f53         strh r7, [r3, r6]
>             0x00000050    69d2         bcs.n 0x00000126
>             0x00000052    f440         lsrs r4, r6
>             0x00000054    004b         ldr r3, [pc, 0] ; (0x00000058)
>             0x00000056    1847         bx r3
>                0x0000005d()
>             0x00000058    2000         movs r0, r4
>             0x0000005a    ffff0000     vaddl.u<illegal width 64> q8, d15, d0
>
> This image also cannot enter FEL mode. Have you got access to >4.7 GCC on
> Gentoo ? Can you try it ?
>
> Best Regards,
> --
> Piotr Król
> Embedded Systems Consultant
> http://3mdeb.com | @3mdeb_com
>
> --
> You received this message because you are subscribed to the Google Groups 
> "linux-sunxi" 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 the Google Groups 
"linux-sunxi" 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