Что означает это заявление о сборке? - PullRequest
2 голосов
/ 14 ноября 2011

Я смотрю на ассемблерный код, сгенерированный gcc с использованием флага -s.Некоторые утверждения выглядят следующим образом.

movl    is_leader(%rip), destination

Здесь is_leader - это глобально определенная переменная типа int в коде C.Что я не понимаю, так это термин is_leader (% rip) здесь.Разве rip не является указателем инструкции?Мне нужно знать, как этот оператор используется для доступа к is_leader .

Ответы [ 2 ]

5 голосов
/ 14 ноября 2011

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

Это дает адрес объекта без генерацииабсолютный адрес (и, как правило, смещение помещается в 16 или 32 бита, поэтому результирующий код также короче и, следовательно, быстрее).

Это добавляет ограничение, что расстояние между обоими элементами остается постоянным, поэтомуиспользуется только для данных в том же загружаемом объекте;компоновщик отметит ошибку, если это условие не будет выполнено.

3 голосов
/ 14 ноября 2011

Возможно связано с позиционно-независимым кодом внутри * .so исполняемого файла.

...