У меня есть сокращение на одну строку моей программы сборки 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
изассемблер, поэтому проблема может заключаться в данных отладчика, а не в исполняемой части выходного файла.
Эта инструкция доставляла мне проблемы в более крупной программе, но, как вы можете видеть, в изоляции она все еще остаетсяпроблема.
Почему я получил усечение перемещения из этой конкретной инструкции?Будет ли опция компоновщика создавать корректную и отлаживаемую программу?