2013-02-26 40 views
0

我有一個生成文件生成共享庫。從不同的shell調用make(VxWorks wrenv和Cygwin)會導致不同的庫。您的VxWorks版本正在使用Cygwin版本。差異非常小,並且readelf程序不可見。鏈接器生成不同的代碼(objdump)

使用objdumparm -S *.so顯示函數結尾處的差異。請參閱以下輸出。

實施例1:(2組最後一行不同)

Cygwin的:

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的:

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的:

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的:

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 

鏈接器的參數是相同的。這些差異是否來自搬遷過程?

有可能說這是爲什麼發生的原因?

+0

編譯器的參數是什麼?順便說一句。這是什麼架構?也許這兩個shell以不同的模式運行,這會導致編譯器以某種方式繼承該模式? (64/32位,手臂拇指等) – PlasmaHH 2013-02-26 16:08:55

回答

0

嗯,鏈接器不是壞人!發現編譯器正在生成不同的.sho對象。使用​​選項來編譯.sho的確可以消除差異...