函数名区别
在.C中声明一个外部函数例如:
extern void test1(int a);
在.S中这样写:
1:
.global test1
test1:
sub sp, sp, #8
str lr, [sp, #4]
str r7, [sp]
mov r7, sp
sub sp, sp, #4
mov r1, r0
ldr r3, [pc, #28]
str r1, [r7, #-4]
add r0, pc, r3
@ pld [r1]
可以在arm-elf-gcc中编译成功,但在arm-apple-darwin-gcc就会出错,找不到_test1,需要将test1改成_test1,这样就可以了
2:
preload 用法,不知道为什么,如果加上pld [r1]在arm-apple-darwin-gcc中就会报错,如果去掉[]就ok,但那样就不是一个性质了,但在arm-elf-gcc就ok。
3:
()问题,如果你这样写一条语句就会在arm-apple-darwin-gcc中出错
例: ldrsh r0, [lr, #( 0*8)]
如果去掉()写成这样就可以在arm-apple-darwin-gcc中成功编译
例: ldrsh r0, [lr, #0]
但上面两种写法都可以在arm-elf-gcc中通过编译
4:
宏问题
.macro function name, export=0
.if \export
.global \name
.endif
.type \name, %function
.func \name
\name:
.endm
如果你在另一个.S中使用function test1, export=1
在arm-elf-gcc中可以通过, 在arm-apple-darwin-gcc就出现问题,那如果不支持.type .func去掉吧,结果还是存在问题
那没有办法,只有不使用宏了,全部去掉,就像上面那样,只写一个.global _test1吧
本人目前正在郁闷中,唉,希望有高人可以指点一下,因为我目前主要是想使用arm-apple-darwin-gcc编译成功,谢谢。如果看过不会也帮我顶一下。还会有其它问题出现,我正在一点点收集中。。。。。
阅读(2972) | 评论(0) | 转发(0) |