首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接器生成不同的代码(objdump)

链接器生成不同的代码(objdump)
EN

Stack Overflow用户
提问于 2013-02-26 23:55:23
回答 1查看 200关注 0票数 0

我有一个生成共享库的makefile。从不同的shell (VxWorks、wrenv和Cygwin)调用make会产生不同的库。你的VxWorks版本可以工作,Cygwin版本不行。差异非常小,在readelf程序中不可见。

使用objdumparm -S *.so在函数末尾显示不同之处。请参见以下输出。

示例1:(最后两行不同)

Cygwin:

代码语言:javascript
复制
00010a14 <_ZN3rag3MD511save_digestEPhPKm>:
10a14:  e1a0c00d    mov ip, sp
10a18:  e92dda30    push    {r4, r5, r9, fp, ip, lr, pc}
...
10b18:  00000000    andeq   r0, r0, r0
10b1c:  3b6e71a1    blcc    1bad1a8 <_stack+0x1b2d1a8>
10b20:  505c3d7f    subspl  r3, ip, pc, ror sp

VxWorks:

代码语言:javascript
复制
00010a14 <_ZN3rag3MD511save_digestEPhPKm>:
10a14:  e1a0c00d    mov ip, sp
10a18:  e92dda30    push    {r4, r5, r9, fp, ip, lr, pc}
...
10b18:  00000000    andeq   r0, r0, r0
10b1c:  00000338    andeq   r0, r0, r8, lsr r3
10b20:  0000033c    andeq   r0, r0, ip, lsr r3

或示例2:(最后一行不同)

Cygwin:

代码语言:javascript
复制
00010b7c <_ZN3rag3MD55beginEv>:
10b7c:  e1a0c00d    mov ip, sp
10b80:  e92dda10    push    {r4, r9, fp, ip, lr, pc}
...
10bd4:  e89daa10    ldm sp, {r4, r9, fp, sp, pc}
10bd8:  00000000    andeq   r0, r0, r0
10bdc:  695c7960    ldmdbvs ip, {r5, r6, r8, fp, ip, sp, lr}^

VxWorks:

代码语言:javascript
复制
00010b7c <_ZN3rag3MD55beginEv>:
10b7c:  e1a0c00d    mov ip, sp
10b80:  e92dda10    push    {r4, r9, fp, ip, lr, pc}
...
10bd4:  e89daa10    ldm sp, {r4, r9, fp, sp, pc}
10bd8:  00000000    andeq   r0, r0, r0
10bdc:  000005ec    andeq   r0, r0, ip, ror #11

链接器的参数是相同的。这些差异是否来自重新定位过程?

可以说为什么会发生这种情况,原因是什么?

EN

回答 1

Stack Overflow用户

发布于 2013-02-28 18:05:36

嗯,链接器不是坏人!发现编译器正在生成不同的.sho对象。使用-fno-builtin选项编译.sho确实消除了差异...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15093539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档