Линкер генерирует другой код (objdump)

У меня есть make-файл, который генерирует общую библиотеку. Вызов make из разных оболочек (VxWorks wrenv и Cygwin) приводит к разным библиотекам. Твоя версия VxWorks работает, а версия Cygwin — нет. Различия очень малы и не видны с readelf программа.

С помощью objdumparm -S *.so показывает разницу в конце функций. Смотрите следующий вывод.

Пример 1: (две последние строки отличаются)

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

Решение

Хм, линкер не был плохим парнем! Выяснил, что компилятор генерирует разные объекты .sho. С использованием -fno-builtin возможность скомпилировать .sho’s убрала различия …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]