搜索
bottom↓
回复: 8

请教高手,关于gcc编译cm3的问题。

[复制链接]

出0入0汤圆

发表于 2009-8-22 11:46:15 | 显示全部楼层 |阅读模式
用了gnuarm 和sourcery两个版本的gcc4.3.2 for cortex-3,单独编译C代码和汇编代码都没有问题,能够正确使用thumb-2指令,但在C代码调用汇编函数时都出了问题。
gnuarm会自动产生一小段thumb-arm状态转换代码,并把这段代码放在0地址,谁不知道cm3的0地址该放什么?
sourcery则“聪明”了一点,用blx指令切换状态,想在cm3中切换到arm状态,不是找死嘛,fault 伺候。

有没有高手知道是什么原因?

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2009-10-13 17:26:36 | 显示全部楼层
你的汇编函数是怎么写的?

出0入0汤圆

发表于 2009-10-13 19:37:12 | 显示全部楼层
是不是还有哪些需要设置CPU类型的地方

出0入0汤圆

 楼主| 发表于 2009-10-13 19:59:28 | 显示全部楼层
调用newlib库里的汇编函数也一样。

出0入0汤圆

发表于 2009-10-15 21:40:45 | 显示全部楼层
怎么可能?

对于C语言来说,调用啥语言写的函数都是一样的(前提你那个语言写的函数遵循ABI)。

比如你写个a.c:
extern int f(int);
int g(int x) {
   return f(x);
}

然后你在b.s里面实现了f()函数,请问,编译a.c时候,编译器难道知道你的f()函数是汇编写的?
然后聪明地生成错误代码?
我刚才试验了,gcc version 4.3.3 (Sourcery G++ Lite 2009q1-161)绝对没有这个问题,也不可能有这个问题。

再者,生成blx指令也不一定不对,只要还是转换到thumb状态就不会有fault,这个指令的地址是linker生成的,它会根据你连接的函数
类型确定地址的最低位是0还是1.

出0入0汤圆

 楼主| 发表于 2009-10-15 22:27:46 | 显示全部楼层
真的吗?我也试过gcc version 4.3.3 (Sourcery G++ Lite),是不是 2009q1-161就不记得了,你把可执行文件dump帖出来看看。
我这里dump出来的是:
blx  偶数地址
偶数地址就表示要切到arm状态啊。
用keil加载elf文件调试,则直接显示“非法指令”

出0入0汤圆

发表于 2009-10-16 01:13:48 | 显示全部楼层
可是我不管调用啥函数都是bl调用的啊,我用-S生成的汇编,我认为ld不会改变指令为blx的。

还是那句话,C编译器不会根据你调用汇编就生成错误代码啊。

出0入663汤圆

发表于 2009-10-16 01:50:23 | 显示全部楼层
把编译参数贴上来看看吧。

出0入0汤圆

发表于 2009-10-30 15:28:48 | 显示全部楼层
我也遇到
Sourcery G++ Lite 2009q1-161 for ARM EABI
C代码:
void (*pFun)(void);
pFun= (void (*)(void))0x200B8;
pFun();
生成汇编:
40:   pFun= (void (*)(void))0x200B8;
0x00017248 F64162FC  MOVW     r2,#0x1EFC
0x0001724C F2C10200  MOVT     r2,#0x1000
0x00017250 F24003B8  MOVW     r3,#0xB8
0x00017254 F2C00302  MOVT     r3,#0x02
0x00017258 6013      STR      r3,[r2,#0x00]
41:   pFun();
0x0001725A F64163FC  MOVW     r3,#0x1EFC
0x0001725E F2C10300  MOVT     r3,#0x1000
0x00017262 681B      LDR      r3,[r3,#0x00]
0x00017264 4798      BLX      r3--------------------此处用了BLX,导致fault
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 08:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表