Отличный комментарий к в моем ответе, описывающем, как использовать скрипты компоновщика для создания списка функций, подобного ctor, указано, что недавняя GNU ld значительно улучшила поддержку добавления новых разделов в системные скрипты компоновщика с помощью -Wl,-T...
и INSERT BEFORE
/INSERT AFTER
. Это заставило меня задуматься о других трюках со сценариями компоновщика.
Для прошивки сетевой карты я модифицировал скрипт компоновщика, чтобы сгруппировать рабочие модули прошивки, чтобы все они находились в непрерывном блоке, который мог бы находиться в кэше L1 без конфликтов. Чтобы избавиться от отставших (где я не мог сгруппировать по .o
), я использовал атрибуты раздела для отдельных функций. Счетчики производительности подтвердили, что это действительно работает (уменьшенный кэш инструкций L1 почти до нуля).
Какие еще умные вещи вы сделали с помощью скриптов компоновщика?