TI中文支持网
TI专业的中文技术问题搜集分享网站

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 编译器是能够移植成功的。不知道问题出在哪儿了

Yaoming Qin:

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

liqin xiao:

回复 Yaoming Qin:

从config.log里的内容Target: arm-linux-gnueabihfConfigured 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-gnueabiConfigured 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

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

 

liqin xiao:

回复 Yaoming Qin:

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

liqin xiao:

回复 Yaoming Qin:

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

liqin xiao:

回复 liqin xiao:

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

care lee:

回复 liqin xiao:

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

liqin xiao:

回复 care lee:

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

zhipeng xie:

回复 liqin xiao:

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:

亲测可用

赞(0)
未经允许不得转载:TI中文支持网 » am335x编译器
分享到: 更多 (0)