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