Я не могу понять следующий код сборки gnu для архитектуры powerpc

#define START_GOT \
 .section ".got2","aw";\
.LCTOC1 = .+32768

Является ли .LCTOC1 директивой? Почему перед +32768 стоит .?


person Zhang Baolei    schedule 16.04.2013    source источник


Ответы (1)


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

Таким образом, выражение .+32768 означает «32 КБ отсюда», и этому значению дается символическое имя .LCTOC1.

Обратите внимание, что директива .section, которая также находится в определении макроса, может изменить значение ., т. е. текущее местоположение, поскольку с него начинается новый раздел под названием .got2. Аргумент "aw" означает только "доступный для записи" (a игнорируется).

person unwind    schedule 16.04.2013
comment
Я прав? .LCTOC1 определяет символ .LCTOC1 = .+32768 просто сообщает, что .LCTOC1 равно +32768 - person Zhang Baolei; 16.04.2013
comment
@ZhangBaolei: он устанавливает .LCTOC1 на (текущий адрес) + 32768. - person Jeremy Kerr; 07.04.2015