Что означает .text.unlikely в объектных файлах ELF?

В моем objdump -t вывода, я вижу следующие две строки:

00000000000004d2 l     F .text.unlikely 00000000000000ec function-signature-goes-here [clone .cold.427]

а также

00000000000018e0 g     F .text  0000000000000690 function-signature-goes-here

Я знаю l означает местный и gозначает глобальный. Я также знаю что.text- это раздел или тип раздела в объектном файле, содержащий инструкции скомпилированной программы. Но что есть.text.unlikely? Предполагая, что это другой раздел (или тип раздела) из.text - какая разница?

1 ответ

Решение

На моей странице руководства GCC v5.4.0 я обнаружил следующий переключатель:

-freorder-functionsкоторый говорит:

Измените порядок функций в объектном файле, чтобы улучшить локальность кода. Это реализуется с помощью специальных подразделов ".text.hot" для наиболее часто выполняемых функций и ".text.unlikely" для маловероятно выполняемых функций. Переупорядочение выполняется компоновщиком, поэтому формат объектного файла должен поддерживать именованные разделы, а компоновщик должен размещать их разумным образом.

Также должна быть доступна обратная связь из профиля, чтобы этот параметр работал. Смотрите -fprofile-arcs для подробностей.

Включено на уровнях -O2, -O3, -Os.

Похоже, что компилятор запускался с флагами оптимизации или переключателем для этого двоичного файла, а функции организованы в подразделы для оптимизации пространственной локальности.

Другие вопросы по тегам