Chinaunix首页 | 论坛 | 博客
  • 博客访问: 390408
  • 博文数量: 11
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 911
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-26 13:24
文章分类

全部博文(11)

文章存档

2011年(1)

2009年(4)

2008年(6)

我的朋友

分类:

2008-11-20 15:42:49

函数名区别
在.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) |
0

上一篇:otool反汇编

下一篇:随意

给主人留下些什么吧!~~