Замечательный комментарий к my answer describing how to use linker scripts to make a ctor-like function list отметил, что недавний GNU ld имеет значительно улучшенную поддержку для прививки новых разделов в сценарии системного компоновщика с -Wl,-T...
и INSERT BEFORE
/INSERT AFTER
. Это заставило меня задуматься о других трюках сценария компоновщика.Умное использование сценариев компоновщика?
Для прошивки сетевой карты я модифицировал скрипт компоновщика, чтобы объединить модули времени выполнения встроенного программного обеспечения, чтобы все они были в непрерывном блоке, который может быть в кеше L1 без конфликтов. Чтобы очистить отставших (где я не мог группироваться по .o
), я использовал атрибуты раздела для отдельных функций. Счетчики производительности подтвердили, что они действительно работали (уменьшенный кэш команд L1 пропускает почти ничего).
Какие еще умные вещи вы выполнили с помощью сценариев компоновщика?