This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x编译器



我用arm-linux-gnueabihf移植MP3播放器libmad-0.15.1b的时候出现错误提示:

/tmp/ccf2FxyW.s:1299: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'
/tmp/ccf2FxyW.s:1435: Error: selected processor does not support Thumb mode `rsc r8,r8,#0'
/tmp/ccf2FxyW.s:1857: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'
/tmp/ccf2FxyW.s:1996: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'理解为处理器与编译器不付,感觉是次编译器不认这几条汇编指令

而用arm-arago-linux-gnueabi 编译器是能够移植成功的。不知道问题出在哪儿了

  • 你可以google看看,对于thumb代码,应该有相应的编译选项,是不是没有加上

  • 从config.log里的内容Target: arm-linux-gnueabihf
    Configured with: /cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/src/gcc-linaro-4.7-2013.03/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 --enable-multilib --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard --with-pkgversion='crosstool-NG linaro-1.13.1-4.7-2013.03-20130313 - Linaro GCC 2013.03' --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-ppl=/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 --with-host-libstdcxx='-L/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --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 --with-mode=thumb上看缺省的就是--wirh-mode=thumb,感觉这个需要设置成--wirh-mode=arm模式,可是在configure的时候加上--with-mode=arm,最后config.log里显示的还是thumb,改不过来,查看了arago的那个config里没有--with-mode这一项它的config.log设置值是Target: arm-arago-linux-gnueabi
    Configured with: /sim/scratch_a0850442/arago-tmp-arago/work/i686-armv7a-sdk-arago-linux-gnueabi/gcc-cross-sdk-4.5-r41.2+svnr170880/gcc-4_5-branch/configure --build=i686-linux --host=i686-linux --target=arm-arago-linux-gnueabi --prefix=/arago-2011.09/armv7a --exec_prefix=/arago-2011.09/armv7a --bindir=/arago-2011.09/armv7a/bin --sbindir=/arago-2011.09/armv7a/bin --libexecdir=/arago-2011.09/armv7a/libexec --datadir=/arago-2011.09/armv7a/share --sysconfdir=/arago-2011.09/armv7a/etc --sharedstatedir=/arago-2011.09/armv7a/share/com --localstatedir=/arago-2011.09/armv7a/var --libdir=/arago-2011.09/armv7a/lib --includedir=/arago-2011.09/armv7a/include --oldincludedir=/arago-2011.09/armv7a/include --infodir=/arago-2011.09/armv7a/share/info --mandir=/arago-2011.09/armv7a/share/man --enable-largefile --disable-nls --enable-ipv6 --with-gnu-ld --enable-shared --enable-languages=c,c++,objc,fortran --enable-threads=posix --disable-multilib --enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch --program-prefix=arm-arago-linux-gnueabi- --enable-target-optspace --enable-lto --enable-libssp --disable-bootstrap --disable-libgomp --disable-libmudflap --with-float=softfp --with-sysroot=/arago-2011.09/armv7a/arm-arago-linux-gnueabi --with-build-time-tools=/sim/scratch_a0850442/arago-tmp-arago/sysroots/i686-linux/usr/armv7a/arm-arago-linux-gnueabi/bin --with-build-sysroot=/sim/scratch_a0850442/arago-tmp-arago/sysroots/armv7a-arago-linux-gnueabi --disable-libunwind-exceptions --with-mpfr=/sim/scratch_a0850442/arago-tmp-arago/sysroots/i686-linux/usr --with-system-zlib --enable-__cxa_atexi

    不知道用此项编译器的朋友,是怎么设置的?

     

  • 我还有个怀疑,是不是arm-linux-gnueabihf这个编译器在形成时就注定了--with-mode=thumb?

  • 查了一下是因为"rsc" doesnt exist anymore in thumb2,怎么才能正确修改?

  • 你下个最新的看看,我看到这里似乎有个bug

    https://launchpad.net/ubuntu/+source/libmad/+changelog

  • 感谢你Qin的热心解答,编译已经通过了

  • 虽然修改了有关rsc的bug程序,最终是这么修改的,将"rsc %1, %3, #0"  改为"subs   %1, %0, %3" ,其中也按照网上提供的bug修改改过,结果是一样的。可是编译好的应用在目标板上运行,出现了Segmentation fault,不知道是哪里出现的问题,用修改过的程序用arm-arago编译器编译的madplay能够正常播放

  • 在哪里修改这个有关bug的程序阿?怎么修改?

  • 我是按照6楼亲提供的那个网址改变的,不过你可以看看前面的回复,虽然编译通过但是仍不好用

  • diff --git a/package/libmad/libmad-0.15.1b-thumb2-fixed-arm.patch b/package/libmad/libmad-0.15.1b-thumb2-fixed-arm.patch
    new file mode 100644
    index 0000000..befda48
    --- /dev/null
    +++ b/package/libmad/libmad-0.15.1b-thumb2-fixed-arm.patch
    @@ -0,0 +1,40 @@ 
    +Fixes Thumb2-related build failure
    +
    +Patch below comes from the Debian libmad package.
    +
    +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
    +
    +From: Dave Martin
    +Subject: "rsc" doesnt exist anymore in thumb2
    +
    +diff --git a/fixed.h b/fixed.h
    +index 4b58abf..ba4bc26 100644
    +--- a/fixed.h
    ++++ b/fixed.h
    +@@ -275,12 +275,25 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
    + : "+r" (lo), "+r" (hi) \
    + : "%r" (x), "r" (y))
    + 
    ++#ifdef __thumb__
    ++/* In Thumb-2, the RSB-immediate instruction is only allowed with a zero
    ++ operand. If needed this code can also support Thumb-1 
    ++ (simply append "s" to the end of the second two instructions). */
    ++# define MAD_F_MLN(hi, lo) \
    ++ asm ("rsbs %0, %0, #0\n\t" \
    ++ "sbc %1, %1, %1\n\t" \
    ++ "sub %1, %1, %2" \
    ++ : "+&r" (lo), "=&r" (hi) \
    ++ : "r" (hi) \
    ++ : "cc")
    ++#else /* ! __thumb__ */
    + # define MAD_F_MLN(hi, lo) \
    + asm ("rsbs %0, %2, #0\n\t" \
    + "rsc %1, %3, #0" \
    +- : "=r" (lo), "=r" (hi) \
    ++ : "=&r" (lo), "=r" (hi) \
    + : "0" (lo), "1" (hi) \
    + : "cc")
    ++#endif /* __thumb__ */
    + 
    + # define mad_f_scale64(hi, lo) \
    + ({ mad_fixed_t __result; \
    diff --git a/package/libmad/libmad-0.15.1b-thumb2-imdct-arm.patch b/package/libmad/libmad-0.15.1b-thumb2-imdct-arm.patch
    new file mode 100644
    index 0000000..414b9c8
    --- /dev/null
    +++ b/package/libmad/libmad-0.15.1b-thumb2-imdct-arm.patch
    @@ -0,0 +1,20 @@ 
    +Fixes Thumb2 related build failure
    +
    +Patch below comes from the Debian libmad package.
    +
    +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
    +
    +From: Konstantinos Margaritis <markos@debian.org>
    +Subject: use "adr" instead of "add" to make code ready for thumb2
    +
    +--- ./imdct_l_arm.S.orig 2010-02-25 13:25:23.000000000 +0100
    ++++ ./imdct_l_arm.S 2010-02-25 13:27:26.000000000 +0100
    +@@ -468,7 +468,7 @@
    + 
    + @----
    + 
    +- add r2, pc, #(imdct36_long_karray-.-8) @ r2 = base address of Knn array (PIC safe ?)
    ++ adr r2, imdct36_long_karray
    + 
    + 
    + loop:
    


    亲测可用