Как избежать усечения перемещения в тривиальной инструкции с отладкой? - PullRequest
0 голосов
/ 12 мая 2018

У меня есть сокращение на одну строку моей программы сборки x86-64, которая получает ошибку усечения перемещения:

movq %rdx,8(%rdi)

Если вы поместите эту строку отдельно в t.s, она будет успешно собрана скоманда

as -o t.o -g -al=t.lst t.s

Обратите внимание на параметр -g для отладочной информации.

После этого попытайтесь связать это в исполняемый файл с помощью этой команды:

ld -o t t.o

Результаты в этих ДВУХ сообщениях об ошибках:

t.o:t.s:1:(.stab+0x14): relocation truncated to fit: R_X86_64_32 against `.text'
t.o:t.s:1:(.stab+0x20): relocation truncated to fit: R_X86_64_32 against `.text'

Существенные строки t.lst:

1 0000 48895708       movq %rdx,8(%rdi)
1      90909090
1      90909090
1      90909090

Нет ошибки компоновщика, если я опускаю параметр -g изассемблер, поэтому проблема может заключаться в данных отладчика, а не в исполняемой части выходного файла.

Эта инструкция доставляла мне проблемы в более крупной программе, но, как вы можете видеть, в изоляции она все еще остаетсяпроблема.

Почему я получил усечение перемещения из этой конкретной инструкции?Будет ли опция компоновщика создавать корректную и отлаживаемую программу?

...